Guest User

cR_FD

a guest
Apr 21st, 2012
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.03 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3.  
  4. #define EXPLODE_TIME 300 // time to explode
  5. #define EXTINGUISH_TIME 10 // time to delete car
  6. #define EXTINGUISH_DISTANCE 20 // distance to delete fire
  7.  
  8. #define COLOR_RED 0xFB0000FF // change color if you like
  9.  
  10. new burning[MAX_VEHICLES];
  11. new loeschen[MAX_VEHICLES];
  12. new spritzen[MAX_PLAYERS];
  13. new freezeplayer[MAX_PLAYERS];
  14. new fdvehiclekiller[MAX_VEHICLES];
  15.  
  16. forward VehicleFire(vehicleid);
  17. forward GlobalTimer();
  18.  
  19.  
  20. public OnFilterScriptInit()
  21. {
  22. print("\n--------------------------------------");
  23. print(" FireDepartment Script by cRcKdwN");
  24. print("--------------------------------------\n");
  25.  
  26. SetTimer("GlobalTimer", 1000, true); // timer, to check the damage
  27. AntiDeAMX();
  28.  
  29. return 1;
  30. }
  31.  
  32. AntiDeAMX()
  33. {
  34. new a[][] =
  35. {
  36. "Unarmed (Fist)",
  37. "Brass K"
  38. };
  39. #pragma unused a
  40. }
  41.  
  42. // selfmade Stocks
  43. // set a car "not accessible"
  44. stock SetVehicleParamsForAll(vehicleid, objective, doorslocked)
  45. {
  46. for (new i = 0; i < MAX_PLAYERS; i++)
  47. {
  48. if (IsPlayerConnected(i))
  49. {
  50. SetVehicleParamsForPlayer(vehicleid, i, objective, doorslocked);
  51. }
  52. }
  53. }
  54. // Distance calculation functions
  55. stock Float:getDistance(Float:ox1, Float:ox2, Float:oy1, Float:oy2, Float:oz1, Float:oz2)
  56. return floatsqroot(floatpower(floatabs(ox1 - ox2), 2) + floatpower(floatabs(oy1 - oy2), 2) + floatpower(floatabs(oz1 - oz2), 2));
  57.  
  58. stock Float:GetCarDistance(playerid, vehicleid)
  59. {
  60. new Float:PPos[3], Float:VPos[3];
  61. GetPlayerPos(playerid, PPos[0], PPos[1], PPos[2]);
  62. GetVehiclePos(vehicleid, VPos[0], VPos[1], VPos[2]);
  63. return getDistance(PPos[0], VPos[0], PPos[1], VPos[1], PPos[2], VPos[2]);
  64. }
  65.  
  66. stock Float:GetPlayerDistance(playerid1, playerid2)
  67. {
  68. new Float:P1Pos[3], Float: P2Pos[3];
  69. GetPlayerPos(playerid1, P1Pos[0], P1Pos[1], P1Pos[2]);
  70. GetPlayerPos(playerid2, P2Pos[0], P2Pos[1], P2Pos[2]);
  71. return getDistance(P1Pos[0], P2Pos[0], P1Pos[1], P2Pos[1], P1Pos[2], P2Pos[2]);
  72. }
  73.  
  74. stock getNearestPlayer(playerid, Float:dist = 0.0) {
  75. new npID = -1;
  76. for (new i = 0; i < GetMaxPlayers(); i++) {
  77. if (i != playerid) {
  78. if (IsPlayerConnected(i)){
  79. new Float:tempDist = GetPlayerDistance(playerid,i);
  80. if (tempDist < dist || dist == 0) {
  81. dist = tempDist;
  82. npID = i;
  83. }
  84. }
  85. }
  86. }
  87. return npID;
  88. }
  89.  
  90. // selfmade Publics
  91. // Timer-Public: So that the car did not explode and continue to burn:
  92. public VehicleFire(vehicleid)
  93. {
  94. if (burning[vehicleid] != 0 && burning[vehicleid] < EXPLODE_TIME){
  95. SetVehicleHealth(vehicleid, 249);
  96. }
  97. }
  98. // Timer: Checktimer when ever a vehicle burns
  99. public GlobalTimer()
  100. {
  101. for (new i;i <= MAX_PLAYERS;i++)
  102. {
  103. if (IsPlayerInAnyVehicle(i) && IsPlayerConnected(i))
  104. {
  105. new VID = GetPlayerVehicleID(i);
  106.  
  107. if( VID != 504 && VID != 468)
  108. {
  109. if (burning[VID] == 0)
  110. {
  111. new Float:vhealth;
  112. GetVehicleHealth(VID,vhealth);
  113.  
  114. if (vhealth < 300)
  115. {
  116. new msg[70];
  117. format(msg, sizeof(msg), "Fire Department: Burning car has been spotted!");
  118. SendClientMessageToAll(COLOR_RED, msg);
  119.  
  120. /* FIREDEPARTMENT MELDUNG
  121. // Here you have player info [j] [pfd] through your Player-fire-check replaced.
  122. // If you want that the system will only work if a user is online, you must order the "You inhaled smoke" - section, only one
  123. // Query set that is sent == 1: See right here down the system:
  124.  
  125. new send = 0;
  126.  
  127. for (new j = 0; j < MAX_PLAYERS; j++)
  128. {
  129. if (IsPlayerConnected(j) && PlayerInfo[j][pfd] > 0 && j != i)
  130. {
  131. send = 1;
  132. GameTextForPlayer(j, "~r~FD: received emergency!", 2000, 6);
  133. SendClientMessage(j, COLOR_RED, msg);
  134. SetPlayerMarkerForPlayer(j, i, 0xFF0000FF);
  135. }
  136. }
  137. */
  138.  
  139. SetVehicleParamsForAll(VID, 0, 1);
  140. burning[VID] = 1;
  141. TogglePlayerControllable(i, 0);
  142. freezeplayer[i] = 1;
  143. SendClientMessage(i, COLOR_RED, "You inhaled smoke, now you are unconscious.");
  144. SetPlayerHealth(i, 5.0); // delete this, if you want that the player dont loses a life
  145. ApplyAnimation(i, "ped", "CAR_dead_LHS", 4.0, 0, 1, 1, 1, 1);
  146. }
  147. }
  148. else
  149. {
  150. if (burning[VID] == EXPLODE_TIME){
  151. KillTimer(VehicleFire(VID));
  152. SetVehicleParamsForAll(VID, 0, 0);
  153. SetVehicleHealth(VID, 0);
  154. fdvehiclekiller[VID] = i;
  155. if (IsPlayerInVehicle(i, VID))
  156. {
  157. ClearAnimations(i);
  158. TogglePlayerControllable(i, true);
  159. freezeplayer[i] = 0;
  160. }
  161. }
  162. else
  163. {
  164. SetVehicleHealth(VID, 250);
  165. SetTimerEx("VehicleFire", 100, 0, "i", VID);
  166. burning[VID]++;
  167.  
  168. for (new j = 0; j < GetMaxPlayers(); j++)
  169. {
  170. if (IsPlayerConnected(j) && spritzen[j] == 1)
  171. {
  172. if (loeschen[VID] == EXTINGUISH_TIME)
  173. {
  174. KillTimer(VehicleFire(VID));
  175. SetVehicleHealth(VID, 500);
  176. loeschen[VID] = 0;
  177. burning[VID] = 0;
  178. GameTextForPlayer(j, "~b~Fire Delete!", 5000, 6); //Fire is extinguished! Replace here if you want a different message!
  179. SetVehicleParamsForAll(VID, 0, 0);
  180. }
  181. else if (GetCarDistance(j, VID) < EXTINGUISH_DISTANCE){
  182. loeschen[VID]++;
  183. }
  184. }
  185. }
  186. }
  187. }
  188. }
  189. }
  190. }
  191. }
  192.  
  193.  
  194. // StandartCallbacks
  195.  
  196.  
  197. public OnPlayerConnect(playerid)
  198. {
  199. spritzen[playerid] = 0;
  200. return 1;
  201. }
  202.  
  203. public OnPlayerDisconnect(playerid, reason)
  204. {
  205. for (new i; i < sizeof(fdvehiclekiller); i++)
  206. {
  207. if (fdvehiclekiller[i] == playerid) fdvehiclekiller[i] = -1;
  208. }
  209. return 1;
  210. }
  211.  
  212. public OnPlayerSpawn(playerid)
  213. {
  214. freezeplayer[playerid] = 0;
  215. spritzen[playerid] = 0;
  216. return 1;
  217. }
  218.  
  219. public OnVehicleSpawn(vehicleid)
  220. {
  221. burning[vehicleid] = 0;
  222. loeschen[vehicleid] = 0;
  223. fdvehiclekiller[vehicleid] = -1;
  224. return 1;
  225. }
  226.  
  227. public OnVehicleDeath(vehicleid, killerid)
  228. {
  229. if (burning[vehicleid] != 0)
  230. {
  231. if (IsPlayerInVehicle(fdvehiclekiller[vehicleid], vehicleid))
  232. {
  233. ClearAnimations(fdvehiclekiller[vehicleid]);
  234. TogglePlayerControllable(fdvehiclekiller[vehicleid], true);
  235. new i = fdvehiclekiller[vehicleid];
  236. freezeplayer[i] = 0;
  237. SetPlayerHealth(fdvehiclekiller[vehicleid], 0);
  238. }
  239. fdvehiclekiller[vehicleid] = -1;
  240. }
  241.  
  242. return 1;
  243. }
  244.  
  245. public OnPlayerCommandText(playerid, cmdtext[])
  246. {
  247.  
  248. // To use this command, a query about whether playerid fireman, firemen only if the command should be accessible
  249.  
  250. if (!strcmp(cmdtext, "/rescue", true))
  251. {
  252.  
  253.  
  254. new PID = getNearestPlayer(playerid);
  255.  
  256. if (PID != -1 && GetPlayerDistance(playerid, PID) < 20 && freezeplayer[PID] > 0)
  257. {
  258. if (IsPlayerInAnyVehicle(playerid))
  259. {
  260. if (burning[GetPlayerVehicleID(PID)] > 0)
  261. {
  262. SendClientMessage(playerid, COLOR_RED, "The Car is Burning!!");
  263. return 1;
  264. }
  265. }
  266. ClearAnimations(PID);
  267. TogglePlayerControllable(PID, true);
  268. freezeplayer[PID] = 0;
  269. RemovePlayerFromVehicle(PID);
  270. }
  271. else
  272. SendClientMessage(playerid, COLOR_RED, "the next player is to far away!");
  273. return 1;
  274. }
  275.  
  276. //__________________________________________________________________________
  277.  
  278. return 0;
  279. }
  280.  
  281.  
  282. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  283. {
  284.  
  285. // To use this query, a query about whether playerid firefighter, if only to delete firefighters
  286.  
  287. if ((newkeys == 4 || newkeys == 12 || newkeys == 36 || newkeys == 132))
  288. {
  289. if (IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 407)
  290. {
  291. spritzen[playerid] = true;
  292. GameTextForPlayer(playerid,"Delete...",800,1);
  293. } else {
  294. if (GetPlayerWeapon(playerid) == 42)
  295. {
  296. spritzen[playerid] = true;
  297. GameTextForPlayer(playerid,"Delete...",800,1);
  298. }
  299. }
  300. }
  301. else if (oldkeys == 4 || oldkeys == 12 || oldkeys == 36 || oldkeys == 132){
  302. spritzen[playerid] = false;
  303. }
  304.  
  305. //__________________________________________________________________________
  306.  
  307. return 1;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment