bleeding.pwn 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. /* Realism Additions...
  2. A) Adds Bleeding
  3. B) Removes the auto health from the Ambulance
  4. C) Makes you anim/freeze in the spot waiting for ambulances and has an opt out by holding Jump
  5. D) Sets checkpoint for any player in an ambulance when the call comes through
  6. */
  7. #include <a_samp>
  8. //#include <Seifader>
  9. #include <foreach>
  10. forward BleedingTick();
  11. forward SummonMedics(forplayer);
  12. //forward CancelMedics(forplayer);
  13. new Float:BC[MAX_PLAYERS];
  14. new Float:HC1[MAX_PLAYERS];
  15. new Float:HC2[MAX_PLAYERS];
  16. new Float:AC[MAX_PLAYERS];
  17. new Float:AC2[MAX_PLAYERS];
  18. new pBWarning[MAX_PLAYERS]=0;
  19. new bool:pFrozen[MAX_PLAYERS];
  20. new bool:pBleeding[MAX_PLAYERS];
  21. new bool:pSpawned[MAX_PLAYERS];
  22. new bool:pRecovered[MAX_PLAYERS];
  23. //new bool:pOnCall[MAX_PLAYERS];
  24. //new CallOut[MAX_PLAYERS];
  25. new LastCar[MAX_PLAYERS];
  26. //new levelhurt[MAX_PLAYERS];
  27. //new FadeState[MAX_PLAYERS]=0;
  28. public OnFilterScriptInit()
  29. {
  30. SetTimer("BleedingTick", 2000, 1);
  31. }
  32. public OnFilterScriptExit()
  33. {
  34. //Seifader_OnExit();
  35. }
  36. public OnPlayerConnect(playerid)
  37. {
  38. pBleeding[playerid] = false;
  39. pSpawned[playerid] = false;
  40. pRecovered[playerid] = false;
  41. pFrozen[playerid] = false;
  42. //CallOut[playerid]=-1;
  43. pBWarning[playerid] = 0;
  44. //FadeState[playerid]=0;
  45. }
  46. public OnPlayerDisconnect(playerid, reason)
  47. {
  48. pBleeding[playerid] = false;
  49. pSpawned[playerid] = false;
  50. pRecovered[playerid] = false;
  51. pFrozen[playerid] = false;
  52. //CallOut[playerid]=-1;
  53. //CancelMedics(playerid);
  54. pBWarning[playerid]=0;
  55. //FadeState[playerid]=0;
  56. }
  57. public OnPlayerSpawn(playerid)
  58. {
  59. PreloadAnimLib(playerid,"SWEET");
  60. pBleeding[playerid] = false;
  61. pSpawned[playerid] = true;
  62. GetPlayerHealth(playerid, BC[playerid]);
  63. if(BC[playerid] > 30)
  64. {
  65. pRecovered[playerid] = true;
  66. }
  67. else
  68. {
  69. pRecovered[playerid] = false;
  70. }
  71. pBWarning[playerid]=0;
  72. //RemovePlayerColorFade(playerid);
  73. //FadeState[playerid]=0;
  74. }
  75. public OnPlayerDeath(playerid, killerid, reason)
  76. {
  77. //CancelMedics(playerid);
  78. pBWarning[playerid]=0;
  79. pBleeding[playerid] = false;
  80. pSpawned[playerid] = false;
  81. pRecovered[playerid] = false;
  82. /*RemovePlayerColorFade(playerid);
  83. if(FadeState[playerid]==1)
  84. {
  85. FadePlayerScreen(playerid, 0x94000022, 5, true);
  86. }
  87. if(FadeState[playerid]==2)
  88. {
  89. FadePlayerScreen(playerid, 0x94000044, 5, true);
  90. }
  91. if(FadeState[playerid]==3)
  92. {
  93. FadePlayerScreen(playerid, 0x94000066, 5, true);
  94. }
  95. if(FadeState[playerid]==4)
  96. {
  97. FadePlayerScreen(playerid, 0x94000088, 5, true);
  98. }*/
  99. if(pFrozen[playerid] == true)
  100. {
  101. pFrozen[playerid]=false;
  102. TogglePlayerControllable(playerid, 1);
  103. }
  104. //FadeState[playerid]=0;
  105. }
  106. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  107. {
  108. GetPlayerHealth(playerid, HC1[playerid]);
  109. GetPlayerArmour(playerid, AC[playerid]);
  110. }
  111. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  112. {
  113. if ((newkeys & KEY_JUMP) && !(oldkeys & KEY_JUMP))
  114. {
  115. if(pBleeding[playerid]==true&&pFrozen[playerid]==true)
  116. {
  117. TogglePlayerControllable(playerid,1);
  118. SetPlayerHealth(playerid,0);
  119. pFrozen[playerid] = false;
  120. //CancelMedics(playerid);
  121. }
  122. }
  123. }
  124. public OnPlayerStateChange(playerid, newstate, oldstate)
  125. {
  126. if(newstate==PLAYER_STATE_ONFOOT&&oldstate==PLAYER_STATE_DRIVER&&GetVehicleModel(LastCar[playerid])==416)
  127. {
  128. GetPlayerHealth(playerid, HC2[playerid]);
  129. if(HC2[playerid]!=100)
  130. {
  131. if(HC2[playerid]-20==HC1[playerid])
  132. {
  133. SetPlayerHealth(playerid, HC1[playerid]);
  134. SendClientMessage(playerid, 0x007700ff, "Stop exploiting Ambulances...");
  135. }
  136. }
  137. }
  138. if(newstate==PLAYER_STATE_ONFOOT&&oldstate==PLAYER_STATE_DRIVER&&GetVehicleModel(LastCar[playerid])==427)
  139. {
  140. GetPlayerArmour(playerid,AC2[playerid]);
  141. if(AC[playerid]<AC2[playerid])
  142. {
  143. SetPlayerArmour(playerid,AC[playerid]);
  144. SendClientMessage(playerid, 0x007700ff, "Stop exploiting Enforcers...");
  145. }
  146. }
  147. if(newstate==PLAYER_STATE_DRIVER)
  148. {
  149. LastCar[playerid]=GetPlayerVehicleID(playerid);
  150. if(pBleeding[playerid]==true)
  151. {
  152. RemovePlayerFromVehicle(playerid);
  153. SendClientMessage(playerid, 0xff3232ff, "You feel the need to get out and walk to find help.");
  154. SendClientMessage(playerid, 0x007700ff, "You can't drive in your state.");
  155. }
  156. }
  157. }
  158. /*public OnPlayerEnterRaceCheckpoint(playerid)
  159. {
  160. if(pOnCall[playerid]==true)
  161. {
  162. DisablePlayerRaceCheckpoint(playerid);
  163. pOnCall[playerid]=false;
  164. CallOut[playerid]=-1;
  165. }
  166. }
  167. public SummonMedics(forplayer)
  168. {
  169. //OnPlayerCommandText(forplayer, "/service medic");
  170. new Float:forx, Float:fory, Float:forz;
  171. GetPlayerPos(forplayer, forx, fory, forz);
  172. foreach(Player, i)
  173. {
  174. if(IsPlayerInAnyVehicle(i))
  175. {
  176. if(GetVehicleModel(GetPlayerVehicleID(i))==416&&pOnCall[i]==false)
  177. {
  178. SetPlayerRaceCheckpoint(i, 2, forx, fory, forz, forx, fory, forz, 20);
  179. SetPlayerMarkerForPlayer(i, forplayer, 0x940000FF);
  180. pOnCall[i]=true;
  181. CallOut[i]=forplayer;
  182. }
  183. }
  184. }
  185. }
  186. public CancelMedics(forplayer)
  187. {
  188. foreach(Player, i)
  189. {
  190. if(pOnCall[i]==true)
  191. {
  192. if(CallOut[i]==forplayer)
  193. {
  194. DisablePlayerRaceCheckpoint(i);
  195. SetPlayerMarkerForPlayer(i, forplayer, 0xFFFFFF00);
  196. pOnCall[i]=false;
  197. CallOut[i]=-1;
  198. }
  199. }
  200. }
  201. }*/
  202. public BleedingTick()
  203. {
  204. foreach(Player, i)
  205. {
  206. if(!pSpawned[i]) continue;
  207. {
  208. GetPlayerHealth(i, BC[i]);
  209. if(pBleeding[i] == true && BC[i]>30 && pRecovered[i] == true)//Healed
  210. {
  211. pBleeding[i] = false;
  212. pBWarning[i] = false;
  213. SendClientMessage(i, 0x007700ff, "You are no longer bleeding.");
  214. //CancelMedics(i);
  215. /*if(FadeState[i]==1)
  216. {
  217. RemovePlayerColorFade(i);
  218. FadePlayerScreen(i, 0x94000022, 10, true);
  219. FadeState[i]=0;
  220. }
  221. if(FadeState[i]==2)
  222. {
  223. RemovePlayerColorFade(i);
  224. FadePlayerScreen(i, 0x94000044, 10, true);
  225. FadeState[i]=0;
  226. }
  227. if(FadeState[i]==3)
  228. {
  229. RemovePlayerColorFade(i);
  230. FadePlayerScreen(i, 0x94000066, 10, true);
  231. FadeState[i]=0;
  232. }
  233. if(FadeState[i]==4)
  234. {
  235. RemovePlayerColorFade(i);
  236. FadePlayerScreen(i, 0x94000088, 10, true);
  237. FadeState[i]=0;
  238. }*/
  239. if(pFrozen[i] == true)
  240. {
  241. pFrozen[i]=false;
  242. TogglePlayerControllable(i, 1);
  243. }
  244. }
  245. if(pBleeding[i] == false&&BC[i]<30&&pRecovered[i] == true&&pFrozen[i]==false)//Bleeding start
  246. {
  247. pBleeding[i] = true;
  248. //SetPlayerDrunkLevel(i, 1500);
  249. SendClientMessage(i, 0xff3232ff, "You suddenly realise that you are soaking in blood. (You're bleeding)");
  250. //RemovePlayerColorFade(i);
  251. //FadePlayerScreenToColor(i, 0x94000022, 5);
  252. //FadeState[i]=1;
  253. }
  254. if(pBleeding[i] == true&&pFrozen[i]==false)//Bleeding "reminder" count
  255. {
  256. GetPlayerHealth(i, BC[i]);
  257. SetPlayerHealth(i, BC[i]-1);
  258. pBWarning[i]++;
  259. }
  260. if(pBleeding[i] == true&&BC[i] < 8 &&pFrozen[i] == false)
  261. {
  262. //levelhurt[i]=GetPlayerDrunkLevel(i);
  263. //SetPlayerDrunkLevel(i, levelhurt[i]+500);
  264. pFrozen[i] = true;
  265. TogglePlayerControllable(i,0);
  266. ApplyAnimation(i, "SWEET", "Sweet_injuredloop",1,0,0,0,1,0);
  267. SendClientMessage(i, 0xff3232ff, "You can't move another step.");
  268. //if(GetPlayerInterior(i)!=0)
  269. //{
  270. SendClientMessage(i, 0xff3232ff, "You need to call 911, or find means of recooperation");
  271. //}
  272. /*if(GetPlayerInterior(i)==0)
  273. {
  274. SummonMedics(i);
  275. SendClientMessage(i, 0xff3232ff, "Medics have been called and may be near shortly.");
  276. }*/
  277. SendClientMessage(i, 0x007700ff, "You can skip waiting by pressing jump.");
  278. //RemovePlayerColorFade(i);
  279. //FadePlayerScreenToColor(i, 0x94000088, 5);
  280. //FadeState[i]=4;
  281. }
  282. if(pBWarning[i] > 4 && pBleeding[i] == true) //Actual Reminder
  283. {
  284. pBWarning[i]=0;
  285. //levelhurt[i]=GetPlayerDrunkLevel(i);
  286. //SetPlayerDrunkLevel(i, levelhurt[i]+500);
  287. SendClientMessage(i, 0xff3232ff, "You're starting to feel faint, You need help quick.");
  288. }
  289. /*if(FadeState[i]==1&&BC[i]<22)
  290. {
  291. FadeState[i]=2;
  292. RemovePlayerColorFade(i);
  293. FadePlayerScreenToColor(i, 0x94000044, 5);
  294. }
  295. if(FadeState[i]==2&&BC[i]<14)
  296. {
  297. RemovePlayerColorFade(i);
  298. FadePlayerScreenToColor(i, 0x94000066, 5);
  299. FadeState[i]=3;
  300. }*/
  301. if(BC[i] > 35 && pRecovered[i] == false)
  302. {
  303. pRecovered[i] = true;
  304. }
  305. }
  306. }
  307. }
  308. PreloadAnimLib(playerid, animlib[])
  309. {
  310. ApplyAnimation(playerid,animlib,"null",0.0,0,0,0,0,0);
  311. }
  312. /*public OnPlayerScreenFade(playerid, color, speed)
  313. {
  314. return 1;
  315. }
  316. public OnPlayerScreenColorFade(playerid, color, speed)
  317. {
  318. return 1;
  319. }
  320. public OnPlayerFadeFlashed(playerid, color, speed)
  321. {
  322. return 1;
  323. }*/