Guest User

MX_Master

a guest
Nov 19th, 2008
670
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 28.78 KB | None | 0 0
  1. /*
  2.     ---------------------------------------------
  3.         Easy Vehicle Selector
  4.     -----------------------------
  5.  
  6.     coded by:
  7.         - MX_Master (icq:4894700)
  8.  
  9.     for:
  10.         - SA:MP 0.2 server
  11.  
  12.     may used as:
  13.         - filterscript only
  14.  
  15.     while coding used:
  16.         - PHP Expert Editor 4.2
  17.         - PawnoX
  18.         - SA:MP server 0.2.2
  19.         - SA:MP client 0.2.2 R3
  20.         - brains :)
  21.  
  22.     release date:
  23.         12.11.2008
  24.  
  25.     --------
  26. */
  27.  
  28. // some includes
  29. #include <a_samp>
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. // max string length (if not defined in a_samp.inc  )
  42. #if !defined MAX_STRING
  43. #define MAX_STRING 255
  44. #endif
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56. // redefining codes of some buttons
  57. #undef KEY_UP
  58. #undef KEY_DOWN
  59. #undef KEY_LEFT
  60. #undef KEY_RIGHT
  61. #define KEY_UP      65408
  62. #define KEY_DOWN    128
  63. #define KEY_LEFT    65408
  64. #define KEY_RIGHT   128
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76. // player's info textDraw params
  77. #define plInfoTDposX            600.0
  78. #define plInfoTDposY            380.0
  79. #define plInfoTDletterXsize     0.3
  80. #define plInfoTDletterYsize     1.2
  81. #define plInfoTDalignment       3
  82. #define plInfoTDoutlineSize     1
  83. #define plTempInfoDelay         3000 // msec
  84.  
  85.  
  86. // player info textDraw messages
  87. #define vehInfoPattern          "Name:  ~g~~h~%s  ~w~( model: ~y~~h~%d ~w~)~n~Category:  ~g~~h~%s ~y~~h~%d~n~~n~~w~Modifications:  ~g~~h~%s~n~~w~Colours:  ~y~~h~%d  %d~n~ "
  88. #define notInVeh                "Enter ~g~~h~any vehicle ~w~first~n~ "
  89. #define vehDestroyed            "Vehicle ~r~~h~destroyed~n~ "
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. // chat colors
  102. #define cInfoTitle  0xFF6600AA
  103. #define cMainInfo   0xFFFF99AA
  104. #define cOtherInfo  0xDDDDDDAA
  105. #define cBad        0xFF4646AA
  106.  
  107.  
  108. // chat messages
  109. #define typeNextCommandToStart  "Type /vSel in chat box to enter vehicle selector, help - /vHelp"
  110.  
  111. // FS help messages
  112. #define cmdList                 "easyVehicleSelector CHAT COMMANDS:"
  113. #define cmdStr1                 "  /vHelp - help info;    /vInfo - show current vehicle's info"
  114. #define cmdStr2                 "  /vSel - enter vehicle selector;    /vDel - destroy current vehicle"
  115. #define cmdStr3                 "  /save {comment} - export to file '{GTASA dir}/savedpositions.txt' current vehicle's data"
  116. #define buttonsList             "easyVehicleSelector KEYS:"
  117. #define buttonsStr1             "  VEHICLE ENTER / EXIT - quit from vehicle selector"
  118. #define buttonsStr2             "  SPRINT - create selected vehicle"
  119. #define buttonsStr3             "  WS - list vehicle categories;    AD - list vehicles of selected category"
  120. #define buttonsStr4             "  WASD + WALK - change vehicle's color 1 / 2"
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. // some params
  133. #define vCount              206 // originally is 212, but my sa-mp R3 client will crashed if one of RC vehicles selected
  134. #define vNameLen            32 // string length, do not change
  135. #define vCatCount           14 // originally is 15, but my sa-mp R3 client will crashed if last category selected
  136. #define vCatNameLen         16 // string length, do not change
  137. #define vModCount           4 // do not change
  138. #define vModNameLen         20 // string length, do not change
  139. #define vColorCount         128 // do not change
  140.  
  141. #define metersUp            0.0 // selected vehicle will be created at player's current pos + "metersUp" meters up
  142.  
  143. #define keyCheckInterval    200 // msec, key check delay
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. // player/vehicle pos
  156. enum
  157. {
  158.     Float:xPos,
  159.     Float:yPos,
  160.     Float:zPos,
  161.     Float:zAngle
  162. }
  163.  
  164.  
  165.  
  166.  
  167. // vehicle selector's params for every player
  168. enum vSelParams
  169. {
  170.     vSelModeEnabled,
  171.  
  172.     vCurCat,
  173.     vCurID[vCatCount],
  174.  
  175.     Float:vSavedPos[4],
  176.     vSavedWorld,
  177.     vSavedInterior,
  178.     vSavedVehicleID,
  179.  
  180.     vKeyCheckerTimer,
  181.  
  182.     vVehID,
  183.     vVehColor1[vCount],
  184.     vVehColor2[vCount]
  185. }
  186.  
  187. stock
  188.     vSel[MAX_PLAYERS][vSelParams],
  189.  
  190.     Text:infoTD[MAX_PLAYERS],
  191.     infoTDcreated[MAX_PLAYERS char]
  192. ;
  193.  
  194.  
  195.  
  196.  
  197. // vehicle categories
  198. enum
  199. {
  200.     bike,
  201.     sport,
  202.     saloon,
  203.     convertible,
  204.     stationWagon,
  205.     lowrider,
  206.     offRoad,
  207.     industrial,
  208.     publicService,
  209.     unique,
  210.     helicopter,
  211.     airplane,
  212.     boat,
  213.     trailer/*,
  214.     rcVehicle*/ // my sa-mp R3 client will crashed if this category selected
  215. }
  216.  
  217. stock vCatName[vCatCount][vCatNameLen] =
  218. {
  219.     "Bike",
  220.     "Sport",
  221.     "Saloon",
  222.     "Convertible",
  223.     "Station Wagon",
  224.     "Lowrider",
  225.     "Off Road",
  226.     "Industrial",
  227.     "Public Service",
  228.     "Unique",
  229.     "Helicopter",
  230.     "Airplane",
  231.     "Boat",
  232.     "Trailer"/*,
  233.     "RC Vehicle"*/ // my sa-mp R3 client will crashed if this category selected
  234. };
  235.  
  236.  
  237.  
  238.  
  239. // vehicle modifications
  240. enum
  241. {
  242.     none,
  243.     transfender,
  244.     locoLowCo,
  245.     wheelArchAngels
  246. }
  247.  
  248. stock vModName[vModCount][vModNameLen] =
  249. {
  250.     "None",
  251.     "Transfender",
  252.     "Loco Low Co",
  253.     "Wheel Arch Angels"
  254. };
  255.  
  256.  
  257.  
  258.  
  259. // vehicle ID ranges for each category in "vData" array
  260. enum vIDparams
  261. {
  262.     vCatMinID,
  263.     vCatMaxID
  264. }
  265.  
  266. stock vID[vCatCount][vIDparams] =
  267. {
  268.     { 0, 12 },
  269.     { 13, 32 },
  270.     { 33, 66 },
  271.     { 67, 70 },
  272.     { 71, 75 },
  273.     { 76, 83 },
  274.     { 84, 95 },
  275.     { 96, 120 },
  276.     { 121, 139 },
  277.     { 140, 163 },
  278.     { 164, 172 },
  279.     { 173, 183 },
  280.     { 184, 193 },
  281.     { 194, 205 }/*,
  282.     { 205, 211 }*/ // my sa-mp R3 client will crashed if one of this vehicles selected
  283. };
  284.  
  285.  
  286.  
  287.  
  288. // each vehicle params
  289. enum vParams
  290. {
  291.     vCat,
  292.     vName[vNameLen],
  293.     vModel,
  294.     vMod
  295. }
  296.  
  297. stock vData[vCount][vParams] =
  298. {
  299. //  cat,    name,   model,  modifications
  300.     { bike, "Bike", 509, none }, // 0 - 12
  301.     { bike, "BMX", 481, none },
  302.     { bike, "Mountain Bike", 510, none },
  303.     { bike, "Faggio", 462, none },
  304.     { bike, "Pizzaboy", 448, none },
  305.     { bike, "Sanchez", 468, none },
  306.     { bike, "BF-400", 581, none },
  307.     { bike, "PCJ-600", 461, none },
  308.     { bike, "FCR-900", 521, none },
  309.     { bike, "NRG-500", 522, none },
  310.     { bike, "Freeway", 463, none },
  311.     { bike, "Wayfarer", 586, none },
  312.     { bike, "Quad", 471, none },
  313.  
  314.     { sport, "Flash", 565, wheelArchAngels }, // 13 - 32
  315.     { sport, "Club", 589, transfender },
  316.     { sport, "Blista Compact", 496, transfender },
  317.     { sport, "Uranus", 558, wheelArchAngels },
  318.     { sport, "Sabre", 475, transfender },
  319.     { sport, "Phoenix", 603, transfender },
  320.     { sport, "ZR-350", 477, transfender },
  321.     { sport, "Alpha", 602, transfender },
  322.     { sport, "Euros", 587, wheelArchAngels },
  323.     { sport, "Jester", 559, wheelArchAngels },
  324.     { sport, "Banshee Banger", 429, none },
  325.     { sport, "Buffalo", 402, transfender },
  326.     { sport, "Cheetah", 415, transfender },
  327.     { sport, "Turismo", 451, transfender },
  328.     { sport, "Super GT", 506, transfender },
  329.     { sport, "Bullet", 541, transfender },
  330.     { sport, "Infernus", 411, transfender },
  331.     { sport, "Hotring Racer 1", 502, none },
  332.     { sport, "Hotring Racer 2", 503, none },
  333.     { sport, "Hotring", 494, none },
  334.  
  335.     { saloon, "Manana", 410, transfender }, // 33 - 66
  336.     { saloon, "Previon", 436, transfender },
  337.     { saloon, "Fortune", 526, transfender },
  338.     { saloon, "Cadrona", 527, transfender },
  339.     { saloon, "Bravura", 401, transfender },
  340.     { saloon, "Virgo", 491, transfender },
  341.     { saloon, "Esperanto", 419, transfender },
  342.     { saloon, "Clover", 542, transfender },
  343.     { saloon, "Tampa", 549, transfender },
  344.     { saloon, "Buccaneer", 518, transfender },
  345.     { saloon, "Majestic", 517, transfender },
  346.     { saloon, "Picador", 600, transfender },
  347.     { saloon, "Sentinel", 405, transfender },
  348.     { saloon, "Washington", 421, transfender },
  349.     { saloon, "Premier", 426, transfender },
  350.     { saloon, "Admiral", 445, transfender },
  351.     { saloon, "Greenwood", 492, transfender },
  352.     { saloon, "Elegant", 507, transfender },
  353.     { saloon, "Nebula", 516, transfender },
  354.     { saloon, "Willard", 529, transfender },
  355.     { saloon, "Vincent", 540, transfender },
  356.     { saloon, "Intruder", 546, transfender },
  357.     { saloon, "Primo", 547, transfender },
  358.     { saloon, "Sunrise", 550, transfender },
  359.     { saloon, "Merit", 551, transfender },
  360.     { saloon, "Emperor", 585, transfender },
  361.     { saloon, "Glendale", 466, transfender },
  362.     { saloon, "Bloodring Banger", 504, none },
  363.     { saloon, "Glendale Shit", 604, none },
  364.     { saloon, "Oceanic", 467, transfender },
  365.     { saloon, "Hermes", 474, transfender },
  366.     { saloon, "Stafford", 580, transfender },
  367.     { saloon, "Sultan", 560, wheelArchAngels },
  368.     { saloon, "Elegy", 562, wheelArchAngels },
  369.  
  370.     { convertible, "Comet", 480, transfender }, // 67 - 70
  371.     { convertible, "Stallion", 439, transfender },
  372.     { convertible, "Feltzer", 533, transfender },
  373.     { convertible, "Windsor", 555, transfender },
  374.  
  375.     { stationWagon, "Perenniel", 404, transfender }, // 71 - 75
  376.     { stationWagon, "Solair", 458, transfender },
  377.     { stationWagon, "Regina", 479, transfender },
  378.     { stationWagon, "Stratum", 561, wheelArchAngels },
  379.     { stationWagon, "Moonbeam", 418, transfender },
  380.  
  381.     { lowrider, "Tahoma", 566, locoLowCo }, // 76 - 83
  382.     { lowrider, "Voodoo", 412, locoLowCo },
  383.     { lowrider, "Blade", 536, locoLowCo },
  384.     { lowrider, "Savanna", 567, locoLowCo },
  385.     { lowrider, "Remington", 534, locoLowCo },
  386.     { lowrider, "Broadway", 575, transfender },
  387.     { lowrider, "Tornado", 576, locoLowCo },
  388.     { lowrider, "Slamvan", 535, locoLowCo },
  389.  
  390.     { offRoad, "Bandito", 568, none }, // 84 - 95
  391.     { offRoad, "BF Injection", 424, transfender },
  392.     { offRoad, "Mesa", 500, transfender },
  393.     { offRoad, "Landstalker", 400, transfender },
  394.     { offRoad, "Rancher", 489, transfender },
  395.     { offRoad, "Ranchlure", 505, transfender },
  396.     { offRoad, "Huntley", 579, transfender },
  397.     { offRoad, "Sandking", 495, none },
  398.     { offRoad, "Monster", 444, none },
  399.     { offRoad, "Monster 'A'", 556, none },
  400.     { offRoad, "Monster 'B'", 557, none },
  401.     { offRoad, "Dune", 573, none },
  402.  
  403.     { industrial, "Tractor", 531, none }, // 96 - 120
  404.     { industrial, "Bobcat", 422, transfender },
  405.     { industrial, "Sadler", 543, none },
  406.     { industrial, "Sadler Shit", 605, none },
  407.     { industrial, "Yosemite", 554, none },
  408.     { industrial, "Walton", 478, transfender },
  409.     { industrial, "Utility Van", 552, none },
  410.     { industrial, "Pony", 413, none },
  411.     { industrial, "Burrito", 482, none },
  412.     { industrial, "Topfun", 459, none },
  413.     { industrial, "Rumpo", 440, none },
  414.     { industrial, "Newsvan", 582, none },
  415.     { industrial, "Benson", 499, none },
  416.     { industrial, "Mule", 414, none },
  417.     { industrial, "DFT-30", 578, none },
  418.     { industrial, "Boxville", 498, none },
  419.     { industrial, "Boxburg", 609, none },
  420.     { industrial, "Yankee", 456, none },
  421.     { industrial, "Trashmaster", 408, none },
  422.     { industrial, "Flatbed", 455, none },
  423.     { industrial, "Petrol Tanker", 514, none },
  424.     { industrial, "Roadtrain", 515, none },
  425.     { industrial, "Linerunner", 403, none },
  426.     { industrial, "Cement Truck", 524, none },
  427.     { industrial, "Packer", 443, none },
  428.  
  429.     { publicService, "Bus", 431, none }, // 121 - 139
  430.     { publicService, "Coach", 437, none },
  431.     { publicService, "Taxi", 420, transfender },
  432.     { publicService, "Cabbie", 438, transfender },
  433.     { publicService, "Ambulance", 416, none },
  434.     { publicService, "Firetruck", 544, none },
  435.     { publicService, "Firetruck", 407, none },
  436.     { publicService, "Cop Bike HPV1000", 523, none },
  437.     { publicService, "Police Car (LSPD)", 596, none },
  438.     { publicService, "Police Car (SFPD)", 597, none },
  439.     { publicService, "Police Car (LVPD)", 598, none },
  440.     { publicService, "Ranger", 599, none },
  441.     { publicService, "FBI Truck", 528, none },
  442.     { publicService, "Enforcer", 427, none },
  443.     { publicService, "FBI Rancher", 490, none },
  444.     { publicService, "S.W.A.T.", 601, none },
  445.     { publicService, "Patriot", 470, none },
  446.     { publicService, "Barracks", 433, none },
  447.     { publicService, "Rhino", 432, none },
  448.  
  449.     { unique, "Kart", 571, none }, // 140 - 163
  450.     { unique, "Vortex", 539, none },
  451.     { unique, "Caddy", 457, none },
  452.     { unique, "Forklift", 530, none },
  453.     { unique, "Baggage", 485, none },
  454.     { unique, "Tug", 583, none },
  455.     { unique, "Sweeper", 574, none },
  456.     { unique, "Towtruck", 525, none },
  457.     { unique, "Mower", 572, none },
  458.     { unique, "Hustler", 545, transfender },
  459.     { unique, "Hotknife", 434, none },
  460.     { unique, "Stretch", 409, transfender },
  461.     { unique, "Romero", 442, transfender },
  462.     { unique, "Camper", 483, none },
  463.     { unique, "Journey", 508, none },
  464.     { unique, "Hotdog", 588, none },
  465.     { unique, "Mr Whoopee", 423, none },
  466.     { unique, "Securicar", 428, none },
  467.     { unique, "Tram", 449, none },
  468.     { unique, "Dozer", 486, none },
  469.     { unique, "Combine Harvester", 532, none },
  470.     { unique, "Dumper", 406, none },
  471.     { unique, "Freight (Train)", 537, none },
  472.     { unique, "Brownstreak (Train)", 538, none },
  473.  
  474.     { helicopter, "Sparrow", 469, none }, // 164 - 172
  475.     { helicopter, "Seasparrow", 447, none },
  476.     { helicopter, "San News Maverick", 488, none },
  477.     { helicopter, "Maverick", 487, none },
  478.     { helicopter, "Police Maverick", 497, none },
  479.     { helicopter, "Hunter", 425, none },
  480.     { helicopter, "Cargobob", 548, none },
  481.     { helicopter, "Raindance", 563, none },
  482.     { helicopter, "Leviathan", 417, none },
  483.  
  484.     { airplane, "Rustler", 476, none }, // 173 - 183
  485.     { airplane, "Dodo", 593, none },
  486.     { airplane, "Skimmer", 460, none },
  487.     { airplane, "Stuntplane", 513, none },
  488.     { airplane, "Cropduster", 512, none },
  489.     { airplane, "Beagle", 511, none },
  490.     { airplane, "Hydra", 520, none },
  491.     { airplane, "Shamal", 519, none },
  492.     { airplane, "Nevada", 553, none },
  493.     { airplane, "AT400", 577, none },
  494.     { airplane, "Andromada", 592, none },
  495.  
  496.     { boat, "Dinghy", 473, none }, // 184 - 193
  497.     { boat, "Coastguard", 472, none },
  498.     { boat, "Speeder", 452, none },
  499.     { boat, "Predator", 430, none },
  500.     { boat, "Squallo", 446, none },
  501.     { boat, "Jetmax", 493, none },
  502.     { boat, "Marquis", 484, none },
  503.     { boat, "Launch", 595, none },
  504.     { boat, "Reefer", 453, none },
  505.     { boat, "Tropic", 454, none },
  506.  
  507.     { trailer, "Tug Stairs Trailer", 608, none }, // 194 - 205
  508.     { trailer, "Baggage Trailer 'B'", 607, none },
  509.     { trailer, "Baggage Trailer 'A'", 606, none },
  510.     { trailer, "Utility Trailer", 611, none },
  511.     { trailer, "Farm Trailer", 610, none },
  512.     { trailer, "Petrol Trailer", 584, none },
  513.     { trailer, "Article Trailer 2", 450, none },
  514.     { trailer, "Article Trailer", 435, none },
  515.     { trailer, "Article Trailer 3", 591, none },
  516.     { trailer, "Freight Flat Trailer (Train)", 569, none },
  517.     { trailer, "Freight Box Trailer (Train)", 590, none },
  518.     { trailer, "Streak Trailer (Train)", 570, none }/*,
  519.  
  520.     { rcVehicle, "RC Bandit", 441, none }, // 206 - 211, my sa-mp R3 client will crashed if one of this vehicles selected
  521.     { rcVehicle, "RC Tiger", 564, none },
  522.     { rcVehicle, "RC Baron", 464, none },
  523.     { rcVehicle, "RC Raider", 465, none },
  524.     { rcVehicle, "RC Goblin", 501, none },
  525.     { rcVehicle, "RC Cam", 594, none }*/
  526. };
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565. public OnFilterScriptInit()
  566. {
  567.     // default values for some vars for each player
  568.     for ( new playerid = 0; playerid < MAX_PLAYERS; playerid++ )
  569.     {
  570.         vSel[playerid][vSavedVehicleID] = INVALID_VEHICLE_ID;
  571.  
  572.         for ( new cat = 0; cat < vCatCount; cat++ ) vSel[playerid][vCurID][cat] = vID[cat][vCatMinID];
  573.         for ( new v = 0; v < vCount; v++ )
  574.         {
  575.             vSel[playerid][vVehColor1][v] = 1;
  576.             vSel[playerid][vVehColor2][v] = 1;
  577.         }
  578.     }
  579.  
  580.     return 1;
  581. }
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603. public OnPlayerConnect(playerid)
  604. {
  605.     SendClientMessage( playerid, cInfoTitle, typeNextCommandToStart );
  606.     return 1;
  607. }
  608.  
  609.  
  610.  
  611.  
  612. public OnPlayerDisconnect ( playerid, reason )
  613. {
  614.     // default values for some vars for each player
  615.     vSel[playerid][vSelModeEnabled] = 0;
  616.     vSel[playerid][vCurCat] = 0;
  617.  
  618.     for ( new cat = 0; cat < vCatCount; cat++ ) vSel[playerid][vCurID][cat] = vID[cat][vCatMinID];
  619.     for ( new v = 0; v < vCount; v++ )
  620.     {
  621.         vSel[playerid][vVehColor1][v] = 1;
  622.         vSel[playerid][vVehColor2][v] = 1;
  623.     }
  624.  
  625.     return 1;
  626. }
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648. public OnPlayerCommandText( playerid, cmdtext[] )
  649. {
  650.     // chat help
  651.     if( strcmp( cmdtext, "/vHelp", true ) == 0 )
  652.     {
  653.         SendClientMessage( playerid, cInfoTitle, cmdList );
  654.         SendClientMessage( playerid, cMainInfo, cmdStr1 );
  655.         SendClientMessage( playerid, cMainInfo, cmdStr2 );
  656.         SendClientMessage( playerid, cMainInfo, cmdStr3 );
  657.         SendClientMessage( playerid, cMainInfo, " " );
  658.         SendClientMessage( playerid, cInfoTitle, buttonsList );
  659.         SendClientMessage( playerid, cMainInfo, buttonsStr1 );
  660.         SendClientMessage( playerid, cMainInfo, buttonsStr2 );
  661.         SendClientMessage( playerid, cMainInfo, buttonsStr3 );
  662.         SendClientMessage( playerid, cMainInfo, buttonsStr4 );
  663.  
  664.         return 1;
  665.     }
  666.  
  667.  
  668.  
  669.  
  670.     // current vehicle's info
  671.     if ( strcmp( cmdtext, "/vInfo", true ) == 0 )
  672.     {
  673.         if ( !IsPlayerInAnyVehicle(playerid) )
  674.         {
  675.             // show to player TextDraw "enter any veh first"
  676.             showPlayerInfoTD( playerid, notInVeh );
  677.             SetTimerEx( "hidePlayerInfoTD", plTempInfoDelay, 0, "d", playerid );
  678.  
  679.             return 1;
  680.         }
  681.  
  682.         // show veh stats to player
  683.         showVehicleInfoToPlayer(playerid);
  684.  
  685.         return 1;
  686.     }
  687.  
  688.  
  689.  
  690.  
  691.     // destroy current vehicle
  692.     if ( strcmp( cmdtext, "/vDel", true ) == 0 )
  693.     {
  694.         if ( !IsPlayerInAnyVehicle(playerid) )
  695.         {
  696.             // show to player TextDraw "enter any veh first"
  697.             showPlayerInfoTD( playerid, notInVeh );
  698.             SetTimerEx( "hidePlayerInfoTD", plTempInfoDelay, 0, "d", playerid );
  699.  
  700.             return 1;
  701.         }
  702.  
  703.         // show to player TextDraw "veh destroyed"
  704.         showPlayerInfoTD( playerid, vehDestroyed );
  705.         SetTimerEx( "hidePlayerInfoTD", plTempInfoDelay, 0, "d", playerid );
  706.  
  707.         // destroying
  708.         DestroyVehicle( GetPlayerVehicleID(playerid) );
  709.  
  710.         return 1;
  711.     }
  712.  
  713.  
  714.  
  715.  
  716.     // toggle veh mode ON
  717.     if ( strcmp( cmdtext, "/vSel", true ) == 0 )
  718.     {
  719.         if ( vSel[playerid][vSelModeEnabled] == 1 ) return 1;
  720.  
  721.         vSel[playerid][vSelModeEnabled] = 1;
  722.  
  723.         // key state checker enabled
  724.         vSelKeyStateCheckStart(playerid);
  725.  
  726.         // save player's pos, interior, world
  727.         vSel[playerid][vSavedVehicleID] = IsPlayerInAnyVehicle(playerid) ? GetPlayerVehicleID(playerid) : INVALID_VEHICLE_ID;
  728.         vSel[playerid][vSavedWorld] = GetPlayerVirtualWorld(playerid);
  729.         vSel[playerid][vSavedInterior] = GetPlayerInterior(playerid);
  730.         GetPlayerFacingAngle( playerid, vSel[playerid][vSavedPos][zAngle] );
  731.         GetPlayerPos( playerid, vSel[playerid][vSavedPos][xPos], vSel[playerid][vSavedPos][yPos], vSel[playerid][vSavedPos][zPos] );
  732.  
  733.         // create car
  734.         vSel[playerid][vVehID] = CreateVehicle
  735.         (
  736.             vData[ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ][vModel],
  737.             vSel[playerid][vSavedPos][xPos],
  738.             vSel[playerid][vSavedPos][yPos],
  739.             vSel[playerid][vSavedPos][zPos] + metersUp,
  740.             vSel[playerid][vSavedPos][zAngle],
  741.             vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ],
  742.             vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ],
  743.             50000
  744.         );
  745.         SetVehicleVirtualWorld( vSel[playerid][vVehID], playerid + 1 );
  746.         LinkVehicleToInterior( vSel[playerid][vVehID], vSel[playerid][vSavedInterior] );
  747.  
  748.         // show veh stats to player
  749.         updateVehicleInfo(playerid);
  750.  
  751.         // toggle spectating created vehicle
  752.         SetPlayerVirtualWorld( playerid, playerid + 1 );
  753.  
  754.         TogglePlayerSpectating( playerid, 1 );
  755.         PlayerSpectateVehicle( playerid, vSel[playerid][vVehID], SPECTATE_MODE_NORMAL );
  756.  
  757.         return 1;
  758.     }
  759.  
  760.  
  761.  
  762.  
  763.     return 0;
  764. }
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. public OnPlayerKeyStateChange ( playerid, newkeys, oldkeys )
  787. {
  788.     if ( vSel[playerid][vSelModeEnabled] == 1 )
  789.     {
  790.         // toggle veh mode OFF
  791.         if ( newkeys == KEY_SECONDARY_ATTACK )
  792.         {
  793.             // key state checker disabled
  794.             vSelKeyStateCheckStop(playerid);
  795.  
  796.             // hide vehicle stats
  797.             hidePlayerInfoTD(playerid);
  798.  
  799.             // return player's pos, interior, world
  800.             SetTimerEx( "returnPlayerBack", 100, 0, "d", playerid );
  801.  
  802.             // stop cpectating
  803.             TogglePlayerSpectating( playerid, 0 );
  804.  
  805.             // destroy car
  806.             DestroyVehicle( vSel[playerid][vVehID] );
  807.  
  808.             vSel[playerid][vSelModeEnabled] = 0;
  809.  
  810.             return 1;
  811.         }
  812.  
  813.  
  814.  
  815.  
  816.         // create selected vehicle
  817.         if ( newkeys == KEY_SPRINT )
  818.         {
  819.             // key state checker disabled
  820.             vSelKeyStateCheckStop(playerid);
  821.  
  822.             // hide vehicle stats
  823.             hidePlayerInfoTD(playerid);
  824.  
  825.             // return player's pos, interior, world
  826.             SetTimerEx( "putPlayerInSelectedVehicle", 100, 0, "d", playerid );
  827.  
  828.             // stop cpectating
  829.             TogglePlayerSpectating( playerid, 0 );
  830.  
  831.             vSel[playerid][vSelModeEnabled] = 0;
  832.         }
  833.     }
  834.  
  835.  
  836.  
  837.  
  838.     return 1;
  839. }
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881. forward updateVehicleInfo ( playerid );
  882. public updateVehicleInfo ( playerid )
  883. {
  884.     // update veh's info TextDraw
  885.     new infoText[MAX_STRING];
  886.     format
  887.     (
  888.         infoText, MAX_STRING,
  889.         vehInfoPattern,
  890.         vData[ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ][vName],
  891.         vData[ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ][vModel],
  892.         vCatName[ vSel[playerid][vCurCat] ],
  893.         vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] - vID[ vSel[playerid][vCurCat] ][vCatMinID] + 1,
  894.         vModName[ vData[ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ][vMod] ],
  895.         vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ],
  896.         vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ]
  897.     );
  898.     showPlayerInfoTD( playerid, infoText );
  899.  
  900.     return 1;
  901. }
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923. forward vSelKeyStateCheckStart ( playerid );
  924. public vSelKeyStateCheckStart ( playerid )
  925. {
  926.     vSel[playerid][vKeyCheckerTimer] = SetTimerEx( "vSelKeyStateCheck", keyCheckInterval, 1, "d", playerid );
  927.  
  928.     return 1;
  929. }
  930.  
  931. stock vSelKeyStateCheckStop ( playerid )
  932. {
  933.     KillTimer( vSel[playerid][vKeyCheckerTimer] );
  934. }
  935.  
  936.  
  937.  
  938.  
  939. forward vSelKeyStateCheck ( playerid );
  940. public vSelKeyStateCheck ( playerid )
  941. {
  942.     // get player's pressed buttons
  943.     new keys, updown, leftright;
  944.     GetPlayerKeys( playerid, keys, updown, leftright );
  945.  
  946.  
  947.  
  948.  
  949.     // pressed keys check ( do not change any of this ;) )
  950.     if ( updown != 0 || leftright != 0 )
  951.     {
  952.         // WS keys
  953.         if ( updown == KEY_UP )
  954.         {
  955.             if ( keys == KEY_WALK ) // color1++
  956.             {
  957.                 vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ]++;
  958.                 if ( vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] >= vColorCount )
  959.                     vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] = 0;
  960.  
  961.                 ChangeVehicleColor( vSel[playerid][vVehID], vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ], vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] );
  962.             }
  963.             else // cat++
  964.             {
  965.                 vSel[playerid][vCurCat]++;
  966.                 if ( vSel[playerid][vCurCat] >= vCatCount ) vSel[playerid][vCurCat] = 0;
  967.  
  968.                 showSelectedVehicleToPlayer(playerid);
  969.             }
  970.         }
  971.         else if ( updown == KEY_DOWN )
  972.         {
  973.             if ( keys == KEY_WALK ) // color1--
  974.             {
  975.                 vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ]--;
  976.                 if ( vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] < 0 )
  977.                     vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] = vColorCount - 1;
  978.  
  979.                 ChangeVehicleColor( vSel[playerid][vVehID], vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ], vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] );
  980.             }
  981.             else // cat--
  982.             {
  983.                 vSel[playerid][vCurCat]--;
  984.                 if ( vSel[playerid][vCurCat] < 0 ) vSel[playerid][vCurCat] = vCatCount - 1;
  985.  
  986.                 showSelectedVehicleToPlayer(playerid);
  987.             }
  988.         }
  989.  
  990.         // AD keys
  991.         if ( leftright == KEY_LEFT )
  992.         {
  993.             if ( keys == KEY_WALK ) // color2--
  994.             {
  995.                 vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ]--;
  996.                 if ( vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] < 0 )
  997.                     vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] = vColorCount - 1;
  998.  
  999.                 ChangeVehicleColor( vSel[playerid][vVehID], vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ], vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] );
  1000.             }
  1001.             else // veh--
  1002.             {
  1003.                 vSel[playerid][vCurID][ vSel[playerid][vCurCat] ]--;
  1004.                 if ( vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] < vID[ vSel[playerid][vCurCat] ][vCatMinID] )
  1005.                     vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] = vID[ vSel[playerid][vCurCat] ][vCatMaxID];
  1006.  
  1007.                 showSelectedVehicleToPlayer(playerid);
  1008.             }
  1009.         }
  1010.         else if ( leftright == KEY_RIGHT )
  1011.         {
  1012.             if ( keys == KEY_WALK ) // color2++
  1013.             {
  1014.                 vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ]++;
  1015.                 if ( vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] >= vColorCount )
  1016.                     vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] = 0;
  1017.  
  1018.                 ChangeVehicleColor( vSel[playerid][vVehID], vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ], vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ] );
  1019.             }
  1020.             else // veh++
  1021.             {
  1022.                 vSel[playerid][vCurID][ vSel[playerid][vCurCat] ]++;
  1023.                 if ( vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] > vID[ vSel[playerid][vCurCat] ][vCatMaxID] )
  1024.                     vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] = vID[ vSel[playerid][vCurCat] ][vCatMinID];
  1025.  
  1026.                 showSelectedVehicleToPlayer(playerid);
  1027.             }
  1028.         }
  1029.  
  1030.         updateVehicleInfo(playerid);
  1031.     }
  1032.  
  1033.  
  1034.  
  1035.  
  1036.     return 1;
  1037. }
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058. stock showPlayerInfoTD ( playerid, text[] )
  1059. {
  1060.     if ( infoTDcreated{playerid} == 1 )
  1061.     {
  1062.         TextDrawHideForPlayer( playerid, infoTD[playerid] );
  1063.         TextDrawSetString( infoTD[playerid], text );
  1064.     }
  1065.     else
  1066.     {
  1067.         createPlayerInfoTD( playerid, text );
  1068.         infoTDcreated{playerid} = 1;
  1069.     }
  1070.  
  1071.     TextDrawShowForPlayer( playerid, infoTD[playerid] );
  1072. }
  1073.  
  1074.  
  1075.  
  1076.  
  1077. forward hidePlayerInfoTD ( playerid );
  1078. public hidePlayerInfoTD ( playerid )
  1079. {
  1080.     TextDrawHideForPlayer( playerid, infoTD[playerid] );
  1081.     return 1;
  1082. }
  1083.  
  1084.  
  1085.  
  1086.  
  1087. stock createPlayerInfoTD ( playerid, text[] = ":)" )
  1088. {
  1089.     infoTD[playerid] = TextDrawCreate( plInfoTDposX, plInfoTDposY, text );
  1090.     TextDrawLetterSize( infoTD[playerid], plInfoTDletterXsize, plInfoTDletterYsize );
  1091.     TextDrawAlignment( infoTD[playerid], plInfoTDalignment );
  1092.     TextDrawSetOutline( infoTD[playerid], plInfoTDoutlineSize );
  1093. }
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115. forward returnPlayerBack ( playerid );
  1116. public returnPlayerBack ( playerid )
  1117. {
  1118.     if ( vSel[playerid][vSavedVehicleID] != INVALID_VEHICLE_ID ) PutPlayerInVehicle( playerid, vSel[playerid][vSavedVehicleID], 0 );
  1119.     else setPlayerPos( playerid, vSel[playerid][vSavedPos][xPos], vSel[playerid][vSavedPos][yPos], vSel[playerid][vSavedPos][zPos], vSel[playerid][vSavedPos][zAngle], vSel[playerid][vSavedInterior], vSel[playerid][vSavedWorld] );
  1120. }
  1121.  
  1122.  
  1123.  
  1124.  
  1125. stock setPlayerPos ( playerid, Float:x = -6666.0, Float:y = -6666.0, Float:z = -6666.0, Float:angle = -6666.0, interior = -1, world = -1 )
  1126. {
  1127.     if ( world != -1 && world != GetPlayerVirtualWorld(playerid) ) SetPlayerVirtualWorld( playerid, world );
  1128.  
  1129.     if ( interior != -1 && interior != GetPlayerInterior(playerid) ) SetPlayerInterior( playerid, interior );
  1130.  
  1131.     if ( angle != -6666.0 )
  1132.     {
  1133.         SetPlayerFacingAngle( playerid, angle );
  1134.         SetCameraBehindPlayer(playerid);
  1135.     }
  1136.  
  1137.     if ( x == -6666.0 || y == -6666.0 || z == -6666.0 )
  1138.     {
  1139.         new Float:curX, Float:curY, Float:curZ;
  1140.         GetPlayerPos( playerid, curX, curY, curZ );
  1141.  
  1142.         if ( x == -6666.0 ) x = curX;
  1143.         if ( y == -6666.0 ) y = curY;
  1144.         if ( z == -6666.0 ) z = curZ;
  1145.     }
  1146.     SetPlayerPos( playerid, x, y, z );
  1147. }
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169. stock showSelectedVehicleToPlayer ( playerid )
  1170. {
  1171.     new oldVeh = vSel[playerid][vVehID];
  1172.     SetVehicleVirtualWorld( oldVeh, playerid + 300 );
  1173.     vSel[playerid][vVehID] = CreateVehicle
  1174.     (
  1175.         vData[ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ][vModel],
  1176.         vSel[playerid][vSavedPos][xPos],
  1177.         vSel[playerid][vSavedPos][yPos],
  1178.         vSel[playerid][vSavedPos][zPos] + metersUp,
  1179.         vSel[playerid][vSavedPos][zAngle],
  1180.         vSel[playerid][vVehColor1][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ],
  1181.         vSel[playerid][vVehColor2][ vSel[playerid][vCurID][ vSel[playerid][vCurCat] ] ],
  1182.         50000
  1183.     );
  1184.     SetVehicleVirtualWorld( vSel[playerid][vVehID], playerid + 1 );
  1185.     LinkVehicleToInterior( vSel[playerid][vVehID], vSel[playerid][vSavedInterior] );
  1186.     updateVehicleInfo(playerid);
  1187.  
  1188.     PlayerSpectateVehicle( playerid, vSel[playerid][vVehID], SPECTATE_MODE_NORMAL );
  1189.  
  1190.     DestroyVehicle( oldVeh );
  1191. }
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213. forward putPlayerInSelectedVehicle ( playerid );
  1214. public putPlayerInSelectedVehicle ( playerid )
  1215. {
  1216.     if ( vSel[playerid][vSavedVehicleID] != INVALID_VEHICLE_ID ) DestroyVehicle( vSel[playerid][vSavedVehicleID] );
  1217.  
  1218.     SetVehicleVirtualWorld( vSel[playerid][vVehID], vSel[playerid][vSavedWorld] );
  1219.     LinkVehicleToInterior( vSel[playerid][vVehID], vSel[playerid][vSavedInterior] );
  1220.  
  1221.     SetPlayerVirtualWorld( playerid, vSel[playerid][vSavedWorld] );
  1222.     SetPlayerInterior( playerid, vSel[playerid][vSavedInterior] );
  1223.     PutPlayerInVehicle( playerid, vSel[playerid][vVehID], 0 );
  1224.  
  1225.     SetVehiclePos( vSel[playerid][vVehID], vSel[playerid][vSavedPos][xPos], vSel[playerid][vSavedPos][yPos], vSel[playerid][vSavedPos][zPos] );
  1226.     SetVehicleZAngle( vSel[playerid][vVehID], vSel[playerid][vSavedPos][zAngle] );
  1227.  
  1228.     return 1;
  1229. }
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251. stock showVehicleInfoToPlayer ( playerid )
  1252. {
  1253.     new infoText[MAX_STRING], v, vehModel;
  1254.     vehModel = GetVehicleModel( GetPlayerVehicleID(playerid) );
  1255.  
  1256.     for ( v = 0; v < vCount; v++ ) if ( vehModel == vData[v][vModel] ) break;
  1257.     format
  1258.     (
  1259.         infoText, MAX_STRING,
  1260.         vehInfoPattern,
  1261.         vData[v][vName],
  1262.         vehModel,
  1263.         vCatName[ vData[v][vCat] ],
  1264.         v - vID[ vData[v][vCat] ][vCatMinID] + 1,
  1265.         vModName[ vData[v][vMod] ],
  1266.         -1,
  1267.         -1
  1268.     );
  1269.  
  1270.     showPlayerInfoTD( playerid, infoText );
  1271.     SetTimerEx( "hidePlayerInfoTD", plTempInfoDelay + 3000, 0, "d", playerid );
  1272. }
Advertisement
Add Comment
Please, Sign In to add comment