mechanic_job.inc 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. /*
  2. file: jobs/mechanic_job.inc
  3. description: The mechanic job for SARP.
  4. author: Unknown
  5. improved by: Jay Cortez
  6. date created: 30th March 2018
  7. */
  8. // Mechanic price
  9. #define MECH_HYDRAULICS_PRICE 500
  10. #define MECH_REPAIR_PRICE 5000
  11. #define MECH_NOS_PRICE 1000
  12. #define MECH_NEON_PRICE 5000
  13. // Cooldowns
  14. #define MECH_HYDRAULICS_COOLDOWN (30000)
  15. // Neon colors
  16. #define NEON_RED 18647
  17. #define NEON_BLUE 18648
  18. #define NEON_GREEN 18649
  19. #define NEON_YELLOW 18650
  20. #define NEON_PINK 18651
  21. #define NEON_WHITE 18652
  22. // Command to repair the vehicle
  23. CMD:repair(playerid, params[])
  24. return cmd_fix(playerid, params);
  25. CMD:fix(playerid, params[])
  26. {
  27. if(PlayerInfo[playerid][pJob] != 7)
  28. return SendClientMessage(playerid, COLOR_GREY, "You are not a mechanic.");
  29. if(IsPlayerRestricted(playerid))
  30. return SendClientMessage(playerid, COLOR_GREY, "You are unable to do that at this time.");
  31. if(!CanRepair[playerid])
  32. return SendClientMessage(playerid, COLOR_GREY, "You must wait before repairing your vehicle again.");
  33. if(!IsPlayerInAnyVehicle(playerid))
  34. return SendClientMessage(playerid, COLOR_GREY, "You are not in any vehicle.");
  35. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
  36. return SendClientMessage(playerid, COLOR_GREY, "You are not the driver.");
  37. if(GetVehicleSpeed(GetPlayerVehicleID(playerid)) > 5)
  38. return SendClientMessage(playerid, COLOR_WHITE, "You can't do that while the car is moving!");
  39. if(PlayerInfo[playerid][pCash] < MECH_REPAIR_PRICE)
  40. return SendClientMessage(playerid, COLOR_GREY, "You don't have enough money to do this.");
  41. // Open hood of vehicle
  42. new engine, lights, alarm, doors, bonnet, boot, objective, Float:x, Float:y, Float:z;
  43. GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
  44. SetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, 1, boot, objective);
  45. // Set checkpoint at hood
  46. GetPosAheadVehicle(GetPlayerVehicleID(playerid), x, y, z);
  47. SetPlayerCheckpointEx(playerid, x, y, z, 1.5);
  48. // Set variables
  49. repairVeh[playerid] = GetPlayerVehicleID(playerid);
  50. isRepairing[playerid] = true;
  51. // Action
  52. new mechanicStr[128];
  53. format(mechanicStr, sizeof(mechanicStr), "* %s pops the bonnet of the vehicle open, then opens the door and steps out.", PlayerICName(playerid));
  54. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  55. format(mechanicStr, sizeof(mechanicStr), "> %s pops the bonnet of the vehicle open, then opens the door and steps out.", PlayerICName(playerid));
  56. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  57. // Remove and inform player
  58. RemovePlayerFromVehicle(playerid);
  59. SendClientMessage(playerid, COLOR_YELLOW, "Make your way to the bonnet to finish the repair of the vehicle.");
  60. return 1;
  61. }
  62. Timer:RepairTimer(playerid) return CanRepair[playerid] = true;
  63. // Called when the player enter the repair checkpoint
  64. OnEnterRepairCheckpoint(playerid) {
  65. // Game text and sound
  66. GameTextForPlayer(playerid, "~r~Vehicle repair ~g~completed.", 3000, 5);
  67. PlayerPlaySound(playerid, 1133, 0, 0, 0);
  68. ImproveMechanicSkill(playerid, 1);
  69. // Determine repair cooldown
  70. new minutesToWait;
  71. switch(PlayerInfo[playerid][pMechSkill]) {
  72. case 0 .. 49: minutesToWait = 5;
  73. case 50 .. 99: minutesToWait = 4;
  74. case 100 .. 199: minutesToWait = 3;
  75. case 200 .. 399: minutesToWait = 2;
  76. default: minutesToWait = 1;
  77. }
  78. SetTimerEx("Timer_RepairTimer", 60000 * minutesToWait, false, "i", playerid);
  79. // Repair the vehicle
  80. RepairVehicle(repairVeh[playerid]);
  81. SetVehicleHealth(repairVeh[playerid], 1000);
  82. // charge money
  83. GiveMoney(playerid, -MECH_REPAIR_PRICE);
  84. switch(GetVehicleModel(repairVeh[playerid])){
  85. case 427, 432, 601:SetVehicleHealth(repairVeh[playerid], 10000); //Enforcer, Tank, Splashy
  86. case 470, 433, 596, 598:SetVehicleHealth(repairVeh[playerid], 1350); //Humvee, Barracks, SAPD-Cruisers
  87. case 425, 520, 528:SetVehicleHealth(repairVeh[playerid], 1500); //Hunter, Hydra, smaller SWAT Van
  88. }
  89. if(sVehicleInfo[repairVeh[playerid]][v_faction] == 6 && GetVehicleModel(sVehicleInfo[repairVeh[playerid]][v_id]) == 409)
  90. {
  91. SetVehicleHealth(sVehicleInfo[repairVeh[playerid]][v_id], 10000);
  92. }
  93. new mechanicStr[128];
  94. // Bicycle fix
  95. if(IsABicycle(repairVeh[playerid])) {
  96. SetVehicleEngineState(repairVeh[playerid], 0);
  97. format(mechanicStr, sizeof(mechanicStr), "* %s fixes the bike's chain and tests it out.", PlayerICName(playerid));
  98. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  99. format(mechanicStr, sizeof(mechanicStr), "> %s fixes the bike's chain and tests it out.", PlayerICName(playerid));
  100. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  101. }
  102. else {
  103. format(mechanicStr, sizeof(mechanicStr), "* %s moves their hands around inside of the engine bay, attempting to fix the vehicle.", PlayerICName(playerid));
  104. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  105. format(mechanicStr, sizeof(mechanicStr), "> %s moves their hands around inside of the engine bay, attempting to fix the vehicle.", PlayerICName(playerid));
  106. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  107. }
  108. // Close the bonnet
  109. new engine, lights, alarm, doors, bonnet, boot, objective;
  110. GetVehicleParamsEx(repairVeh[playerid], engine, lights, alarm, doors, bonnet, boot, objective);
  111. SetVehicleParamsEx(repairVeh[playerid], engine, lights, alarm, doors, 0, boot, objective);
  112. // Reset variables and remove checkpoint
  113. repairVeh[playerid] = INVALID_VEHICLE_ID;
  114. isRepairing[playerid] = false;
  115. CanRepair[playerid] = false;
  116. DisablePlayerCheckpointEx(playerid);
  117. return 1;
  118. }
  119. CMD:nos(playerid)
  120. {
  121. if(PlayerInfo[playerid][pJob] != 7) return SendClientMessage(playerid, COLOR_GREY, "You are not a mechanic.");
  122. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can use this command only when in vehicle.");
  123. if(PlayerInfo[playerid][pCash] < MECH_NOS_PRICE)
  124. return SendClientMessage(playerid, COLOR_GREY, "You cant afford the nos.");
  125. new vehicleid = GetPlayerVehicleID(playerid);
  126. if(!IsValidNosVehicle(vehicleid))
  127. return SendClientMessage(playerid, COLOR_GREY, "This vehicle does not support nos.");
  128. new Float:x, Float:y, Float:z;
  129. new vehspeed = GetVehicleSpeed(vehicleid);
  130. if(vehspeed > 5) return SendClientMessage(playerid, COLOR_GREY, "Please stop your vehicle in order to add nitro.");
  131. GetPosAheadVehicle(GetPlayerVehicleID(playerid), x, y, z);
  132. SetPlayerCheckpointEx(playerid, x, y, z, 1.5);
  133. // Open hood of vehicle
  134. new engine, lights, alarm, doors, bonnet, boot, objective;
  135. GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
  136. SetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, 1, boot, objective);
  137. RemovePlayerFromVehicle(playerid);
  138. SendClientMessage(playerid, COLOR_GREY, "Make your way to the hood and add nitro to your vehicle.");
  139. nosVehicle[playerid] = vehicleid;
  140. isAddingNos[playerid] = true;
  141. return 1;
  142. }
  143. OnEnterNosCheckpoint(playerid) {
  144. // Game text and sound
  145. GameTextForPlayer(playerid, "~r~Vehicle NOS addition ~g~completed.", 3000, 5);
  146. PlayerPlaySound(playerid, 1133, 0, 0, 0);
  147. // Add nos
  148. AddVehicleComponent(nosVehicle[playerid], 1009);
  149. new mechanicStr[128];
  150. format(mechanicStr, sizeof(mechanicStr), "* %s moves their hands around inside of the engine bay, attempting to add nos to the vehicle.", PlayerICName(playerid));
  151. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  152. format(mechanicStr, sizeof(mechanicStr), "> %s moves their hands around inside of the engine bay, attempting to add nos to the vehicle.", PlayerICName(playerid));
  153. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  154. // Close the bonnet
  155. new engine, lights, alarm, doors, bonnet, boot, objective;
  156. GetVehicleParamsEx(nosVehicle[playerid], engine, lights, alarm, doors, bonnet, boot, objective);
  157. SetVehicleParamsEx(nosVehicle[playerid], engine, lights, alarm, doors, 0, boot, objective);
  158. // Reset variables and remove checkpoint
  159. nosVehicle[playerid] = INVALID_VEHICLE_ID;
  160. isAddingNos[playerid] = false;
  161. DisablePlayerCheckpointEx(playerid);
  162. return 1;
  163. }
  164. // Command to apply hydraulics to vehicle
  165. CMD:hyd(playerid, params[])
  166. return cmd_hydraulics(playerid, params);
  167. CMD:hydraulics(playerid, params[]) {
  168. if(PlayerInfo[playerid][pJob] != 7)
  169. return SendClientMessage(playerid, COLOR_GREY, "You are not a mechanic.");
  170. if(UseHYDTimer[playerid])
  171. return SendClientMessage(playerid, COLOR_GREY, "You must wait before doing that again.");
  172. if(!IsPlayerInAnyVehicle(playerid))
  173. return SendClientMessage(playerid, COLOR_GREY, "You are not in a vehicle.");
  174. if(PlayerInfo[playerid][pCash] < MECH_HYDRAULICS_PRICE)
  175. return SendClientMessage(playerid, COLOR_GREY, "You cant afford the hydraulics.");
  176. GiveMoney(playerid, -MECH_HYDRAULICS_PRICE);
  177. // Add hydraulics to vehicle
  178. AddVehicleComponent(GetPlayerVehicleID(playerid), 1087);
  179. // Play sound
  180. PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
  181. // Action
  182. new mechanicStr[128];
  183. format(mechanicStr, sizeof(mechanicStr), "* %s has modified the vehicle with hydraulics.", PlayerICName(playerid));
  184. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  185. format(mechanicStr, sizeof(mechanicStr), "> %s has modified the vehicle with hydraulics.", PlayerICName(playerid));
  186. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  187. // Set the hydraulics timer
  188. UseHYDTimer[playerid] = 1;
  189. SetTimerEx("Timer_UseHYD", MECH_HYDRAULICS_COOLDOWN, false, "i", playerid);
  190. return 1;
  191. }
  192. Timer:UseHYD(playerid)
  193. {
  194. if(!IsPlayerConnected(playerid)) return 0;
  195. if(UseHYDTimer[playerid])
  196. {
  197. UseHYDTimer[playerid] = 0;
  198. }
  199. return 1;
  200. }
  201. // Command to refill a player's vehicle
  202. CMD:refill(playerid, params[]) {
  203. if(PlayerInfo[playerid][pJob] != 7)
  204. return SendClientMessage(playerid, COLOR_GREY, "You are not a mechanic.");
  205. if(PlayerInfo[playerid][pMechTime])
  206. return SendClientMessage(playerid, COLOR_GREY, "You must wait before you can offer another refill.");
  207. new target, money;
  208. if(sscanf(params, "ui", target, money))
  209. return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /refill [playerid/PartOfName] [price]");
  210. if(!IsPlayerConnected(target))
  211. return SendClientMessage(playerid, COLOR_GREY, "Unknown player.");
  212. if(target == playerid)
  213. return SendClientMessage(playerid, COLOR_GREY, "You cannot offer to refill your own vehicle.");
  214. if(money < 1000 || money > 5000)
  215. return SendClientMessage(playerid, COLOR_GREY, "The price cannot be lower then $1,000 or above $5,000.");
  216. if(!IsPlayerInRangeOfPlayer(8.0, playerid, target))
  217. return SendClientMessage(playerid, COLOR_GREY, "That player is not near you.");
  218. if(!IsPlayerInAnyVehicle(target))
  219. return SendClientMessage(playerid, COLOR_GREY, "That player is not in a vehicle.");
  220. new mechanicStr[128];
  221. format(mechanicStr, sizeof(mechanicStr), "* You offered %s to refill their car for $%i .", PlayerICName(target), money);
  222. SendClientMessage(playerid, COLOR_LIGHTBLUE, mechanicStr);
  223. format(mechanicStr, sizeof(mechanicStr), "* Mechanic %s wants to refill your car for $%i. Type [/accept refill] to accept.", PlayerICName(playerid), money);
  224. SendClientMessage(target, COLOR_LIGHTBLUE, mechanicStr);
  225. // Set variables
  226. PlayerInfo[playerid][pMechTime] = 60;
  227. RefillOffer[target] = playerid;
  228. RefillPrice[target] = money;
  229. return 1;
  230. }
  231. // Called when a refill request is accepted
  232. OnRefillAccept(playerid) {
  233. new refiller = RefillOffer[playerid];
  234. if(refiller == INVALID_PLAYER_ID)
  235. return SendClientMessage(playerid, COLOR_GREY, "Nobody offered to refill your vehicle.");
  236. if(!IsPlayerConnected(refiller)) {
  237. RefillOffer[playerid] = INVALID_PLAYER_ID;
  238. return SendClientMessage(playerid, COLOR_GREY, "The player that offered you a refill has disconnected.");
  239. }
  240. if(!IsPlayerInAnyVehicle(playerid))
  241. return SendClientMessage(playerid, COLOR_GREY, "You are not in any vehicle.");
  242. new refillPrice = RefillPrice[playerid];
  243. if(PlayerInfo[playerid][pCash] < refillPrice)
  244. return SendClientMessage(playerid, COLOR_GREY, "You cannot afford the refill.");
  245. if(UseAcceptTimer[playerid])
  246. return SendClientMessage(playerid, COLOR_GREY, "You must wait before doing that.");
  247. new vehid = GetPlayerVehicleID(playerid),
  248. fuelToAdd = 0;
  249. // Improve the refiller's mechanic skill by 1
  250. ImproveMechanicSkill(refiller, 1);
  251. // Determine the fuel to add
  252. switch(PlayerInfo[refiller][pMechSkill]) {
  253. case 0 .. 49: fuelToAdd = 15;
  254. case 50 .. 99: fuelToAdd = 40;
  255. case 100 .. 199: fuelToAdd = 60;
  256. case 200 .. 399: fuelToAdd = 80;
  257. default: fuelToAdd = 100;
  258. }
  259. // Send messages
  260. new mechanicStr[128];
  261. format(mechanicStr, sizeof(mechanicStr), "* You refilled your vehicle with %i, for $%i by mechanic %s.", fuelToAdd, refillPrice, PlayerICName(refiller));
  262. SendClientMessage(playerid, COLOR_LIGHTBLUE, mechanicStr);
  263. format(mechanicStr, sizeof(mechanicStr), "* You refilled %s's vehicle with %i, the $%i has been added to your bank account.", PlayerICName(playerid), fuelToAdd, refillPrice);
  264. SendClientMessage(RefillOffer[playerid], COLOR_LIGHTBLUE, mechanicStr);
  265. // Take and add money
  266. PlayerInfo[refiller][pAccount] += refillPrice;
  267. GiveMoney(playerid, -refillPrice);
  268. // Set the fuel
  269. if(Gas[vehid] < 110)
  270. Gas[vehid] += fuelToAdd;
  271. // Reset refill offer
  272. RefillOffer[playerid] = INVALID_PLAYER_ID;
  273. RefillPrice[playerid] = 0;
  274. // Set accept timer
  275. UseAcceptTimer[playerid] = 1;
  276. SetTimerEx("Timer_UseAccept", 60 *1000, 0, "i", playerid);
  277. return 1;
  278. }
  279. // Command to add neon strips to a vehicle
  280. CMD:neon(playerid, params[]) {
  281. if(PlayerInfo[playerid][pJob] != 7)
  282. return SendClientMessage(playerid, COLOR_GREY, "You are not a mechanic.");
  283. if(!IsPlayerInAnyVehicle(playerid))
  284. return SendClientMessage(playerid, COLOR_GREY, "You are not in any vehicle.");
  285. if(PlayerInfo[playerid][pCash] < MECH_NEON_PRICE)
  286. return SendClientMessage(playerid, COLOR_GREY, "You cannot afford the neon.");
  287. new vehid = GetPlayerVehicleID(playerid);
  288. if(IsInvalidNeonVehicle(vehid))
  289. return SendClientMessage(playerid, COLOR_GREY, "You cannot add neon to this vehicle.");
  290. ShowPlayerDialog(playerid, 101, DIALOG_STYLE_LIST, "Neon",
  291. "Red\n\
  292. Blue\n\
  293. Green\n\
  294. Yellow\n\
  295. Pink\n\
  296. White",
  297. "Mod", "Cancel");
  298. return 1;
  299. }
  300. // Called when a player has selected neon from the dialog
  301. Dialog_NeonResponse(playerid, listitem) {
  302. // Set the neon
  303. new vehid = GetPlayerVehicleID(playerid);
  304. switch(listitem)
  305. {
  306. case 0: AddVehicleNeon(vehid, NEON_RED);
  307. case 1: AddVehicleNeon(vehid, NEON_BLUE);
  308. case 2: AddVehicleNeon(vehid, NEON_GREEN);
  309. case 3: AddVehicleNeon(vehid, NEON_YELLOW);
  310. case 4: AddVehicleNeon(vehid, NEON_PINK);
  311. case 5: AddVehicleNeon(vehid, NEON_WHITE);
  312. }
  313. // Take the money
  314. GiveMoney(playerid, -MECH_NEON_PRICE);
  315. // Play sound
  316. PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
  317. // Action
  318. new mechanicStr[128];
  319. format(mechanicStr, sizeof(mechanicStr), "* %s modifies the vehicle with neon.", PlayerICName(playerid));
  320. SetPlayerChatBubble(playerid, mechanicStr, COLOR_PURPLE, 20.0, 15000);
  321. format(mechanicStr, sizeof(mechanicStr), "> %s modifies the vehicle with neon.", PlayerICName(playerid));
  322. SendClientMessage(playerid, COLOR_PURPLE, mechanicStr);
  323. return 1;
  324. }
  325. // Adds neon to a vehicle
  326. AddVehicleNeon(vehicleid, neon)
  327. {
  328. // Destroy current neons
  329. if(Neon[vehicleid]) DestroyDynamicObjectEx(Neon[vehicleid]);
  330. if(Neon2[vehicleid]) DestroyDynamicObjectEx(Neon2[vehicleid]);
  331. if(Neon3[vehicleid]) DestroyDynamicObjectEx(Neon3[vehicleid]);
  332. if(Neon4[vehicleid]) DestroyDynamicObjectEx(Neon4[vehicleid]);
  333. Neon[vehicleid] = CreateDynamicObject(neon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
  334. Neon2[vehicleid] = CreateDynamicObject(neon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
  335. if(GetVehicleModel(vehicleid) == 409)
  336. {
  337. Neon3[vehicleid] = CreateDynamicObject(neon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
  338. Neon4[vehicleid] = CreateDynamicObject(neon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
  339. }
  340. switch(GetVehicleModel(vehicleid))
  341. {
  342. case 400:
  343. {
  344. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.8, 0.0, 0.0, 0.0);
  345. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.8, 0.0, 0.0, 0.0);
  346. }
  347. case 401:
  348. {
  349. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.6, 0.0, 0.0, 0.0);
  350. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.6, 0.0, 0.0, 0.0);
  351. }
  352. case 402:
  353. {
  354. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.92, 0.0, -0.7, 0.0, 0.0, 0.0);
  355. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.92, 0.0, -0.7, 0.0, 0.0, 0.0);
  356. }
  357. case 404, 466, 467:
  358. {
  359. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.55, 0.0, 0.0, 0.0);
  360. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.55, 0.0, 0.0, 0.0);
  361. }
  362. case 405, 442:
  363. {
  364. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.7, 0.0, 0.0, 0.0);
  365. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.7, 0.0, 0.0, 0.0);
  366. }
  367. case 409:
  368. {
  369. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 1.0, -0.6, 0.0, 0.0, 0.0);
  370. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 1.0, -0.6, 0.0, 0.0, 0.0);
  371. AttachDynamicObjectToVehicle(Neon3[vehicleid], vehicleid, 0.8, -1.0, -0.6, 0.0, 0.0, 0.0);
  372. AttachDynamicObjectToVehicle(Neon4[vehicleid], vehicleid, -0.8, -1.0, -0.6, 0.0, 0.0, 0.0);
  373. }
  374. case 410, 560:
  375. {
  376. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.5, 0.0, 0.0, 0.0);
  377. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.5, 0.0, 0.0, 0.0);
  378. }
  379. case 411, 412, 415, 419, 458, 474:
  380. {
  381. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.65, 0.0, 0.0, 0.0);
  382. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.65, 0.0, 0.0, 0.0);
  383. }
  384. case 413:
  385. {
  386. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.85, 0.0, 0.0, 0.0);
  387. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.85, 0.0, 0.0, 0.0);
  388. }
  389. case 418:
  390. {
  391. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.95, 0.0, 0.0, 0.0);
  392. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.95, 0.0, 0.0, 0.0);
  393. }
  394. case 420, 426, 429, 436:
  395. {
  396. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.55, 0.0, 0.0, 0.0);
  397. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.55, 0.0, 0.0, 0.0);
  398. }
  399. case 421, 422:
  400. {
  401. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.7, 0.0, 0.0, 0.0);
  402. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.7, 0.0, 0.0, 0.0);
  403. }
  404. case 424:
  405. {
  406. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.85, 0.0, -0.5, 0.0, 0.0, 0.0);
  407. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.85, 0.0, -0.5, 0.0, 0.0, 0.0);
  408. }
  409. case 434:
  410. {
  411. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.6, 0.0, -0.75, 0.0, 0.0, 0.0);
  412. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.6, 0.0, -0.75, 0.0, 0.0, 0.0);
  413. }
  414. case 438, 439:
  415. {
  416. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, -0.75, 0.0, 0.0, 0.0);
  417. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, -0.75, 0.0, 0.0, 0.0);
  418. }
  419. case 440:
  420. {
  421. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -1.0, 0.0, 0.0, 0.0);
  422. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -1.0, 0.0, 0.0, 0.0);
  423. }
  424. case 444:
  425. {
  426. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.9, 0.0, 0.0, 0.0, 0.0, 0.0);
  427. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.9, 0.0, 0.0, 0.0, 0.0, 0.0);
  428. }
  429. case 445, 451, 475:
  430. {
  431. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.6, 0.0, 0.0, 0.0);
  432. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.6, 0.0, 0.0, 0.0);
  433. }
  434. case 457:
  435. {
  436. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.55, 0.0, -0.4, 0.0, 0.0, 0.0);
  437. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.55, 0.0, -0.4, 0.0, 0.0, 0.0);
  438. }
  439. case 459:
  440. {
  441. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.8, 0.0, 0.0, 0.0);
  442. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.8, 0.0, 0.0, 0.0);
  443. }
  444. case 477, 480, 579, 580:
  445. {
  446. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.6, 0.0, 0.0, 0.0);
  447. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.6, 0.0, 0.0, 0.0);
  448. }
  449. case 479, 541, 559, 565, 576, 598:
  450. {
  451. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.5, 0.0, 0.0, 0.0);
  452. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.5, 0.0, 0.0, 0.0);
  453. }
  454. case 491, 534..536, 545, 587:
  455. {
  456. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.65, 0.0, 0.0, 0.0);
  457. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.65, 0.0, 0.0, 0.0);
  458. }
  459. case 494, 502, 503, 540, 603:
  460. {
  461. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.7, 0.0, 0.0, 0.0);
  462. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.7, 0.0, 0.0, 0.0);
  463. }
  464. case 495:
  465. {
  466. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.9, 0.0, 0.0, 0.0);
  467. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.9, 0.0, 0.0, 0.0);
  468. }
  469. case 496, 518, 533, 566:
  470. {
  471. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.55, 0.0, 0.0, 0.0);
  472. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.55, 0.0, 0.0, 0.0);
  473. }
  474. case 500:
  475. {
  476. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.2, -0.6, 0.0, 0.0, 0.0);
  477. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.2, -0.6, 0.0, 0.0, 0.0);
  478. }
  479. case 506:
  480. {
  481. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, -0.2, -0.55, 0.0, 0.0, 0.0);
  482. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, -0.2, -0.55, 0.0, 0.0, 0.0);
  483. }
  484. case 527:
  485. {
  486. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.2, -0.5, 0.0, 0.0, 0.0);
  487. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.2, -0.5, 0.0, 0.0, 0.0);
  488. }
  489. case 550:
  490. {
  491. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, -0.2, -0.7, 0.0, 0.0, 0.0);
  492. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, -0.2, -0.7, 0.0, 0.0, 0.0);
  493. }
  494. case 558, 589:
  495. {
  496. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.45, 0.0, 0.0, 0.0);
  497. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.45, 0.0, 0.0, 0.0);
  498. }
  499. case 562:
  500. {
  501. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.1, -0.5, 0.0, 0.0, 0.0);
  502. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.1, -0.5, 0.0, 0.0, 0.0);
  503. }
  504. case 567:
  505. {
  506. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.2, -0.7, 0.0, 0.0, 0.0);
  507. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.2, -0.7, 0.0, 0.0, 0.0);
  508. }
  509. case 575:
  510. {
  511. AttachDynamicObjectToVehicle(Neon[vehicleid], vehicleid, 0.8, 0.0, -0.4, 0.0, 0.0, 0.0);
  512. AttachDynamicObjectToVehicle(Neon2[vehicleid], vehicleid, -0.8, 0.0, -0.4, 0.0, 0.0, 0.0);
  513. }
  514. }
  515. return 1;
  516. }
  517. // This function adds to the mechanic skill of a player
  518. ImproveMechanicSkill(playerid, amount) {
  519. PlayerInfo[playerid][pMechSkill] += amount;
  520. // Send notification if new level reached
  521. if(PlayerInfo[playerid][pMechSkill] == 50)
  522. SendClientMessage(playerid, COLOR_YELLOW, "* Your Mechanic Skill is now Level 2, you can now add more Fuel to Cars.");
  523. else if(PlayerInfo[playerid][pMechSkill] == 100)
  524. SendClientMessage(playerid, COLOR_YELLOW, "* Your Mechanic Skill is now Level 3, you can now add more Fuel to Cars.");
  525. else if(PlayerInfo[playerid][pMechSkill] == 200)
  526. SendClientMessage(playerid, COLOR_YELLOW, "* Your Mechanic Skill is now Level 4, you can now add more Fuel to Cars.");
  527. else if(PlayerInfo[playerid][pMechSkill] == 400)
  528. SendClientMessage(playerid, COLOR_YELLOW, "* Your Mechanic Skill is now Level 5, you can now add more Fuel to Cars.");
  529. return 1;
  530. }