GammixSAMP

zombie.pwn - By Gammix

Apr 28th, 2015
748
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.95 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3. #include <peds>
  4.  
  5. main()
  6. {
  7. print("The Long Night | Zombie mod loaded...");
  8. }
  9.  
  10. #define DETECTION_RANGE 20.0//range at which a zombie will start chasing the playe
  11. //Recomendation: must be smaller or less than 20.0 for not colliding with other obstacles
  12.  
  13. new timer;
  14.  
  15. new zombieskins[] =//add your zombie skins here (these are mine)
  16. {
  17. 64, 77, 78, 79, 134, 135, 136, 137, 158, 159, 160, 162, 168, 181, 195, 200, 212, 213, 222, 230, 239, 241, 256
  18. };
  19.  
  20. public OnGameModeInit()
  21. {
  22. //short form of AddPlayerClass !:D!
  23. #define CLASS(%1) AddPlayerClass(%1, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0)
  24. //addming classes
  25. CLASS(274);
  26. CLASS(275);
  27. CLASS(276);
  28. CLASS(277);
  29. CLASS(278);
  30. CLASS(279);
  31. CLASS(280);
  32. CLASS(281);
  33. CLASS(282);
  34. CLASS(283);
  35. CLASS(284);
  36. CLASS(285);
  37. CLASS(286);
  38. CLASS(287);
  39. CLASS(288);
  40. //0.3.7 skins
  41. CLASS(300);
  42. CLASS(301);
  43. CLASS(302);
  44. CLASS(306);
  45. CLASS(307);
  46. CLASS(308);
  47. CLASS(309);
  48. CLASS(310);
  49. CLASS(311);
  50.  
  51. //lets create our PEDS/Zombies!
  52. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1809.23, -1079.08, 23.96, random(360));
  53. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1797.29, -1078.93, 23.96, random(360));
  54. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1805.85, -1071.70, 23.96, random(360));
  55. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1800.51, -1075.48, 23.96, random(360));
  56. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1797.01, -1081.59, 23.96, random(360));
  57. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1787.35, -1083.40, 23.96, random(360));
  58. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1785.68, -1077.03, 23.96, random(360));
  59. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1776.17, -1059.98, 23.96, random(360));
  60. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1784.24, -1054.39, 23.96, random(360));
  61. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1788.60, -1057.20, 23.96, random(360));
  62. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1791.74, -1055.42, 23.96, random(360));
  63. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1773.69, -1054.01, 23.96, random(360));
  64. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1796.42, -1043.25, 23.96, random(360));
  65. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1790.72, -1038.78, 23.96, random(360));
  66. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1792.10, -1044.12, 23.96, random(360));
  67. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1774.53, -1028.32, 23.96, random(360));
  68. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1775.90, -1036.86, 23.96, random(360));
  69. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1763.08, -1029.73, 23.96, random(360));
  70. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1754.34, -1041.06, 23.96, random(360));
  71. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1742.77, -1032.41, 23.96, random(360));
  72. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1737.53, -1010.72, 23.96, random(360));
  73. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1740.91, -1013.66, 23.96, random(360));
  74. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1714.65, -1026.30, 23.91, random(360));
  75. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1707.39, -1035.04, 23.90, random(360));
  76. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1706.72, -1050.50, 23.90, random(360));
  77. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1711.54, -1060.69, 23.90, random(360));
  78. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1725.40, -1054.32, 23.93, random(360));
  79. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1741.41, -1051.23, 23.96, random(360));
  80. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1750.03, -1054.20, 23.96, random(360));
  81. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1750.85, -1064.50, 23.96, random(360));
  82. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1752.79, -1078.91, 23.96, random(360));
  83. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1744.83, -1080.97, 23.96, random(360));
  84. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1724.20, -1074.95, 23.92, random(360));
  85. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1698.17, -1086.85, 23.90, random(360));
  86. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1679.38, -1081.74, 23.91, random(360));
  87. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1673.91, -1066.01, 23.89, random(360));
  88. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1649.62, -1065.80, 23.96, random(360));
  89. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1654.24, -1061.61, 24.62, random(360));
  90. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1665.19, -1060.98, 24.64, random(360));
  91. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1660.93, -1049.00, 24.54, random(360));
  92. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1656.86, -1028.19, 24.37, random(360));
  93. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1661.96, -1018.71, 24.63, random(360));
  94. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1685.85, -1019.39, 24.51, random(360));
  95. PED_Connect(zombieskins[random(sizeof(zombieskins))], 1695.96, -1019.97, 24.67, random(360));
  96.  
  97. new count;
  98. for(new i; i < MAX_PEDS; i++)
  99. {
  100. if(PED_IsConnected(i))
  101. {
  102. PED_SetWalkingStyle(i, random(13));//random walking style
  103. count += 1;
  104. }
  105. }
  106.  
  107. //printing total zombies loaded
  108. printf("%d zombies loaded...", count);
  109.  
  110. timer = SetTimer("OnZombiesUpdate", 1000, true);
  111.  
  112. SetWeather(9);//foggy
  113. SetWorldTime(0);//night
  114. return 1;
  115. }
  116.  
  117. public OnGameModeExit()
  118. {
  119. SetGameModeText("Zombie Mode");
  120.  
  121. //disconnecting all peds after server shuts
  122. for(new i; i < MAX_PEDS; i++)
  123. {
  124. if(PED_IsConnected(i))
  125. {
  126. PED_Disconnect(i);
  127. }
  128. }
  129.  
  130. //destroy the timer
  131. KillTimer(timer);
  132. return 1;
  133. }
  134.  
  135. public OnPlayerConnect(playerid)
  136. {
  137. EnablePlayerCameraTarget(playerid, 1);//enabling targets
  138.  
  139. GameTextForPlayer(playerid, "~r~The ~h~Long ~h~Night", 10 * 1000, 1);
  140. return 1;
  141. }
  142.  
  143. public OnPlayerRequestClass(playerid, classid)
  144. {
  145. SetPlayerPos(playerid, 1834.1207,-1073.7755,41.5701);
  146. SetPlayerFacingAngle(playerid, 89.0617);
  147. SetPlayerCameraPos(playerid, 1827.1591, -1074.2195, 42.0983);
  148. SetPlayerCameraLookAt(playerid, 1828.1554, -1074.2256, 41.9383);
  149. return 1;
  150. }
  151.  
  152. public OnPlayerRequestSpawn(playerid)
  153. {
  154. return 1;
  155. }
  156.  
  157. public OnPlayerSpawn(playerid)
  158. {
  159. GameTextForPlayer(playerid, "~r~Kill ~h~the ~h~zombie!", 10 * 1000, 1);
  160.  
  161. SetPlayerInterior(playerid, 0);
  162.  
  163. SetPlayerPos(playerid, 1841.9462,-1050.7052,25.1974);
  164. SetPlayerFacingAngle(playerid, 82.9319);
  165.  
  166. SetPlayerHealth(playerid, 100.0);
  167.  
  168. ResetPlayerWeapons(playerid);
  169. GivePlayerWeapon(playerid, 24, 100);
  170. return 1;
  171. }
  172.  
  173. forward OnZombiesUpdate();
  174. public OnZombiesUpdate()
  175. {
  176. new Float:pos[3];
  177. for(new i; i < MAX_PEDS; i++)
  178. {
  179. if(PED_IsConnected(i))
  180. {
  181. if(PED_GetFollowingPlayer(i) != INVALID_PLAYER_ID)//if the zombie already following a players
  182. {
  183. GetPlayerPos(PED_GetFollowingPlayer(i), pos[0], pos[1], pos[2]);
  184. if(PED_IsInRangeOfPoint(i, 2.5, pos[0], pos[1], pos[2]))//if the player is so close to zombie, deduct player's health
  185. {
  186. PlayerPlaySound(PED_GetFollowingPlayer(i), 5206 , 0.0, 0.0, 0.0);
  187.  
  188. new Float:ar;
  189. GetPlayerArmour(PED_GetFollowingPlayer(i), ar);
  190. new Float:hp;
  191. GetPlayerHealth(PED_GetFollowingPlayer(i), hp);
  192.  
  193. if(ar > 0.0) SetPlayerArmour(PED_GetFollowingPlayer(i), ar - 10.0);//deduct armour
  194. else SetPlayerHealth(PED_GetFollowingPlayer(i), hp - 10.0);//deduct health
  195.  
  196. PED_Stop(i);
  197. PED_ApplyAnimation(i, "WAYFARER", "WF_hit", 3.0, 0, 0, 0, 0, 0);
  198. continue;
  199. }
  200. else
  201. {
  202. for(new x; x <= GetPlayerPoolSize(); x++)
  203. {
  204. if(IsPlayerConnected(x))
  205. {
  206. GetPlayerPos(x, pos[0], pos[1], pos[2]);
  207. if(PED_IsInRangeOfPoint(i, DETECTION_RANGE, pos[0], pos[1], pos[2]))//if the player is in detection range, then let zombie follow the player
  208. {
  209. PED_FollowPlayer(i, x);
  210. break;
  211. }
  212. else if(x >= GetPlayerPoolSize())
  213. {
  214. PED_Stop(i);//stop the ped from moving!
  215. }
  216. }
  217. }
  218. }
  219. }
  220. else
  221. {
  222. for(new x; x <= GetPlayerPoolSize(); x++)
  223. {
  224. if(IsPlayerConnected(x))
  225. {
  226. GetPlayerPos(x, pos[0], pos[1], pos[2]);
  227. if(PED_IsInRangeOfPoint(i, DETECTION_RANGE, pos[0], pos[1], pos[2]))//if the player is in detection range, then let zombie follow the player
  228. {
  229. PED_FollowPlayer(i, x);
  230. break;
  231. }
  232. }
  233. }
  234. if(PED_GetFollowingPlayer(i) == INVALID_PLAYER_ID)//if no one near:
  235. {
  236. //random animations, just for the sake of realisticity
  237. GetPlayerPos(i, pos[0], pos[1], pos[2]);
  238. switch(random(2))
  239. {
  240. case 0: PED_GotoPoint(i, pos[0] + random(7), pos[1], pos[2], true);
  241. case 1: PED_GotoPoint(i, pos[0] - random(7), pos[1], pos[2], true);
  242. }
  243. }
  244. }
  245. }
  246. }
  247. return 1;
  248. }
  249.  
  250. CMD:kill(playerid) return SetPlayerHealth(playerid, 0.0);
  251.  
  252. public PED_OnReachDestination(pedid, Float:x, Float:y, Float:z)
  253. {
  254. if(PED_GetFollowingPlayer(pedid) == INVALID_PLAYER_ID)
  255. {
  256. new Float:pos[3];
  257. GetPlayerPos(pedid, pos[0], pos[1], pos[2]);
  258. switch(random(2))
  259. {
  260. case 0: PED_GotoPoint(pedid, pos[0] + 5.0, pos[1], pos[2], true);
  261. case 1: PED_GotoPoint(pedid, pos[0], pos[1] + 5.0, pos[2], true);
  262. }
  263. }
  264. return 1;
  265. }
  266.  
  267. public PED_OnTakeDamage(pedid, issuerid, weaponid, Float:damage)
  268. {
  269. return 1;
  270. }
  271.  
  272. public PED_OnDeath(pedid, killerid, weaponid)
  273. {
  274. GivePlayerMoney(killerid, 100);
  275. GameTextForPlayer(killerid, "~g~+100~h~$", 2000, 1);
  276. return 1;
  277. }
Advertisement
Add Comment
Please, Sign In to add comment