Advertisement
FamiliaSAMP

FILTERSCRIPT - Sistema De Gasolina [FAMILIASAMP.COM]

Feb 2nd, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.87 KB | None | 0 0
  1. #define FILTERSCRIPT
  2. #include <a_samp> // SA-MP Team
  3.  
  4. #define MAX_GAS_PUMPS (78)
  5. #define UPDATE_RATE (1000) // Fuel consume rate in milliseconds. (Default: 1000)
  6. #define LITRE_PRICE (3) // Pretty obvious I guess. (Default: 3)
  7.  
  8. enum e_pump
  9. {
  10. Float: pumpX,
  11. Float: pumpY,
  12. Float: pumpZ,
  13. pumpUser,
  14. Text3D: pumpLabel
  15. }
  16.  
  17. new
  18. Float: PumpData[MAX_GAS_PUMPS][e_pump] = {
  19. {-85.2422, -1165.0312, 2.6328},
  20. {-90.1406, -1176.6250, 2.6328},
  21. {-92.1016, -1161.7891, 2.9609},
  22. {-97.0703, -1173.7500, 3.0312},
  23. {1941.6562, -1767.2891, 14.1406},
  24. {1941.6562, -1771.3438, 14.1406},
  25. {1941.6562, -1774.3125, 14.1406},
  26. {1941.6562, -1778.4531, 14.1406},
  27. {-1327.0312, 2685.5938, 49.4531},
  28. {-1327.7969, 2680.1250, 49.4531},
  29. {-1328.5859, 2674.7109, 49.4531},
  30. {-1329.2031, 2669.2812, 49.4531},
  31. {-1464.9375, 1860.5625, 31.8203},
  32. {-1465.4766, 1868.2734, 31.8203},
  33. {-1477.6562, 1859.7344, 31.8203},
  34. {-1477.8516, 1867.3125, 31.8203},
  35. {-1600.6719, -2707.8047, 47.9297},
  36. {-1603.9922, -2712.2031, 47.9297},
  37. {-1607.3047, -2716.6016, 47.9297},
  38. {-1610.6172, -2721.0000, 47.9297},
  39. {-1665.5234, 416.9141, 6.3828},
  40. {-1669.9062, 412.5312, 6.3828},
  41. {-1672.1328, 423.5000, 6.3828},
  42. {-1675.2188, 407.1953, 6.3828},
  43. {-1676.5156, 419.1172, 6.3828},
  44. {-1679.3594, 403.0547, 6.3828},
  45. {-1681.8281, 413.7812, 6.3828},
  46. {-1685.9688, 409.6406, 6.3828},
  47. {-2241.7188, -2562.2891, 31.0625},
  48. {-2246.7031, -2559.7109, 31.0625},
  49. {-2410.8047, 970.8516, 44.4844},
  50. {-2410.8047, 976.1875, 44.4844},
  51. {-2410.8047, 981.5234, 44.4844},
  52. {1378.9609, 461.0391, 19.3281},
  53. {1380.6328, 460.2734, 19.3281},
  54. {1383.3984, 459.0703, 19.3281},
  55. {1385.0781, 458.2969, 19.3281},
  56. {603.4844, 1707.2344, 6.1797},
  57. {606.8984, 1702.2188, 6.1797},
  58. {610.2500, 1697.2656, 6.1797},
  59. {613.7188, 1692.2656, 6.1797},
  60. {617.1250, 1687.4531, 6.1797},
  61. {620.5312, 1682.4609, 6.1797},
  62. {624.0469, 1677.6016, 6.1797},
  63. {655.6641, -558.9297, 15.3594},
  64. {655.6641, -560.5469, 15.3594},
  65. {655.6641, -569.6016, 15.3594},
  66. {655.6641, -571.2109, 15.3594},
  67. {1590.3516, 2193.7109, 11.3125},
  68. {1590.3516, 2204.5000, 11.3125},
  69. {1596.1328, 2193.7109, 11.3125},
  70. {1596.1328, 2204.5000, 11.3125},
  71. {1602.0000, 2193.7109, 11.3125},
  72. {1602.0000, 2204.5000, 11.3125},
  73. {2109.0469, 914.7188, 11.2578},
  74. {2109.0469, 925.5078, 11.2578},
  75. {2114.9062, 914.7188, 11.2578},
  76. {2114.9062, 925.5078, 11.2578},
  77. {2120.8203, 914.7188, 11.2578},
  78. {2120.8203, 925.5078, 11.2578},
  79. {2141.6719, 2742.5234, 11.2734},
  80. {2141.6719, 2753.3203, 11.2734},
  81. {2147.5312, 2742.5234, 11.2734},
  82. {2147.5312, 2753.3203, 11.2734},
  83. {2153.3125, 2742.5234, 11.2734},
  84. {2153.3125, 2753.3203, 11.2734},
  85. {2196.8984, 2470.2500, 11.3125},
  86. {2196.8984, 2474.6875, 11.3125},
  87. {2196.8984, 2480.3281, 11.3125},
  88. {2207.6953, 2470.2500, 11.3125},
  89. {2207.6953, 2474.6875, 11.3125},
  90. {2207.6953, 2480.3281, 11.3125},
  91. {2634.6406, 1100.9453, 11.2500},
  92. {2634.6406, 1111.7500, 11.2500},
  93. {2639.8750, 1100.9609, 11.2500},
  94. {2639.8750, 1111.7500, 11.2500},
  95. {2645.2500, 1100.9609, 11.2500},
  96. {2645.2500, 1111.7500, 11.2500}
  97. };
  98.  
  99. new
  100. UsingPumpID[MAX_PLAYERS] = {-1, ...},
  101. RefuelTimer[MAX_PLAYERS] = {-1, ...},
  102. Float: FuelBought[MAX_PLAYERS],
  103. PlayerText: FuelText[MAX_PLAYERS],
  104. PlayerBar: FuelBar[MAX_PLAYERS] = {INVALID_PLAYER_BAR_ID, ...};
  105.  
  106. new
  107. Float: Fuel[MAX_VEHICLES] = {100.0, ...},
  108. Float: VehicleLastCoords[MAX_VEHICLES][3];
  109.  
  110. Pump_Update(id)
  111. {
  112. new string[96];
  113. format(string, sizeof(string), "Gas Pump\n\n{2ECC71}$%d / Litre\n%s/refuel", LITRE_PRICE, (IsPlayerConnected(PumpData[id][pumpUser])) ? ("{E74C3C}") : ("{FFFFFF}"));
  114. return UpdateDynamic3DTextLabelText(PumpData[id][pumpLabel], 0xF1C40FFF, string);
  115. }
  116.  
  117. Pump_Closest(playerid, Float: range = 6.0)
  118. {
  119. new id = -1, Float: dist = range, Float: tempdist;
  120. for(new i; i < MAX_GAS_PUMPS; i++)
  121. {
  122. tempdist = GetPlayerDistanceFromPoint(playerid, PumpData[i][pumpX], PumpData[i][pumpY], PumpData[i][pumpZ]);
  123.  
  124. if(tempdist > range) continue;
  125. if(tempdist <= dist)
  126. {
  127. dist = tempdist;
  128. id = i;
  129. }
  130. }
  131.  
  132. return id;
  133. }
  134.  
  135. Fuel_InitPlayer(playerid)
  136. {
  137. UsingPumpID[playerid] = -1;
  138. RefuelTimer[playerid] = -1;
  139. FuelBought[playerid] = 0.0;
  140.  
  141. FuelText[playerid] = CreatePlayerTextDraw(playerid, 40.000000, 305.000000, "~b~~h~Refueling...~n~~n~~w~Price: ~g~~h~$0 ~y~~h~(0.00L)");
  142. PlayerTextDrawBackgroundColor(playerid, FuelText[playerid], 255);
  143. PlayerTextDrawFont(playerid, FuelText[playerid], 1);
  144. PlayerTextDrawLetterSize(playerid, FuelText[playerid], 0.240000, 1.100000);
  145. PlayerTextDrawColor(playerid, FuelText[playerid], -1);
  146. PlayerTextDrawSetOutline(playerid, FuelText[playerid], 1);
  147. PlayerTextDrawSetProportional(playerid, FuelText[playerid], 1);
  148. PlayerTextDrawSetSelectable(playerid, FuelText[playerid], 0);
  149.  
  150. FuelBar[playerid] = CreatePlayerProgressBar(playerid, 498.0, 104.0, 113.0, 6.2, 0xF1C40FFF, 100.0, 0);
  151. return 1;
  152. }
  153.  
  154. Fuel_ResetPlayer(playerid)
  155. {
  156. if(UsingPumpID[playerid] != -1)
  157. {
  158. PumpData[ UsingPumpID[playerid] ][pumpUser] = INVALID_PLAYER_ID;
  159. Pump_Update(UsingPumpID[playerid]);
  160. }
  161.  
  162. if(RefuelTimer[playerid] != -1)
  163. {
  164. KillTimer(RefuelTimer[playerid]);
  165. RefuelTimer[playerid] = -1;
  166.  
  167. PlayerTextDrawHide(playerid, FuelText[playerid]);
  168. }
  169.  
  170. UsingPumpID[playerid] = -1;
  171. FuelBought[playerid] = 0.0;
  172. return 1;
  173. }
  174.  
  175. Vehicle_StartEngine(vehicleid)
  176. {
  177. if(Fuel[vehicleid] < 0.1) return 0;
  178. SetVehicleParams(vehicleid, VEHICLE_TYPE_ENGINE, 1);
  179. return 1;
  180. }
  181.  
  182. Vehicle_IsANoFuelVehicle(model)
  183. {
  184. switch(model)
  185. {
  186. case 481, 509, 510: return 1;
  187. default: return 0;
  188. }
  189.  
  190. return 0;
  191. }
  192.  
  193. Float: Vehicle_GetSpeed(vehicleid)
  194. {
  195. new Float: vx, Float: vy, Float: vz, Float: vel;
  196. vel = GetVehicleVelocity(vehicleid, vx, vy, vz);
  197. vel = (floatsqroot(((vx*vx)+(vy*vy))+(vz*vz)) * 181.5);
  198. return vel;
  199. }
  200.  
  201. public OnFilterScriptInit()
  202. {
  203. ManualVehicleEngineAndLights();
  204.  
  205. for(new i; i < MAX_GAS_PUMPS; i++)
  206. {
  207. PumpData[i][pumpUser] = INVALID_PLAYER_ID;
  208. PumpData[i][pumpLabel] = CreateDynamic3DTextLabel("Gas Pump", 0xF1C40FFF, PumpData[i][pumpX], PumpData[i][pumpY], PumpData[i][pumpZ] + 0.75, 7.5);
  209. Pump_Update(i);
  210. }
  211.  
  212. for(new i, p = GetPlayerPoolSize(); i <= p; i++)
  213. {
  214. if(!IsPlayerConnected(i)) continue;
  215. Fuel_InitPlayer(i);
  216. }
  217.  
  218. for(new i, v = GetVehiclePoolSize(); i <= v; i++)
  219. {
  220. if(!IsValidVehicle(i)) continue;
  221. if(Vehicle_IsANoFuelVehicle( GetVehicleModel(i) )) SetVehicleParams(i, VEHICLE_TYPE_ENGINE, 1);
  222. }
  223.  
  224. SetTimer("ConsumeFuel", UPDATE_RATE, true);
  225. return 1;
  226. }
  227.  
  228. public OnFilterScriptExit()
  229. {
  230. for(new i, p = GetPlayerPoolSize(); i <= p; i++)
  231. {
  232. if(!IsPlayerConnected(i)) continue;
  233. Fuel_ResetPlayer(i);
  234. HidePlayerProgressBar(i, FuelBar[i]);
  235. }
  236.  
  237. return 1;
  238. }
  239.  
  240. public OnPlayerConnect(playerid)
  241. {
  242. Fuel_InitPlayer(playerid);
  243. return 1;
  244. }
  245.  
  246. public OnPlayerDisconnect(playerid, reason)
  247. {
  248. Fuel_ResetPlayer(playerid);
  249. return 1;
  250. }
  251.  
  252. public OnVehicleSpawn(vehicleid)
  253. {
  254. Fuel[vehicleid] = 100.0;
  255. return 1;
  256. }
  257.  
  258. public OnPlayerStateChange(playerid, newstate, oldstate)
  259. {
  260. if(newstate == PLAYER_STATE_DRIVER)
  261. {
  262. new id = GetPlayerVehicleID(playerid);
  263. if(Vehicle_IsANoFuelVehicle( GetVehicleModel(id) )) return SetVehicleParams(id, VEHICLE_TYPE_ENGINE, 1);
  264. SendClientMessage(playerid, -1, "You can start/stop the engine by pressing N.");
  265. ShowPlayerProgressBar(playerid, FuelBar[playerid]);
  266. SetPlayerProgressBarValue(playerid, FuelBar[playerid], Fuel[id]);
  267. GetVehiclePos(GetPlayerVehicleID(playerid), VehicleLastCoords[id][0], VehicleLastCoords[id][1], VehicleLastCoords[id][2]);
  268. }
  269.  
  270. if(oldstate == PLAYER_STATE_DRIVER)
  271. {
  272. Fuel_ResetPlayer(playerid);
  273. HidePlayerProgressBar(playerid, FuelBar[playerid]);
  274. }
  275.  
  276. return 1;
  277. }
  278.  
  279. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  280. {
  281. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && (newkeys & KEY_NO))
  282. {
  283. new id = GetPlayerVehicleID(playerid);
  284. if(Vehicle_IsANoFuelVehicle( GetVehicleModel(id) )) return 1;
  285.  
  286. if(GetVehicleParams(id, VEHICLE_TYPE_ENGINE)) {
  287. SetVehicleParams(id, VEHICLE_TYPE_ENGINE, 0);
  288. }else{
  289. Vehicle_StartEngine(id);
  290.  
  291. if(UsingPumpID[playerid] != -1)
  292. {
  293. new Float: x, Float: y, Float: z;
  294. GetPlayerPos(playerid, x, y, z);
  295. CreateExplosionForPlayer(playerid, x, y, z, 6, 8.0);
  296. }
  297. }
  298. }
  299.  
  300. return 1;
  301. }
  302.  
  303. public OnPlayerUpdate(playerid)
  304. {
  305. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  306. {
  307. new vid = GetPlayerVehicleID(playerid);
  308. if(GetPVarInt(playerid, "FuelLastUpdate") < GetTickCount() && UsingPumpID[playerid] == -1 && !Vehicle_IsANoFuelVehicle( GetVehicleModel(vid) ))
  309. {
  310. SetPlayerProgressBarValue(playerid, FuelBar[playerid], Fuel[vid]);
  311. SetPVarInt(playerid, "FuelLastUpdate", GetTickCount() + (UPDATE_RATE + 50));
  312. }
  313. }
  314.  
  315. return 1;
  316. }
  317.  
  318. forward ConsumeFuel();
  319. public ConsumeFuel()
  320. {
  321. new Float: mass, Float: speed, Float: dist;
  322. for(new i = 1, ps = GetVehiclePoolSize(); i <= ps; i++)
  323. {
  324. if(!IsValidVehicle(i)) continue;
  325. if(Vehicle_IsANoFuelVehicle( GetVehicleModel(i) )) continue;
  326. if(!GetVehicleParams(i, VEHICLE_TYPE_ENGINE)) continue;
  327. dist = GetVehicleDistanceFromPoint(i, VehicleLastCoords[i][0], VehicleLastCoords[i][1], VehicleLastCoords[i][2]);
  328. mass = GetVehicleModelInfoAsFloat(GetVehicleModel(i), "fMass");
  329. speed = Vehicle_GetSpeed(i) + 0.001;
  330. Fuel[i] -= ((mass / (mass * 4.5)) * ((speed / 60) + 0.015) / 30) * ((dist / 10) + 0.001);
  331. if(Fuel[i] < 0.1) SetVehicleParams(i, VEHICLE_TYPE_ENGINE, 0);
  332. GetVehiclePos(i, VehicleLastCoords[i][0], VehicleLastCoords[i][1], VehicleLastCoords[i][2]);
  333. }
  334.  
  335. return 1;
  336. }
  337.  
  338. forward Refuel(playerid, vehicleid);
  339. public Refuel(playerid, vehicleid)
  340. {
  341. new price = floatround(0.5 * LITRE_PRICE);
  342. if(GetPlayerMoney(playerid) < price)
  343. {
  344. SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough money.");
  345. Fuel_ResetPlayer(playerid);
  346. Vehicle_StartEngine(vehicleid);
  347. return 1;
  348. }
  349.  
  350. FuelBought[playerid] += 0.5;
  351. Fuel[vehicleid] += 0.5;
  352.  
  353. new string[64];
  354. format(string, sizeof(string), "~b~~h~Refueling...~n~~n~~w~Price: ~g~~h~$%d ~y~~h~(%.2fL)", floatround(FuelBought[playerid] * LITRE_PRICE), FuelBought[playerid]);
  355. PlayerTextDrawSetString(playerid, FuelText[playerid], string);
  356. SetPlayerProgressBarValue(playerid, FuelBar[playerid], Fuel[vehicleid]);
  357. GivePlayerMoney(playerid, -price);
  358.  
  359. if(Fuel[vehicleid] > 100.0)
  360. {
  361. Fuel[vehicleid] = 100.0;
  362. Fuel_ResetPlayer(playerid);
  363. Vehicle_StartEngine(vehicleid);
  364. }
  365.  
  366. return 1;
  367. }
  368.  
  369. CMD:refuel(playerid, params[])
  370. {
  371. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't use this command if you're not a driver.");
  372. if(UsingPumpID[playerid] == -1) {
  373. if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough money.");
  374. if(Fuel[ GetPlayerVehicleID(playerid) ] > 99.0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Your vehicle doesn't need a refuel.");
  375. new id = Pump_Closest(playerid);
  376. if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near a gas pump.");
  377. if(IsPlayerConnected(PumpData[id][pumpUser])) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}The pump you want to use is not available.");
  378. UsingPumpID[playerid] = id;
  379. PumpData[id][pumpUser] = playerid;
  380. Pump_Update(id);
  381.  
  382. new vid = GetPlayerVehicleID(playerid);
  383. SetVehicleParams(vid, VEHICLE_TYPE_ENGINE, 0);
  384. PlayerTextDrawSetString(playerid, FuelText[playerid], "~b~~h~Refueling...~n~~n~~w~Price: ~g~~h~$0 ~y~~h~(0.00L)");
  385. PlayerTextDrawShow(playerid, FuelText[playerid]);
  386. RefuelTimer[playerid] = SetTimerEx("Refuel", 350, true, "ii", playerid, vid);
  387.  
  388. SendClientMessage(playerid, -1, "You can write /refuel again to stop refueling.");
  389. }else{
  390. Fuel_ResetPlayer(playerid);
  391. Vehicle_StartEngine( GetPlayerVehicleID(playerid) );
  392. }
  393.  
  394. return 1;
  395. }
  396.  
  397. CMD:arefuel(playerid, params[])
  398. {
  399. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  400. new id = GetPlayerVehicleID(playerid);
  401. if(!IsValidVehicle(id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not in a vehicle.");
  402. Fuel[id] = 100.0;
  403. SendClientMessage(playerid, -1, "Vehicle refueled.");
  404. return 1;
  405. }
  406.  
  407. CMD:arefuelall(playerid, params[])
  408. {
  409. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  410. for(new i, v = GetVehiclePoolSize(); i <= v; i++) if(IsValidVehicle(i)) Fuel[i] = 100.0;
  411. SendClientMessageToAll(-1, "A RCON admin has refueled all vehicles.");
  412. return 1;
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement