Advertisement
De4dpOol

Leviathan Magnet by De4dpOol.

Feb 28th, 2015
1,816
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.04 KB | None | 0 0
  1. /*==============================================================================
  2. ----------------------------Leviathan Magnet by De4dpOol------------------------
  3. ==============================================================================*/
  4. //============= PS Leviathan or Laviathan? I am confused :/ ==================//
  5.  
  6. //Include(s)//
  7. #include <a_samp>
  8. #include <mapandreas>
  9.  
  10. //Define(s)//
  11. #define HOLDING(%0) \
  12. ((newkeys & (%0)) == (%0))
  13. #define RELEASED(%0) \
  14. (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  15.  
  16. //New(s)//
  17. new MagnetObject[MAX_VEHICLES];
  18. new RopeObject[MAX_VEHICLES];
  19. new LeviathanCarryingVehicle[MAX_VEHICLES] = 0;
  20. new AttachVehicleTimer[MAX_VEHICLES];
  21. new Float:RopeZPos[MAX_VEHICLES];
  22. new MoveUpTimer[MAX_PLAYERS];
  23. new MoveDownTimer[MAX_PLAYERS];
  24. new MovingUp[MAX_PLAYERS];
  25. new MovingDown[MAX_PLAYERS];
  26.  
  27. //Forward(s)//
  28. forward StartUpdatingVehicle(vehicleid, leviathanid);
  29. forward MoveRopeUp(playerid, vehicleid);
  30. forward MoveRopeDown(playerid, vehicleid);
  31.  
  32. //Public(s)//
  33. public OnFilterScriptInit()
  34. {
  35. //Create Leviathan here
  36. CreateVehicle(417, 0.0000, 0.0000, 3.0000, 0.0000, 1, 1, 0);
  37.  
  38. //Attach megnet to every leviathan
  39. for(new i = 0; i < MAX_VEHICLES; i ++)
  40. {
  41. if (GetVehicleModel(i) == 417)
  42. {
  43. RopeZPos[i] = 1.000;
  44. RopeObject[i] = CreateObject(19087, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000);
  45. MagnetObject[i] = CreateObject(3053, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000);
  46.  
  47. AttachObjectToVehicle(RopeObject[i], i, 0.0000, 0.0000, RopeZPos[i], 0.0000, 0.0000, 0.0000);
  48. AttachObjectToObject(MagnetObject[i], RopeObject[i], 0.0000, 0.0000, -2.3000, 0.0000, 0.0000, 0.0000);
  49. }
  50. }
  51.  
  52. MapAndreas_Init(MAP_ANDREAS_MODE_FULL);
  53.  
  54. return 1;
  55. }
  56.  
  57. public OnFilterScriptExit()
  58. {
  59. for(new i = 0; i < MAX_VEHICLES; i ++)
  60. {
  61. if (GetVehicleModel(i) == 417)//if player is in a Leviathan
  62. {
  63. if(LeviathanCarryingVehicle[i] == 1)//if the leviathan is carrying a vehicle
  64. {
  65. KillTimer(AttachVehicleTimer[i]);
  66. LeviathanCarryingVehicle[i] = 0;
  67. DestroyObject(RopeObject[i]);
  68. DestroyObject(MagnetObject[i]);
  69. return 1;
  70. }
  71. }
  72. }
  73. return 1;
  74. }
  75.  
  76. public OnPlayerDeath(playerid, killerid, reason)
  77. {
  78. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER))//if he is a driver
  79. {
  80. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)//if player is in a Leviathan
  81. {
  82. if(LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] == 1)//if the leviathan is carrying a vehicle
  83. {
  84. KillTimer(AttachVehicleTimer[GetPlayerVehicleID(playerid)]);
  85. LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] = 0;
  86. return 1;
  87. }
  88. }
  89. }
  90. return 1;
  91. }
  92.  
  93. public OnVehicleSpawn(vehicleid)
  94. {
  95. if (GetVehicleModel(vehicleid) == 417)//if player is in a Leviathan
  96. {
  97. if((!IsValidObject(RopeObject[vehicleid])) && (!IsValidObject(MagnetObject[vehicleid])))
  98. {
  99. RopeObject[vehicleid] = CreateObject(19087, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000);
  100. MagnetObject[vehicleid] = CreateObject(3053, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000);
  101. AttachObjectToVehicle(RopeObject[vehicleid], vehicleid, 0.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000);
  102. AttachObjectToObject(MagnetObject[vehicleid], RopeObject[vehicleid], 0.0000, 0.0000, -2.3000, 0.0000, 0.0000, 0.0000);
  103. return 1;
  104. }
  105. }
  106. return 1;
  107. }
  108.  
  109. public OnVehicleDeath(vehicleid, killerid)
  110. {
  111. if (GetVehicleModel(vehicleid) == 417)//if player is in a Leviathan
  112. {
  113. if(LeviathanCarryingVehicle[vehicleid] == 1)//if the leviathan is carrying a vehicle
  114. {
  115. KillTimer(AttachVehicleTimer[vehicleid]);
  116. LeviathanCarryingVehicle[vehicleid] = 0;
  117. DestroyObject(RopeObject[vehicleid]);
  118. DestroyObject(MagnetObject[vehicleid]);
  119. return 1;
  120. }
  121. }
  122. return 1;
  123. }
  124.  
  125. public OnPlayerDisconnect(playerid, reason)
  126. {
  127. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER))
  128. {
  129. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)//if player is in a Leviathan
  130. {
  131. if(LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] == 1)//if the leviathan is carrying a vehicle
  132. {
  133. KillTimer(AttachVehicleTimer[GetPlayerVehicleID(playerid)]);
  134. LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] = 0;
  135. return 1;
  136. }
  137. }
  138. }
  139. return 1;
  140. }
  141.  
  142. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  143. {
  144. if((newkeys == KEY_CROUCH) && (IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER))
  145. {
  146. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)//if player is in a Leviathan
  147. {
  148. new Float:pX,Float:pY,Float:pZ;
  149. GetVehiclePos(GetPlayerVehicleID(playerid),pX,pY,pZ);
  150. new Float:vX,Float:vY,Float:vZ;
  151. new Found=0;
  152. new vid=0;
  153. while((vid<MAX_VEHICLES)&&(!Found))
  154. {
  155. vid++;
  156. GetVehiclePos(vid,vX,vY,vZ);
  157. if((floatabs(pX-vX)<2.0)&&(floatabs(pY-vY)<2.0)&&(floatabs((pZ+RopeZPos[GetPlayerVehicleID(playerid)]-3.4)-vZ)<2.0)&&(vid!=GetPlayerVehicleID(playerid)))
  158. {
  159. Found=1;
  160. if(LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] == 1)
  161. {
  162. KillTimer(AttachVehicleTimer[GetPlayerVehicleID(playerid)]);
  163. LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] = 0;
  164. GameTextForPlayer(playerid, "~w~Vehicle ~r~Dropped", 1000, 3);
  165. return 1;
  166. }
  167. if(!IsACar(vid)) return GameTextForPlayer(playerid, "~w~Can Carry ~g~Cars Only", 1000, 3);
  168. AttachVehicleTimer[GetPlayerVehicleID(playerid)] = SetTimerEx("StartUpdatingVehicle", 50, 1, "ii", vid, GetPlayerVehicleID(playerid));
  169. LeviathanCarryingVehicle[GetPlayerVehicleID(playerid)] = 1;
  170. GameTextForPlayer(playerid, "~w~Vehicle ~g~Attached", 1000, 3);
  171. }
  172. if(!Found)
  173. {
  174. //Uncommenting the line below sends the message a lot of times so don't send message here, do it outside loop//
  175. //SendClientMessage(playerid, -1,"There is no vehicle in range.");
  176. }
  177. }
  178. }
  179. }
  180. else if(HOLDING(KEY_YES))
  181. {
  182. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) && (MovingUp[playerid] == 0))
  183. {
  184. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
  185. {
  186. MovingUp[playerid] = 1;
  187. MoveUpTimer[playerid] = SetTimerEx("MoveRopeUp", 200, 1, "ii", playerid, GetPlayerVehicleID(playerid));
  188. }
  189. }
  190. }
  191. else if(RELEASED(KEY_YES))
  192. {
  193. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) && (MovingUp[playerid] == 1))
  194. {
  195. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
  196. {
  197. MovingUp[playerid] = 0;
  198. KillTimer(MoveUpTimer[playerid]);
  199. }
  200. }
  201. }
  202. else if(HOLDING(KEY_NO))
  203. {
  204. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) && (MovingDown[playerid] == 0))
  205. {
  206. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
  207. {
  208. MovingDown[playerid] = 1;
  209. MoveDownTimer[playerid] = SetTimerEx("MoveRopeDown", 200, 1, "ii", playerid, GetPlayerVehicleID(playerid));
  210. }
  211. }
  212. }
  213. else if(RELEASED(KEY_NO))
  214. {
  215. if((IsPlayerInAnyVehicle(playerid)) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) && (MovingDown[playerid] == 1))
  216. {
  217. if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
  218. {
  219. MovingDown[playerid] = 0;
  220. KillTimer(MoveDownTimer[playerid]);
  221. }
  222. }
  223. }
  224. return 1;
  225. }
  226.  
  227. public StartUpdatingVehicle(vehicleid, leviathanid)
  228. {
  229. new Float:MagX, Float:MagY, Float:MagZ;
  230. new Float:MagRZ; new Float:MaxZ;
  231. GetVehiclePos(leviathanid, MagX, MagY, MagZ);
  232. GetVehicleZAngle(leviathanid, MagRZ);
  233. SetVehiclePos(vehicleid, MagX, MagY, MagZ + RopeZPos[leviathanid] - 3.4);
  234. SetVehicleZAngle(vehicleid, MagRZ);
  235. MapAndreas_SetZ_For2DCoord(MagX, MagY, MaxZ);
  236. if(MaxZ > MagZ + RopeZPos[leviathanid] - 3.6) SetVehicleVelocity(leviathanid, 0.0, 0.0, 0.5), GameTextForPlayer(VehicleDriver(leviathanid), "~w~Vehicle ~r~Touching Ground", 1000, 3);
  237. }
  238.  
  239. public MoveRopeDown(playerid, vehicleid)
  240. {
  241. if(RopeZPos[vehicleid] <= -0.5000) return KillTimer(MoveDownTimer[playerid]), MovingDown[playerid] = 0;
  242. RopeZPos[vehicleid] = RopeZPos[vehicleid] - 0.1;
  243. AttachObjectToVehicle(RopeObject[vehicleid], vehicleid, 0.0000, 0.0000, RopeZPos[vehicleid], 0.0000, 0.0000, 0.0000);
  244. return 1;
  245. }
  246.  
  247. public MoveRopeUp(playerid, vehicleid)
  248. {
  249. if(RopeZPos[vehicleid] >= 1.0000) return KillTimer(MoveUpTimer[playerid]), MovingUp[playerid] = 0;
  250. RopeZPos[vehicleid] = RopeZPos[vehicleid] + 0.1;
  251. AttachObjectToVehicle(RopeObject[vehicleid], vehicleid, 0.0000, 0.0000, RopeZPos[vehicleid], 0.0000, 0.0000, 0.0000);
  252. return 1;
  253. }
  254.  
  255. VehicleDriver(vehicleid)
  256. {
  257. for(new i = 0; i < MAX_PLAYERS; i++)
  258. {
  259. if(GetPlayerVehicleID(i) == vehicleid && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
  260. }
  261. return -1;
  262. }
  263.  
  264. IsACar(vehicleid) //By YellowBlood
  265. {
  266. switch(GetVehicleModel(vehicleid))
  267. {
  268. case
  269. 416, //ambulan - car
  270. 445, //admiral - car
  271. 602, //alpha - car
  272. 485, //baggage - car
  273. 568, //bandito - car
  274. 429, //banshee - car
  275. 499, //benson - car
  276. 424, //bfinject, //car
  277. 536, //blade - car
  278. 496, //blistac - car
  279. 504, //bloodra - car
  280. 422, //bobcat - car
  281. 609, //boxburg - car
  282. 498, //boxville, //car
  283. 401, //bravura - car
  284. 575, //broadway, //car
  285. 518, //buccanee, //car
  286. 402, //buffalo - car
  287. 541, //bullet - car
  288. 482, //burrito - car
  289. 431, //bus - car
  290. 438, //cabbie - car
  291. 457, //caddy - car
  292. 527, //cadrona - car
  293. 483, //camper - car
  294. 524, //cement - car
  295. 415, //cheetah - car
  296. 542, //clover - car
  297. 589, //club - car
  298. 480, //comet - car
  299. 596, //copcarla, //car
  300. 599, //copcarru, //car
  301. 597, //copcarsf, //car
  302. 598, //copcarvg, //car
  303. 578, //dft30 - car
  304. 486, //dozer - car
  305. 507, //elegant - car
  306. 562, //elegy - car
  307. 585, //emperor - car
  308. 427, //enforcer, //car
  309. 419, //esperant, //car
  310. 587, //euros - car
  311. 490, //fbiranch, //car
  312. 528, //fbitruck, //car
  313. 533, //feltzer - car
  314. 544, //firela - car
  315. 407, //firetruk, //car
  316. 565, //flash - car
  317. 455, //flatbed - car
  318. 530, //forklift, //car
  319. 526, //fortune - car
  320. 466, //glendale, //car
  321. 604, //glenshit, //car
  322. 492, //greenwoo, //car
  323. 474, //hermes - car
  324. 434, //hotknife, //car
  325. 502, //hotrina - car
  326. 503, //hotrinb - car
  327. 494, //hotring - car
  328. 579, //huntley - car
  329. 545, //hustler - car
  330. 411, //infernus, //car
  331. 546, //intruder, //car
  332. 559, //jester - car
  333. 508, //journey - car
  334. 571, //kart - car
  335. 400, //landstal, //car
  336. 403, //linerun - car
  337. 517, //majestic, //car
  338. 410, //manana - car
  339. 551, //merit - car
  340. 500, //mesa - car
  341. 418, //moonbeam, //car
  342. 572, //mower - car
  343. 423, //mrwhoop - car
  344. 516, //nebula - car
  345. 582, //newsvan - car
  346. 467, //oceanic - car
  347. 404, //peren - car
  348. 514, //petro - car
  349. 603, //phoenix - car
  350. 600, //picador - car
  351. 413, //pony - car
  352. 426, //premier - car
  353. 436, //previon - car
  354. 547, //primo - car
  355. 489, //rancher - car
  356. 441, //rcbandit, //car
  357. 594, //rccam - car
  358. 564, //rctiger - car
  359. 515, //rdtrain - car
  360. 479, //regina - car
  361. 534, //remingtn, //car
  362. 505, //rnchlure, //car
  363. 442, //romero - car
  364. 440, //rumpo - car
  365. 475, //sabre - car
  366. 543, //sadler - car
  367. 605, //sadlshit, //car
  368. 495, //sandking, //car
  369. 567, //savanna - car
  370. 428, //securica, //car
  371. 405, //sentinel, //car
  372. 535, //slamvan - car
  373. 458, //solair - car
  374. 580, //stafford, //car
  375. 439, //stallion, //car
  376. 561, //stratum - car
  377. 409, //stretch - car
  378. 560, //sultan - car
  379. 550, //sunrise - car
  380. 506, //supergt - car
  381. 601, //swatvan - car
  382. 574, //sweeper - car
  383. 566, //tahoma - car
  384. 549, //tampa - car
  385. 420, //taxi - car
  386. 459, //topfun - car
  387. 576, //tornado - car
  388. 583, //tug - car
  389. 451, //turismo - car
  390. 558, //uranus - car
  391. 552, //utility - car
  392. 540, //vincent - car
  393. 491, //virgo - car
  394. 412, //voodoo - car
  395. 478, //walton - car
  396. 421, //washing - car
  397. 529, //willard - car
  398. 555, //windsor - car
  399. 456, //yankee - car
  400. 554, //yosemite - car
  401. 477 //zr350 - car
  402. : return 1;
  403. }
  404. return 0;
  405. }
  406. /*==============================================================================
  407. ----------------------------------End of Script---------------------------------
  408. ==============================================================================*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement