rendered paste body/*
* S:Utils
* 1
* By Sacky
* Credits:
SA:MP Devs
mabako
Betamaster
Simon
Denver
DracoBlue
Spark
dryaXon
Comphuphase
Slick
Allan
El Presy
kool
yom
*/
#if defined _samp_included
#endinput
#else
#define _samp_included
#endif
#if defined _sutils_included_
#endinput
#else
#define _sutils_included_
#endif
#pragma library sutils
#include <core>
#include <float>
#include <string>
#include <file>
#include <time>
#include <datagram>
#define DEBUG false
#define CORE false
// --------------------------------------------------
// Defines
// --------------------------------------------------
#define UNKNOWN -1
#define MAX_PLAYER_NAME 24
#define MAX_WORLDBOUNDS 2000.0
#define MAX_CHATLINES 10
#if !defined MAX_PLAYERS
#define MAX_PLAYERS 100
#endif
#define MAX_GTASAVEHICLES 212
#define MAX_MODELS 50
#define MAX_VEHICLES 254
#define INVALID_PLAYER_ID 255
#define NO_TEAM 255
#define MAX_CLASS 300
#define TYPE_INVALID 0
#define TYPE_BIKE 1
#define TYPE_BICYCLE 2
#define TYPE_BOAT 3
#define TYPE_CAR 4
#define TYPE_HELI 5
#define TYPE_MONSTER 6
#define TYPE_PLANE 7
#define TYPE_QUAD 8
#define TYPE_HEAVY 9
#define PLAYER_STATE_NONE 0
#define PLAYER_STATE_ONFOOT 1
#define PLAYER_STATE_DRIVER 2
#define PLAYER_STATE_PASSENGER 3
#define PLAYER_STATE_EXIT_VEHICLE 4
#define PLAYER_STATE_ENTER_VEHICLE_DRIVER 5
#define PLAYER_STATE_ENTER_VEHICLE_PASSENGER 6
#define PLAYER_STATE_WASTED 7
#define PLAYER_STATE_SPAWNED 8
#define WEAPON_GOLFCLUB 2
#define WEAPON_NITESTICK 3
#define WEAPON_KNIFE 4
#define WEAPON_BAT 5
#define WEAPON_SHOVEL 6
#define WEAPON_POOLSTICK 7
#define WEAPON_KATANA 8
#define WEAPON_CHAINSAW 9
#define WEAPON_DILDO 10
#define WEAPON_DILDO2 11
#define WEAPON_VIBRATOR 12
#define WEAPON_VIBRATOR2 13
#define WEAPON_FLOWER 14
#define WEAPON_CANE 15
#define WEAPON_GRENADE 16
#define WEAPON_TEARGAS 17
#define WEAPON_MOLTOV 18
#define WEAPON_COLT45 22
#define WEAPON_SILENCED 23
#define WEAPON_DEAGLE 24
#define WEAPON_SHOTGUN 25
#define WEAPON_SAWEDOFF 26
#define WEAPON_SHOTGSPA 27
#define WEAPON_UZI 28
#define WEAPON_MP5 29
#define WEAPON_AK47 30
#define WEAPON_M4 31
#define WEAPON_TEC9 32
#define WEAPON_RIFLE 33
#define WEAPON_SNIPER 34
#define WEAPON_ROCKETLAUNCHER 35
#define WEAPON_HEATSEEKER 36
#define WEAPON_FLAMETHROWER 37
#define WEAPON_MINIGUN 38
#define WEAPON_SATCHEL 39
#define WEAPON_BOMB 40
#define WEAPON_SPRAYCAN 41
#define WEAPON_FIREEXTINGUISHER 42
#define WEAPON_CAMERA 43
#define WEAPON_PARACHUTE 46
#define WEAPON_VEHICLE 49
#define WEAPON_DROWN 53
#define WEAPON_COLLISION 54
#define PICKUP_BRASS_KNUCKLES 331
#define PICKUP_GOLFCLUB 333
#define PICKUP_NITESTICK 334
#define PICKUP_KNIFE 335
#define PICKUP_BAT 336
#define PICKUP_SHOVEL 337
#define PICKUP_POOLSTICK 338
#define PICKUP_KATANA 339
#define PICKUP_CHAINSAW 341
#define PICKUP_DILDO 321
#define PICKUP_DILDO2 322
#define PICKUP_VIBRATOR1 323
#define PICKUP_VIBRATOR2 324
#define PICKUP_FLOWER 325
#define PICKUP_CANE 326
#define PICKUP_GRENADE 342
#define PICKUP_TEARGAS 343
#define PICKUP_MOLTOV 344
#define PICKUP_MISSILE 345
#define PICKUP_COLT45 346
#define PICKUP_SILENCED 347
#define PICKUP_DEAGLE 348
#define PICKUP_SHOTGUN 349
#define PICKUP_SAWEDOFF 350
#define PICKUP_SHOTGSPA 351
#define PICKUP_UZI 352
#define PICKUP_MP5 353
#define PICKUP_HYDRAFLARE 354
#define PICKUP_AK47 355
#define PICKUP_TEC9 372
#define PICKUP_RIFLE 357
#define PICKUP_SNIPER 358
#define PICKUP_ROCKETLAUNCHER 359
#define PICKUP_HEATSEEKER 360
#define PICKUP_FLAMETHROWER 361
#define PICKUP_MINIGUN 362
#define PICKUP_SACHEL 363
#define PICKUP_BOMB 364
#define PICKUP_SPRAYCAN 365
#define PICKUP_FIREEXTINGUISHER 366
#define PICKUP_CAMERA 367
#define PICKUP_NIGHTVISION_GOGGLES 368
#define PICKUP_THERMAL_GOGGLES 369
#define PICKUP_JETPACK 370
#define PICKUP_PARACHUTE 371
#define PICKUP_CARDOOR 374
#define PICKUP_BUMPER 375
#define PICKUP_SIDEPANEL 376
#define PICKUP_BONNET 377
#define PICKUP_BOOT 378
#define PICKUP_WHEEL 379
#define PICKUP_ARMOR 1242
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_TAXIYELLOW 0xF0E68CAA
#define COLOR_POLICEBLUE 0x3F63CCAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_LIME 0x10F441AA
#define COLOR_MAGENTA 0xFF00FFFF
#define COLOR_NAVY 0x000080AA
#define COLOR_AQUA 0xF0F8FFAA
#define COLOR_CRIMSON 0xDC143CAA
#define COLOR_FLBLUE 0x6495EDAA
#define COLOR_BISQUE 0xFFE4C4AA
#define COLOR_BLACK 0x000000AA
#define COLOR_CHARTREUSE 0x7FFF00AA
#define COLOR_BROWN 0xA52A2AAA
#define COLOR_CORAL 0xFF7F50AA
#define COLOR_GOLD 0xB8860BAA
#define COLOR_GREENYELLOW 0xADFF2FAA
#define COLOR_INDIGO 0x4B00B0AA
#define COLOR_IVORY 0xFFFF82AA
#define COLOR_LAWNGREEN 0x7CFC00AA
#define COLOR_SEAGREEN 0x20B2AAAA
#define COLOR_LIMEGREEN 0x32CD32AA
#define COLOR_MIDNIGHTBLUE 0x191970AA
#define COLOR_MAROON 0x800000AA
#define COLOR_ORANGERED 0xFF4500AA
#define COLOR_PINK 0xFFC0CBAA
#define COLOR_SEAGREEN2 0x2E8B57AA
#define COLOR_SPRINGGREEN 0x00FF7FAA
#define COLOR_TOMATO 0xFF6347AA
#define COLOR_YELLOWGREEN 0x9ACD32AA
#define COLOR_MEDIUMAQUA 0x83BFBFAA
#define COLOR_MEDIUMMAGENTA 0x8B008BAA
#define COLOR_VIOLET 0xEE82EEFF
#define COLOR_GRAY 0x808080AA
#define SOUND_WEAKHIT 1002
#define SOUND_CRASH 1009
#define SOUND_MACHINERY1 1020
#define SOUND_MACHINERY2 1021
#define SOUND_MOTORSTOP 1022
#define SOUND_WEAKHIT2 1027
#define SOUND_GARAGEDOOR 1035
#define SOUND_BLIP3 1052
#define SOUND_BLIP4 1053
#define SOUND_BLIP1 1056
#define SOUND_BLIP2 1057
#define SOUND_CHECKPOINT 1058
#define SOUND_MUSIC1 1062
#define SOUND_MUSIC2 1068
#define SOUND_MUSIC3 1076
#define SOUND_MAPPLACE 1083
#define SOUND_MAPREMOVE 1084
#define SOUND_BLIP5 1085
#define SOUND_LOUDHIT 1095
#define SOUND_MUSIC_RACERECORD 1097
#define SOUND_RATTLE1 1100
#define SOUND_RATTLE2 1101
#define SOUND_PUNCH1 1130
#define SOUND_CAMERA 1132
#define SOUND_MACHINERY3 1133
#define SOUND_SPRAY 1134
#define SOUND_HIT 1135
#define SOUND_PUNCH2 1136
#define SOUND_BLIP6 1137
#define SOUND_CRASH1 1140
#define SOUND_CRASH2 1141
#define SOUND_CROWD 1142
#define SOUND_SPLASH 1144
#define SOUND_HORN 1147
#define SOUND_CRASH3 1148
#define SOUND_PURCHASE 1149
#define SOUND_SELECTION 1150
#define SOUND_ALARM3 1155
#define SOUND_EXPLOSION 1159
#define SOUND_STOMP 1163
#define SOUND_MUSIC_RACEFINISH 1183
#define SOUND_OFF 1184
#define SOUND_MUSIC_MISSIONCOMPLETE 1185
#define SOUND_MUSIC_CLASSSELECT 1187
#define SOUND_SLAP 1190
#define SOUND_ALARM4 9200
#define SOUND_ALARM1 41800
#define SOUND_ALARM2 42801
#define GAMETEXT_LOWERLEFT 1
#define GAMETEXT_CENTEROLD 2
#define GAMETEXT_CENTER1 3
#define GAMETEXT_UPPER1 4
#define GAMETEXT_CENTER2 5
#define GAMETEXT_UPPER2 6
#define GTNEW_LINE "~n~"
#define GTRED "~r~"
#define GTGREEN "~g~"
#define GTBLUE "~b~"
#define GTWHITE "~w~"
#define GTYELLOW "~y~"
#define GTPINK "~p~"
#define GTDOWN "~d~"
#define GTLIGHT "~h~"
#define GTBLACK "~l~"
#define GTUP "~u~"
#define GTRAND "~~~"
#define GTSTAR "]"
#define GTLEFT "~<~"
#define GTRIGHT "~>~"
#define GTKEY "~k~"
#define PI 3.14159265
#define MAX_PARS 8
#define MAX_TIMERS 32
#define WTYPE_MELEE 1
#define WTYPE_PROJECTILE 2
#define WTYPE_PISTOL 3
#define WTYPE_SHOTGUN 4
#define WTYPE_MACHINEGUN 5
#define WTYPE_ASSAULT 6
#define WTYPE_RIFLE 7
#define WTYPE_HEAVY 8
#define WTYPE_SPECIAL 9
#define V_LANDSTAL 400
#define V_BRAVURA 401
#define V_LINERUN 403
#define V_PEREN 404
#define V_SENTINEL 405
#define V_DUMPER 406
#define V_FIRETRUCK 407
#define V_TRASH 408
#define V_STRETCH 409
#define V_MANANA 410
#define V_INFERNUS 411
#define V_VOODOO 412
#define V_PONY 413
#define V_MULE 414
#define V_CHEETAH 415
#define V_AMBULAN 416
#define V_LEVIATHN 417
#define V_MOONBEAM 418
#define V_ESPERANT 419
#define V_TAXI 420
#define V_WASHING 421
#define V_BOBCAT 422
#define V_MRWHOOP 423
#define V_BFINJECT 424
#define V_HUNTER 425
#define V_PREMIUR 426
#define V_ENFORCER 427
#define V_SECURICA 428
#define V_BANSHEE 429
#define V_PREDATOR 430
#define V_BUS 431
#define V_RHINO 432
#define V_BARRACKS 433
#define V_HOTKNIFE 434
#define V_ARTICT1 435
#define V_PREVION 436
#define V_COACH 437
#define V_CABBIE 438
#define V_STALLION 439
#define V_RUMPO 440
#define V_RCBANDIT 441
#define V_ROMERO 442
#define V_PACKER 443
#define V_MONSTER 444
#define V_ADMIRAL 445
#define V_SQUALO 446
#define V_SEASPAR 447
#define V_PIZZABOY 448
#define V_TRAM 449
#define V_ARTICT2 450
#define V_TURISMO 451
#define V_SPEEDER 452
#define V_REEFER 453
#define V_TROPIC 454
#define V_FLATBED 455
#define V_YANKEE 456
#define V_CADDY 457
#define V_SOLAIR 458
#define V_TOPFUN 459
#define V_SKIMMER 460
#define V_PCJ600 461
#define V_FAGGIO 462
#define V_FREEWAY 463
#define V_RCBARON 464
#define V_RCRAIDER 465
#define V_GLENDALE 466
#define V_OCEANIC 467
#define V_SANCHEZ 468
#define V_SPARROW 469
#define V_PATRIOT 470
#define V_QUAD 471
#define V_COASTG 472
#define V_DINGHY 473
#define V_HERMES 474
#define V_SABRE 475
#define V_RUSTLER 476
#define V_ZR350 477
#define V_WALTON 478
#define V_REGINA 479
#define V_COMET 480
#define V_BMX 481
#define V_BURRITO 482
#define V_CAMPER 483
#define V_MARQUIS 484
#define V_BAGGAGE 485
#define V_DOZER 486
#define V_MAVERICK 487
#define V_VCNMAV 488
#define V_RANCHER 489
#define V_FBIRANCH 490
#define V_VIRGO 491
#define V_GREENWOO 492
#define V_JETMAX 493
#define V_HOTRING 494
#define V_SANDKING 495
#define V_BLISTAC 496
#define V_POLMAV 497
#define V_BOXVILLE 498
#define V_BENSON 499
#define V_MESA 500
#define V_RCGOBLIN 501
#define V_HOTRINA 502
#define V_HOTRINB 503
#define V_BLOODRA 504
#define V_RNCHLURE 505
#define V_SUPERGT 506
#define V_ELEGANT 507
#define V_JOURNEY 508
#define V_BIKE 509
#define V_MTBIKE 510
#define V_BEAGLE 511
#define V_CROPDUST 512
#define V_STUNT 513
#define V_PETRO 514
#define V_RDTRAIN 515
#define V_NEBULA 516
#define V_MAJESTIC 517
#define V_BUCCANEE 518
#define V_SHAMAL 519
#define V_HYDRA 520
#define V_FCR500 521
#define V_NRG500 522
#define V_COPBIKE 523
#define V_CEMENT 524
#define V_TOWTRUCK 525
#define V_FORTUNE 526
#define V_CADRONA 527
#define V_FBITRUCK 528
#define V_WILLARD 529
#define V_FORKLIFT 530
#define V_TRACTOR 531
#define V_COMBINE 532
#define V_FELTZER 533
#define V_REMINGTN 534
#define V_SLAMVAN 535
#define V_BLADE 536
#define V_FREIGHT 537
#define V_STREAK 538
#define V_VORTEX 539
#define V_VINCENT 540
#define V_BULLET 541
#define V_CLOVER 542
#define V_SADLER 543
#define V_FIRELA 544
#define V_HUSTLER 545
#define V_INTRUDER 546
#define V_PRIMO 547
#define V_CARGOBOB 548
#define V_TAMPA 549
#define V_SUNRISE 550
#define V_MERIT 551
#define V_UTILITY 552
#define V_NEVADA 553
#define V_YOSEMITE 554
#define V_WINDSOR 555
#define V_MONSTERA 556
#define V_MONSTERB 557
#define V_URANUS 558
#define V_JESTER 559
#define V_SULTAN 560
#define V_STRATUM 561
#define V_ELEGY 562
#define V_RAINDANC 563
#define V_RCTIGER 564
#define V_FLASH 565
#define V_TAHOMA 566
#define V_SAVANNA 567
#define V_BANDITO 568
#define V_FREIFLAT 569
#define V_STREAKC 570
#define V_KART 571
#define V_MOWER 572
#define V_DUNERID 573
#define V_SWEEPER 574
#define V_BROADWAY 575
#define V_TORNADO 576
#define V_AT400 577
#define V_DFT30 578
#define V_HUNTLEY 579
#define V_STAFFORD 580
#define V_BF400 581
#define V_NEWSVAN 582
#define V_TUG 583
#define V_PETROTR 584
#define V_EMPEROR 585
#define V_WAYFARER 586
#define V_EUROS 587
#define V_HOTDOG 588
#define V_CLUB 589
#define V_FREIBOX 590
#define V_ARTICT3 591
#define V_ANDROM 592
#define V_DODO 593
#define V_RCCAM 594
#define V_LAUNCH 595
#define V_COPCARLA 596
#define V_COPCARSF 597
#define V_COPCARVG 598
#define V_COPCARRU 599
#define V_PICADOR 600
#define V_SWATVAN 601
#define V_ALPHA 602
#define V_PHOENIX 603
#define V_GLENSHIT 604
#define V_SADLSHIT 605
#define V_BAGBOXA 606
#define V_BAGBOXB 607
#define V_TUGSTAIR 608
#define V_BOXBURG 609
#define V_FARMTR1 610
#define V_UTILTR1 611
// --------------------------------------------------
// Global Variables
// --------------------------------------------------
enum MAPZONE_MAIN {
MAPZONE_NAME[28],
Float:MAPZONE_AREA[6]
}
new zones[][MAPZONE_MAIN] = {
// NAME AREA (Xmin,Ymin,Zmin,Xmax,Ymax,Zmax)
{"The Big Ear", {-410.00,1403.30,-3.00,-137.90,1681.20,200.00}},
{"Aldea Malvada", {-1372.10,2498.50,0.00,-1277.50,2615.30,200.00}},
{"Angel Pine", {-2324.90,-2584.20,-6.10,-1964.20,-2212.10,200.00}},
{"Arco del Oeste", {-901.10,2221.80,0.00,-592.00,2571.90,200.00}},
{"Avispa Country Club", {-2646.40,-355.40,0.00,-2270.00,-222.50,200.00}},
{"Avispa Country Club", {-2831.80,-430.20,-6.10,-2646.40,-222.50,200.00}},
{"Avispa Country Club", {-2361.50,-417.10,0.00,-2270.00,-355.40,200.00}},
{"Avispa Country Club", {-2667.80,-302.10,-28.80,-2646.40,-262.30,71.10}},
{"Avispa Country Club", {-2470.00,-355.40,0.00,-2270.00,-318.40,46.10}},
{"Avispa Country Club", {-2550.00,-355.40,0.00,-2470.00,-318.40,39.70}},
{"Back o Beyond", {-1166.90,-2641.10,0.00,-321.70,-1856.00,200.00}},
{"Battery Point", {-2741.00,1268.40,-4.50,-2533.00,1490.40,200.00}},
{"Bayside", {-2741.00,2175.10,0.00,-2353.10,2722.70,200.00}},
{"Bayside Marina", {-2353.10,2275.70,0.00,-2153.10,2475.70,200.00}},
{"Beacon Hill", {-399.60,-1075.50,-1.40,-319.00,-977.50,198.50}},
{"Blackfield", {964.30,1203.20,-89.00,1197.30,1403.20,110.90}},
{"Blackfield", {964.30,1403.20,-89.00,1197.30,1726.20,110.90}},
{"Blackfield Chapel", {1375.60,596.30,-89.00,1558.00,823.20,110.90}},
{"Blackfield Chapel", {1325.60,596.30,-89.00,1375.60,795.00,110.90}},
{"Blackfield Intersection", {1197.30,1044.60,-89.00,1277.00,1163.30,110.90}},
{"Blackfield Intersection", {1166.50,795.00,-89.00,1375.60,1044.60,110.90}},
{"Blackfield Intersection", {1277.00,1044.60,-89.00,1315.30,1087.60,110.90}},
{"Blackfield Intersection", {1375.60,823.20,-89.00,1457.30,919.40,110.90}},
{"Blueberry", {104.50,-220.10,2.30,349.60,152.20,200.00}},
{"Blueberry", {19.60,-404.10,3.80,349.60,-220.10,200.00}},
{"Blueberry Acres", {-319.60,-220.10,0.00,104.50,293.30,200.00}},
{"Caligula's Palace", {2087.30,1543.20,-89.00,2437.30,1703.20,110.90}},
{"Caligula's Palace", {2137.40,1703.20,-89.00,2437.30,1783.20,110.90}},
{"Calton Heights", {-2274.10,744.10,-6.10,-1982.30,1358.90,200.00}},
{"Chinatown", {-2274.10,578.30,-7.60,-2078.60,744.10,200.00}},
{"City Hall", {-2867.80,277.40,-9.10,-2593.40,458.40,200.00}},
{"Come-A-Lot", {2087.30,943.20,-89.00,2623.10,1203.20,110.90}},
{"Commerce", {1323.90,-1842.20,-89.00,1701.90,-1722.20,110.90}},
{"Commerce", {1323.90,-1722.20,-89.00,1440.90,-1577.50,110.90}},
{"Commerce", {1370.80,-1577.50,-89.00,1463.90,-1384.90,110.90}},
{"Commerce", {1463.90,-1577.50,-89.00,1667.90,-1430.80,110.90}},
{"Commerce", {1583.50,-1722.20,-89.00,1758.90,-1577.50,110.90}},
{"Commerce", {1667.90,-1577.50,-89.00,1812.60,-1430.80,110.90}},
{"Conference Center", {1046.10,-1804.20,-89.00,1323.90,-1722.20,110.90}},
{"Conference Center", {1073.20,-1842.20,-89.00,1323.90,-1804.20,110.90}},
{"Cranberry Station", {-2007.80,56.30,0.00,-1922.00,224.70,100.00}},
{"Creek", {2749.90,1937.20,-89.00,2921.60,2669.70,110.90}},
{"Dillimore", {580.70,-674.80,-9.50,861.00,-404.70,200.00}},
{"Doherty", {-2270.00,-324.10,-0.00,-1794.90,-222.50,200.00}},
{"Doherty", {-2173.00,-222.50,-0.00,-1794.90,265.20,200.00}},
{"Downtown", {-1982.30,744.10,-6.10,-1871.70,1274.20,200.00}},
{"Downtown", {-1871.70,1176.40,-4.50,-1620.30,1274.20,200.00}},
{"Downtown", {-1700.00,744.20,-6.10,-1580.00,1176.50,200.00}},
{"Downtown", {-1580.00,744.20,-6.10,-1499.80,1025.90,200.00}},
{"Downtown", {-2078.60,578.30,-7.60,-1499.80,744.20,200.00}},
{"Downtown", {-1993.20,265.20,-9.10,-1794.90,578.30,200.00}},
{"Downtown Los Santos", {1463.90,-1430.80,-89.00,1724.70,-1290.80,110.90}},
{"Downtown Los Santos", {1724.70,-1430.80,-89.00,1812.60,-1250.90,110.90}},
{"Downtown Los Santos", {1463.90,-1290.80,-89.00,1724.70,-1150.80,110.90}},
{"Downtown Los Santos", {1370.80,-1384.90,-89.00,1463.90,-1170.80,110.90}},
{"Downtown Los Santos", {1724.70,-1250.90,-89.00,1812.60,-1150.80,110.90}},
{"Downtown Los Santos", {1370.80,-1170.80,-89.00,1463.90,-1130.80,110.90}},
{"Downtown Los Santos", {1378.30,-1130.80,-89.00,1463.90,-1026.30,110.90}},
{"Downtown Los Santos", {1391.00,-1026.30,-89.00,1463.90,-926.90,110.90}},
{"Downtown Los Santos", {1507.50,-1385.20,110.90,1582.50,-1325.30,335.90}},
{"East Beach", {2632.80,-1852.80,-89.00,2959.30,-1668.10,110.90}},
{"East Beach", {2632.80,-1668.10,-89.00,2747.70,-1393.40,110.90}},
{"East Beach", {2747.70,-1668.10,-89.00,2959.30,-1498.60,110.90}},
{"East Beach", {2747.70,-1498.60,-89.00,2959.30,-1120.00,110.90}},
{"East Los Santos", {2421.00,-1628.50,-89.00,2632.80,-1454.30,110.90}},
{"East Los Santos", {2222.50,-1628.50,-89.00,2421.00,-1494.00,110.90}},
{"East Los Santos", {2266.20,-1494.00,-89.00,2381.60,-1372.00,110.90}},
{"East Los Santos", {2381.60,-1494.00,-89.00,2421.00,-1454.30,110.90}},
{"East Los Santos", {2281.40,-1372.00,-89.00,2381.60,-1135.00,110.90}},
{"East Los Santos", {2381.60,-1454.30,-89.00,2462.10,-1135.00,110.90}},
{"East Los Santos", {2462.10,-1454.30,-89.00,2581.70,-1135.00,110.90}},
{"Easter Basin", {-1794.90,249.90,-9.10,-1242.90,578.30,200.00}},
{"Easter Basin", {-1794.90,-50.00,-0.00,-1499.80,249.90,200.00}},
{"Easter Bay Airport", {-1499.80,-50.00,-0.00,-1242.90,249.90,200.00}},
{"Easter Bay Airport", {-1794.90,-730.10,-3.00,-1213.90,-50.00,200.00}},
{"Easter Bay Airport", {-1213.90,-730.10,0.00,-1132.80,-50.00,200.00}},
{"Easter Bay Airport", {-1242.90,-50.00,0.00,-1213.90,578.30,200.00}},
{"Easter Bay Airport", {-1213.90,-50.00,-4.50,-947.90,578.30,200.00}},
{"Easter Bay Airport", {-1315.40,-405.30,15.40,-1264.40,-209.50,25.40}},
{"Easter Bay Airport", {-1354.30,-287.30,15.40,-1315.40,-209.50,25.40}},
{"Easter Bay Airport", {-1490.30,-209.50,15.40,-1264.40,-148.30,25.40}},
{"Easter Bay Chemicals", {-1132.80,-768.00,0.00,-956.40,-578.10,200.00}},
{"Easter Bay Chemicals", {-1132.80,-787.30,0.00,-956.40,-768.00,200.00}},
{"El Castillo del Diablo", {-464.50,2217.60,0.00,-208.50,2580.30,200.00}},
{"El Castillo del Diablo", {-208.50,2123.00,-7.60,114.00,2337.10,200.00}},
{"El Castillo del Diablo", {-208.50,2337.10,0.00,8.40,2487.10,200.00}},
{"El Corona", {1812.60,-2179.20,-89.00,1970.60,-1852.80,110.90}},
{"El Corona", {1692.60,-2179.20,-89.00,1812.60,-1842.20,110.90}},
{"El Quebrados", {-1645.20,2498.50,0.00,-1372.10,2777.80,200.00}},
{"Esplanade East", {-1620.30,1176.50,-4.50,-1580.00,1274.20,200.00}},
{"Esplanade East", {-1580.00,1025.90,-6.10,-1499.80,1274.20,200.00}},
{"Esplanade East", {-1499.80,578.30,-79.60,-1339.80,1274.20,20.30}},
{"Esplanade North", {-2533.00,1358.90,-4.50,-1996.60,1501.20,200.00}},
{"Esplanade North", {-1996.60,1358.90,-4.50,-1524.20,1592.50,200.00}},
{"Esplanade North", {-1982.30,1274.20,-4.50,-1524.20,1358.90,200.00}},
{"Fallen Tree", {-792.20,-698.50,-5.30,-452.40,-380.00,200.00}},
{"Fallow Bridge", {434.30,366.50,0.00,603.00,555.60,200.00}},
{"Fern Ridge", {508.10,-139.20,0.00,1306.60,119.50,200.00}},
{"Financial", {-1871.70,744.10,-6.10,-1701.30,1176.40,300.00}},
{"Fisher's Lagoon", {1916.90,-233.30,-100.00,2131.70,13.80,200.00}},
{"Flint Intersection", {-187.70,-1596.70,-89.00,17.00,-1276.60,110.90}},
{"Flint Range", {-594.10,-1648.50,0.00,-187.70,-1276.60,200.00}},
{"Fort Carson", {-376.20,826.30,-3.00,123.70,1220.40,200.00}},
{"Foster Valley", {-2270.00,-430.20,-0.00,-2178.60,-324.10,200.00}},
{"Foster Valley", {-2178.60,-599.80,-0.00,-1794.90,-324.10,200.00}},
{"Foster Valley", {-2178.60,-1115.50,0.00,-1794.90,-599.80,200.00}},
{"Foster Valley", {-2178.60,-1250.90,0.00,-1794.90,-1115.50,200.00}},
{"Frederick Bridge", {2759.20,296.50,0.00,2774.20,594.70,200.00}},
{"Gant Bridge", {-2741.40,1659.60,-6.10,-2616.40,2175.10,200.00}},
{"Gant Bridge", {-2741.00,1490.40,-6.10,-2616.40,1659.60,200.00}},
{"Ganton", {2222.50,-1852.80,-89.00,2632.80,-1722.30,110.90}},
{"Ganton", {2222.50,-1722.30,-89.00,2632.80,-1628.50,110.90}},
{"Garcia", {-2411.20,-222.50,-0.00,-2173.00,265.20,200.00}},
{"Garcia", {-2395.10,-222.50,-5.30,-2354.00,-204.70,200.00}},
{"Garver Bridge", {-1339.80,828.10,-89.00,-1213.90,1057.00,110.90}},
{"Garver Bridge", {-1213.90,950.00,-89.00,-1087.90,1178.90,110.90}},
{"Garver Bridge", {-1499.80,696.40,-179.60,-1339.80,925.30,20.30}},
{"Glen Park", {1812.60,-1449.60,-89.00,1996.90,-1350.70,110.90}},
{"Glen Park", {1812.60,-1100.80,-89.00,1994.30,-973.30,110.90}},
{"Glen Park", {1812.60,-1350.70,-89.00,2056.80,-1100.80,110.90}},
{"Green Palms", {176.50,1305.40,-3.00,338.60,1520.70,200.00}},
{"Greenglass College", {964.30,1044.60,-89.00,1197.30,1203.20,110.90}},
{"Greenglass College", {964.30,930.80,-89.00,1166.50,1044.60,110.90}},
{"Hampton Barns", {603.00,264.30,0.00,761.90,366.50,200.00}},
{"Hankypanky Point", {2576.90,62.10,0.00,2759.20,385.50,200.00}},
{"Harry Gold Parkway", {1777.30,863.20,-89.00,1817.30,2342.80,110.90}},
{"Hashbury", {-2593.40,-222.50,-0.00,-2411.20,54.70,200.00}},
{"Hilltop Farm", {967.30,-450.30,-3.00,1176.70,-217.90,200.00}},
{"Hunter Quarry", {337.20,710.80,-115.20,860.50,1031.70,203.70}},
{"Idlewood", {1812.60,-1852.80,-89.00,1971.60,-1742.30,110.90}},
{"Idlewood", {1812.60,-1742.30,-89.00,1951.60,-1602.30,110.90}},
{"Idlewood", {1951.60,-1742.30,-89.00,2124.60,-1602.30,110.90}},
{"Idlewood", {1812.60,-1602.30,-89.00,2124.60,-1449.60,110.90}},
{"Idlewood", {2124.60,-1742.30,-89.00,2222.50,-1494.00,110.90}},
{"Idlewood", {1971.60,-1852.80,-89.00,2222.50,-1742.30,110.90}},
{"Jefferson", {1996.90,-1449.60,-89.00,2056.80,-1350.70,110.90}},
{"Jefferson", {2124.60,-1494.00,-89.00,2266.20,-1449.60,110.90}},
{"Jefferson", {2056.80,-1372.00,-89.00,2281.40,-1210.70,110.90}},
{"Jefferson", {2056.80,-1210.70,-89.00,2185.30,-1126.30,110.90}},
{"Jefferson", {2185.30,-1210.70,-89.00,2281.40,-1154.50,110.90}},
{"Jefferson", {2056.80,-1449.60,-89.00,2266.20,-1372.00,110.90}},
{"Julius Thruway East", {2623.10,943.20,-89.00,2749.90,1055.90,110.90}},
{"Julius Thruway East", {2685.10,1055.90,-89.00,2749.90,2626.50,110.90}},
{"Julius Thruway East", {2536.40,2442.50,-89.00,2685.10,2542.50,110.90}},
{"Julius Thruway East", {2625.10,2202.70,-89.00,2685.10,2442.50,110.90}},
{"Julius Thruway North", {2498.20,2542.50,-89.00,2685.10,2626.50,110.90}},
{"Julius Thruway North", {2237.40,2542.50,-89.00,2498.20,2663.10,110.90}},
{"Julius Thruway North", {2121.40,2508.20,-89.00,2237.40,2663.10,110.90}},
{"Julius Thruway North", {1938.80,2508.20,-89.00,2121.40,2624.20,110.90}},
{"Julius Thruway North", {1534.50,2433.20,-89.00,1848.40,2583.20,110.90}},
{"Julius Thruway North", {1848.40,2478.40,-89.00,1938.80,2553.40,110.90}},
{"Julius Thruway North", {1704.50,2342.80,-89.00,1848.40,2433.20,110.90}},
{"Julius Thruway North", {1377.30,2433.20,-89.00,1534.50,2507.20,110.90}},
{"Julius Thruway South", {1457.30,823.20,-89.00,2377.30,863.20,110.90}},
{"Julius Thruway South", {2377.30,788.80,-89.00,2537.30,897.90,110.90}},
{"Julius Thruway West", {1197.30,1163.30,-89.00,1236.60,2243.20,110.90}},
{"Julius Thruway West", {1236.60,2142.80,-89.00,1297.40,2243.20,110.90}},
{"Juniper Hill", {-2533.00,578.30,-7.60,-2274.10,968.30,200.00}},
{"Juniper Hollow", {-2533.00,968.30,-6.10,-2274.10,1358.90,200.00}},
{"K.A.C.C. Military Fuels", {2498.20,2626.50,-89.00,2749.90,2861.50,110.90}},
{"Kincaid Bridge", {-1339.80,599.20,-89.00,-1213.90,828.10,110.90}},
{"Kincaid Bridge", {-1213.90,721.10,-89.00,-1087.90,950.00,110.90}},
{"Kincaid Bridge", {-1087.90,855.30,-89.00,-961.90,986.20,110.90}},
{"King's", {-2329.30,458.40,-7.60,-1993.20,578.30,200.00}},
{"King's", {-2411.20,265.20,-9.10,-1993.20,373.50,200.00}},
{"King's", {-2253.50,373.50,-9.10,-1993.20,458.40,200.00}},
{"LVA Freight Depot", {1457.30,863.20,-89.00,1777.40,1143.20,110.90}},
{"LVA Freight Depot", {1375.60,919.40,-89.00,1457.30,1203.20,110.90}},
{"LVA Freight Depot", {1277.00,1087.60,-89.00,1375.60,1203.20,110.90}},
{"LVA Freight Depot", {1315.30,1044.60,-89.00,1375.60,1087.60,110.90}},
{"LVA Freight Depot", {1236.60,1163.40,-89.00,1277.00,1203.20,110.90}},
{"Las Barrancas", {-926.10,1398.70,-3.00,-719.20,1634.60,200.00}},
{"Las Brujas", {-365.10,2123.00,-3.00,-208.50,2217.60,200.00}},
{"Las Colinas", {1994.30,-1100.80,-89.00,2056.80,-920.80,110.90}},
{"Las Colinas", {2056.80,-1126.30,-89.00,2126.80,-920.80,110.90}},
{"Las Colinas", {2185.30,-1154.50,-89.00,2281.40,-934.40,110.90}},
{"Las Colinas", {2126.80,-1126.30,-89.00,2185.30,-934.40,110.90}},
{"Las Colinas", {2747.70,-1120.00,-89.00,2959.30,-945.00,110.90}},
{"Las Colinas", {2632.70,-1135.00,-89.00,2747.70,-945.00,110.90}},
{"Las Colinas", {2281.40,-1135.00,-89.00,2632.70,-945.00,110.90}},
{"Las Payasadas", {-354.30,2580.30,2.00,-133.60,2816.80,200.00}},
{"Las Venturas Airport", {1236.60,1203.20,-89.00,1457.30,1883.10,110.90}},
{"Las Venturas Airport", {1457.30,1203.20,-89.00,1777.30,1883.10,110.90}},
{"Las Venturas Airport", {1457.30,1143.20,-89.00,1777.40,1203.20,110.90}},
{"Las Venturas Airport", {1515.80,1586.40,-12.50,1729.90,1714.50,87.50}},
{"Last Dime Motel", {1823.00,596.30,-89.00,1997.20,823.20,110.90}},
{"Leafy Hollow", {-1166.90,-1856.00,0.00,-815.60,-1602.00,200.00}},
{"Liberty City", {-1000.00,400.00,1300.00,-700.00,600.00,1400.00}},
{"Lil' Probe Inn", {-90.20,1286.80,-3.00,153.80,1554.10,200.00}},
{"Linden Side", {2749.90,943.20,-89.00,2923.30,1198.90,110.90}},
{"Linden Station", {2749.90,1198.90,-89.00,2923.30,1548.90,110.90}},
{"Linden Station", {2811.20,1229.50,-39.50,2861.20,1407.50,60.40}},
{"Little Mexico", {1701.90,-1842.20,-89.00,1812.60,-1722.20,110.90}},
{"Little Mexico", {1758.90,-1722.20,-89.00,1812.60,-1577.50,110.90}},
{"Los Flores", {2581.70,-1454.30,-89.00,2632.80,-1393.40,110.90}},
{"Los Flores", {2581.70,-1393.40,-89.00,2747.70,-1135.00,110.90}},
{"Los Santos International", {1249.60,-2394.30,-89.00,1852.00,-2179.20,110.90}},
{"Los Santos International", {1852.00,-2394.30,-89.00,2089.00,-2179.20,110.90}},
{"Los Santos International", {1382.70,-2730.80,-89.00,2201.80,-2394.30,110.90}},
{"Los Santos International", {1974.60,-2394.30,-39.00,2089.00,-2256.50,60.90}},
{"Los Santos International", {1400.90,-2669.20,-39.00,2189.80,-2597.20,60.90}},
{"Los Santos International", {2051.60,-2597.20,-39.00,2152.40,-2394.30,60.90}},
{"Marina", {647.70,-1804.20,-89.00,851.40,-1577.50,110.90}},
{"Marina", {647.70,-1577.50,-89.00,807.90,-1416.20,110.90}},
{"Marina", {807.90,-1577.50,-89.00,926.90,-1416.20,110.90}},
{"Market", {787.40,-1416.20,-89.00,1072.60,-1310.20,110.90}},
{"Market", {952.60,-1310.20,-89.00,1072.60,-1130.80,110.90}},
{"Market", {1072.60,-1416.20,-89.00,1370.80,-1130.80,110.90}},
{"Market", {926.90,-1577.50,-89.00,1370.80,-1416.20,110.90}},
{"Market Station", {787.40,-1410.90,-34.10,866.00,-1310.20,65.80}},
{"Martin Bridge", {-222.10,293.30,0.00,-122.10,476.40,200.00}},
{"Missionary Hill", {-2994.40,-811.20,0.00,-2178.60,-430.20,200.00}},
{"Montgomery", {1119.50,119.50,-3.00,1451.40,493.30,200.00}},
{"Montgomery", {1451.40,347.40,-6.10,1582.40,420.80,200.00}},
{"Montgomery Intersection", {1546.60,208.10,0.00,1745.80,347.40,200.00}},
{"Montgomery Intersection", {1582.40,347.40,0.00,1664.60,401.70,200.00}},
{"Mulholland", {1414.00,-768.00,-89.00,1667.60,-452.40,110.90}},
{"Mulholland", {1281.10,-452.40,-89.00,1641.10,-290.90,110.90}},
{"Mulholland", {1269.10,-768.00,-89.00,1414.00,-452.40,110.90}},
{"Mulholland", {1357.00,-926.90,-89.00,1463.90,-768.00,110.90}},
{"Mulholland", {1318.10,-910.10,-89.00,1357.00,-768.00,110.90}},
{"Mulholland", {1169.10,-910.10,-89.00,1318.10,-768.00,110.90}},
{"Mulholland", {768.60,-954.60,-89.00,952.60,-860.60,110.90}},
{"Mulholland", {687.80,-860.60,-89.00,911.80,-768.00,110.90}},
{"Mulholland", {737.50,-768.00,-89.00,1142.20,-674.80,110.90}},
{"Mulholland", {1096.40,-910.10,-89.00,1169.10,-768.00,110.90}},
{"Mulholland", {952.60,-937.10,-89.00,1096.40,-860.60,110.90}},
{"Mulholland", {911.80,-860.60,-89.00,1096.40,-768.00,110.90}},
{"Mulholland", {861.00,-674.80,-89.00,1156.50,-600.80,110.90}},
{"Mulholland Intersection", {1463.90,-1150.80,-89.00,1812.60,-768.00,110.90}},
{"North Rock", {2285.30,-768.00,0.00,2770.50,-269.70,200.00}},
{"Ocean Docks", {2373.70,-2697.00,-89.00,2809.20,-2330.40,110.90}},
{"Ocean Docks", {2201.80,-2418.30,-89.00,2324.00,-2095.00,110.90}},
{"Ocean Docks", {2324.00,-2302.30,-89.00,2703.50,-2145.10,110.90}},
{"Ocean Docks", {2089.00,-2394.30,-89.00,2201.80,-2235.80,110.90}},
{"Ocean Docks", {2201.80,-2730.80,-89.00,2324.00,-2418.30,110.90}},
{"Ocean Docks", {2703.50,-2302.30,-89.00,2959.30,-2126.90,110.90}},
{"Ocean Docks", {2324.00,-2145.10,-89.00,2703.50,-2059.20,110.90}},
{"Ocean Flats", {-2994.40,277.40,-9.10,-2867.80,458.40,200.00}},
{"Ocean Flats", {-2994.40,-222.50,-0.00,-2593.40,277.40,200.00}},
{"Ocean Flats", {-2994.40,-430.20,-0.00,-2831.80,-222.50,200.00}},
{"Octane Springs", {338.60,1228.50,0.00,664.30,1655.00,200.00}},
{"Old Venturas Strip", {2162.30,2012.10,-89.00,2685.10,2202.70,110.90}},
{"Palisades", {-2994.40,458.40,-6.10,-2741.00,1339.60,200.00}},
{"Palomino Creek", {2160.20,-149.00,0.00,2576.90,228.30,200.00}},
{"Paradiso", {-2741.00,793.40,-6.10,-2533.00,1268.40,200.00}},
{"Pershing Square", {1440.90,-1722.20,-89.00,1583.50,-1577.50,110.90}},
{"Pilgrim", {2437.30,1383.20,-89.00,2624.40,1783.20,110.90}},
{"Pilgrim", {2624.40,1383.20,-89.00,2685.10,1783.20,110.90}},
{"Pilson Intersection", {1098.30,2243.20,-89.00,1377.30,2507.20,110.90}},
{"Pirates in Men's Pants", {1817.30,1469.20,-89.00,2027.40,1703.20,110.90}},
{"Playa del Seville", {2703.50,-2126.90,-89.00,2959.30,-1852.80,110.90}},
{"Prickle Pine", {1534.50,2583.20,-89.00,1848.40,2863.20,110.90}},
{"Prickle Pine", {1117.40,2507.20,-89.00,1534.50,2723.20,110.90}},
{"Prickle Pine", {1848.40,2553.40,-89.00,1938.80,2863.20,110.90}},
{"Prickle Pine", {1938.80,2624.20,-89.00,2121.40,2861.50,110.90}},
{"Queens", {-2533.00,458.40,0.00,-2329.30,578.30,200.00}},
{"Queens", {-2593.40,54.70,0.00,-2411.20,458.40,200.00}},
{"Queens", {-2411.20,373.50,0.00,-2253.50,458.40,200.00}},
{"Randolph Industrial Estate", {1558.00,596.30,-89.00,1823.00,823.20,110.90}},
{"Redsands East", {1817.30,2011.80,-89.00,2106.70,2202.70,110.90}},
{"Redsands East", {1817.30,2202.70,-89.00,2011.90,2342.80,110.90}},
{"Redsands East", {1848.40,2342.80,-89.00,2011.90,2478.40,110.90}},
{"Redsands West", {1236.60,1883.10,-89.00,1777.30,2142.80,110.90}},
{"Redsands West", {1297.40,2142.80,-89.00,1777.30,2243.20,110.90}},
{"Redsands West", {1377.30,2243.20,-89.00,1704.50,2433.20,110.90}},
{"Redsands West", {1704.50,2243.20,-89.00,1777.30,2342.80,110.90}},
{"Regular Tom", {-405.70,1712.80,-3.00,-276.70,1892.70,200.00}},
{"Richman", {647.50,-1118.20,-89.00,787.40,-954.60,110.90}},
{"Richman", {647.50,-954.60,-89.00,768.60,-860.60,110.90}},
{"Richman", {225.10,-1369.60,-89.00,334.50,-1292.00,110.90}},
{"Richman", {225.10,-1292.00,-89.00,466.20,-1235.00,110.90}},
{"Richman", {72.60,-1404.90,-89.00,225.10,-1235.00,110.90}},
{"Richman", {72.60,-1235.00,-89.00,321.30,-1008.10,110.90}},
{"Richman", {321.30,-1235.00,-89.00,647.50,-1044.00,110.90}},
{"Richman", {321.30,-1044.00,-89.00,647.50,-860.60,110.90}},
{"Richman", {321.30,-860.60,-89.00,687.80,-768.00,110.90}},
{"Richman", {321.30,-768.00,-89.00,700.70,-674.80,110.90}},
{"Robada Intersection", {-1119.00,1178.90,-89.00,-862.00,1351.40,110.90}},
{"Roca Escalante", {2237.40,2202.70,-89.00,2536.40,2542.50,110.90}},
{"Roca Escalante", {2536.40,2202.70,-89.00,2625.10,2442.50,110.90}},
{"Rockshore East", {2537.30,676.50,-89.00,2902.30,943.20,110.90}},
{"Rockshore West", {1997.20,596.30,-89.00,2377.30,823.20,110.90}},
{"Rockshore West", {2377.30,596.30,-89.00,2537.30,788.80,110.90}},
{"Rodeo", {72.60,-1684.60,-89.00,225.10,-1544.10,110.90}},
{"Rodeo", {72.60,-1544.10,-89.00,225.10,-1404.90,110.90}},
{"Rodeo", {225.10,-1684.60,-89.00,312.80,-1501.90,110.90}},
{"Rodeo", {225.10,-1501.90,-89.00,334.50,-1369.60,110.90}},
{"Rodeo", {334.50,-1501.90,-89.00,422.60,-1406.00,110.90}},
{"Rodeo", {312.80,-1684.60,-89.00,422.60,-1501.90,110.90}},
{"Rodeo", {422.60,-1684.60,-89.00,558.00,-1570.20,110.90}},
{"Rodeo", {558.00,-1684.60,-89.00,647.50,-1384.90,110.90}},
{"Rodeo", {466.20,-1570.20,-89.00,558.00,-1385.00,110.90}},
{"Rodeo", {422.60,-1570.20,-89.00,466.20,-1406.00,110.90}},
{"Rodeo", {466.20,-1385.00,-89.00,647.50,-1235.00,110.90}},
{"Rodeo", {334.50,-1406.00,-89.00,466.20,-1292.00,110.90}},
{"Royal Casino", {2087.30,1383.20,-89.00,2437.30,1543.20,110.90}},
{"San Andreas Sound", {2450.30,385.50,-100.00,2759.20,562.30,200.00}},
{"Santa Flora", {-2741.00,458.40,-7.60,-2533.00,793.40,200.00}},
{"Santa Maria Beach", {342.60,-2173.20,-89.00,647.70,-1684.60,110.90}},
{"Santa Maria Beach", {72.60,-2173.20,-89.00,342.60,-1684.60,110.90}},
{"Shady Cabin", {-1632.80,-2263.40,-3.00,-1601.30,-2231.70,200.00}},
{"Shady Creeks", {-1820.60,-2643.60,-8.00,-1226.70,-1771.60,200.00}},
{"Shady Creeks", {-2030.10,-2174.80,-6.10,-1820.60,-1771.60,200.00}},
{"Sobell Rail Yards", {2749.90,1548.90,-89.00,2923.30,1937.20,110.90}},
{"Spinybed", {2121.40,2663.10,-89.00,2498.20,2861.50,110.90}},
{"Starfish Casino", {2437.30,1783.20,-89.00,2685.10,2012.10,110.90}},
{"Starfish Casino", {2437.30,1858.10,-39.00,2495.00,1970.80,60.90}},
{"Starfish Casino", {2162.30,1883.20,-89.00,2437.30,2012.10,110.90}},
{"Temple", {1252.30,-1130.80,-89.00,1378.30,-1026.30,110.90}},
{"Temple", {1252.30,-1026.30,-89.00,1391.00,-926.90,110.90}},
{"Temple", {1252.30,-926.90,-89.00,1357.00,-910.10,110.90}},
{"Temple", {952.60,-1130.80,-89.00,1096.40,-937.10,110.90}},
{"Temple", {1096.40,-1130.80,-89.00,1252.30,-1026.30,110.90}},
{"Temple", {1096.40,-1026.30,-89.00,1252.30,-910.10,110.90}},
{"The Camel's Toe", {2087.30,1203.20,-89.00,2640.40,1383.20,110.90}},
{"The Clown's Pocket", {2162.30,1783.20,-89.00,2437.30,1883.20,110.90}},
{"The Emerald Isle", {2011.90,2202.70,-89.00,2237.40,2508.20,110.90}},
{"The Farm", {-1209.60,-1317.10,114.90,-908.10,-787.30,251.90}},
{"The Four Dragons Casino", {1817.30,863.20,-89.00,2027.30,1083.20,110.90}},
{"The High Roller", {1817.30,1283.20,-89.00,2027.30,1469.20,110.90}},
{"The Mako Span", {1664.60,401.70,0.00,1785.10,567.20,200.00}},
{"The Panopticon", {-947.90,-304.30,-1.10,-319.60,327.00,200.00}},
{"The Pink Swan", {1817.30,1083.20,-89.00,2027.30,1283.20,110.90}},
{"The Sherman Dam", {-968.70,1929.40,-3.00,-481.10,2155.20,200.00}},
{"The Strip", {2027.40,863.20,-89.00,2087.30,1703.20,110.90}},
{"The Strip", {2106.70,1863.20,-89.00,2162.30,2202.70,110.90}},
{"The Strip", {2027.40,1783.20,-89.00,2162.30,1863.20,110.90}},
{"The Strip", {2027.40,1703.20,-89.00,2137.40,1783.20,110.90}},
{"The Visage", {1817.30,1863.20,-89.00,2106.70,2011.80,110.90}},
{"The Visage", {1817.30,1703.20,-89.00,2027.40,1863.20,110.90}},
{"Unity Station", {1692.60,-1971.80,-20.40,1812.60,-1932.80,79.50}},
{"Valle Ocultado", {-936.60,2611.40,2.00,-715.90,2847.90,200.00}},
{"Verdant Bluffs", {930.20,-2488.40,-89.00,1249.60,-2006.70,110.90}},
{"Verdant Bluffs", {1073.20,-2006.70,-89.00,1249.60,-1842.20,110.90}},
{"Verdant Bluffs", {1249.60,-2179.20,-89.00,1692.60,-1842.20,110.90}},
{"Verdant Meadows", {37.00,2337.10,-3.00,435.90,2677.90,200.00}},
{"Verona Beach", {647.70,-2173.20,-89.00,930.20,-1804.20,110.90}},
{"Verona Beach", {930.20,-2006.70,-89.00,1073.20,-1804.20,110.90}},
{"Verona Beach", {851.40,-1804.20,-89.00,1046.10,-1577.50,110.90}},
{"Verona Beach", {1161.50,-1722.20,-89.00,1323.90,-1577.50,110.90}},
{"Verona Beach", {1046.10,-1722.20,-89.00,1161.50,-1577.50,110.90}},
{"Vinewood", {787.40,-1310.20,-89.00,952.60,-1130.80,110.90}},
{"Vinewood", {787.40,-1130.80,-89.00,952.60,-954.60,110.90}},
{"Vinewood", {647.50,-1227.20,-89.00,787.40,-1118.20,110.90}},
{"Vinewood", {647.70,-1416.20,-89.00,787.40,-1227.20,110.90}},
{"Whitewood Estates", {883.30,1726.20,-89.00,1098.30,2507.20,110.90}},
{"Whitewood Estates", {1098.30,1726.20,-89.00,1197.30,2243.20,110.90}},
{"Willowfield", {1970.60,-2179.20,-89.00,2089.00,-1852.80,110.90}},
{"Willowfield", {2089.00,-2235.80,-89.00,2201.80,-1989.90,110.90}},
{"Willowfield", {2089.00,-1989.90,-89.00,2324.00,-1852.80,110.90}},
{"Willowfield", {2201.80,-2095.00,-89.00,2324.00,-1989.90,110.90}},
{"Willowfield", {2541.70,-1941.40,-89.00,2703.50,-1852.80,110.90}},
{"Willowfield", {2324.00,-2059.20,-89.00,2541.70,-1852.80,110.90}},
{"Willowfield", {2541.70,-2059.20,-89.00,2703.50,-1941.40,110.90}},
{"Yellow Bell Station", {1377.40,2600.40,-21.90,1492.40,2687.30,78.00}},
// Main zones
{"Los Santos", {44.60,-2892.90,-242.90,2997.00,-768.00,900.00}},
{"Las Venturas", {869.40,596.30,-242.90,2997.00,2993.80,900.00}},
{"Bone County", {-480.50,596.30,-242.90,869.40,2993.80,900.00}},
{"Tierra Robada", {-2997.40,1659.60,-242.90,-480.50,2993.80,900.00}},
{"Tierra Robada", {-1213.90,596.30,-242.90,-480.50,1659.60,900.00}},
{"San Fierro", {-2997.40,-1115.50,-242.90,-1213.90,1659.60,900.00}},
{"Red County", {-1213.90,-768.00,-242.90,2997.00,596.30,900.00}},
{"Flint County", {-1213.90,-2892.90,-242.90,44.60,-768.00,900.00}},
{"Whetstone", {-2997.40,-2892.90,-242.90,-1213.90,-1115.50,900.00}}
};
#pragma unused zones
enum INTERIOR_INFO{
INTERIOR_ID,
Float:INTERIOD_SX,
Float:INTERIOR_MINX,
Float:INTERIOR_MAXX,
Float:INTERIOR_SY,
Float:INTERIOR_MINY,
Float:INTERIOR_MAXY,
Float:INTERIOR_SZ,
Float:INTERIOR_MINZ,
Float:INTERIOR_MAXZ,
Float:INTERIOR_SA,
INTERIOR_NAME[64]
}
new interiors[][INTERIOR_INFO] = {
{0, 0.0,0.0,0.0, 0.0,0.0,0.0, 0.0,0.0,0.0, 0.0, ""},
//247's
{17, -25.884499,-35.0952,-3.3979, -185.868988,-188.7431,-167.9059, 1003.549988,1002.5469,1008.7656, 0.000, "24/7"},
{10, 6.091180,-13.1705,10.8973, -29.271898,-32.5796,-73.7699, 1003.549988,1002.5494,1008.8979, 0.000, "24/7"},
{18, -30.946699,-39.2296,-12.9542, -89.609596,-92.6993,-73.7699, 1003.549988,1002.5469,1008.9487, 0.000, "24/7"},
{16, -25.132599,-39.1961,-14.0429, -139.066986,-142.2416,-122.4566, 1003.549988,1002.5469,1008.3311, 0.000, "24/7"},
{4, -27.312300,-36.9258,-25.8106, -29.277599,-32.1881,-1.8185, 1003.549988,1002.5573,1009.0845, 0.000, "24/7"},
{6, -26.691599,-37.4347,-16.2656, -55.714897,-58.9940,-48.4956, 1003.549988,1002.5469,1008.7020, 0.000, "24/7"},
//Airport's/Aeroplanes
{14, -1827.147338,-2002.2133,-1718.3214, 7.207418,-65.7420,114.2523, 1061.143554,1055.1436,1066.1436, 0.000, "Francis International Airport"},
{1, 2.384830,-1.4275,4.0257, 33.103397,21.5928,35.7774, 1199.849976,1198.5938,1204.0946, 0.000, "A Shamal"},
{9, 315.856170,310.4739,321.0128, 1024.496459,971.1845,1039.4181, 1949.797363,1942.8815,1966.1064, 0.000, "A Andromeda"},
//Ammunations
{1, 286.148987,283.0005,301.2157, -40.644398,-42.6472,-1.4354, 1001.569946,1000.5156,1006.5156, 315.000, "Ammunation"},
{4, 286.800995,282.8332,332.1738, -82.547600,-91.2557,-55.4272, 1001.539978,1000.5156,1006.9922, 315.000, "Ammunation"},
{6, 296.919983,283.0418,299.4285, -108.071999,-116.2635,-101.6424, 1001.569946,1000.5156,1006.5078, 90.000, "Ammunation"},
{7, 314.820984,267.7444,318.3778, -141.431992,-145.6805,-124.8552, 999.661987,998.6083,1008.8906, 45.000, "Ammunation"},
{6, 316.524994,269.9506,320.3639, -167.706985,-171.2541,-157.4279, 999.661987,998.5938,1005.0609, 45.000, "Ammunation"},
//Burglary Houses
{3, 235.508994,218.4460,246.8138, 1189.169897,1185.7623,1213.8395, 1080.339966,1079.2578,1089.7813, 0.000, "A House"},
{2, 225.756989,216.5522,235.7148, 1240.000000,1237.0811,1255.2098, 1082.149902,1081.1406,1086.6406, 90.000, "A House"},
{1, 223.043991,215.3478,234.8832, 1289.259888,1282.2054,1294.9760, 1082.199951,1081.1406,1086.1406, 0.000, "A House"},
{7, 225.630997,222.8882,255.9689, 1022.479980,1016.5048,1052.1018, 1084.069946,1082.8125,1092.3047, 0.000, "A House"},
{15, 295.138977,282.9257,307.5086, 1474.469971,1470.0725,1491.2295, 1080.519897,1079.2578,1084.8047, 0.000, "A House"},
{15, 328.493988,318.4674,337.6630, 1480.589966,1469.8763,1492.8041, 1084.449951,1083.4375,1088.4379, 0.000, "A House"},
{15, 385.803986,369.8986,391.1570, 1471.769897,1450.6768,1473.9808, 1080.209961,1079.1875,1084.3984, 90.000, "A House"},
{15, 375.971985,354.5016,381.1810, 1417.269897,1407.1798,1433.9547, 1081.409912,1080.3281,1085.2738, 90.000, "A House"},
{2, 490.810974,474.3922,502.8857, 1401.489990,1397.5024,1424.8313, 1080.339966,1079.2645,1089.7813, 0.000, "A House"},
{2, 447.734985,434.3427,460.3860, 1400.439941,1393.1072,1421.1198, 1084.339966,1083.3120,1089.2966, 0.000, "A House"},
{5, 227.722992,224.2079,250.7603, 1114.389893,1104.4031,1122.6886, 1081.189941,1079.9922,1089.0071, 270.000, "A House"},
{4, 260.983978,248.2458,269.4295, 1286.549927,1280.3994,1297.1023, 1080.299927,1079.2578,1084.2578, 0.000, "A House"},
{4, 221.666992,216.5254,230.3692, 1143.389893,1139.0764,1161.1541, 1082.679932,1081.6094,1086.5781, 0.000, "A House"},
{10, 27.132700,17.0703,37.3015, 1341.149902,1334.6843,1354.1284, 1084.449951,1083.3750,1093.8750, 0.000, "A House"},
{4, -262.601990,-281.3279,-255.0091, 1456.619995,1445.6505,1464.0410, 1084.449951,1083.3672,1091.8750, 90.000, "A House"},
{5, 22.778299,13.9406,34.6132, 1404.959961,1395.5353,1420.3214, 1084.449951,1083.4297,1089.4297, 0.000, "A House"},
{5, 140.278000,133.3888,155.1858, 1368.979980,1364.83196,1388.4816, 1083.969971,1082.8646,1093.3672, 0.000, "A House"},
{6, 234.045990,218.2290,249.8347, 1064.879883,1062.5000,1088.6488, 1084.309937,1083.2106,1091.6094, 0.000, "A House"},
{6, -68.294098,-73.5360,-55.0049, 1353.469971,1345.4100,1368.8204, 1080.279907,1079.2109,1085.2109, 0.000, "A House"},
{15, -285.548981,-302.5614,-277.7969, 1470.979980,1468.1730,1482.1398, 1084.449951,1083.3750,1093.8750, 0.000, "A House"},
{8, -42.581997,-53.8233,-33.4177, 1408.109985,1389.9181,1414.0795, 1084.449951,1083.4297,1089.4297, 0.000, "A House"},
{9, 83.345093,73.920,97.4875, 1324.439941,1314.4618,1347.3900, 1083.889893,1082.8594,1093.3672, 0.000, "A House"},
{9, 260.941986,250.8725,266.8128, 1238.509888,1233.7965,1257.9093, 1084.259888,1083.2578,1088.2734, 0.000, "A House"},
//Business's
{3, 1038.509888,1037.3038,1041.8345, -0.663752,1.0347,11.2171, 1001.089966,1000.2845,1006.2845, 0.000, "Blastin' Fools Records"},
{12, 446.622986,442.4903,458.4054, 509.318970,505.6406,517.0414, 1001.419983,1000.4195,1006.4195, 0.000, "The Budget Inn Motel"},
{15, 2216.339844,2178.7632,2255.6553, -1150.509888,-1202.9016,-1136.2014, 1025.799927,1024.7969,1038.6178, 0.000, "The Jefferson Motel"},
{3, 833.818970,818.0212,834.9809, 7.418000,-1.5486,13.3580, 1004.179993,1003.1870,1010.4828, 90.000, "The Off track Betting"},
{3, -100.325996,-117.9237,-97.8847, -22.816500,-29.8268,-6.3720, 1000.741943,999.7188,1005.7188, 45.000, "The Sex Shop"},
{1, 964.376953,931.3280,966.7448, 2157.329834,2094.7502,2179.0835, 1011.019958,1010.0303,1020.0259, 180.000, "The Sindacco Meat Processing Plant"},
{6, -2239.569824,-2242.0911,-2217.3230, 130.020996,126.5612,139.0298, 1035.419922,1034.4141,1040.3204, 90.000, "Zero's RC Shop"},
//Car Mod Shops
{1, 614.581420,602.3553,637.2819, -23.066856,-28.5506,10.2388, 1004.781250,994.8694,1014.7771, 0.000, "Transfenders"},
{2, 620.420410,608.1679,625.8292, -72.015701,-83.6601,-68.8194, 997.992187,993.5744,1002.9953, 180.000, "Loco Low Co."},
{3, 612.508605,608.0199,625.3347, -129.236114,-132.7094,-117.6847, 997.992187,993.3466,1002.9953, 315.000, "Wheel's Arch Angels"},
{1, -2048.605957,-2057.7175,-2038.8625, 162.093444,150.0913,182.0321, 28.835937,27.8359,33.8359, 0.000, "CJ's Garage"},
//Casino's
{10, 2015.4500,1924.1576,2020.0708, 1017.0900,967.2367,1068.4240, 996.8750,991.4688,997.8741, 90.000, "The Four Dragons"},
{1, 2233.9099,2134.8252,2292.7944, 1710.7300,1556.5646,1714.9104, 1011.2987,1005.1860,1013.2435, 180.000, "Calligula's"},
//Casino Oditties
{10, 1889.975,1886.0958,1900.8591, 1018.055,1010.7878,1027.1942, 31.88281,30.8828,36.8828, 270.000, "The Janitors Office"},
{1, -2158.719971,-2173.0259,-2156.4658, 641.287964,633.6885,648.6263, 1052.369995,1051.3817,1062.6328, 90.000, "Woozie's Office"},
{12, 1133.069946,1116.3666,1144.5529, -9.573059,-17.0111,14.3073, 1000.750000,999.6797,1007.4844, 0.000, "Redsands West Casino"},
//Clothing Stores
{15, 207.737991,198.4293,219.9531, -109.019997,-115.1267,-93.4263, 1005.269958,1004.1328,1010.0625, 0.000, "Binco"},
{14, 204.332993,194.9293,218.6813, -166.694992,-172.8813,-149.9782, 1000.578979,999.5234,1005.9531, 0.000, "Didier Sachs"},
{3, 207.054993,194.5785,217.7405, -138.804993,-144.9519,-117.3412, 1003.519958,1001.8672,1008.9063, 0.000, "ProLaps"},
{1, 203.778000,194.774,217.3534, -48.492397,-54.0761,-30.7443, 1001.799988,1000.8047,1009.1484, 0.000, "SubUrban"},
{5, 226.293991,198.4532,243.0808, -7.431530,-14.1564,5.4119, 1002.259949,1000.2109,1010.2041, 90.000, "Victim"},
{18, 161.391006,138.4255,184.3445, -93.159156,-101.6389,-68.2857, 1001.804687,1000.8047,1006.8047, 0.000, "Zip"},
//Bars and Clubs
{17, 493.390991,472.5995,508.7181, -22.722799,-30.7876,1.0150, 1000.686951,999.6797,1008.4766, 0.000, "The Dance Club"},
{11, 501.980988,481.7581,513.3429, -69.150200,-90.4746,-63.5646, 998.834961,997.7578,1004.0396, 180.000, "Shithole Bar"},
{18, -227.028000,-234.1513,-215.6965, 1401.229980,1392.4974,1413.4426, 27.769798,26.7656,31.7664, 315.000, "Lil' Probe Inn"},
//Eateries
{4, 460.099976,432.5477,461.3923, -88.428497,-93.2540,-77.9551, 999.621948,998.5547,1001.3094, 90.000, "Jay's Diner"},
{1, 452.489990,421.2953,462.4027, -18.179699,-24.0791,-2.8813, 1001.179993,998.5547,1005.7344, 45.000, "World of Coq"},
{1, 681.474976,648.5388,696.2054, -451.150970,-479.4601,-447.5847, -25.616798,-26.6172,-20.5000, 180.000, "The Pump Truck Stop Diner"},
//Fast Food
{10, 366.923980,360.0641,384.3123, -72.929359,-79.3703,-54.7400, 1001.507812,1000.5078,1006.5078, 315.000, "Burger Shot"},
{9, 365.672974,357.4411,382.6818, -10.713200,-16.0313,-1.1104, 1001.869995,1000.8516,1006.7109, 315.000, "Cluckin' Bell"},
{5, 372.351990,361.2697,382.0142, -131.650986,-139.1448,-110.8535, 1001.449951,1000.4922,1006.3750, 0.000, "Well Stacked Pizza"},
{17, 377.098999,371.0922,383.7513, -192.439987,-197.2665,-176.7235, 1000.643982,999.6328,1005.9063, 0.000, "Rusty Brown's Donuts"},
//Girlfriends
{1, 244.411987,242.6040,250.9420, 305.032990,299.1326,308.5615, 999.231995,998.1484,1004.1484, 235.000, "Denise Robinson's Bedroom"},
{2, 271.884979,260.7130,275.1632, 306.631989,301.2459,314.6459, 999.325989,998.1484,1004.1484, 90.000, "Katie Zhan's Bedroom"},
{3, 291.282990,273.4854,294.9203, 310.031982,303.1938,311.9318, 999.154968,998.1484,1008.1707, 90.000, "Helena Wankstein's Bedroom"},
{4, 302.181000,290.5057,312.3436, 300.722992,299.3310,315.7108, 999.231995,998.1484,1010.3047, 0.000, "Michelle Cannes's Bedroom"},
{5, 322.197998,315.3055,329.5608, 302.497986,300.6566,319.1491, 999.231995,998.1484,1004.1484, 0.000, "Barbara Schternvart Bedroom"},
{6, 346.870025,337.3706,350.82888, 309.259033,293.5629,312.0173, 999.155700,998.1557,1004.6484, 180.000, "Millie Perkins's Bedroom"},
//Government
{17, -959.873962,-963.0861,-937.1068, 1952.000000,1845.0483,1955.3293, 9.044310,4.0000,11.1285, 180.000, "The Sherman Dam"},
{3, 388.871979,317.4452,393.2694, 173.804993,143.0736,218.9381, 1008.389954,1007.3828,1030.7865, 90.000, "The Planning Department"},
//Gyms
{5, 772.112000,754.4421,775.7951, -3.898650,-10.5017,17.2873, 1000.687988,999.7142,1006.1831, 0.000, "The Ganton Gym"},
{6, 774.213989,752.4792,778.8328, -48.924297,-51.4411,-15.6279, 1000.687988,999.6865,1005.6865, 0.000, "The Cobra Gym"},
{7, 773.579956,755.9409,777.9979, -77.096695,-84.0618,-56.7409, 1000.687988,999.6550,1006.6035, 0.000, "Below The Belt Gym"},
{5, 1234.144409,1223.2540,1307.4205, -764.087158,-840.5399,-751.1873, 1084.007202,1083.0112,1098.9777, 0.000, "Madd Dogg's Mansion"},
//Homies
{3, 1527.229980,1520.1871,1533.7594, -11.574499,-22.5846,0.9635, 1002.269958,1001.0971,1007.0971, 0.000, "B-Dups Apartment"},
{2, 1523.509888,1514.2607,1529.2543, -47.821198,-57.1333,-39.9799, 1002.269958,1001.1310,1007.1310, 0.000, "B-Dups Crack Pad"},
{3, 2496.049805,2484.0408,2507.7002, -1693.929932,-1723.0533,-1681.0842, 1014.750000,1013.7422,1023.0469, 180.000, "Carl's Mums House"},
{3, 516.650,509.0578,522.8345, -18.611898,-21.6408,-1.4064, 1001.459961,1000.5653,1006.5653, 0.000, "OG Loc's"},
{2, 2464.109863,2445.9775,2499.0967, -1698.659912,-1707.8545,-1683.5922, 1013.509949,1012.5078,1018.0781, 90.000, "Ryder's House"},
{1, 2526.459961,2523.0020,2544.5212, -1679.089966,-1700.5044,-1665.8083, 1015.500000,1014.4986,1020.2162, 270.000, "Sweet's House"},
{2, 2543.659912,2512.0249,2584.8528, -1303.629883,-1309.0903,-1252.9098, 1025.069946,1024.0703,1072.4879, 180.000, "Big Smokes Crack Palace"},
//Ill
{3, 1212.019897,1198.2898,1218.5905, -28.663099,-52.8367,-20.5241, 1001.089966,999.9531,1004.8786, 180.000, "The Big Spread Ranch"},
{6, 744.542969,723.2429,768.1766, 1437.669922,1432.5469,1445.0240, 1102.739990,1101.7031,1108.9531, 290.000, "Fanny Batter's Whore House"},
{2, 1204.809937,1194.8103,1226.1428, -11.586800,-18.0913,30.6912, 1001.089966,999.9219,1005.6573, 0.000, "The World Class Topless Girls Stripclub"},
{3, 940.921997,929.9674,976.1741, -17.007000,-19.9913,9.3195, 1001.179993,1000.1484,1006.1484, 0.000, "The Unnamed Brothel"},
{3, 964.106995,940.3059,973.8075, -53.205498,-64.5014,-41.2514, 1001.179993,1000.1246,1005.6172, 90.000, "The Tiger Skin Rug Brothel"},
{3, -2637.449951,-2697.5955,-2629.8840, 1404.629883,1387.2095,1440.4742, 906.457947,905.2734,929.2964, 90.000, "Jizzy's Pleasure Dome"},
//Liberty City
{1, -735.5619504,-950.1764,-687.3923, 484.351318,407.1057,570.3076, 1371.952270,1345.8750,1382.6106, 40.000, "Liberty City"},
//Misc
{5, 2350.339844,2317.3586,2363.4382, -1181.649902,-1190.5747,-1166.1172, 1028.000000,1026.9766,1036.5497, 90.000, "Los Vagos Gang House"},
{8, 2807.619873,2802.5732,2830.6768, -1171.899902,-1178.5010,-1155.1534, 1025.579956,1024.5703,1033.8438, 0.000, "Colonel Furburgher's House"},
{5, 318.564972,296.9617,340.9560, 1118.209961,1110.0925,1138.4672, 1083.979980,1082.8828,1088.1328, 0.000, "The Crack Den"},
{1, 1412.639893,1357.7148,1420.5383, -1.787510,-49.7140,8.5148, 1000.931946,999.9090,1008.8919, 135.000, "A Warehouse"},
{18, 1302.519897,1247.7485,1310.9150, -1.787510,-69.8208,8.3288, 1000.931946,1000.0156,1009.3984, 135.000, "A Warehouse"},
{12, 2324.419922,2306.6470,2342.1313, -1147.539917,-1153.7253,-1133.4342, 1050.719971,1049.7101,1058.3047, 0.000, "A Safehouse"},
{10, -972.4957,-1138.3977,-966.8146, 1060.983,1017.8578,1101.4760, 1345.669,1342.0522,1359.9141, 90.000, "The RC Battlefield"},
//Personal Grooming
{2, 411.625977,405.8927,421.6737, -21.433298,-32.3224,-7.9695, 1001.799988,1000.8047,1007.0781, 315.000, "Old Reece's Hair and Facial Studio"},
{3, 418.652985,415.0480,425.6317, -82.639793,-92.8154,-72.3608, 1001.959961,1000.8047,1007.5787, 0.000, "Gay Gordo's Barber Shop"},
{12, 412.021973,402.0862,417.4446, -52.649899,-58.2201,-46.4752, 1001.959961,1000.8984,1007.0547, 270.000, "Mascila's Unisex Hair Salon"},
{16, -204.439987,-211.5356,-198.4321, -26.453999,-38.5390,-13.2776, 1002.299988,1001.2734,1006.4949, 315.000, "A Tattoo Parlour"},
{17, -204.439987,-210.7206,-194.0416, -8.469600,-30.7664,-2.5236, 1002.299988,1001.2734,1006.4949, 315.000, "Hemlock's Tattoo Parlour"},
{3, -204.439987,-211.3637,-193.4146, -43.652496,-53.1130,-37.8452, 1002.299988,1001.2734,1006.4949, 315.000, "A Tattoo Parlour"},
//Police Departments
{6, 246.783997,207.5004,277.7479, 63.900200,61.7018,93.1880, 1003.639954,1000.0391,1009.7142, 0.000, "The Los Santos Police Department"},
{10, 246.375992,212.2758,284.0999, 109.245995,97.0497,130.4608, 1003.279968,998.0156,1015.2188, 0.000, "The San Fierro Police Department"},
{3, 288.745972,186.4745,308.3648, 169.350998,132.3377,204.9915, 1007.179993,1002.0234,1013.1874, 0.000, "The Las Venturas Police Department"},
//Schools
{3, 1494.429932,1487.0275,1503.6758, 1305.629883,1279.1096,1315.6984, 1093.289917,1092.2899,1098.2899, 90.000, "Cycle School"},
{3, -2029.719971,-2037.1293,-2020.4810, -115.067993,-139.5002,-98.2041, 1035.169922,1034.1719,1039.7968, 90.000, "Automobile School"},
{10, 420.484985,400.9158,460.9158, 2535.589844,2533.2849,2547.9688, 10.020289,9.0000,14.9063, 45.000, "Plane School"}
};
#pragma unused interiors
enum VEHICLE_INFO{
VNAME[32],
VPRICE,
VSPEED,
VTYPE
}
new vehicles[212][VEHICLE_INFO] = {
{"Landstalker",3000,160,4},
{"Bravura",2000,160,4},
{"Buffalo",1500,200,4},
{"Linerunner",2000,120,4},
{"Pereniel",500,150,4},
{"Sentinel",1000,165,4},
{"Dumper",5000,110,6},
{"Firetruck",0,170,4},
{"Trashmaster",0,110,9},
{"Stretch",6000,180,4},
{"Manana",5000,160,4},
{"Infernus",6000,240,4},
{"Voodoo",3000,160,4},
{"Pony",1500,160,4},
{"Mule",500,140,9},
{"Cheetah",5000,230,4},
{"Ambulance",0,155,4},
{"Leviathan",8000,200,5},
{"Moonbeam",1500,150,4},
{"Esperanto",2000,160,4},
{"Taxi",0,180,4},
{"Washington",2000,180,4},
{"Bobcat",1500,165,4},
{"Mr Whoopee",500,145,4},
{"BF Injection",2500,170,4},
{"Hunter",0,200,5},
{"Premier",1500,200,4},
{"Enforcer",2000,170,4},
{"Securicar",2000,170,4},
{"Banshee",1500,200,4},
{"Predator",2000,190,3},
{"Bus",0,130,4},
{"Rhino",0,80,9},
{"Barracks",0,180,9},
{"Hotknife",1500,200,4},
{"Trailer",0,120,0},
{"Previon",2000,160,4},
{"Coach",0,160,9},
{"Cabbie",0,160,4},
{"Stallion",2000,160,4},
{"Rumpo",1500,160,4},
{"RC Bandit",0,75,4},
{"Romero",1500,150,4},
{"Packer",1500,150,9},
{"Monster",4000,110,6},
{"Admiral",2000,165,4},
{"Squalo",1500,280,3},
{"Seasparrow",4000,200,5},
{"Pizzaboy",0,190,1},
{"Tram",0,150,0},
{"Trailer",0,120,0},
{"Turismo",5000,240,4},
{"Speeder",0,190,3},
{"Reefer",0,190,3},
{"Tropic",0,190,3},
{"Flatbed",3500,140,4},
{"Yankee",2000,160,4},
{"Caddy",1500,160,4},
{"Solair",2000,165,4},
{"Berkley's RC Van",0,160,4},
{"Skimmer",1500,200,7},
{"PCJ-600",2000,190,1},
{"Faggio",250,190,1},
{"Freeway",2500,190,1},
{"RC Baron",0,75,7},
{"RC Raider",0,75,5},
{"Glendale",2500,160,4},
{"Oceanic",2500,160,4},
{"Sanchez",1500,190,1},
{"Sparrow",2500,200,5},
{"Patriot",3500,170,9},
{"Quad",1250,160,8},
{"Coastguard",5000,190,3},
{"Dinghy",0,190,3},
{"Hermes",2000,160,4},
{"Sabre",2500,160,4},
{"Rustler",4000,200,7},
{"ZR3 50",3000,200,4},
{"Walton",1000,150,4},
{"Regina",1500,165,4},
{"Comet",2500,200,4},
{"BMX",50,120,2},
{"Burrito",250,150,4},
{"Camper",300,120,4},
{"Marquis",1000,190,3},
{"Baggage",900,160,4},
{"Dozer",1500,100,4},
{"Maverick",2000,200,5},
{"News Chopper",2250,200,5},
{"Rancher",2000,170,4},
{"FBI Rancher",0,170,4},
{"Virgo",2000,160,4},
{"Greenwood",1500,160,4},
{"Jetmax",0,190,3},
{"Hotring",3500,220,4},
{"Sandking",1500,170,4},
{"Blista Compact",1000,200,4},
{"Police Maverick",0,200,5},
{"Boxville",1000,140,4},
{"Benson",1500,140,4},
{"Mesa",2000,160,4},
{"RC Goblin",0,75,5},
{"Hotring Racer",3500,220,4},
{"Hotring Racer",3500,220,4},
{"Bloodring Banger",4000,160,4},
{"Rancher",3000,170,4},
{"Super GT",5000,230,4},
{"Elegant",2000,165,4},
{"Journey",1500,140,4},
{"Bike",20,120,2},
{"Mountain Bike",60,140,2},
{"Beagle",1000,200,7},
{"Cropdust",1500,200,7},
{"Stunt",3000,200,7},
{"Tanker",4000,120,4},
{"RoadTrain",4500,120,4},
{"Nebula",1000,165,4},
{"Majestic",1500,165,4},
{"Buccaneer",2000,160,4},
{"Shamal",3000,330,7},
{"Hydra",9000,330,7},
{"FCR-900",3000,190,1},
{"NRG-500",3500,190,1},
{"HPV1000",1500,190,1},
{"Cement Truck",2000,110,4},
{"Tow Truck",2000,160,9},
{"Fortune",2000,160,4},
{"Cadrona",2000,160,4},
{"FBI Truck",0,170,4},
{"Willard",1500,160,4},
{"Forklift",750,60,4},
{"Tractor",500,70,9},
{"Combine",1500,140,9},
{"Feltzer",2000,200,4},
{"Remington",2500,160,4},
{"Slamvan",2500,160,4},
{"Blade",2000,160,4},
{"Freight",2500,110,0},
{"Streak",2000,110,0},
{"Vortex",2000,150,7},
{"Vincent",1000,160,4},
{"Bullet",4000,230,4},
{"Clover",2500,160,4},
{"Sadler",1500,165,4},
{"Firetruck",0,170,4},
{"Hustler",1500,160,4},
{"Intruder",2000,160,4},
{"Primo",1500,160,4},
{"Cargobob",4000,200,5},
{"Tampa",2000,160,4},
{"Sunrise",1500,160,4},
{"Merit",2000,165,4},
{"Utility",500,160,4},
{"Nevada",1500,200,7},
{"Yosemite",2000,170,4},
{"Windsor",1500,180,4},
{"Monster",5000,110,6},
{"Monster",5000,110,6},
{"Uranus",2000,200,4},
{"Jester",3000,200,4},
{"Sultan",4000,200,4},
{"Stratum",2000,200,4},
{"Elegy",1500,200,4},
{"Raindance",4500,200,5},
{"RC Tiger",0,75,4},
{"Flash",1500,200,4},
{"Tahoma",2000,160,4},
{"Savanna",2500,160,4},
{"Bandito",1500,170,4},
{"Freight",0,110,0},
{"Trailer",0,110,0},
{"Kart",250,90,4},
{"Mower",100,60,4},
{"Duneride",750,110,6},
{"Sweeper",150,60,4},
{"Broadway",1000,160,4},
{"Tornado",1500,160,4},
{"AT-400",2000,200,7},
{"DFT-30",2500,110,4},
{"Huntley",1500,160,4},
{"Stafford",2000,165,4},
{"BF-400",1000,190,1},
{"Newsvan",1500,160,4},
{"Tug",0,170,4},
{"Trailer",0,120,0},
{"Emperor",2000,165,4},
{"Wayfarer",2500,190,1},
{"Euros",1000,200,4},
{"Hotdog",1000,140,9},
{"Club",1000,200,4},
{"Trailer",0,110,0},
{"Trailer",0,120,0},
{"Andromada",10000,200,7},
{"Dodo",4000,200,7},
{"RC Cam",0,60,4},
{"Launch",0,190,3},
{"Police Car (LSPD)",0,200,4},
{"Police Car (SFPD)",0,200,4},
{"Police Car (LVPD)",0,200,4},
{"Police Ranger",0,160,4},
{"Picador",3000,165,4},
{"S.W.A.T. Van",0,110,4},
{"Alpha",2000,200,4},
{"Phoenix",2500,200,4},
{"Glendale",2500,160,4},
{"Sadler",2000,165,4},
{"Luggage Trailer",0,160,0},
{"Luggage Trailer",0,160,0},
{"Stair Trailer",0,160,0},
{"Boxville",1000,140,4},
{"Farm Plow",0,160,0},
{"Utility Trailer",0,160,0}
};
#pragma unused vehicles
enum WEAPON_INFO{
WEAPON_PRICE,
WEAPON_SCORE,
Float:WEAPON_RANGE,
WEAPON_PICKUP,
bool:WEAPON_SYNCED,
bool:WEAPON_AMMU,
WEAPON_AMMU_COST
}
new weapons[55][WEAPON_INFO] = {
{0,0,1.6,0,true,false,0},
{0,0,1.6,0,false,false,0},
{1,0,1.6,PICKUP_GOLFCLUB,true,false,0},
{2,0,1.6,PICKUP_NITESTICK,true,false,0},
{2,0,1.6,PICKUP_KNIFE,true,false,0},
{3,0,1.6,PICKUP_BAT,true,false,0},
{4,0,1.6,PICKUP_SHOVEL,true,false,0},
{5,0,1.6,PICKUP_POOLSTICK,true,false,0},
{0,0,1.6,0,true,false,0},
{10,25,1.6,PICKUP_CHAINSAW,true,false,0},
{1,0,1.6,PICKUP_DILDO,true,false,0},
{2,0,1.6,PICKUP_VIBRATOR1,true,false,0},
{2,0,1.6,0,true,false,0},
{2,0,1.6,0,true,false,0},
{1,0,1.6,PICKUP_FLOWER,false,false,0},
{3,0,1.6,PICKUP_CANE,true,false,0},
{0,0,40.0,0,false,false,0},
{0,0,40.0,0,false,false,0},
{0,0,40.0,0,false,false,0},
{0,0,40.0,0,false,false,0},
{0,0,40.0,0,false,false,0},
{0,0,40.0,0,false,false,0},
{5,0,35.0,PICKUP_COLT45,true,true,200},
{7,0,35.0,PICKUP_SILENCED,true,true,600},
{9,50,35.0,PICKUP_DEAGLE,true,true,1200},
{7,0,40.0,PICKUP_SHOTGUN,true,true,600},
{9,0,35.0,PICKUP_SAWEDOFF,true,true,800},
{11,75,40.0,PICKUP_SHOTGSPA,true,true,1200},
{9,0,35.0,PICKUP_UZI,true,true,0},
{9,0,35.0,PICKUP_MP5,true,true,1200},
{11,0,70.0,PICKUP_AK47,true,true,3500},
{13,125,90.0,PICKUP_TEC9,true,true,0},
{11,100,35.0,PICKUP_RIFLE,true,false,0},
{11,150,100.0,0,true,true,4500},
{0,0,100.0,0,false,false,0},
{0,0,55.0,0,false,false,0},
{0,0,55.0,0,false,false,0},
{13,0,5.1,PICKUP_FLAMETHROWER,true,false,0},
{15,175,75.0,PICKUP_MINIGUN,true,false,0},
{0,0,40.0,0,false,false,0},
{0,0,25.0,0,false,false,0},
{15,0,6.1,PICKUP_SPRAYCAN,true,false,0},
{17,200,10.1,PICKUP_FIREEXTINGUISHER,true,false,0},
{0,0,100.0,0,false,false,0},
{0,0,100.0,0,false,false,0},
{0,0,100.0,0,false,false,0},
{0,0,1.6,0,false,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,true,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,false,false,0},
{0,0,0.0,0,true,false,0}
};
#pragma unused weapons
enum GARAGE_MAIN {
Float:GARAGE_AREA[6],
Float:GARAGE_VEHICLE_SPAWN[4],
GARAGE_DOOR,
GARAGE_TYPE
}
new garages[][GARAGE_MAIN] = {
// AREA (Xmin,Ymin,Zmin,Xmax,Ymax,Zmax) VEHICLE SPAWN (x,y,z,angle) DOOR TYPE
// Las Venturas
{{2602.6,1438.84,9.8337,2616.4,1462.11,15.4891}, {2609.5,1450.475,9.8337,180.0}, 1, 1},
{{2389.6,1483.26,9.81843,2398.11,1497.84,15.6841}, {2393.855,1490.55,9.81843,180.0}, 5, 5},
{{2382.28,1044,9.8337,2391.14,1059.73,13.9338}, {2386.71,1051.865,9.8337,180.0}, 1, 1},
{{2449.5,695.018,10.4742,2458.31,700.227,12.9155}, {2453.905,697.6225,10.4742,270.0}, 1, 18},
{{2218.06,2448.06,-8.43807,2234.47,2467.56,-1.5463}, {2226.265,2457.81,-8.43807,90.0}, 5, 35},
{{1550.98,1155.36,8.97329,1621.82,1224.03,29.8005}, {1586.4,1189.695,8.97329,0.0}, 4, 44},
{{2002.96,2303.72,9.61706,2010.36,2317.59,13.9914}, {2006.66,2310.655,9.61706,180.0}, 1, 2},
{{1968.23,2157.88,9.59696,1983.32,2167.03,16.2367}, {1975.775,2162.455,9.59696,270.0}, 1, 5},
{{1408.65,1899.52,10.115,1417.55,1904.91,13.1693}, {1413.1,1902.215,10.115,270.0}, 1, 30},
{{1269.2,2525.14,9.80013,1278.72,2534.49,12.9784}, {1273.96,2529.815,9.80013,90.0}, 1, 27},
{{929.554,2008.59,10.115,938.452,2013.99,13.1693}, {934.003,2011.29,10.115,270.0}, 1, 28},
// San Fierro
{{-1694.78,1033.15,44.1937,-1681.59,1038.16,47.941}, {-1688.185,1035.655,44.1937,270.0}, 1, 2},
{{-1794.15,1429.69,4.37321,-1787.18,1441.37,14.3732}, {-1790.665,1435.53,4.37321,180.0}, 1, 1},
{{-2171.43,649.416,49.8742,-2161.79,661.778,58.1902}, {-2166.61,655.597,49.8742,90.0}, 3, 1},
{{-1790.97,1209.71,23.763,-1782.58,1221.46,28.963}, {-1786.775,1215.585,23.763,180.0}, 1, 1},
{{-2108.92,886.553,75.566,-2101.36,896.807,80.166}, {-2105.14,891.68,75.566,0.0}, 7, 39},
{{-1652.78,647.502,0.713446,-1617.92,671.973,-6.04924}, {-1635.35,659.7375,0.713446,0.0}, 4, 34},
{{-2728.53,212.295,3.45112,-2716.36,222.669,8.68705}, {-2722.445,217.482,3.45112,90.0}, 1, 5},
{{-2735.46,60.7331,3.07005,-2725.82,72.8828,7.92155}, {-2730.64,66.80795,3.07005,0.0}, 1, 1},
{{-2454.02,-131.556,25.0886,-2442.38,-113.935,29.8006}, {-2448.2,-122.7455,25.0886,270.0}, 1, 42},
{{-1930.66,239.541,33.4274,-1941.04,251.714,38.6634}, {-1935.85,245.6275,33.4274,180.0}, 1, 1},
{{-1908.93,277.989,40.0413,-1900.11,292.353,45.539}, {-1904.52,285.171,40.0413,180.0}, 1, 5},
{{-2112.48,-21.214,34.303,-2102.48,-11.214,40.303}, {-2107.48,-16.214,34.303,90.0}, 1, 1},
{{-2043.1,118.609,27.821,-2021.91,129.609,32.821}, {-2032.505,124.109,27.821,0.0}, 1, 41},
{{-2057.35,150.803,27.8286,-2038.91,182.876,33.2286}, {-2048.13,166.8395,27.8286,90.0}, 1, 1},
{{-2430.13,1013.71,49.3413,-2421.2,1027.76,55.3413}, {-2425.665,1020.735,49.3413,0.0}, 1, 5},
{{-2699.12,821.489,49.0042,-2692.9,831.208,53.653}, {-2696.01,826.3485,49.0042,180.0}, 1, 40},
// Los Santos
{{2502.31,-1699.36,12.4323,2508.61,-1691.01,16.5666}, {2505.46,-1695.185,12.4323,0.0}, 1, 16},
{{2056.6,-1835.9,12.5443,2071.3,-1826.97,18.5443}, {2063.95,-1831.435,12.5443,90.0}, 1, 5},
{{1352.58,-636.657,108.135,1359.02,-627.962,113.135}, {1355.8,-632.3095,108.135,18.0}, 1, 32},
{{1640.37,-1520.07,12.5118,1647.6,-1512.45,18.1245}, {1643.985,-1516.26,12.5118,180.0}, 5, 1},
{{1523.92,-1653.23,4.72837,1556.92,-1633.23,12.2284}, {1540.42,-1643.23,4.72837,180.0}, 5, 33},
{{2738.4,-2012.55,12.5759,2743.78,-2004.41,17.8299}, {2741.09,-2008.48,12.5759,0.0}, 1, 1},
{{2640.78,-2049.99,12.543,2648.96,-2039.55,16.206}, {2644.87,-2044.77,12.543,0.0}, 1, 1},
{{1873.97,-2096.55,12.487,1880.88,-2087.62,15.7681}, {1877.425,-2092.085,12.487,180.0}, 5, 1},
{{1843.91,-1858.8,12.3645,1857.1,-1853.79,16.1118}, {1850.505,-1856.295,12.3645,270.0}, 1, 2},
{{1798.82,-2150.67,12.4283,1809.46,-2142.75,16.4347}, {1804.14,-2146.71,12.4283,270.0}, 1, 1},
{{1694.8,-2088.7,12.3636,1703,-2077.48,16.2236}, {1698.9,-2083.09,12.3636,180.0}, 5, 31},
{{491.103,-1747.55,9.45516,492.717,-1746.3,17.565}, {491.91,-1746.925,9.45516,0.0}, 1, 5},
{{319.326,-1768.93,3.35686,325.625,-1759.57,7.49114}, {322.4755,-1764.25,3.35686,180.0}, 1, 17},
{{1038.24,-1025.67,31.1027,1068.35,-995.044,39.1027}, {1053.295,-1010.357,31.1027,180.0}, 1, 1},
{{1021.81,-1029.53,30.9081,1027.93,-1018.71,36.9081}, {1024.87,-1024.12,30.9081,180.0}, 1, 5},
// Country
{{-103.636,1112.42,18.7017,-96.3613,1125.79,24.5489}, {-99.99865,1119.105,18.7017,180.0}, 1, 5},
{{-364.439,1194.37,18.597,-356.214,1202.97,22.3812}, {-360.3265,1198.67,18.597,180.0}, 1, 24},
{{430.059,2542.31,15.166,442.896,2550.75,19.5951}, {436.4775,2546.53,15.166,270.0}, 1, 25},
{{-397.297,2223.17,41.3824,-389.058,2229.07,44.6359}, {-393.1775,2226.12,41.3824,285.1}, 1, 1},
{{383.843,2433.28,15.166,426.012,2476.13,24.6886}, {404.9275,2454.705,15.166,0.0}, 4, 45},
{{715.806,-462.403,14.9635,724.293,-447.29,21.4398}, {720.0495,-454.8465,14.9635,180.0}, 1, 5},
{{2227.6,168.649,26.4635,2234.93,176.333,29.4635}, {2231.265,172.491,26.4635,180.0}, 1, 29},
{{783.155,-492.75,16.3361,789.029,-485.118,19.3361}, {786.092,-488.934,16.3361,180.0}, 1, 26},
{{-1424.11,2576.61,54.8156,-1416.85,2590.84,60.8747}, {-1420.48,2583.725,54.8156,0.0}, 1, 5},
{{-2114.42,-2462.27,29.4809,-2109.36,-2458.88,32.3474}, {-2110.38,-2462.86,29.4809,48.1}, 1, 1}
};
#pragma unused garages
new Float:oysters[50][3] = {
//X Y Z
{979.0, -2210.0, -3.0},
{2750.0, -2584.0, -5.0},
{1279.0, -806.0, 85.0},
{2945.1299, -2051.9299, -3.0},
{67.0, -1018.0, -5.0},
{2327.0, -2662.0, -5.0},
{2621.0, -2506.0, -5.0},
{1249.0, -2687.0, -1.0},
{725.0, -1849.0, -5.0},
{723.0, -1586.0, -3.0},
{155.0, -1975.0, -8.0},
{1968.0, -1203.0, 17.0},
{-2657.0, 1564.0, -6.0},
{-1252.0, 501.0, -8.0},
{-1625.0, 4.0, -10.0},
{-1484.0, 1489.0, -10.0},
{-2505.4058, 1543.7236, -22.5553},
{-2727.0, -469.0, -5.0},
{-1266.0, 966.0, -10.0},
{-1013.0, 478.0, -7.0},
{-1364.0, 390.0, -5.0},
{2578.0, 2382.0, 16.0},
{2090.0, 1898.0, 8.0},
{2130.0, 1152.0, 7.0},
{2013.0, 1670.0, 7.0},
{2531.0, 1569.0, 9.0},
{2998.0, 2998.0, -10.0},
{-832.0, 925.0, -2.0},
{486.0, -253.0, -4.0},
{-90.0, -910.0, -5.0},
{26.43, -1320.9399, -10.04},
{-207.0, -1682.0, -8.0},
{-1672.0, -1641.0, -2.0},
{-1175.0, -2639.0, -2.5},
{-1097.0, -2858.0, -8.0},
{-2889.0, -1042.0, -9.0},
{-659.0, 874.0, -2.0},
{-955.0, 2628.0, 35.0},
{-1066.0, 2197.0, 32.0},
{40.0, -531.0, -8.0},
{-765.0, 247.0, -8.0},
{2098.0, -108.0, -2.0},
{2767.0, 470.0, -8.0},
{-783.0, 2116.0, 35.0},
{-821.0, 1374.0, -8.0},
{-2110.5, 2329.72, -7.5},
{-1538.0, 1708.0, -3.27},
{-2685.0, 2153.0, -5.0},
{796.0, 2939.0, -5.0},
{2179.0, 235.0, -5.0}
};
#pragma unused oysters
new Float:horseshoes[50][3] = {
//X Y Z
{1224.0, 2617.0, 11.0},
{2323.0, 1284.0, 97.0},
{2035.0, 2305.0, 18.0},
{2491.0, 2263.0, 15.0},
{1433.0, 2796.0, 20.0},
{2071.0, 712.0, 11.0},
{2239.0, 1839.0, 18.0},
{2583.0, 2387.0, 16.0},
{2864.0, 857.0, 13.0},
{2612.0, 2200.0, -1.0},
{2274.0, 1507.0, 24.0},
{2184.0, 2529.0, 11.0},
{1863.0, 2314.0, 15.0},
{2054.0, 2434.0, 166.0},
{1603.0, 1435.0, 11.0},
{1362.92, 1015.24, 11.0},
{2058.7, 2159.1001, 16.0},
{2003.0, 1672.0, 12.0},
{2238.0, 1135.0, 49.0},
{1934.0601, 988.79, 22.0},
{1768.0, 2847.0, 9.0},
{1084.0, 1076.0, 11.0},
{2879.0, 2522.0, 11.0},
{2371.0, 2009.0, 15.0},
{1521.0, 1690.0, 10.6},
{2417.0, 1281.0, 21.0},
{1376.0, 2304.0, 15.0},
{1393.0, 1832.0, 12.34},
{984.0, 2563.0, 12.0},
{1767.0, 601.0, 13.0},
{2108.0, 1003.0, 46.0},
{2705.98, 1862.52, 24.41},
{2493.0, 922.0, 16.0},
{1881.0, 2846.0, 11.0},
{2020.0, 2352.0, 11.0},
{1680.3, 2226.8601, 16.11},
{1462.0, 936.0, 10.0},
{2125.5, 789.23, 11.45},
{2588.0, 1902.0, 15.0},
{919.0, 2070.0, 11.0},
{2173.0, 2465.0, 11.0},
{2031.25, 2207.3301, 11.0},
{2509.0, 1144.0, 19.0},
{2215.0, 1968.0, 11.0},
{2626.0, 2841.0, 11.0},
{2440.0801, 2161.0701, 20.0},
{1582.0, 2401.0, 19.0},
{2077.0, 1912.0, 14.0},
{970.0, 1787.0, 11.0}
};
#pragma unused horseshoes
// --------------------------------------------------
// Functions
// --------------------------------------------------
// Integers
/*
* TwoWayRand
* minrand
* RandomEx
* IsNumberEven
*/
stock TwoWayRand(value) return random(value * 2 + 1) - value;
stock minrand(min,max) return random(max - min) + min;
stock RandomEx(max,...){
new gen,bool:tainted = false,j = numargs(),enough = 0;
while(true){
tainted = false;
enough++;
if(enough == 20000) break;
gen = random(max);
for(new i=1;i<j;i++){
if(getarg(i) == gen){
tainted = true;
break;
}
}
if(tainted == false) return gen;
}
return UNKNOWN;
}
stock IsNumberOdd(number) return number % 2;
// Arguments
/*
* GetArgString
* GetArgType
*/
#define GetArgString(%1,%2) for(new x=0;getarg(%1,x)!='\0';x++) %2[x] = getarg(%1,x)
#define GetArgType(%1,%2) if(getarg(%1,0) > 32 && getarg(%1,0) < 127) %2 = TYPE_STR; else if(Float:getarg(%1) == floatstr(strfloat(Float:getarg(%1)))) %2 = TYPE_FLO; else %2 = TYPE_INT
// Strings
/*
* format
* strfloat
* RetStr
* sprintf
* left
* right
* ConvertSeconds
* GameTextCheck
* strpart
* concat
* RandomString
* ranString
* Words
* IntToHex
* strrest
* join
* IsStringIP
* charpos
* Chr
*/
native format(output[], len, const format[], {Float,_}:...);
stock strfloat(Float:value){
new str[64];
format(str,sizeof(str),"%f",value);
return str;
}
stock RetStr(val){
new str[11];
valstr(str,val);
return str;
}
stock sprintf(const format[],{Float,_}:...){
new retstr[256],currarg = 1;
for(new i=0,j=strlen(format)-2;i<=j;i+=2){
new tmpchar[5];
strmid(tmpchar,format,i,i+2);
if(strcmp(tmpchar,"%d",true)==0){
strcat(retstr,RetStr(getarg(currarg)));
currarg++;
}
else if(strcmp(tmpchar,"%f",true)==0){
strcat(retstr,strfloat(Float:getarg(currarg)));
currarg++;
}
else if(strcmp(tmpchar,"%s",true)==0){
new tmpstr[256];
GetArgString(currarg,tmpstr);
strcat(retstr,tmpstr);
currarg++;
}
else strcat(retstr,tmpchar);
}
return retstr;
}
stock left(source[],len){
new retstr[256];
strmid(retstr,source,0,len);
return retstr;
}
stock right(source[], len){
new retstr[256],srclen = strlen(source);
strmid(retstr,source,srclen - len,srclen);
return retstr;
}
stock ConvertSeconds(time){
new string[64];
if(time < 60) format(string,sizeof(string),"%d seconds",time);
else if (time == 60) format(string,sizeof(string),"1 minute");
else if(time > 60 && time < 3600) format(string,sizeof(string),"%d minutes and %d seconds",time / 60, time % 60);
else if(time == 3600) format(string,sizeof(string),"1 hour");
else if(time > 3600) format(string,sizeof(string),"%d hours, %d minutes and %d seconds",time / 3600, (time % 3600) / 60, (time % 3600) % 60);
return string;
}
stock GameTextCheck(const string[]){
for(new i=0,j=strlen(string);i<j;i++){
if ((string[i] == 126) && (string[i-1] == 126)
|| (string[i] == ' ') && (string[i-1] == '~') && (string[i-2] == ' ')
|| (string[i] == '~') && (string[i+2] != '~') && (string[i-2] != '~')
|| (string[i] == '~') && (string[i+2] == '~') && (string[i-2] == '~')) return true;
}
return false;
}
stock strpart(string[],start,end){
new retstr[256];
strmid(retstr,string,start,end);
return retstr;
}
stock concat({Float,_}:...){
new retstr[256];
for(new i=0,j=numargs();i<j;i++){
new semistr[64];
GetArgString(i,semistr);
strcat(retstr,semistr);
}
return retstr;
}
stock RandomString(len,bool:lenrand = true){
new retstr[256];
if(len < sizeof(retstr)){
if(lenrand == true) for(new i=0,j=random(len);i<j;i++) retstr[i] = minrand(32,127);
else for(new i=0;i<len;i++) retstr[i] = minrand(32,127);
}
return retstr;
}
stock ranString(length){
new retstr[256];
for(new i=0;i<length;i++){
switch(random(3)){
case 0: retstr[i] = minrand(65,91);
case 1: retstr[i] = minrand(96,123);
case 2: retstr[i] = minrand(48,58);
}
}
return retstr;
}
stock Words(string[]){
new idx,words;
while(strlen(strtok(string,idx))) words++;
return words;
}
stock IntToHex(val){
new nibble,str[9];
for(new i=24,j=0;i>=0;i-=4,j++){
nibble = (val >> i) & 0x0F;
str[j] = (nibble < 10) ? (nibble + 0x30) : (nibble + 0x37);
}
str[8] = 0;
return str;
}
stock strrest(const string[], index){
new length = strlen(string),offset = index,result[256];
while ((index < length) && ((index - offset) < (sizeof(result) - 1)) && (string[index] > '\r')){
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
stock join(string1[],string2[]){
new tmp[256];
format(tmp,sizeof(tmp),"%s%s",string1,string2);
return tmp;
}
stock IsStringIP(string[]){
new icnt,port;
for(new i=0,j=strlen(string);i<j;i++){
if(string[i] == '.') icnt++;
else if(string[i] ==':') port++;
}
if(icnt == 3){
if(port == 1) return 2;
else if(port == 0) return 1;
}
return 0;
}
stock charpos(const string[],character,index){
for(new i=index,j=strlen(string);i<j;i++){
if(string[i] == character) return i;
}
return -1;
}
stock Chr(val){
new string[3];
string[0] = val;
return string;
}
// Hashing/Encryption
/*
* encrypt
* checksum
* RMB1
* MD5
* SHA1
*/
stock encrypt(string[],key[] = "Ba$I*k5&\\0jC\'P[7t> Nv)\%i{-M)^m17H=9&nf#(@*)!X(2@D{_qJ?gZ#)\"N4P<n18ks$\'uel]@+)_6")
{
new size = strlen(key) - 1,retval[256],j = strlen(string),k = ((j >> 4) + 1) << 4,sum = j,tmp[] = {0,0};
for(new i=0;i<k;i++){
if(i<j) tmp[0] = string[i];
else tmp[0] = ' ';
sum = ((sum + strfind(key,tmp) + 1) % size);
retval[i] = key[sum];
}
return retval;
}
stock checksum(buffer[],mod = 65521){
new a = 0,b = 1,c = 2,d = 3;
for(new i=0,j=strlen(buffer);i<j;i++){
a = ((a + buffer[i]) % mod);
b = ((a + b) % mod);
c = ((a + b + c) % mod);
d = ((a + b + c + d) % mod);
}
return ((d << 16) + (a + b + c));
}
stock RMB1(buf[]){
new length=strlen(buf);
new a;
new s1 = 2;
new s2 = 3;
new s3 = 5;
new s4 = 7;
new s5 = 9;
new s6 = 11;
new s7 = 13;
new s8 = 17;
new s9 = 7919;
new s10 = 7907;
new s11 = 7901;
new s12 = 7883;
new s13 = 7879;
new s14 = 7877;
new s15 = 7873;
new s16 = 7867;
for (a=0; a<length; a++){
s1 = (s1 + buf[a]) * 65521;
s2 = (s2 / s1 + buf[a]) * 65521;
s3 = (s3 * s2 / s1 + buf[a]) * 65521;
s4 = (s4 + s3 - s2 * s1 / buf[a]) * 65521;
s5 = (s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s6 = (s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s7 = (s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s8 = (s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s9 = (s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s10 = (s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s11 = (s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s12 = (s12 + s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s13 = (s13 / s12 + s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s14 = (s14 * s13 / s12 + s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s15 = (s15 - s14 * s13 / s12 + s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
s16 = (s16 + s15 - s14 * s13 / s12 + s11 - s10 * s9 / s8 + s7 - s6 * s5 / s4 + s3 - s2 * s1 / buf[a]) * 65521;
}
return (s16 << 128) * s1 * s2 * s3 * s4 * s5 * s6 * s7 + s8 + s9 + s10 + s11 + s12 + s13 + s14 + s15 + s16;
}
stock SHA1(const string[]){
new hashtmp[256],len = strlen(string),digest[256];
format(hashtmp,sizeof(hashtmp),"%s",string);
hashtmp[len >> 5] |= 0x80 << (24 - len % 32);
hashtmp[((len + 64 >> 9) << 4) + 15] = len;
new w[80], a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, e = -1009589776;
for(new i=0;i<len;i+=16){
new olda = a, oldb = b, oldc = c, oldd = d, olde = e;
for(new j=0;j<80;j++){
if(j < 16) w[j] = hashtmp[i+j];
else w[j] = Roll(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
new t = Add(Add(Roll(a, 5), SHA1FT(j, b, c, d)),Add(Add(e, w[j]), SHA1KT(j)));
e = d;
d = c;
c = Roll(b, 30);
b = a;
a = t;
}
a = Add(a, olda);
b = Add(b, oldb);
c = Add(c, oldc);
d = Add(d, oldd);
e = Add(e, olde);
}
format(digest,sizeof(digest),"%s%s%s%s%s",IntToHex(a),IntToHex(b),IntToHex(c),IntToHex(d),IntToHex(e));
return digest;
}
stock Roll(num,cnt) return (num << cnt) | (num >>> (32-cnt));
stock Add(x,y){
new lsw = (x & 0xFFFF) + (y & 0xFFFF);
new msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
stock SHA1FT(t,b,c,d){
if(t < 20) return (b & c) | ((~b) & d);
if(t < 40) return b ^ c ^ d;
if(t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}
stock SHA1KT(t) return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
stock MD5(const string[]){
new len = strlen(string);
new x[256];
format(x,sizeof(x),"%s",string);
x[len >> 5] |= 0x80 << (len % 32);
x[((len + 64 >> 9) << 4) + 14] = len;
new a = 1732584193;
new b = -271733879;
new c = -1732584194;
new d = 271733878;
for(new i=0;i<len;i+=16){
new olda = a;
new oldb = b;
new oldc = c;
new oldd = d;
a = MD5FF(a, b, c, d, x[i+ 0], 7 , -680876936);
d = MD5FF(d, a, b, c, x[i+ 1], 12, -389564586);
c = MD5FF(c, d, a, b, x[i+ 2], 17, 606105819);
b = MD5FF(b, c, d, a, x[i+ 3], 22, -1044525330);
a = MD5FF(a, b, c, d, x[i+ 4], 7 , -176418897);
d = MD5FF(d, a, b, c, x[i+ 5], 12, 1200080426);
c = MD5FF(c, d, a, b, x[i+ 6], 17, -1473231341);
b = MD5FF(b, c, d, a, x[i+ 7], 22, -45705983);
a = MD5FF(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = MD5FF(d, a, b, c, x[i+ 9], 12, -1958414417);
c = MD5FF(c, d, a, b, x[i+10], 17, -42063);
b = MD5FF(b, c, d, a, x[i+11], 22, -1990404162);
a = MD5FF(a, b, c, d, x[i+12], 7 , 1804603682);
d = MD5FF(d, a, b, c, x[i+13], 12, -40341101);
c = MD5FF(c, d, a, b, x[i+14], 17, -1502002290);
b = MD5FF(b, c, d, a, x[i+15], 22, 1236535329);
a = MD5GG(a, b, c, d, x[i+ 1], 5 , -165796510);
d = MD5GG(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = MD5GG(c, d, a, b, x[i+11], 14, 643717713);
b = MD5GG(b, c, d, a, x[i+ 0], 20, -373897302);
a = MD5GG(a, b, c, d, x[i+ 5], 5 , -701558691);
d = MD5GG(d, a, b, c, x[i+10], 9 , 38016083);
c = MD5GG(c, d, a, b, x[i+15], 14, -660478335);
b = MD5GG(b, c, d, a, x[i+ 4], 20, -405537848);
a = MD5GG(a, b, c, d, x[i+ 9], 5 , 568446438);
d = MD5GG(d, a, b, c, x[i+14], 9 , -1019803690);
c = MD5GG(c, d, a, b, x[i+ 3], 14, -187363961);
b = MD5GG(b, c, d, a, x[i+ 8], 20, 1163531501);
a = MD5GG(a, b, c, d, x[i+13], 5 , -1444681467);
d = MD5GG(d, a, b, c, x[i+ 2], 9 , -51403784);
c = MD5GG(c, d, a, b, x[i+ 7], 14, 1735328473);
b = MD5GG(b, c, d, a, x[i+12], 20, -1926607734);
a = MD5HH(a, b, c, d, x[i+ 5], 4 , -378558);
d = MD5HH(d, a, b, c, x[i+ 8], 11, -2022574463);
c = MD5HH(c, d, a, b, x[i+11], 16, 1839030562);
b = MD5HH(b, c, d, a, x[i+14], 23, -35309556);
a = MD5HH(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = MD5HH(d, a, b, c, x[i+ 4], 11, 1272893353);
c = MD5HH(c, d, a, b, x[i+ 7], 16, -155497632);
b = MD5HH(b, c, d, a, x[i+10], 23, -1094730640);
a = MD5HH(a, b, c, d, x[i+13], 4 , 681279174);
d = MD5HH(d, a, b, c, x[i+ 0], 11, -358537222);
c = MD5HH(c, d, a, b, x[i+ 3], 16, -722521979);
b = MD5HH(b, c, d, a, x[i+ 6], 23, 76029189);
a = MD5HH(a, b, c, d, x[i+ 9], 4 , -640364487);
d = MD5HH(d, a, b, c, x[i+12], 11, -421815835);
c = MD5HH(c, d, a, b, x[i+15], 16, 530742520);
b = MD5HH(b, c, d, a, x[i+ 2], 23, -995338651);
a = MD5II(a, b, c, d, x[i+ 0], 6 , -198630844);
d = MD5II(d, a, b, c, x[i+ 7], 10, 1126891415);
c = MD5II(c, d, a, b, x[i+14], 15, -1416354905);
b = MD5II(b, c, d, a, x[i+ 5], 21, -57434055);
a = MD5II(a, b, c, d, x[i+12], 6 , 1700485571);
d = MD5II(d, a, b, c, x[i+ 3], 10, -1894986606);
c = MD5II(c, d, a, b, x[i+10], 15, -1051523);
b = MD5II(b, c, d, a, x[i+ 1], 21, -2054922799);
a = MD5II(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = MD5II(d, a, b, c, x[i+15], 10, -30611744);
c = MD5II(c, d, a, b, x[i+ 6], 15, -1560198380);
b = MD5II(b, c, d, a, x[i+13], 21, 1309151649);
a = MD5II(a, b, c, d, x[i+ 4], 6 , -145523070);
d = MD5II(d, a, b, c, x[i+11], 10, -1120210379);
c = MD5II(c, d, a, b, x[i+ 2], 15, 718787259);
b = MD5II(b, c, d, a, x[i+ 9], 21, -343485551);
a = Add(a, olda);
b = Add(b, oldb);
c = Add(c, oldc);
d = Add(d, oldd);
}
new digest[256];
format(digest,sizeof(digest),"%s%s%s%s",IntToHex(a),IntToHex(b),IntToHex(c),IntToHex(d));
return digest;
}
stock MD5FF(a,b,c,d,x,s,t) return MD5CMN((b & c) | ((~b) & d),a,b,x,s,t);
stock MD5CMN(q,a,b,x,s,t) return Add(Roll(Add(Add(a,q),Add(x,t)),s),b);
stock MD5GG(a,b,c,d,x,s,t) return MD5CMN((b & d) | (c & (~d)),a,b,x,s,t);
stock MD5HH(a,b,c,d,x,s,t) return MD5CMN(b^c^d,a,b,x,s,t);
stock MD5II(a, b, c, d, x, s, t) return MD5CMN(c ^ (b | (~d)), a, b, x, s, t);
// Properties
/*
* PropertySet
* PropertyIntSet
* PropertyFloatSet
* PropertyBoolSet
* PropertyAdd
* PropertyGet
* PropertyInt
* PropertyFloat
* PropertyBool
* PropertyExists
* PropertyDelete
*/
#if !defined _dprop_included
stock PropertySet(string[],const value[]) return setproperty(0,"",checksum(string),value);
#endif
stock PropertyIntSet(string[],val) return PropertySet(string,RetStr(val));
stock PropertyFloatSet(string[],Float:val) return PropertySet(string,strfloat(val));
stock PropertyBoolSet(string[],bool:val){
new input;
if(val == false) input = 0;
else input = 1;
return PropertySet(string,RetStr(input));
}
stock PropertyAdd(string[],val = 1) return PropertySet(string,RetStr(val+PropertyInt(string)));
#if !defined _dprop_included
stock PropertyGet(string[]){
new retstr[256];
if(existproperty(0,"",checksum(string))) return retstr;
getproperty(0,"",checksum(string),retstr);
strunpack(retstr,retstr);
return retstr;
}
#endif
stock PropertyInt(string[]) return strval(PropertyGet(string));
stock Float:PropertyFloat(string[]) return floatstr(PropertyGet(string));
stock bool:PropertyBool(string[]) return bool:strval(PropertyGet(string));
#if !defined _dprop_included
stock PropertyExists(string[]) return existproperty(0,"",checksum(string));
#endif
stock PropertyDelete(string[]){
if(!PropertyExists(string)) return false;
return deleteproperty(0,"",checksum(string));
}
// Server
/*
* printf
* print
* GetMaxPlayers
* SetGameModeText
* GetGameModeText
* SetTeamCount
* ShowNameTags
* ShowPlayerMarkers
* GameModeExit
* IsWindows
* IsLinux
* Frame
*/
native printf(const format[], {Float,_}:...);
native print(const string[]);
native S_GetMaxPlayers() = GetMaxPlayers;
native S_SetGameModeText(const string[]) = SetGameModeText;
native S_SetTeamCount(count) = SetTeamCount;
native S_ShowNameTags(show) = ShowNameTags;
native S_ShowPlayerMarkers(show) = ShowPlayerMarkers;
native S_GameModeExit() = GameModeExit;
stock GetMaxPlayers(){
#if DEBUG == true
printf("GetMaxPlayers()");
#endif
S_GetMaxPlayers();
}
stock SetGameModeText(const string[]){
#if DEBUG == true
printf("SetGameModeText(%s)",string);
#endif
S_SetGameModeText(string);
PropertySet("Gamemodetxt",string);
}
stock GetGameModeText() return PropertyGet("Gamemodetxt");
stock SetTeamCount(count){
#if DEBUG == true
printf("SetTeamCount(%d)",count);
#endif
S_SetTeamCount(count);
}
stock ShowNameTags(show){
#if DEBUG == true
printf("ShowNameTags(%d)",show);
#endif
S_ShowNameTags(show);
}
stock ShowPlayerMarkers(show){
#if DEBUG == true
printf("ShowPlayerMarkers(%d)",show);
#endif
S_ShowPlayerMarkers(show);
}
stock GameModeExit(){
#if DEBUG == true
printf("GameModeExit()");
#endif
S_GameModeExit();
}
stock IsWindows(){
if(!GetTickCount()) return false;
return true;
}
stock IsLinux(){
if(GetTickCount()) return false;
return true;
}
#define line(%1,%2) for(new i=0; i<86; i++) msg[i] = ' '; msg[2] = %1; msg[xmax] = %2; for(new i=3; i<xmax; i++) msg[i] = 196; print(msg)
#define Frame(%1) xmax = strlen(%1)+3; line(218,191); msg = %1; strins(msg," ",0); msg[2] = 179; msg[xmax] = 179; print(msg); line(192,217)
// Interiors
/*
* SetPlayerInterior
* GetPlayerInterior
* IsPlayerInInterior
* IsPlayerInAnyInterior
* GetPlayerInteriorID
* IsPlayerInInteriorID
* GetInteriorName
* SetPlayerInteriorID
*/
native S_SetPlayerInterior(playerid,interiorid) = SetPlayerInterior;
stock SetPlayerInterior(playerid,interiorid){
#if DEBUG == true
printf("SetPlayerInterior(%d,%d)",playerid,interiorid);
#endif
S_SetPlayerInterior(playerid,interiorid);
}
stock GetPlayerInterior(playerid) return interiors[GetPlayerInteriorID(playerid)][INTERIOR_ID];
stock IsPlayerInInterior(playerid,interiorid){
if(GetPlayerInterior(playerid) != interiorid) return false;
return true;
}
stock IsPlayerInAnyInterior(playerid){
if(!GetPlayerInterior(playerid)) return false;
return true;
}
stock GetPlayerInteriorID(playerid){
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
for(new i=1;i<sizeof(interiors);i++){
if(pos[0] > interiors[i][INTERIOR_MINX] && pos[0] < interiors[i][INTERIOR_MAXX] && pos[1] > interiors[i][INTERIOR_MINY] && pos[1] < interiors[i][INTERIOR_MAXY] && pos[2] > interiors[i][INTERIOR_MINZ] && pos[2] < interiors[i][INTERIOR_MAXZ]) return i;
}
return false;
}
stock IsPlayerInInteriorID(playerid,interiorid){
if(GetPlayerInteriorID(playerid) != interiorid) return false;
return true;
}
stock GetInteriorName(interiorid) return interiors[interiorid][INTERIOR_NAME];
stock SetPlayerInteriorID(playerid,interiorid) SetPlayerPos(playerid,interiors[interiorid][INTERIOR_SX],interiors[interiorid][INTERIOR_SY],interiors[interiorid][INTERIOR_SZ],interiors[interiorid][INTERIOR_SA],interiors[interiorid][INTERIOR_ID]);
// Players
/*
* SendClientMessage
* SendClientMessageToAll
* SendDeathMessage
* GameTextForAll
* GameTextForPlayer
* SpawnPlayer
* SetPlayerScore
* GetPlayerScore
* GetPlayerPos
* SetPlayerPos
* GetPlayerHealth
* SetPlayerHealth
* GetPlayerName
* TogglePlayerControllable
* IsPlayerFrozen
* GivePlayerMoney
* SetPlayerFacingAngle
* GetPlayerFacingAngle
* GetPlayerMoney
* ResetPlayerMoney
* IsPlayerConnected
* GetPlayerState
* GetPlayerId
* GetDistanceBetweenPlayers
* GetPlayerDistanceToPoint
* GetClosestPlayer
* ReturnPlayerName
* GetPlayerDistanceToVehicle
* GetClosestVehicle
* wiper
* IsPlayerInArea
* IsPlayerInCube
* GetPlayers
* IsPlayerInRange
* IsPlayerInCircle
* IsPlayerInSphere
* TakePlayerMoney
* SendClientMessageToAllOthers
* GameTextForAllOthers
* Eraser
* GetXYBehindPlayer
* GetXYBehindPoint
* ToggleBlipVisibility
* AddPlayerHealth
* IsPlayerSpawned
* IsPlayerPassenger
* IsPlayerDriver
* IsPlayerOnFoot
* IsPlayerOnBike
* IsPlayerOnBicycle
* IsPlayerOnBoat
* IsPlayerInCar
* IsPlayerInHelicopter
* IsPlayerInPlane
* IsPlayerInQuad
* IsPlayerInMonsterTruck
* IsPlayerInAreaEx
* GetPlayerClan
*/
native S_SendClientMessage(playerid, color, const message[]) = SendClientMessage;
native S_SendDeathMessage(killer,killee,weapon) = SendDeathMessage;
native S_GameTextForPlayer(playerid,const string[],time,style) = GameTextForPlayer;
native S_SpawnPlayer(playerid) = SpawnPlayer;
native S_SetPlayerScore(playerid,score) = SetPlayerScore;
native S_GetPlayerScore(playerid) = GetPlayerScore;
native S_GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z) = GetPlayerPos;
native S_SetPlayerPos(playerid, Float:x, Float:y, Float:z) = SetPlayerPos;
native S_GetPlayerHealth(playerid, &Float:health) = GetPlayerHealth;
native S_SetPlayerHealth(playerid, Float:health) = SetPlayerHealth;
native S_GetPlayerName(playerid, const name[], len) = GetPlayerName;
native S_TogglePlayerControllable(playerid, toggle) = TogglePlayerControllable;
native S_GivePlayerMoney(playerid,money) = GivePlayerMoney;
native S_SetPlayerFacingAngle(playerid,Float:ang) = SetPlayerFacingAngle;
native S_GetPlayerFacingAngle(playerid,&Float:ang) = GetPlayerFacingAngle;
native S_GetPlayerMoney(playerid) = GetPlayerMoney;
native S_ResetPlayerMoney(playerid) = ResetPlayerMoney;
native S_IsPlayerConnected(playerid) = IsPlayerConnected;
native S_GetPlayerState(playerid) = GetPlayerState;
stock SendClientMessage(playerid,color,const message[]){
#if DEBUG == true
printf("SendClientMessage(%d,%x,%s)",playerid,color,message);
#endif
S_SendClientMessage(playerid,color,message);
}
stock SendClientMessageToAll(color, const message[]) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) SendClientMessage(i,color,message);
stock SendDeathMessage(killer,killee,weapon){
#if DEBUG == true
printf("SendDeathMessage(%d,%d,%d)",killer,killee,weapon);
#endif
S_SendDeathMessage(killer,killee,weapon);
}
stock GameTextForAll(const string[],time,style) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) GameTextForPlayer(i,string,time,style);
stock GameTextForPlayer(playerid,const string[],time,style){
#if DEBUG == true
printf("GameTextForPlayer(%d,%s,%d,%d)",playerid,string,time,style);
#endif
if(GameTextCheck(string)) S_GameTextForPlayer(playerid,string,time,style);
else print(" Warning: Your GameText was not in a sanitary condition (would've crashed players)");
}
stock SpawnPlayer(playerid){
#if DEBUG == true
printf("SpawnPlayer(%d)",playerid);
#endif
PropertyBoolSet(sprintf("P:%d ForcedS",playerid),true);
S_SpawnPlayer(playerid);
}
stock SetPlayerScore(playerid,score){
#if DEBUG == true
printf("SetPlayerScore(%d,%d)",playerid,score);
#endif
S_SetPlayerScore(playerid,score);
PropertyAdd(sprintf("P:%d Score",playerid),score);
}
stock GetPlayerScore(playerid){
#if DEBUG == true
printf("GetPlayerScore(%d)",playerid);
#endif
return S_GetPlayerScore(playerid);
}
stock GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z){
#if DEBUG == true
printf("GetPlayerPos(%d)",playerid);
#endif
S_GetPlayerPos(playerid,x,y,z);
}
stock SetPlayerPos(playerid, Float:x, Float:y, Float:z,Float:Ang = -1.0,Int = -1, bool:vehiclex = false){
#if DEBUG == true
printf("SetPlayerPos(%d,%f,%f,%f)",playerid,x,y,z);
#endif
if(Int != -1) SetPlayerInterior(playerid,Int);
if(vehiclex == true && IsPlayerInAnyVehicle(playerid) && IsPlayerDriver(playerid)){
SetVehiclePos(GetPlayerVehicleID(playerid),x,y,z);
if(Ang != -1.0) SetVehicleZAngle(GetPlayerVehicleID(playerid),Ang);
}
else{
S_SetPlayerPos(playerid,x,y,z);
if(Ang != -1.0) SetPlayerFacingAngle(playerid,Ang);
}
}
stock GetPlayerHealth(playerid, &Float:health){
#if DEBUG == true
printf("GetPlayerHealth(%d)",playerid);
#endif
S_GetPlayerHealth(playerid,health);
}
stock SetPlayerHealth(playerid, Float:health){
#if DEBUG == true
printf("SetPlayerHealth(%d,%f)",playerid,health);
#endif
S_SetPlayerHealth(playerid,health);
}
stock GetPlayerName(playerid,const name[],len = sizeof(name)){
#if DEBUG == true
printf("GetPlayerName(%d)",playerid);
#endif
S_GetPlayerName(playerid,name,len);
}
stock TogglePlayerControllable(playerid,toggle){
#if DEBUG == true
printf("TogglePlayerControllable(%d,%d)",playerid,toggle);
#endif
S_TogglePlayerControllable(playerid,toggle);
PropertyIntSet(sprintf("P:%d Frozen",playerid),toggle);
}
stock IsPlayerFrozen(playerid) return PropertyBool(sprintf("P:%d Frozen",playerid));
stock GivePlayerMoney(playerid,moneys){
#if DEBUG == true
printf("GivePlayerMoney(%d,%d)",playerid,moneys);
#endif
S_GivePlayerMoney(playerid,moneys);
PropertyAdd(sprintf("P:%d Money",playerid),moneys);
}
stock SetPlayerFacingAngle(playerid,Float:ang){
#if DEBUG == true
printf("SetPlayerFacingAngle(%d,%f)",playerid,ang);
#endif
S_SetPlayerFacingAngle(playerid,ang);
PropertyBoolSet(sprintf("P:%d Setting",playerid),true);
}
stock GetPlayerFacingAngle(playerid,&Float:ang){
#if DEBUG == true
printf("GetPlayerFacingAngle(%d)",playerid);
#endif
S_GetPlayerFacingAngle(playerid,ang);
}
stock GetPlayerMoney(playerid){
#if DEBUG == true
printf("GetPlayerMoney(%d)",playerid);
#endif
return S_GetPlayerMoney(playerid);
}
stock ResetPlayerMoney(playerid){
#if DEBUG == true
printf("ResetPlayerMoney(%d)",playerid);
#endif
S_ResetPlayerMoney(playerid);
PropertyIntSet(sprintf("P:%d Money",playerid),0);
}
stock IsPlayerConnected(playerid){
#if DEBUG == true
printf("IsPlayerConnected(%d)",playerid);
#endif
return S_IsPlayerConnected(playerid);
}
stock GetPlayerState(playerid){
#if DEBUG == true
printf("GetPlayerState(%d)",playerid);
#endif
return S_GetPlayerState(playerid);
}
stock GetPlayerId(playername[]){
new playername2[MAX_PLAYER_NAME];
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i)){
GetPlayerName(i,playername2,sizeof(playername2));
if(equal(playername,playername2,false)) return i;
}
}
return INVALID_PLAYER_ID;
}
stock Float:GetDistanceBetweenPlayers(playerid,playerid2){
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
return GetPlayerDistanceToPoint(playerid2,pos[0],pos[1],pos[2]);
}
forward Float:GetPlayerDistanceToPoint(playerid,{Float,_}:...);
stock Float:GetPlayerDistanceToPoint(playerid,{Float,_}:...){
new num = numargs(),Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
if(num == 3) return floatsqroot(floatpower(floatabs(floatsub(pos[0],Float:getarg(1))),2)+floatpower(floatabs(floatsub(pos[1],Float:getarg(2))),2));
else if(num == 4) return floatsqroot(floatpower(floatabs(floatsub(pos[0],Float:getarg(1))),2)+floatpower(floatabs(floatsub(pos[1],Float:getarg(2))),2)+floatpower(floatabs(floatsub(pos[2],Float:getarg(3))),2));
return -1.0;
}
stock GetClosestPlayer(playerid){
new player = INVALID_PLAYER_ID,Float:dis = MAX_WORLDBOUNDS;
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && i != playerid){
new Float:dis2 = GetDistanceBetweenPlayers(playerid,i);
if(dis2 > dis){
dis = dis2;
player = i;
}
}
}
return player;
}
stock ReturnPlayerName(playerid){
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
return playername;
}
stock Float:GetPlayerDistanceToVehicle(playerid,vehicleid){
new Float:pos[3];
GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
return GetPlayerDistanceToPoint(playerid,pos[0],pos[1],pos[2]);
}
stock GetCloestVehicle(playerid){
new vehicle = UNKNOWN,Float:dis = MAX_WORLDBOUNDS;
for(new i=0;i<MAX_VEHICLES;i++){
new Float:dis2 = GetPlayerDistanceToVehicle(playerid,i);
if(dis2 > dis){
dis = dis2;
vehicle = i;
}
}
return vehicle;
}
stock wiper(playerid) for(new i=0;i<=MAX_CHATLINES;i++) SendClientMessage(playerid,COLOR_WHITE,"\n");
stock IsPlayerInArea(playerid,Float:minx,Float:maxx,Float:miny,Float:maxy){
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
if(pos[0] > minx && pos[0] < maxx && pos[1] > miny && pos[1] < maxy) return true;
return false;
}
stock IsPlayerInCube(playerid,Float:minx,Float:maxx,Float:miny,Float:maxy,Float:zmin,Float:zmax){
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
if(pos[0] > xmin && pos[1] > ymin && pos[2] > zmin && pos[0] < xmax && pos[1] < ymax && pos[2] < zmax) return true;
return false;
}
stock GetPlayers(){
new players;
for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) players++;
return players;
}
stock IsPlayerInRange(playerid,Float:Range,Float:Z_Range,Float:x,Float:y,Float:z){
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
if(pos[0] - x <= Range && pos[0] - x >= 0.0 - Range && pos[1] - y <= Range && y >= 0.0 - Range && pos[2] - z <= Z_Range && z - pos[2] >= 0.0 - Z_Range) return true;
return false;
}
stock IsPlayerInCircle(playerid,Float:x,Float:y,radius){
if(GetPlayerDistanceToPoint(playerid,x,y) < radius) return true;
return false;
}
stock IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius){
if(GetPlayerDistanceToPoint(playerid,x,y,z) < radius) return true;
return false;
}
stock TakePlayerMoney(playerid,moneyz) GivePlayerMoney(playerid,0-moneyz);
stock SendClientMessageToAllOthers(playerid,color, const message[]) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && i != playerid) SendClientMessage(i,color,message);
stock Eraser(playerid,lines) for(new a=1;a<=lines;a++) SendClientMessage(playerid,COLOR_WHITE, "\n");
stock GetXYBehindPlayer(playerid,&Float:x,&Float:y,Float:distance){
new Float:a;
GetPlayerPos(playerid,x,y,a);
GetPlayerFacingAngle(playerid,a);
GetXYBehindPoint(x,y,x,y,distance,a);
}
stock GetXYBehindPoint(Float:x,Float:y,&Float:x2,&Float:y2,Float:distance,Float:angle){
x2 = x;
y2 = y;
x2 -= distance * floatsin(-angle,degrees);
y2 -= distance * floatcos(-angle,degrees);
}
stock ToggleBlipVisibility(playerid,bool:visible){
new tmpcolour = GetPlayerColor(playerid);
if(visible == true) tmpcolour &= 0xFFFFFF00;
else tmpcolour |= 0x000000FF;
SetPlayerColor(playerid,tmpcolour);
}
stock AddPlayerHealth(playerid,Float:health){
new Float:health2;
GetPlayerHealth(playerid,health2);
SetPlayerHealth(playerid,health+health2);
}
stock IsPlayerSpawned(playerid){
new statex = GetPlayerState(playerid);
if(statex != PLAYER_STATE_NONE && statex != PLAYER_STATE_WASTED && statex != PLAYER_STATE_SPAWNED) return true;
return false;
}
stock IsPlayerPassenger(playerid){
if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return true;
return false;
}
stock IsPlayerDriver(playerid){
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) return true;
return false;
}
stock IsPlayerOnFoot(playerid){
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) return true;
return false;
}
stock IsPlayerOnBike(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_BIKE) return true;
return false;
}
stock IsPlayerOnBicycle(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_BICYCLE) return true;
return false;
}
stock IsPlayerInBoat(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_BOAT) return true;
return false;
}
stock IsPlayerInHelicopter(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_HELI) return true;
return false;
}
stock IsPlayerInMonsterTruck(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_MONSTER) return true;
return false;
}
stock IsPlayerInPlane(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_PLANE) return true;
return false;
}
stock IsPlayerInQuad(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_QUAD) return true;
return false;
}
stock IsPlayerInCar(playerid){
if(!IsPlayerInAnyVehicle(playerid)) return false;
if(GetVehicleType(GetPlayerVehicleID(playerid)) == TYPE_CAR) return true;
return false;
}
stock IsPlayerInAreaEx(playerid,Float:...){
new num = numargs(),Float:xa[255],Float:ya[255],j;
for(new i=1;i<num;i+=2){
xa[j] = Float:getarg(i);
ya[j] = Float:getarg(i+1);
j++;
}
xa[j] = xa[0];
ya[j] = ya[0];
new lin,Float:xcut,Float:x,Float:y,Float:z;
for(new i=0;i<j;i++){
xcut = xa[i] + ((y-ya[i])*(xa[i+1]-xa[i])/(ya[i+1]-ya[i]));
if(((y >= ya[i] && y <= ya[i+1]) || (y >= ya[i+1] && y <= ya[i+1])0 && xcut < x) lin++;
}
if(lin % 2 == 1) return true;
return false;
}
stock GetPlayerClan(playerid){
new name[MAX_PLAYER_NAME],clan[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
new mrk1 = -1,mrk1char,mrk2 = -1,mrk2char;
for(new i=0,j=strlen(name)-1;i<j;i++){
if(mrk1 == -1){
if(name[i] == '[') mrk1 = i;
else if(name[i] == '(') mrk1 = i;
else if(name[i] == '{') mrk1 = i;
else if(name[i] == '<'){
if(name[i+1] == '<') mrk1 = i+1;
else mrk1 = i;
}
else if(name[i] == ':'){
if(name[i+1] == ':') mrk1 = i+1;
else mrk1 = i;
}
else if(name[i] == '=') mrk1 = i;
else if(name[i] == '>') mrk1 = i;
else if(name[i] == '|') mrk1 = i;
if(mrk1 >= i){
i = mrk1;
mrk1char = name[mrk1];
}
}
else{
if(name[mrk1] == '[' && name[i] == ']') mrk2 = i;
else if(name[mrk1] == '(' && name[i] == ')') mrk2 = i;
else if(name[mrk1] == '{' && name[i] == '}') mrk2 = i;
else if(name[mrk1] == '<' && name[i] == '>') mrk2 = i;
else if(name[mrk1] == ':' && name[i] == ':') mrk2 = i;
else if(name[mrk1] == '=' && name[i] == '=') mrk2 = i;
else if(name[mrk1] == '>' && name[i] == '<') mrk2 = i;
else if(name[mrk1] == '|' && name[i] == '|') mrk2 = i;
if(mrk2 == i){
mrk2char = name[i];
break;
}
}
}
if(mrk1 != -1){
if(mrk2 != -1) strmid(clan,name,mrk1+1,mrk2-1);
else if(mrk1char == ':') strmid(clan,name,0,mrk1-1);
}
return clan;
}
//stock GetPlayerSpeed(playerid) return PropertyInt(sprintf("P:%d Speed",playerid));
//stock GetPlayerAccelaration(playerid) return PropertyInt(sprintf("P:%d Acceleration",playerid));
// Skins/Classes/Teams
/*
* AddPlayerClass
* AddPlayerClassEx
* SetSpawnInfo
* IsSkinValid
* SetPlayerSkin
* SetPlayerTeam
* GetPlayerTeam
* GameTextForTeam
* SendClientMessageToTeam
* SetTeamPos
* IsTeamInArea
* KickTeam
* BanTeam
* SetTeamScore
* GiveTeamMoney
* GetPlayersInTeam
*/
native S_AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo) = AddPlayerClass;
native S_AddPlayerClassEx(teamid, modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo) = AddPlayerClassEx;
native S_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo) = SetSpawnInfo;
native S_SetPlayerSkin(playerid, skinid) = SetPlayerSkin;
native S_SetPlayerTeam(playerid,teamid) = SetPlayerTeam;
native S_GetPlayerTeam(playerid) = GetPlayerTeam;
stock AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo){
if(IsSkinValid(modelid)){
new CC = PropertyInt("TClass");
PropertyIntSet(sprintf("C:%d Model",CC),modelid);
PropertyIntSet(sprintf("C:%d Teamid",CC),NO_TEAM);
PropertyFloatSet(sprintf("C:%d X",CC),spawn_x);
PropertyFloatSet(sprintf("C:%d Y",CC),spawn_y);
PropertyFloatSet(sprintf("C:%d Z",CC),spawn_z);
PropertyFloatSet(sprintf("C:%d A",CC),z_angle);
PropertyIntSet(sprintf("C:%d W1",CC),weapon1);
PropertyIntSet(sprintf("C:%d W1A",CC),weapon1_ammo);
PropertyIntSet(sprintf("C:%d W2",CC),weapon2);
PropertyIntSet(sprintf("C:%d W2A",CC),weapon2_ammo);
PropertyIntSet(sprintf("C:%d W3",CC),weapon3);
PropertyIntSet(sprintf("C:%d W3A",CC),weapon3_ammo);
PropertyAdd("TClass");
#if DEBUG == true
printf("AddPlayerClass(%d,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d)",modelid,spawn_x,spawn_y,spawn_z,z_angle,weapon1,weapon1_ammo,weapon2,weapon2_ammo,weapon3,weapon3_ammo);
#endif
#if CORE == false
S_AddPlayerClass(modelid,spawn_x,spawn_y,spawn_z,z_angle,weapon1,weapon1_ammo,weapon2,weapon2_ammo,weapon3,weapon3_ammo);
#endif
}
else printf("Error: Invalid Model Skin in AddPlayerClass (%d)",modelid);
}
stock AddPlayerClassEx(modelid, teamid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo){
if(IsSkinValid(modelid)){
new CC = PropertyInt("TClass");
PropertyIntSet(sprintf("C:%d Model",CC),modelid);
PropertyIntSet(sprintf("C:%d Teamid",CC),teamid);
PropertyFloatSet(sprintf("C:%d X",CC),spawn_x);
PropertyFloatSet(sprintf("C:%d Y",CC),spawn_y);
PropertyFloatSet(sprintf("C:%d Z",CC),spawn_z);
PropertyFloatSet(sprintf("C:%d A",CC),Z_angle);
PropertyIntSet(sprintf("C:%d W1",CC),weapon1);
PropertyIntSet(sprintf("C:%d W1A",CC),weapon1_ammo);
PropertyIntSet(sprintf("C:%d W2",CC),weapon2);
PropertyIntSet(sprintf("C:%d W2A",CC),weapon2_ammo);
PropertyIntSet(sprintf("C:%d W3",CC),weapon3);
PropertyIntSet(sprintf("C:%d W3A",CC),weapon3_ammo);
PropertyAdd("TClass");
#if DEBUG == true
printf("AddPlayerClassEx(%d,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d)",modelid,teamid,spawn_x,spawn_y,spawn_z,z_angle,weapon1,weapon1_ammo,weapon2,weapon2_ammo,weapon3,weapon3_ammo);
#endif
#if CORE == false
S_AddPlayerClassEx(modelid,teamid,spawn_x,spawn_y,spawn_z,z_angle,weapon1,weapon1_ammo,weapon2,weapon2_ammo,weapon3,weapon3_ammo);
#endif
}
else printf("Error: Invalid Model Skin in AddPlayerClassEx (%d)",modelid);
}
stock SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo){
if(IsSkinValid(skin)){
PropertyIntSet(sprintf("P:%d STeam",playerid),team);
PropertyIntSet(sprintf("P:%d SSkin",playerid),skin);
PropertyFloatSet(sprintf("P:%d SX",playerid),x);
PropertyFloatSet(sprintf("P:%d SY",playerid),y);
PropertyFloatSet(sprintf("P:%d SZ",playerid),z);
PropertyFloatSet(sprintf("P:%d SA",playerid),rotation);
PropertyIntSet(sprintf("P:%d W1",playerid),weapon1);
PropertyIntSet(sprintf("P:%d W1A",playerid),weapon1_ammo);
PropertyIntSet(sprintf("P:%d W2",playerid),weapon2);
PropertyIntSet(sprintf("P:%d W2A",playerid),weapon2_ammo);
PropertyIntSet(sprintf("P:%d W3",playerid),weapon3);
PropertyIntSet(sprintf("P:%d W3A",playerid),weapon3_ammo);
#if DEBUG == true
printf("SetSpawnInfo(%d,%d,%d,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d)",playerid,team,skin,x,y,z,rotation,weapon1,weapon1_ammo,weapon2,weapon2_ammo,weapon3,weapon3_ammo);
#endif
S_SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
}
else printf("Error: Invalid Model Skin in SetSpawnInfo (%d)",playerid);
}
stock GetSpawnInfo(playerid,&team,&skin,&Float:x,&Float:y,&Float:rotation,&weapon1,&weapon1_ammo,&weapon2,&weapon2_ammo,&weapon3,&weapon3_ammo){
team = PropertyInt(sprintf("P:%d STeam",playerid));
skin = PropertyInt(sprintf("P:%d SSkin",playerid));
x = PropertyFloat(sprintf("P:%d SX",playerid));
y = PropertyFloat(sprintf("P:%d SY",playerid));
z = PropertyFloat(sprintf("P:%d SZ",playerid));
a = PropertyFloat(sprintf("P:%d SA",playerid));
weapon1 = PropertyInt(sprintf("P:%d W1",playerid));
weapon1_ammo = PropertyInt(sprintf("P:%d W1A",playerid));
weapon2 = PropertyInt(sprintf("P:%d W2",playerid));
weapon2_ammo = PropertyInt(sprintf("P:%d W2A",playerid));
weapon3 = PropertyInt(sprintf("P:%d W3",playerid));
weapon3_ammo = PropertyInt(sprintf("P:%d W3A",playerid));
}
stock IsSkinValid(skinid){
new invalidskins[23] = {3, 4, 5, 6, 7, 8, 42, 65, 74, 86, 119, 149, 208, 265, 266, 267, 268, 269, 270, 271, 272, 273, 289};
if(skinid < 0 || skinid > 300) return false;
for(new i=0;i<sizeof(invalidskins);i++) if(skinid == invalidskins[i]) return false;
return true;
}
stock SetPlayerSkin(playerid,skinid){
#if DEBUG == true
printf("SetPlayerSkin(%d,%d)",playerid,skinid);
#endif
print("Error: SetPlayerSkin can cause clients to crash");
#pragma unused playerid
#pragma unused skinid
}
stock SetPlayerTeam(playerid,teamid){
#if DEBUG == true
printf("SetPlayerTeam(%d,%d)",playerid,teamid);
#endif
S_SetPlayerTeam(playerid,teamid);
}
stock GetPlayerTeam(playerid){
#if DEBUG == true
printf("GetPlayerTeam(%d)",playerid);
#endif
return S_GetPlayerTeam(playerid);
}
stock GameTextForTeam(team, text[], time, style) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == team) GameTextForPlayer(i, text, time, style);
stock SendClientMessageToTeam(teamid,colour,const message[]) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) SendClientMessage(i,colour,message);
stock SetTeamPos(teamid,Float:x,Float:y,Float:z) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) SetPlayerPos(i,x,y,z);
stock IsTeamInArea(teamid,Float:minx, Float:maxx, Float:miny, Float:maxy){
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid){
if(!IsPlayerInArea(i,minx,maxx,miny,maxy)) return false;
}
}
return true;
}
stock KickTeam(teamid) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) Kick(i);
stock BanTeam(teamid) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) Ban(i);
stock SetTeamScore(teamid,score) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) SetPlayerScore(i,score);
stock GiveTeamMoney(teamid,moneya) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) GivePlayerMoney(i,moneya);
stock GetPlayersInTeam(teamid){
new players;
for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid) players++;
return players;
}
stock GetPlayerSkin(playerid) return PropertyInt(sprintf("P:%d Skin",playerid));
// Bounds
/*
* SetPlayerWorldBounds
* GetPlayerWorldBounds
* ResetPlayerWorldBounds
*/
native S_SetPlayerWorldBounds(playerid,Float:x_max,Float:x_min,Float:y_max,Float:y_min) = SetPlayerWorldBounds;
stock SetPlayerWorldBounds(playerid,Float:...){
new num = numargs();
#if DEBUG == true
if(num == 5) printf("SetPlayerWorldBounds(%d,%f,%f,%f,%f)",playerid,Float:getarg(1),Float:getarg(2),Float:getarg(3),Float:getarg(4));
else if(num == 7) printf("SetPlayerWorldBounds(%d,%f,%f,%f,%f,%f,%f)",playerid,Float:getarg(1),Float:getarg(2),Float:getarg(3),Float:getarg(4),Float:getarg(5),Float:getarg(6));
#endif
if(num == 5){
S_SetPlayerWorldBounds(playerid,Float:getarg(1),Float:getarg(2),Float:getarg(3),Float:getarg(4));
PropertyFloatSet(sprintf("P:%d WB_X1",playerid),Float:getarg(1));
PropertyFloatSet(sprintf("P:%d WB_X2",playerid),Float:getarg(2));
PropertyFloatSet(sprintf("P:%d WB_Y1",playerid),Float:getarg(3));
PropertyFloatSet(sprintf("P:%d WB_Y2",playerid),Float:getarg(4));
PropertyFloatSet(sprintf("P:%d WB_Z1",playerid),MAX_WORLDBOUNDS);
PropertyFloatSet(sprintf("P:%d WB_Z2",playerid),-MAX_WORLDBOUNDS);
}
else if(num == 7){
S_SetPlayerWorldBounds(playerid,Float:getarg(1),Float:getarg(2),Float:getarg(3),Float:getarg(4));
PropertyFloatSet(sprintf("P:%d WB_X1",playerid),Float:getarg(1));
PropertyFloatSet(sprintf("P:%d WB_X2",playerid),Float:getarg(2));
PropertyFloatSet(sprintf("P:%d WB_Y1",playerid),Float:getarg(3));
PropertyFloatSet(sprintf("P:%d WB_Y2",playerid),Float:getarg(4));
PropertyFloatSet(sprintf("P:%d WB_Z1",playerid),Float:getarg(5));
PropertyFloatSet(sprintf("P:%d WB_Z2",playerid),Float:getarg(6));
}
}
stock GetPlayerWorldBounds(playerid,&Float:x_max,&Float:x_min,&Float:y_max,&Float:y_min){
x_max = PropertyFloat(sprintf("P:%d WB_X1",playerid));
x_min = PropertyFloat(sprintf("P:%d WB_X2",playerid));
y_max = PropertyFloat(sprintf("P:%d WB_Y1",playerid));
y_min = PropertyFloat(sprintf("P:%d WB_Y2",playerid));
}
stock ResetPlayerWorldBounds(playerid) SetPlayerWorldBounds(playerid,MAX_WORLDBOUNDS,-MAX_WORLDBOUNDS,MAX_WORLDBOUNDS,-MAX_WORLDBOUNDS);
// Vehicles
/*
* AddStaticVehicle
* AddStaticVehicleEx
* IsPlayerInAnyVehicle
* GetPlayerVehicleID
* PutPlayerInVehicle
* RemovePlayerFromVehicle
* IsPlayerInVehicle
* CreateVehicle
* GetVehiclePos
* SetVehiclePos
* SetVehicleZAngle
* SetVehicleParamsForPlayer
* SetVehicleToRespawn
* AddVehicleComponent
* ChangeVehicleColor
* ChangeVehiclePaintJob
* GetVehicleModel
* GetVehicles
* GetModelType
* GetVehicleType
* GetVehicleDriver
* GetVehicleName
* IsVehicleConnected
* IsVehicleInUse
* GetVehicleSpawnPos
*/
native S_AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2) = AddStaticVehicle;
native S_AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay) = AddStaticVehicleEx;
native S_IsPlayerInAnyVehicle(playerid) = IsPlayerInAnyVehicle;
native S_GetPlayerVehicleID(playerid) = GetPlayerVehicleID;
native S_PutPlayerInVehicle(playerid, vehicleid, seatid) = PutPlayerInVehicle;
native S_RemovePlayerFromVehicle(playerid) = RemovePlayerFromVehicle;
native S_IsPlayerInVehicle(playerid, vehicleid) = IsPlayerInVehicle;
native S_CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay) = CreateVehicle;
native S_GetVehiclePos(vehicleid, &Float:x, &Float:y, &Float:z) = GetVehiclePos;
native S_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z) = SetVehiclePos;
native S_SetVehicleZAngle(vehicleid, Float:z_angle) = SetVehicleZAngle;
native S_SetVehicleParamsForPlayer(vehicleid,playerid,objective,doorslocked) = SetVehicleParamsForPlayer;
native S_SetVehicleToRespawn(vehicleid) = SetVehicleToRespawn;
native S_AddVehicleComponent(vehicleid, componentid) = AddVehicleComponent;
native S_ChangeVehicleColor(vehicleid, color1, color2) = ChangeVehicleColor;
native S_ChangeVehiclePaintjob(vehicleid, paintjobid) = ChangeVehiclePaintJob;
stock AddStaticVehicle(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1 = -1,color2 = -1){
new VC = PropertyInt("TVehicles");
if(VC < MAX_VEHICLES && PropertyInt("TModels") < MAX_MODELS){
new MC;
for(new i=0;i<VC;i++) if(PropertyInt(sprintf("V:%d Model",i)) != modelid) MC++;
if(MC == VC) PropertyAdd("TVehicles");
PropertyIntSet(sprintf("V:%d Model",VC),modelid);
PropertyFloatSet(sprintf("V:%d X",VC),spawn_x);
PropertyFloatSet(sprintf("V:%d Y",VC),spawn_y);
PropertyFloatSet(sprintf("V:%d Z",VC),spawn_z);
PropertyFloatSet(sprintf("V:%d A",VC),z_angle);
PropertyIntSet(sprintf("V:%d C1",VC),color1);
PropertyIntSet(sprintf("V:%d C2",VC),color2);
PropertyIntSet(sprintf("V:%d RS",VC),120);
PropertyAdd("TVehicles");
#if CORE == false
S_AddStaticVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2);
#endif
}
else print("Error: More vehicles added than can be allowed");
#if DEBUG == true
printf("AddStaticVehicleEx(%d,%f,%f,%f,%f,%d,%d)",modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2);
#endif
}
stock AddStaticVehicleEx(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1 = -1,color2 = -1,respawn_delay = 120){
new VC = PropertyInt("TVehicles");
if(VC < MAX_VEHICLES && PropertyInt("TModels") < MAX_MODELS){
new MC;
for(new i=0;i<VC;i++) if(PropertyInt(sprintf("V:%d Model",i)) != modelid) MC++;
if(MC == VC) PropertyAdd("TVehicles");
PropertyIntSet(sprintf("V:%d Model",VC),modelid);
PropertyFloatSet(sprintf("V:%d X",VC),spawn_x);
PropertyFloatSet(sprintf("V:%d Y",VC),spawn_y);
PropertyFloatSet(sprintf("V:%d Z",VC),spawn_z);
PropertyFloatSet(sprintf("V:%d A",VC),z_angle);
PropertyIntSet(sprintf("V:%d C1",VC),color1);
PropertyIntSet(sprintf("V:%d C2",VC),color2);
PropertyIntSet(sprintf("V:%d RS",VC),respawn_delay);
PropertyAdd("TVehicles");
#if CORE == false
S_AddStaticVehicleEx(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,respawn_delay);
#endif
}
else print("Error: More vehicles/models added than can be allowed");
#if DEBUG == true
printf("AddStaticVehicleEx(%d,%f,%f,%f,%f,%d,%d,%d)",modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,respawn_delay);
#endif
}
stock IsPlayerInAnyVehicle(playerid){
#if DEBUG == true
printf("IsPlayerInAnyVehicle(%d)",playerid);
#endif
return S_IsPlayerInAnyVehicle(playerid);
}
stock GetPlayerVehicleID(playerid){
#if DEBUG == true
printf("GetPlayerVehicleID(%d)",playerid);
#endif
return S_GetPlayerVehicleID(playerid);
}
stock PutPlayerInVehicle(playerid,vehicleid,seatid){
#if DEBUG == true
printf("PutPlayerInVehicle(%d,%d,%d)",playerid,vehicleid,seatid);
#endif
for(new i=0;i<10;i++) S_PutPlayerInVehicle(playerid,vehicleid,seatid);
}
stock RemovePlayerFromVehicle(playerid){
#if DEBUG == true
printf("RemovePlayerFromVehicle(%d)",playerid);
#endif
S_RemovePlayerFromVehicle(playerid);
}
stock IsPlayerInVehicle(playerid,vehicleid){
#if DEBUG == true
printf("IsPlayerInVehicle(%d,%d)",playerid,vehicleid);
#endif
if(!IsPlayerInAnyVehicle(playerid)) return false;
return S_IsPlayerInVehicle(playerid,vehicleid);
}
stock CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1 = -1, color2 = -1, respawn_delay = 120){
new VC = PropertyInt("TVehicles");
if(VC < MAX_VEHICLES && PropertyInt("TModels") < MAX_MODELS){
new MC;
for(new i=0;i<VC;i++) if(PropertyInt(sprintf("V:%d Model",i)) != vehicletype) MC++;
if(MC == VC) PropertyAdd("TVehicles");
PropertyIntSet(sprintf("V:%d Model",VC),vehicletype);
PropertyFloatSet(sprintf("V:%d X",VC),x);
PropertyFloatSet(sprintf("V:%d Y",VC),y);
PropertyFloatSet(sprintf("V:%d Z",VC),z);
PropertyFloatSet(sprintf("V:%d A",VC),rotation);
PropertyIntSet(sprintf("V:%d C1",VC),color1);
PropertyIntSet(sprintf("V:%d C2",VC),color2);
PropertyIntSet(sprintf("V:%d RS",VC),respawn_delay);
PropertyAdd("TVehicles");
S_CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
}
else print("Error: More vehicles/models added than can be allowed");
#if DEBUG == true
printf("CreateVehicle(%d,%f,%f,%f,%f,%d,%d,%d)",playerid,x,y,z,rotation,color1,color2,respawn_delay);
#endif
}
stock GetVehiclePos(vehicleid, &Float:x, &Float:y, &Float:z){
#if DEBUG == true
printf("GetVehiclePos(%d)",vehicleid);
#endif
new bool:inuse;
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && IsPlayerInVehicle(i,vehicleid)){
GetPlayerPos(i,x,y,z);
inuse = true;
}
}
if(inuse == false) S_GetVehiclePos(vehicleid, x, y, z);
}
stock SetVehiclePos(vehicleid, Float:x, Float:y, Float:z){
#if DEBUG == true
printf("SetVehiclePos(%d,%f,%f,%f)",vehicleid,x,y,z);
#endif
if(GetModelType(GetVehicleModel(vehicleid)) == TYPE_BIKE || GetModelType(GetVehicleModel(vehicleid)) == TYPE_BICYCLE){
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && IsPlayerDriver(i) && IsPlayerInVehicle(i,vehicleid)){
SetPlayerWorldBounds(i,5000.0,5000.0,5000.0,5000.0);
S_SetVehiclePos(vehicleid,x,y,z);
PropertyBoolSet(sprintf("P:%d vtele",i),true);
SetTimer("ClearTele",30,false);
}
}
}
else S_SetVehiclePos(vehicleid,x,y,z);
}
forward ClearTele();
public ClearTele(){
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && PropertyBool(sprintf("P:%d vtele",i)) == true){
ResetPlayerWorldBounds(i);
PropertyBoolSet(sprintf("P:%d vtele",i),false);
}
}
}
stock SetVehicleZAngle(vehicleid, Float:z_angle){
#if DEBUG == true
printf("SetVehicleZAngle(%d,%f)",vehicleid,z_angle);
#endif
S_SetVehicleZAngle(vehicleid,z_angle);
}
stock SetVehicleParamsForPlayer(vehicleid,playerid,objective,doorslocked){
#if DEBUG == true
printf("SetVehicleParamsForPlayer(%d,%d,%d,%d)",vehicleid,playerid,objective,doorslocked);
#endif
S_SetVehicleParamsForPlayer(vehicleid,playerid,objective,doorslocked);
PropertyIntSet(sprintf("P:%d Locked %d",playerid,vehicleid),doorslocked);
}
stock SetVehicleToRespawn(vehicleid){
#if DEBUG == true
printf("SetVehicleToRespawn(%d)",vehicleid);
#endif
S_SetVehicleToRespawn(vehicleid);
}
stock AddVehicleComponent(vehicleid,componentid){
#if DEBUG == true
printf("AddVehicleComponent(%d,%d)",vehicleid,componentid);
#endif
S_AddVehicleComponent(vehicleid, componentid);
}
stock ChangeVehicleColor(vehicleid,color1,color2){
#if DEBUG == true
printf("ChangeVehicleColor(%d,%d,%d)",vehicleid,color1,color2);
#endif
S_ChangeVehicleColor(vehicleid,color1,color2);
}
stock ChangeVehiclePaintJob(vehicleid,paintjobid){
#if DEBUG == true
printf("ChangeVehiclePaintJob(%d,%d)",vehicleid,paintjobid);
#endif
S_ChangeVehiclePaintJob(vehicleid,paintjobid);
}
stock GetVehicleModel(vehicleid) return PropertyInt(sprintf("V:%d Model",vehicleid));
stock GetVehicles() return PropertyInt("TVehicles");
stock GetModelType(model) return vehicles[model][VTYPE];
stock GetVehicleType(vehicleid) return GetModelType(GetVehicleModel(vehicleid));
stock GetVehicleDriver(vehicleid){
for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && GetPlayerVehicleID(i) == vehicleid && IsPlayerDriver(i)) return i;
return INVALID_PLAYER_ID;
}
stock GetVehicleName(vehicleid) return vehicles[GetVehicleModel(vehicleid)-400][VEHICLE_NAME];
stock IsVehicleConnected(vehicleid){
if(vehicleid > GetVehicles()) return false;
return true;
}
stock IsVehicleInUse(vehicleid){
for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerInAnyVehicle(i) && IsPlayerInVehicle(i,vehicleid)) return true;
return false;
}
stock GetVehicleSpawnPos(vehicleid, &Float:x, &Float:y, &Float:z) S_GetVehiclePos(vehicleid, x, y, z);
// Pickups
/*
* AddStaticPickup
* IsPickupConnected
* GetPickups
*/
native S_AddStaticPickup(model,type,Float:X,Float:Y,Float:Z) = AddStaticPickup;
stock AddStaticPickup(model,type,Float:X,Float:Y,Float:Z){
#if DEBUG == true
printf("AddStaticPickup(%d,%d,%f,%f,%f)",model,type,X,Y,Z);
#endif
new TP = PropertyInt("TPickups");
PropertyIntSet(sprintf("PK:%d Model",TP),model);
PropertyIntSet(sprintf("PK:%d Type",TP),type);
PropertyFloatSet(sprintf("PK:%d X",TP),X);
PropertyFloatSet(sprintf("PK:%d Y",TP),Y);
PropertyFloatSet(sprintf("PK:%d Z",TP),Z);
PropertyAdd("TPickups");
S_AddStaticPickup(model,type,X,Y,Z);
}
stock IsPickupConnected(pickupid){
if(pickupid > GetPickups()) return false;
return true;
}
stock GetPickups() return PropertyInt("TPickups");
stock GetPickupPos(pickupid,&Float:x,&Float:y,&Float:z){
x = PropertyFloat(sprintf("PK:%d X",pickupid));
y = PropertyFloat(sprintf("PK:%d Y",pickupid));
z = PropertyFloat(sprintf("PK:%d Z",pickupid));
}
// Weapons
/*
* GetWeaponName
* ResetPlayerWeapons
* GivePlayerWeapon
* GetWeaponType
* ReturnWeaponName
*/
native S_GetWeaponName(weaponid, const weapon[], len) = GetWeaponName;
native S_ResetPlayerWeapons(playerid) = ResetPlayerWeapons;
native S_GivePlayerWeapon(playerid, weaponid, ammo) = GivePlayerWeapon;
stock GetWeaponName(weaponid, const weapon[], len){
#if DEBUG == true
printf("GetWeaponName(%d,%s,%d)",weaponid,weapon,len);
#endif
S_GetWeaponName(weaponid,weapon,len);
}
stock ResetPlayerWeapons(playerid){
#if DEBUG == true
printf("ResetPlayerWeapons(%d)",playerid);
#endif
S_ResetPlayerWeapons(playerid);
}
stock GivePlayerWeapon(playerid, ...){
#if DEBUG == true
printf("GivePlayerWeapon(%d,%d,%d)",playerid,weaponid,ammo);
#endif
for(new i=1,j=numargs();i<j;i+=2){
new weaponid = getarg(i);
new ammo = getarg(i+1);
if((weaponid > 15 && weaponid < 22) || (weaponid > 32 && weaponid < 37) || (weaponid > 38 && weaponid < 41) || (weaponid > 42 && weaponid != 46)){
printf(" Error: You used GivePlayerWeapon with an unsynced weapon (%d)",weaponid);
weaponid = 0;
}
S_GivePlayerWeapon(playerid,weaponid,ammo);
}
}
stock GetWeaponType(weaponid){
new type;
switch(weaponid){
case 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15:type = WTYPE_MELEE;
case 16,17,18,19,20,21:type = WTYPE_PROJECTILE;
case 22,23,24:type = WTYPE_PISTOL;
case 25,26,27:type = WTYPE_SHOTGUN;
case 28,32:type = WTYPE_MACHINEGUN;
case 29,30,31:type = WTYPE_ASSAULT;
case 33,34:type = WTYPE_RIFLE;
case 35,36,37,38,39,40:type = WTYPE_HEAVY;
case 41,42,43,44,45,46,47:type = WTYPE_SPECIAL;
}
return type;
}
stock ReturnWeaponName(weaponid){
new weapon[24];
GetWeaponName(weaponid,weapon,sizeof(weapon));
return weapon;
}
// Admin
/*
* IsPlayerAdmin
* Kick
* Ban
* SendClientMessageToAdmins
* GameTextForAdmins
*/
native S_IsPlayerAdmin(playerid) = IsPlayerAdmin;
native S_Kick(playerid) = Kick;
native S_Ban(playerid) = Ban;
stock IsPlayerAdmin(playerid){
#if DEBUG == true
printf("IsPlayerAdmin(%d)",playerid);
#endif
return S_IsPlayerAdmin(playerid);
}
stock Kick(playerid){
#if DEBUG == true
printf("Kick(%d)",playerid);
#endif
SetTimerEx("S_Kick",500,0,playerid);
}
stock Ban(playerid){
#if DEBUG == true
printf("Ban(%d)",playerid);
#endif
SetTimerEx("S_Ban",500,0,playerid);
}
stock SendClientMessageToAdmins(color,const message[]) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && IsPlayerAdmin(i)) SendClientMessage(i,color,message);
stock GameTextForAdmins(const string[],time,style) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && IsPlayerAdmin(i)) GameTextForPlayer(i,string,time,style);
// Colours
/*
* SetPlayerColor
* GetPlayerColor
* SetPlayerColourAlpha
* RGBAToHex
* HexToRGBA
* SetAllColour
* RandomColour
*/
native S_SetPlayerColor(playerid,color) = SetPlayerColor;
native S_GetPlayerColor(playerid) = GetPlayerColor;
stock SetPlayerColor(playerid,color){
#if DEBUG == true
printf("SetPlayerColor(%d,%x)",playerid,color);
#endif
S_SetPlayerColor(playerid,color);
}
stock GetPlayerColor(playerid){
#if DEBUG == true
printf("GetPlayerColor(%d)",playerid);
#endif
return S_GetPlayerColor(playerid);
}
stock SetPlayerColourAlpha(playerid,alpha){
new r,g,b,a;
HexToRGBA(GetPlayerColor(playerid),r,g,b,a);
SetPlayerColor(playerid,RGBAToHex(r,g,b,alpha));
}
stock RGBAToHex(r, g, b, a) return (r<<24 | g<<16 | b<<8 | a);
stock HexToRGBA(colour,&r,&g,&b,&a){
r = (colour >> 24) & 0xFF;
g = (colour >> 16) & 0xFF;
b = (colour >> 8) & 0xFF;
a = colour & 0xFF;
}
stock SetAllColour(colour) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) SetPlayerColor(i,colour);
stock RandomColour(){
new PlayerColours[100] = {
0xFF8C13FF,0x3FE65CFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,0xFFD720FF,
0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF,
0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF,
0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,
0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF,
0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,
0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,
0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,
0x9F945CFF,0xDCDE3DFF,0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF,
0xC715FFFF
};
return PlayerColours[random(sizeof(PlayerColours))];
}
// Checkpoints
/*
* DisablePlayerCheckpoint
* SetPlayerCheckpoint
* GetPlayerCheckpoint
* IsPlayerInCheckpoint
*/
native S_DisablePlayerCheckpoint(playerid) = DisablePlayerCheckpoint;
native S_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size) = SetPlayerCheckpoint;
native S_IsPlayerInCheckpoint(playerid) = IsPlayerInCheckpoint;
stock DisablePlayerCheckpoint(playerid){
#if DEBUG == true
printf("DisablePlayerCheckpoint(%d)",playerid);
#endif
S_DisablePlayerCheckpoint(playerid);
}
stock SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size){
#if DEBUG == true
printf("SetPlayerCheckpoint(%d,%f,%f,%f,%f)",playerid,x,y,z,size);
#endif
PropertyFloatSet(sprintf("P:%d CheckX",playerid),x);
PropertyFloatSet(sprintf("P:%d CheckY",playerid),y);
PropertyFloatSet(sprintf("P:%d CheckZ",playerid),z);
DisablePlayerCheckpoint(playerid);
S_SetPlayerCheckpoint(playerid,x,y,z,size);
}
stock GetPlayerCheckpoint(playerid,&Float:x,&Float:y,&Float:z){
x = PropertyFloat(sprintf("P:%d CheckX",playerid));
y = PropertyFloat(sprintf("P:%d CheckY",playerid));
z = PropertyFloat(sprintf("P:%d CheckZ",playerid));
}
stock IsPlayerInCheckpoint(playerid){
#if DEBUG == true
printf("IsPlayerInCheckpoint(%d)",playerid);
#endif
return S_IsPlayerInCheckpoint(playerid);
}
// Camera
/*
* SetPlayerCameraPos
* SetPlayerCameraLookAt
* SetCameraBehindPlayer
*/
native S_SetPlayerCameraPos(playerid,Float:x, Float:y, Float:z) = SetPlayerCameraPos;
native S_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z) = SetPlayerCameraLookAt;
native S_SetCameraBehindPlayer(playerid) = SetCameraBehindPlayer;
stock SetPlayerCameraPos(playerid,Float:x, Float:y, Float:z){
#if DEBUG == true
printf("SetPlayerCameraPos(%d,%f,%f,%f)",playerid,x,y,z);
#endif
S_SetPlayerCameraPos(playerid,x,y,z);
}
stock SetPlayerCameraLookAt(playerid,Float:x,Float:y,Float:z){
#if DEBUG == true
printf("SetPlayerCameraLookAt(%d,%f,%f,%f)",playerid,x,y,z);
#endif
S_SetPlayerCameraLookAt(playerid,x,y,z);
}
stock SetCameraBehindPlayer(playerid){
#if DEBUG == true
printf("SetCameraBehindPlayer(%d)",playerid);
#endif
S_SetCameraBehindPlayer(playerid);
}
// Sounds
/*
* PlayerPlaySound
* PlaySoundForAll
*/
native S_PlayerPlaySound(playerid, soundid, Float:x, Float:y, Float:z) = PlayerPlaySound;
stock PlayerPlaySound(playerid,soundid,Float:x = 0.0,Float:y = 0.0,Float:z = 0.0){
#if DEBUG == true
printf("PlayerPlaySound(%d,%d,%f,%f,%f)",playerid,soundid,x,y,z);
#endif
S_PlayerPlaySound(playerid,soundid,x,y,z);
}
stock PlaySoundForAll(soundid) for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) PlayerPlaySound(i,soundid);
// Files
/*
* freset
* fcreate
* fdeleteline
* fsize
* StripNewLine
*/
stock freset(file[]){
if(fexist(file)) fremove(file);
return fcreate(file);
}
stock fcreate(filename[]){
if(fexist(filename)) return false;
new File:fhandle = fopen(filename,io_write);
fclose(fhandle);
return true;
}
stock fdeleteline(filename[],line[]){
if(!fexist(filename)) return false;
frename(filename,join(filename,".tmp"));
fcreate(filename);
new File:fh1 = fopen(filename,io_write),File:fh2 = fopen(join(filename,".tmp"),io_read);
if(!fh1 || !fh2) return false;
new temp[256];
while(fread(fh2,temp)){
StripNewLine(temp);
if(!equal(temp,line,false)) fwrite(fh1,join(temp,"\r\n"));
}
fclose(fh1);
fclose(fh2);
fremove(join(filename,".tmp"));
return true;
}
stock fsize(filename[]){
new size[10];
new File:file = fopen(filename,io_append);
new Float:flen = flength(file)/1048576.0;
if(flen < 1.0){
flen *= 1024;
format(size,sizeof(size),"%.f KB",flen);
}
else format(size,sizeof(size),"%.2f MB",flen);
fclose(file);
return size;
}
// Floats
/*
* floatrand
* floatminrand
* lengthtox
* lengthtoy
* GetXYOnCircle
* asin
* acos
* atan
*/
stock Float:floatrand(Float:max) return float(random(floatround(max) * 100)) / 100.0;
stock Float:floatminrand(Float:min,Float:max) return float(random((floatround(max) - floatround(min) * 100) + (floatround(min * 100)) / 100.0;
stock Float:lengthtox(Float:length,Float:angle) return floatmul(floatcos(floatdiv(floatmul(angle,PI),180.00)),length);
stock Float:lengthtoy(Float:length,Float:angle) return floatmul(-floatsin(floatdiv(floatmul(angle,PI),180.00)),length);
stock GetXYOnCircle(&Float:x, &Float:y, Float:cx, Float:cy, Float:radius, Float:angle){
x = cx + radius*floatcos(angle,degrees);
y = cy + radius*floatsin(angle,degrees);
}
stock Float:asin(Float:x){
if(x < 1 && x > -1) return x+(1.0/2.0)*(floatpower(x,3)/3.0)+((1.0*3.0)/(2.0*4.0))*(floatpower(x,5)/5.0)+((1.0*3.0*5.0)/(2.0*4.0*6.0))*(floatpower(x,7)/7.0)+((1.0*3.0*5.0*7.0)/(2.0*4.0*6.0*8.0))*(floatpower(x,9)/9.0)+((1.0*3.0*5.0*7.0*9.0)/(2.0*4.0*6.0*8.0*10.0))*(floatpower(x,11)/11.0);
return float(UNKNOWN);
}
stock Float:acos(Float:x){
if(x < 1 && x > -1) return (pi/2.0)-asin(x);
return float(UNKNOWN);
}
stock Float:atan(Float:x){
if(x < 1 && x > -1) return x-(1.0/3.0)*floatpower(x,3)+(1.0/5.0)*floatpower(x,5)-(1.0/7.0)*floatpower(x,7)+(1.0/9.0)*floatpower(x,9)-(1.0/11.0)*floatpower(x,11)+(1.0/13.0)*floatpower(x,13)-(1.0/15.0)*floatpower(x,15)+(1.0/17.0)*floatpower(x,17)-(1.0/19.0)*floatpower(x,19)+(1.0/21.0)*floatpower(x,21)-(1.0/23.0)*floatpower(x,23)+(1.0/25.0)*floatpower(x,25);;
return float(UNKNOWN);
}
// INI
/*
* IniAdd
* IniIntSet
* IniInt
* IniSet
* IniGet
* IniFloat
* IniFloatSet
* IniBool
* IniBoolSet
* IniDelete
* IniIsSet
*/
stock IniAdd(file[],header[],key[],value=1) return IniIntSet(file,header,key,IniInt(file,header,key) + value);
stock IniIntSet(file[],header[],key[],value) return IniSet(file,header,key,RetStr(value));
stock IniInt(file[],header[],key[]) return strval(IniGet(file,header,key));
stock IniSet(file[],header[],key[],value[]){
new bool:infile;
if(!fexist(file)) fcreate(file);
frename(file,join(file,".tmp"));
fcreate(file);
new File:fh1 = fopen(join(file,".tmp"),io_read),File:fh2 = fopen(file,io_write);
if(!fh1 || !fh2) return false;
new temp[256],bool:inheader;
while(fread(fh1,temp)){
StripNewLine(temp);
if(inheader){
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(!equal(header,left(right(temp,2),2),false)) inheader = false;
new p = strfind(temp,"=",true),tmp[256];
if(p > 0) tmp = left(temp,p);
if(equal(tmp,key,false)){
format(temp,sizeof(temp),"%s=%s",key,value);
infile = true;
break;
}
}
else{
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(equal(header,left(right(temp,2),2),false)) inheader = true;
}
fwrite(fh2,join(temp,"\r\n"));
}
fclose(fh1);
fclose(fh2);
if(!infile){
inheader = false;
frename(file,join(file,".tmp"));
fcreate(file);
fh1 = fopen(join(file,".tmp"),io_read),fh2 = fopen(file,io_write);
if(!fh1 || !fh2) return false;
new bool:fin;
while(fread(fh1,temp)){
StripNewLine(temp);
if(fin == false){
if(inheader){
fwrite(fh2,sprintf("%s=%s\r\n",key,value));
fin = true;
}
else{
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(equal(header,left(right(temp,2),2),false)) inheader = true;
}
}
fwrite(fh2,join(temp,"\r\n"));
}
if(!inheader){
fwrite(fh2,sprintf("||%s||\r\n",header));
fwrite(fh2,sprintf("%s=%s\r\n",key,value));
}
fclose(fh1);
fclose(fh2);
}
fremove(join(file,".tmp"));
return true;
}
stock IniGet(file[],header[],key[]){
new retstr[256];
if(!fexist(file)) return retstr;
new File:fhandle = fopen(file,io_readwrite);
if(!fhandle) return retstr;
new temp[256],bool:inheader;
while(fread(fhandle,temp)){
StripNewLine(temp);
if(inheader){
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(!equal(header,left(right(temp,2),2),false)) inheader = false;
new p = strfind(temp,"=",true),tmp[256];
if(p > 0) tmp = left(temp,p);
if(equal(tmp,key,false)){
new len = strlen(temp);
if(p!=-1 && p+1<len)
format(retstr,sizeof(retstr),"%s",right(tmp,len-p-1));
break;
}
}
else{
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(equal(header,left(right(temp,2),2),false)) inheader = true;
}
}
fclose(fhandle);
return retstr;
}
stock Float:IniFloat(file[],header[],key[]) return floatstr(IniGet(file,header,key));
stock IniFloatSet(file[],header[],key[],Float:value) return IniSet(file,header,key,strfloat(value));
stock bool:IniBool(file[],header[],key[]) return bool:strval(InitGet(file,header,key));
stock IniBoolSet(file[],header[],key[],bool:value) return IniSet(file,header,key,RetStr(value));
stock IniDelete(file[],header[],{Float,_}:...){
if(!fexist(file)) return false;
frename(file,join(file,".tmp"));
fcreate(file);
new File:fh1 = fopen(file,io_write),File:fh2 = fopen(join(file,".tmp"),io_read),num = numargs(),key[64];
if(num == 3) GetArgString(2,key);
if(!fh1 || !fh2) return false;
new temp[256],bool:inheader;
while(fread(fh2,temp)){
StripNewLine(temp);
new bool:dontwrite;
if(inheader){
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(!equal(header,left(right(temp,2),2),false)) inheader = false;
if(num == 3){
new p = strfind(temp,"=",true),tmp[256];
if(p > 0) tmp = left(temp,p);
if(equal(tmp,key,false)){
dontwrite = true;
break;
}
}
else dontwrite = true;
}
else{
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(equal(header,left(right(temp,2),2),false)) inheader = true;
}
if(!dontwrite) fwrite(fh1,join(temp,"\r\n"));
}
fclose(fh1);
fclose(fh2);
fremove(fh2);
return true;
}
stock IniIsSet(file[],header[],key[]){
if(!fexist(file)) return false;
new File:fhandle = fopen(file,io_readwrite);
if(!fhandle) return false;
new temp[256],bool:inheader,bool:isset;
while(fread(fhandle,temp)){
StripNewLine(temp);
if(inheader){
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(!equal(header,left(right(temp,2),2),false)) inheader = false;
new p = strfind(temp,"=",true),tmp[256];
if(p > 0) tmp = left(temp,p);
if(equal(tmp,key,false)){
isset = true;
break;
}
}
else{
if(temp[0] == '|' && temp[1] == '|' && temp[strlen(temp)] == '|' && temp[strlen(temp)-1] == '|') if(equal(header,left(right(temp,2),2),false)) inheader = true;
}
}
fclose(fhandle);
return isset;
}
// Zones
/*
* IsPlayerInZone
* GetPlayerZone
* GetZoneName
*/
stock IsPlayerInZone(playerid,zoneid){
if(PropertyInt(sprintf("P:%d zone",playerid)) != zoneid) return false;
return true;
}
stock GetPlayerZone(playerid) return PropertyInt(sprintf("P:%d zone",playerid));
stock GetZoneName(zoneid) return zones[zoneid][MAPZONE_NAME];
// Time
/*
* SetTimer
* KillTimer
* GetTickCount
* SetTimerEx
* KillTimerEx
* Wait
* SetWorldRealTime
* SetWorldTime
*/
native S_SetTimer(funcname[], interval, repeating) = SetTimer;
native S_KillTimer(timerid) = KillTimer;
native S_GetTickCount() = GetTickCount;
native S_SetWorldTime(hour) = SetWorldTime;
stock SetTimer(funcname[],interval,repeating){
#if DEBUG == true
printf("SetTimer(%s,%d,%d)",funcname,interval,repeating);
#endif
return S_SetTimer(funcname,interval,repeating);
}
stock KillTimer(timerid){
#if DEBUG == true
printf("KillTimer(%d)",timerid);
#endif
S_KillTimer(timerid);
}
stock GetTickCount(){
#if DEBUG == true
printf("GetTickCount()");
#endif
return S_GetTickCount();
}
stock Wait(time){
new stamp = tickcount();
while(tickcount() - stamp < time){}
}
public SetWorldRealTime(){
new hour,minute,second;
gettime(hour,minute,second);
SetWorldTime(hour);
}
stock SetWorldTime(hour){
#if DEBUG == true
printf("SetWorldTime(%d)",hour);
#endif
S_SetWorldTime(hour);
PropertyIntSet("WorldTime",hour);
}
stock GetWorldTime() return PropertyInt("WorldTime");
#if !defined _ste_included
#define func0(%1); if (num == 0 && strcmp(str, "%1") == 0) %1();
#define func1(%1); if (num == 1 && strcmp(str, "%1") == 0) %1(func[0]);
#define func2(%1); if (num == 2 && strcmp(str, "%1") == 0) %1(func[0], func[1]);
#define func3(%1); if (num == 3 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2]);
#define func4(%1); if (num == 4 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2], func[3]);
#define func5(%1); if (num == 4 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2], func[3], func[4]);
#define func6(%1); if (num == 4 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2], func[3], func[4], func[5]);
#define func7(%1); if (num == 4 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2], func[3], func[4], func[5], func[6]);
#define func8(%1); if (num == 4 && strcmp(str, "%1") == 0) %1(func[0], func[1], func[2], func[3], func[4], func[5], func[6], func[7]);
enum timerdat{
FUNCTION[128],
TRIGGERED,
INTERVAL,
REPEAT,
NUMPARS,
PARAMETER[MAX_PARS]
}
new timers[MAX_TIMERS][2];
public SetTimerEx(...){
new timerd[MAX_TIMERS][timerdat],numt,na = numargs();
if(!na){
new i,j=GetTickCount();
for(i=0;i<MAX_TIMERS;i++){
new k = timerd[i][TRIGGERED];
if(k){
if(!timers[i][0]){
timerd[i][TRIGGERED] = 0;
timerd[i][REPEAT] = 0;
}
else if(j - k >= timerd[i][INTERVAL]) break;
}
}
if(i == MAX_TIMERS) return 0;
FUNCTIONLIST(timerd[i][FUNCTION],timerd[i][NUMPARS],timerd[i][PARAMETER]);
if(timerd[i][REPEAT] == 1){
timerd[i][TRIGGERED] = GetTickCount();
timers[i][1] = SetTimer("SetTimerEx",timerd[i][INTERVAL],0);
}
else timerd[i][TRIGGERED] = 0;
}
else{
if(na < 3 || numt == MAX_TIMERS) return 0;
new str[128],i,j;
for(i=0;i<sizeof(str);i++){
j = getarg(0,i);
if(j != 0) str[i] = j;
else break;
}
for(j=0;j<MAX_TIMERS;j++) if(!timerd[j][TRIGGERED]) break;
for( ; i; i--) timerd[j][FUNCTION][i-1] = str[i - 1];
timerd[j][TRIGGERED] = GetTickCount();
i = getarg(1);
timerd[j][INTERVAL] = i;
i = getarg(2);
timerd[j][REPEAT] = i ? 1 : 0;
na -= 3;
timerd[j][NUMPARS] = na;
for(i=0;i<na && i < MAX_PARS;i++) timerd[j][PARAMETER][i] = getarg(i + 3);
numt++;
i = SetTimer("SetTimerEx",timerd[j][INTERVAL],0);
timers[j][0] = i;
timers[j][1] = i;
return i;
}
return 0;
}
stock KillTimerEx(timerid){
for(new i=0;i<MAX_TIMERS;i++){
if(timers[i][0] == timerid){
KillTimer(timers[i][1]);
timers[i][1] = 0;
timers[i][0] = 0;
return true;
}
}
return false;
}
stock FUNCTIONLIST(str[],num,func[]){
func1(print);
func1(SetGameModeText);
func1(SetTeamCount);
func1(ShowNameTags);
func1(ShowPlayerMarkers);
func0(GameModeExit);
func1(SetWorldTime);
func3(SendClientMessage);
func2(SendClientMessageToAll);
func3(SendDeathMessage);
func3(GameTextForAll);
func4(GameTextForPlayer);
func1(SpawnPlayer);
func4(SetPlayerPos);
func2(SetPlayerScore);
func2(SetPlayerHealth);
func2(GivePlayerMoney);
func2(SetPlayerFacingAngle);
func1(ResetPlayerMoney);
func2(SetPlayerMoney);
func1(wiper);
func3(SetTimer);
func1(KillTimer);
func1(KillTimerEx);
func2(SetPlayerSkin);
func2(PropertySet);
func2(PropertyIntSet);
func2(PropertyFloatSet);
func1(RemovePlayerFromVehicle);
func8(CreateVehicle);
func4(SetVehiclePos);
func2(SetVehicleZAngle);
func4(SetVehicleParamsForPlayer);
func1(SetVehicleToRespawn);
func1(ResetPlayerWeapons);
func3(GivePlayerWeapon);
func1(Kick);
func1(Ban);
func2(SetPlayerColor);
func1(DisablePlayerCheckpoint);
func5(SetPlayerCheckpoint);
func2(SetPlayerInterior);
func4(SetPlayerCameraPos);
func4(SetPlayerCameraLookAt);
func1(SetCameraBehindPlayer);
func5(PlayerPlaySound);
func2(fcopy);
func2(frename);
func2(SetPlayerTeam);
func4(GameTextForTeam);
func4(SetTeamPos);
func1(KickTeam);
func1(BanTeam);
func2(SetPlayerColourAlpha);
func2(TakePlayerMoney);
func2(SetTeamScore);
func2(GiveTeamMoney);
func3(SendClientMessageToAllOthers);
func2(Eraser);
func2(SendClientMessageToAdmins);
func3(GameTextForAdmins);
func1(Wait);
func3(IniAdd);
func4(IniIntSet);
func4(IniSet);
func1(freset);
func1(fcreate);
func2(fdeleteline);
func0(SetWorldRealTime);
func1(ResetPlayerWorldBounds);
func1(SetAllColour);
func2(AddPlayerHealth);
func1(S_Kick);
func1(S_Ban);
}
#endif