Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1.0 Realistic fuel system
- // made by Srdjan, date 10/09/2011
- #include <a_samp>
- #define COLOR_RED 0xAA3333AA
- #define COLOR_WHITE 0xFFFFFFAA
- #define COLOR_YELLOW 0xFFFF0066
- #define COLOR_FADE1 0xE6E6E6E6
- #define COLOR_FADE2 0xC8C8C8C8
- #define COLOR_FADE3 0xAAAAAAAA
- #define COLOR_FADE4 0x8C8C8C8C
- #define COLOR_FADE5 0x6E6E6E6E
- #define REGULARGAS_PRICE 4.23
- #define MIDGRADE_PRICE 4.55
- #define PREMIUM_PRICE 4.84
- #define DIESELFUEL_PRICE 5.03
- #define DISPLAY_DIALOG_ID 1045
- enum rfs_Coords
- {
- Float: x, Float: y, Float: z
- }
- new rfs_GasStations [][rfs_Coords] =
- {
- { 1595.5406, 2198.0520, 10.3863 },
- { 2202.0649, 2472.6697, 10.5677 },
- { 2115.1929, 919.9908, 10.5266 },
- { 2640.7209, 1105.9565, 10.5274 },
- { 608.5971, 1699.6238, 6.9922 },
- { 618.4878, 1684.5792, 6.9922 },
- { 2146.3467, 2748.2893, 10.5245 },
- { -1679.4595, 412.5129, 6.9973 },
- { -1327.5607, 2677.4316, 49.8093 },
- { -1470.0050, 1863.2375, 32.3521 },
- { -2409.2200, 976.2798, 45.2969 },
- { -2244.1396, -2560.5833, 31.9219 },
- { -1606.0544, -2714.3083, 48.5335 },
- { 1937.4293, -1773.1865, 13.3828 },
- { -91.3854, -1169.9175, 2.4213 },
- { 1383.4221, 462.5385, 20.1506 },
- { 660.4590, -565.0394, 16.3359 },
- { 1381.7206, 459.1907, 20.3452 },
- { -1605.7156, -2714.4573, 48.5335 },
- { 1008.1107, -937.3372, 42.6493 },
- { -2029.4047, 157.2388, 28.5722 }
- };
- new rfs_SportVehicles [] =
- {
- 402, 411, 415, 602, 429, 541, 587, 565, 494, 502, 503,
- 559, 603, 506, 451, 558, 477, 560, 562,
- };
- new rfs_OffRoadVehicles [] =
- {
- 400, 424, 489, 495, 505, 568, 579, 599,
- };
- new rfs_Trucks [] =
- {
- 403, 406, 407, 408, 413, 414, 416, 418, 423, 427, 428,
- 431, 432, 433, 437, 440, 443, 444, 455, 456, 459, 470,
- 482, 483, /*485,*/ 486, 498, 499, 508, 514, 515, 524,
- /*531, 532,*/543, 556, 557, /*572,*/573, 578, 582, 588,
- 601, 609
- };
- new rfs_CommonVehicles [] =
- {
- 401, 404, 405, 409, 410, 412, 419, 420, 421, 422, 426,
- 434, 436, 438, 439, 442, 445, 458, 466, 467, 474, 475,
- 478, 479, 490, 491, 492, 496, 500, 504, 507, 516, 517,
- 518, 525, 526, 527, 528, 529, 533, 534, 535, 536, 540,
- 542, 543, 545, 546, 547, 549, 560, 551, 552, 554, 555,
- 561, 566, 567, 575, 576, 580, 585, 589, 596, 597, 598,
- 600, 604, 605
- };
- new rfs_Bikes [] =
- {
- 448, 457, 461, 462, 468, 471, 521, 522, 523, 530, 571,
- 574, 581, 583, 586
- };
- new rfs_AirVehicles [] =
- {
- 592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513,
- 548, 425, 417, 487, 488, 497, 563, 447, 469
- };
- new rfs_GasTypes [4][] =
- {
- "regular gas",
- "midgrade",
- "premium",
- "diesel fuel"
- };
- new rfs_ChoosingGasType [MAX_PLAYERS];
- new rfs_ChoosingFuelAmount [MAX_PLAYERS];
- new rfs_WaitingEngine [MAX_PLAYERS];
- new Float: rfs_VehicleFuel [MAX_VEHICLES];
- new pl_vehid [MAX_PLAYERS];
- new veh_display [MAX_VEHICLES];
- new FirstTimeInVehicle [MAX_VEHICLES];
- new Float: old_veh_pos [MAX_VEHICLES][3];
- new ChoosenGas [MAX_VEHICLES];
- new Float: iCounter [MAX_VEHICLES];
- new RefillTimer [MAX_VEHICLES];
- new Float: TotalDistance [MAX_VEHICLES];
- new Float: DistanceFromStart [MAX_VEHICLES];
- new Text: rfs_td_distance [MAX_VEHICLES];
- new Text: rfs_td_fuel_available [MAX_VEHICLES];
- new Text: rfs_td_fuel_consumption [MAX_VEHICLES];
- new Text: rfs_td_gas_station [MAX_VEHICLES];
- new Text: rfs_td_dist_total [MAX_VEHICLES];
- new Text: rfs_td_dist_start [MAX_VEHICLES];
- new Text: rfs_td_time_total [MAX_VEHICLES];
- new Text3D: rfs_3dtd_vehicle_refilling [MAX_VEHICLES];
- forward rfs_OnFilterScriptInit ();
- forward rfs_OnFilterScriptExit ();
- forward rfs_OnPlayerText (playerid, text[]);
- forward rfs_GasChosen (playerid, i);
- forward Float: VehicleConsumption (vehid);
- forward Float: rfs_GasPrice (i);
- forward UpdateDisplay ();
- forward UpdateTextDraws ();
- forward UpdateDistance ();
- forward Refilling (playerid, vehicleid, Float: amount);
- forward HideTDGasStation (playerid, vehicleid);
- forward ProxDetector (Float:radi, playerid, string[], col1, col2, col3, col4, col5);
- public OnFilterScriptInit ()
- {
- rfs_OnFilterScriptInit ();
- return 1;
- }
- public OnFilterScriptExit ()
- {
- rfs_OnFilterScriptExit ();
- return 1;
- }
- public OnPlayerText (playerid, text[])
- {
- rfs_OnPlayerText (playerid, text);
- return 0;
- }
- public rfs_OnFilterScriptInit ()
- {
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- rfs_ChoosingGasType [i] = 0;
- rfs_ChoosingFuelAmount [i] = 0;
- rfs_WaitingEngine [i] = 0;
- }
- for (new i = 0; i < MAX_VEHICLES; i++)
- {
- rfs_td_distance [i] = TextDrawCreate (530.0, 420.0, "Distance~n~");
- TextDrawFont (rfs_td_distance [i], 2);
- TextDrawUseBox (rfs_td_distance [i], 1);
- TextDrawLetterSize (rfs_td_distance [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_distance [i], 0x66aa0044);
- rfs_td_fuel_available [i] = TextDrawCreate (490.0, 420.0, "Fuel available~n~");
- TextDrawFont (rfs_td_fuel_available [i], 2);
- TextDrawUseBox (rfs_td_fuel_available [i], 1);
- TextDrawLetterSize (rfs_td_fuel_available [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_fuel_available [i], 0x66aa0044);
- rfs_td_fuel_consumption [i] = TextDrawCreate (475.0, 420.0, "Fuel consumption~n~");
- TextDrawFont (rfs_td_fuel_consumption [i], 2);
- TextDrawUseBox (rfs_td_fuel_consumption [i], 1);
- TextDrawLetterSize (rfs_td_fuel_consumption [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_fuel_consumption [i], 0x66aa0044);
- rfs_td_dist_total [i] = TextDrawCreate (430.0, 420.0, "Distance travelled~n~in total: 0.0");
- TextDrawFont (rfs_td_dist_total [i], 2);
- TextDrawUseBox (rfs_td_dist_total [i], 1);
- TextDrawLetterSize (rfs_td_dist_total [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_dist_total [i], 0x66aa0044);
- rfs_td_dist_start [i] = TextDrawCreate (435.0, 420.0, "Distance travelled~n~since start: 0.0");
- TextDrawFont (rfs_td_dist_start [i], 2);
- TextDrawUseBox (rfs_td_dist_start [i], 1);
- TextDrawLetterSize (rfs_td_dist_start [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_dist_start [i], 0x66aa0044);
- rfs_td_time_total [i] = TextDrawCreate (470.0, 420.0, "Time elapsed~n~in total: 00:00");
- TextDrawFont (rfs_td_time_total [i], 2);
- TextDrawUseBox (rfs_td_time_total [i], 1);
- TextDrawLetterSize (rfs_td_time_total [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_time_total [i], 0x66aa0044);
- rfs_td_gas_station [i] = TextDrawCreate (440.0, 420.0, "Name:~n~Liters:~n~Price:~n~Price per liter:");
- TextDrawFont (rfs_td_gas_station [i], 2);
- TextDrawUseBox (rfs_td_gas_station [i], 1);
- TextDrawLetterSize (rfs_td_gas_station [i], 0.4, 0.6);
- TextDrawBackgroundColor (rfs_td_gas_station [i], 0x66aa0044);
- veh_display [i] = 1;
- FirstTimeInVehicle [i] = 1;
- rfs_3dtd_vehicle_refilling [i] = Create3DTextLabel ("This vehicle is being refilled", COLOR_YELLOW, 0.0, 0.0, -20.0, 300.0, 0, 1);
- }
- SetTimer ("UpdateDisplay", 1000, 1);
- SetTimer ("UpdateTextDraws", 1000, 1);
- SetTimer ("UpdateDistance", 3000, 1);
- printf ("\nRealistic fuel system by Srdjan loaded.\n");
- return 1;
- }
- public rfs_OnFilterScriptExit ()
- {
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- HideTextDraws (i);
- }
- return 1;
- }
- public OnPlayerCommandText (playerid, cmdtext[])
- {
- if (!strcmp (cmdtext, "/refill", true))
- {
- if (!IsPlayerInAnyVehicle (playerid)) return 1;
- if (GetPlayerState (playerid) != PLAYER_STATE_DRIVER) return 1;
- if (rfs_IsPlayerAtGasStation (playerid))
- {
- rfs_StationWorkerMessage (playerid);
- SendClientMessage (playerid, COLOR_YELLOW, "HINT: Type in one of following: \"regular gas\", \"midgrade\", \"premium\", \"diesel fuel\"");
- SendClientMessage (playerid, COLOR_YELLOW, "HINT: You can say one of those as a part of sentence, e.g. \"Hello. Can you fill regular gas, please.\"");
- rfs_ChoosingGasType [playerid] = 1;
- }
- return 1;
- }
- if (!strcmp (cmdtext, "/engine", true))
- {
- if (!IsPlayerInAnyVehicle (playerid)) return 1;
- if (GetPlayerState (playerid) != PLAYER_STATE_DRIVER) return 1;
- new engine, lights, alarm, doors, bonnet, boot, objective;
- GetVehicleParamsEx (GetPlayerVehicleID (playerid), engine, lights, alarm, doors, bonnet, boot, objective);
- if (!engine)
- {
- SetVehicleParamsEx (GetPlayerVehicleID (playerid), 1, lights, alarm, doors, bonnet, boot, objective);
- DistanceFromStart [GetPlayerVehicleID (playerid)] = 0.0;
- }
- else
- {
- SetVehicleParamsEx (GetPlayerVehicleID (playerid), 0, lights, alarm, doors, bonnet, boot, objective);
- if (rfs_WaitingEngine [playerid])
- {
- }
- }
- return 1;
- }
- if (!strcmp (cmdtext, "/comp", true))
- {
- if (!IsPlayerInAnyVehicle (playerid)) return 1;
- if (RefillTimer [GetPlayerVehicleID (playerid)] != 0) return 1;
- ShowPlayerDialog (playerid, DISPLAY_DIALOG_ID, DIALOG_STYLE_LIST, "Vehicle computer display:", "Distance \nFuel available \nFuel consumption \nDistance travelled in total \nDistance travelled since last start \nTime you've been traveling in total", "Confirm", "Cancel");
- return 1;
- }
- return 0;
- }
- stock rfs_IsPlayerAtGasStation (playerid)
- {
- for (new i = 0; i < sizeof (rfs_GasStations); i++)
- {
- if (IsPlayerInRangeOfPoint (playerid, 10.0, rfs_GasStations[i][x], rfs_GasStations[i][y], rfs_GasStations[i][z])) return 1;
- }
- return 0;
- }
- stock rfs_StationWorkerMessage (playerid)
- {
- new str[64];
- new h, m, s;
- gettime (h, m, s);
- if (h > 3 && h < 13)
- {
- str = "Gas station worker: Good morning, how can I help you?";
- }
- else if (h >= 13 && h < 19)
- {
- str = "Gas station worker: Good afternoon, how can I help you?";
- }
- else
- {
- str = "Gas station worker: Good evening, how can I help you?";
- }
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- if (IsPlayerConnected (i))
- {
- if (IsPlayerInVehicle (i, GetPlayerVehicleID (playerid)))
- {
- SendClientMessage (playerid, COLOR_WHITE, str);
- }
- }
- }
- }
- public rfs_OnPlayerText (playerid, text[])
- {
- new str[128], name[MAX_PLAYER_NAME];
- GetPlayerName (playerid, name, sizeof (name));
- strreplace (name, '_', ' ');
- format (str, sizeof (str), "%s says: %s", name, text);
- ProxDetector (16.0, playerid, str, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5);
- if (rfs_ChoosingGasType [playerid])
- {
- if (!rfs_IsPlayerAtGasStation (playerid)) return rfs_ChoosingGasType [playerid] = 0;
- for (new i = 0; i < sizeof (rfs_GasTypes); i++)
- {
- if (strfind (text, rfs_GasTypes [i], true) > -1)
- {
- veh_display [GetPlayerVehicleID (playerid)] = 0;
- SetTimerEx ("rfs_GasChosen", 150, 0, "dd", playerid, i);
- return 0;
- }
- }
- SendClientMessage (playerid, COLOR_WHITE, "Gas station worker: Sorry, we don't have that gas available.");
- }
- if (rfs_ChoosingFuelAmount [playerid])
- {
- if (!rfs_IsPlayerAtGasStation (playerid)) return rfs_ChoosingFuelAmount [playerid] = 0;
- new Float: amount = strval (text);
- if (amount < 0.1) return 1;
- new vehid = GetPlayerVehicleID (playerid);
- if (amount > rfs_VehFuelTankCapacity (vehid) || amount > rfs_VehFuelTankCapacity (vehid) - rfs_VehicleFuel [vehid])
- {
- amount = rfs_VehFuelTankCapacity (vehid) - rfs_VehicleFuel [vehid];
- }
- Update3DTextLabelText (rfs_3dtd_vehicle_refilling [vehid], COLOR_YELLOW, "This vehicle is being refilled.");
- Attach3DTextLabelToVehicle (rfs_3dtd_vehicle_refilling [vehid], vehid, 0.0, 0.0, 1.5);
- veh_display [vehid] = 0;
- HideTextDraws (playerid);
- rfs_ChoosingFuelAmount [playerid] = 0;
- TogglePlayerControllable (playerid, 0);
- RefillTimer [vehid] = SetTimerEx ("Refilling", 75, 1, "ddf", playerid, vehid, amount);
- }
- return 0;
- }
- stock HideTextDraws (playerid)
- {
- TextDrawHideForPlayer (playerid, rfs_td_distance [pl_vehid [playerid]]);
- TextDrawHideForPlayer (playerid, rfs_td_fuel_available [pl_vehid [playerid]]);
- TextDrawHideForPlayer (playerid, rfs_td_fuel_consumption [pl_vehid [playerid]]);
- TextDrawHideForPlayer (playerid, rfs_td_dist_total [pl_vehid [playerid]]);
- TextDrawHideForPlayer (playerid, rfs_td_dist_start [pl_vehid [playerid]]);
- TextDrawHideForPlayer (playerid, rfs_td_time_total [pl_vehid [playerid]]);
- return 1;
- }
- public Refilling (playerid, vehicleid, Float: amount)
- {
- new str[128];
- format (str, sizeof (str), "Name: %s~n~Liters: %0.2f~n~Price: %0.2f~n~Price per liter: %0.2f", rfs_GasName (ChoosenGas [vehicleid]), iCounter [vehicleid], rfs_GasPrice (ChoosenGas [vehicleid]) * iCounter [vehicleid], rfs_GasPrice (ChoosenGas [vehicleid]));
- TextDrawSetString (rfs_td_gas_station [GetPlayerVehicleID (playerid)], str);
- TextDrawShowForPlayer (playerid, rfs_td_gas_station [vehicleid]);
- iCounter [vehicleid] = iCounter [vehicleid] + 0.1;
- if (iCounter [vehicleid] + 0.1 > amount)
- {
- KillTimer (RefillTimer [vehicleid]);
- rfs_VehicleFuel [vehicleid] = rfs_VehicleFuel [vehicleid] + iCounter [vehicleid];
- SetTimerEx ("HideTDGasStation", 3000, 0, "dd", playerid, vehicleid);
- new price = floatround (iCounter [vehicleid] * rfs_GasPrice (ChoosenGas [vehicleid]), floatround_floor);
- GivePlayerMoney (playerid, - price);
- iCounter [vehicleid] = 0.0;
- TogglePlayerControllable (playerid, 1);
- RefillTimer [vehicleid] = 0;
- Update3DTextLabelText (rfs_3dtd_vehicle_refilling [vehicleid], COLOR_YELLOW, " ");
- }
- }
- public HideTDGasStation (playerid, vehicleid)
- {
- TextDrawHideForPlayer (playerid, rfs_td_gas_station [vehicleid]);
- veh_display [vehicleid] = 1;
- }
- public rfs_GasChosen (playerid, i)
- {
- new str[128];
- format (str, sizeof (str), "Gas station worker: You need some %s? Alright. How many liters do you want?", rfs_GasName (i));
- ProxDetector (16.0, playerid, str, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5);
- format (str, sizeof (str), "HINT: Type in the amount of fuel you want. Your vehicle tank can contain up to %d liters.", rfs_VehFuelTankCapacity (GetPlayerVehicleID (playerid)));
- SendClientMessage (playerid, COLOR_YELLOW, str);
- format (str, sizeof (str), "Name: %s~n~Liters: 0.00~n~Price: 0.00~n~Price per liter: %0.2f", rfs_GasName (i), rfs_GasPrice (i));
- TextDrawSetString (rfs_td_gas_station [GetPlayerVehicleID (playerid)], str);
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_gas_station [GetPlayerVehicleID (playerid)]);
- ChoosenGas [GetPlayerVehicleID (playerid)] = i;
- rfs_ChoosingGasType [playerid] = 0;
- rfs_ChoosingFuelAmount [playerid] = 1;
- return 0;
- }
- stock rfs_GasName (i)
- {
- new str[12];
- switch (i)
- {
- case 0: { format (str, sizeof (str), "regular gas"); }
- case 1: { format (str, sizeof (str), "midgrade"); }
- case 2: { format (str, sizeof (str), "premium"); }
- case 3: { format (str, sizeof (str), "diesel fuel"); }
- }
- return str;
- }
- Float: rfs_GasPrice (i)
- {
- switch (i)
- {
- case 0: { return REGULARGAS_PRICE; }
- case 1: { return MIDGRADE_PRICE; }
- case 2: { return PREMIUM_PRICE; }
- case 3: { return DIESELFUEL_PRICE; }
- }
- return -1.0;
- }
- stock rfs_VehFuelTankCapacity (vehicleid)
- {
- new modelid = GetVehicleModel (vehicleid);
- switch (VehicleType (modelid))
- {
- case 1: { return 70; }
- case 2: { return 60; }
- case 3: { return 80; }
- case 4: { return 130; }
- case 5: { return 25; }
- case 6: { return 200; }
- }
- return -1;
- }
- stock VehicleType (modelid)
- {
- new g = 0;
- for (new i = 0; i < sizeof (rfs_SportVehicles); i++)
- {
- if (modelid == rfs_SportVehicles[i]) { g = 1; }
- }
- for (new i = 0; i < sizeof (rfs_CommonVehicles); i++)
- {
- if (modelid == rfs_CommonVehicles[i]) { g = 2; }
- }
- for (new i = 0; i < sizeof (rfs_OffRoadVehicles); i++)
- {
- if (modelid == rfs_OffRoadVehicles[i]) { g = 3; }
- }
- for (new i = 0; i < sizeof (rfs_Trucks); i++)
- {
- if (modelid == rfs_Trucks[i]) { g = 4; }
- }
- for (new i = 0; i < sizeof (rfs_Bikes); i++)
- {
- if (modelid == rfs_Bikes[i]) { g = 5; }
- }
- for (new i = 0; i < sizeof (rfs_AirVehicles); i++)
- {
- if (modelid == rfs_AirVehicles[i]) { g = 6; }
- }
- return g;
- }
- stock strreplace(string[], find, replace)
- {
- for(new i=0; string[i]; i++)
- {
- if(string[i] == find)
- {
- string[i] = replace;
- }
- }
- }
- public ProxDetector(Float:radi, playerid, string[], col1, col2, col3, col4, col5)
- {
- if(IsPlayerConnected(playerid))
- {
- new Float:posx, Float:posy, Float:posz;
- new Float:oldposx, Float:oldposy, Float:oldposz;
- new Float:tempposx, Float:tempposy, Float:tempposz;
- GetPlayerPos(playerid, oldposx, oldposy, oldposz);
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
- {
- GetPlayerPos(i, posx, posy, posz);
- tempposx = (oldposx -posx);
- tempposy = (oldposy -posy);
- tempposz = (oldposz -posz);
- if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
- {
- SendClientMessage(i, col1, string);
- }
- else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
- {
- SendClientMessage(i, col2, string);
- }
- else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
- {
- SendClientMessage(i, col3, string);
- }
- else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
- {
- SendClientMessage(i, col4, string);
- }
- else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
- {
- SendClientMessage(i, col5, string);
- }
- }
- else
- {
- SendClientMessage(i, col1, string);
- }
- }
- }
- return 1;
- }
- public OnPlayerStateChange (playerid, newstate, oldstate)
- {
- if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
- {
- new str[64], vehid = GetPlayerVehicleID (playerid);
- if (VehicleType (GetVehicleModel (vehid)) == 0) return 1;
- if (FirstTimeInVehicle [vehid])
- {
- GetVehiclePos (vehid, old_veh_pos [vehid][0], old_veh_pos [vehid][1], old_veh_pos [vehid][2]);
- FirstTimeInVehicle [vehid] = 0;
- rfs_VehicleFuel [vehid] = randnumb (1, rfs_VehFuelTankCapacity (vehid));
- format (str, sizeof (str), "Distance~n~ %d km", floatround (rfs_VehicleFuel [vehid] / VehicleConsumption (vehid) * 100, floatround_tozero));
- TextDrawSetString (rfs_td_distance [vehid], str);
- format (str, sizeof (str), "Fuel available~n~%0.1f liters (%d%%)", rfs_VehicleFuel [vehid], floatround ((100 * rfs_VehicleFuel [vehid]) / rfs_VehFuelTankCapacity (vehid), floatround_tozero));
- TextDrawSetString (rfs_td_fuel_available [vehid], str);
- format (str, sizeof (str), "Fuel consumption~n~%0.1f liters/100 km", VehicleConsumption (vehid));
- TextDrawSetString (rfs_td_fuel_consumption [vehid], str);
- TextDrawShowForPlayer (playerid, rfs_td_distance [GetPlayerVehicleID (playerid)]);
- veh_display [vehid] = 1;
- SetTimerEx ("UpdateTime", 60000, 1, "dd", playerid, vehid);
- }
- switch (veh_display [vehid])
- {
- case 1:
- {
- TextDrawShowForPlayer (playerid, rfs_td_distance [vehid]);
- }
- case 2:
- {
- TextDrawShowForPlayer (playerid, rfs_td_fuel_available [vehid]);
- }
- case 3:
- {
- TextDrawShowForPlayer (playerid, rfs_td_fuel_consumption [vehid]);
- }
- case 4:
- {
- TextDrawShowForPlayer (playerid, rfs_td_dist_total [vehid]);
- }
- case 5:
- {
- TextDrawShowForPlayer (playerid, rfs_td_dist_start [vehid]);
- }
- case 6:
- {
- TextDrawShowForPlayer (playerid, rfs_td_time_total [vehid]);
- }
- }
- pl_vehid [playerid] = vehid;
- }
- if (newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
- {
- HideTextDraws (playerid);
- }
- return 1;
- }
- //////////////
- new Minutes [MAX_VEHICLES];
- forward UpdateTime (playerid, vehicleid);
- public UpdateTime (playerid, vehicleid)
- {
- Minutes [vehicleid] ++;
- new hours, str[64], tempmin;
- hours = floatround (Minutes [vehicleid] / 60, floatround_floor);
- tempmin = Minutes [vehicleid] - 60 * hours;
- if (hours < 10)
- {
- if (tempmin < 10)
- {
- format (str, sizeof (str), "Time elapsed~n~in total: 0%d:0%d", hours, tempmin);
- }
- else
- {
- format (str, sizeof (str), "Time elapsed~n~in total: 0%d:%d", hours, tempmin);
- }
- }
- else
- {
- if (tempmin < 10)
- {
- format (str, sizeof (str), "Time elapsed~n~in total: %d:0%d", hours, tempmin);
- }
- else
- {
- format (str, sizeof (str), "Time elapsed~n~in total: %d:%d", hours, tempmin);
- }
- }
- TextDrawSetString (rfs_td_time_total [vehicleid], str);
- }
- //////////////
- stock randnumb (min, max)
- {
- return random (max - min) + min;
- }
- public OnDialogResponse (playerid, dialogid, response, listitem, inputtext[])
- {
- if (dialogid == DISPLAY_DIALOG_ID)
- {
- if (response)
- {
- new vehid = GetPlayerVehicleID (playerid);
- if (VehicleType (GetVehicleModel (vehid) == 0 )) return 1;
- switch (listitem)
- {
- case 0:
- {
- veh_display [vehid] = 1;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_distance [vehid]);
- }
- case 1:
- {
- veh_display [vehid] = 2;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_fuel_available [vehid]);
- }
- case 2:
- {
- veh_display [vehid] = 3;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_fuel_consumption [vehid]);
- }
- case 3:
- {
- veh_display [vehid] = 4;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_dist_total [vehid]);
- }
- case 4:
- {
- veh_display [vehid] = 5;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_dist_start [vehid]);
- }
- case 5:
- {
- veh_display [vehid] = 6;
- HideTextDraws (playerid);
- TextDrawShowForPlayer (playerid, rfs_td_time_total [vehid]);
- }
- }
- }
- }
- return 1;
- }
- Float: VehicleConsumption (vehid)
- {
- if (VehicleType (GetVehicleModel (vehid) == 0 )) return -1.0;
- new Float: speed [3], multiplier, final_speed, Float: health;
- GetVehicleVelocity (vehid, speed [0], speed [1], speed [2]);
- final_speed = floatround (floatsqroot (floatpower (speed [0], 2) + floatpower (speed [1], 2) + floatpower (speed [2], 2)) * 160.666667, floatround_round);
- GetVehicleHealth (vehid, health);
- switch (VehicleType (GetVehicleModel (vehid)))
- {
- case 1:
- {
- if (final_speed <= 80.0)
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- }
- else
- {
- multiplier = - floatround (final_speed / 10, floatround_round);
- }
- return 9.5 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- case 2:
- {
- if (final_speed <= 65.0)
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- }
- else
- {
- multiplier = - floatround (final_speed / 10, floatround_round);
- }
- return 7.5 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- case 3:
- {
- if (final_speed <= 85.0)
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- }
- else
- {
- multiplier = - floatround (final_speed / 10, floatround_round);
- }
- return 10.5 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- case 4:
- {
- if (final_speed <= 75.0)
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- }
- else
- {
- multiplier = - floatround (final_speed / 10, floatround_round);
- }
- return 15.5 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- case 5:
- {
- if (final_speed <= 60.0)
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- }
- else
- {
- multiplier = - floatround (final_speed / 10, floatround_round);
- }
- return 4.5 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- case 6:
- {
- multiplier = floatround (final_speed / 10, floatround_round);
- return 20.0 + multiplier * 0.02 + (10.0 - health / 100) / 2;
- }
- }
- return -1.0;
- }
- public UpdateDisplay ()
- {
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- if (IsPlayerConnected (i))
- {
- if (IsPlayerInAnyVehicle (i))
- {
- if (GetPlayerState (i) == PLAYER_STATE_DRIVER)
- {
- new vehid = GetPlayerVehicleID (i);
- if (VehicleType (GetVehicleModel (vehid) < 0 )) return 0;
- new str[64];
- format (str, sizeof (str), "Fuel available~n~%0.1f liters (%d%%)", rfs_VehicleFuel [vehid], floatround ((100 * rfs_VehicleFuel [vehid]) / rfs_VehFuelTankCapacity (vehid), floatround_tozero));
- TextDrawSetString (rfs_td_fuel_available [vehid], str);
- format (str, sizeof (str), "Fuel consumption~n~%0.1f liters/100 km", VehicleConsumption (vehid));
- TextDrawSetString (rfs_td_fuel_consumption [vehid], str);
- }
- }
- }
- }
- return 1;
- }
- public UpdateDistance ()
- {
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- if (IsPlayerConnected (i))
- {
- if (IsPlayerInAnyVehicle (i))
- {
- if (GetPlayerState (i) == PLAYER_STATE_DRIVER)
- {
- new vehid = GetPlayerVehicleID (i);
- if (VehicleType (GetVehicleModel (vehid) < 0 )) return 0;
- new Float: vehpos [3];
- new str[64];
- GetVehiclePos (vehid, vehpos [0], vehpos [1], vehpos [2]);
- vehpos [0] = vehpos [0] - old_veh_pos [vehid][0];
- vehpos [1] = vehpos [1] - old_veh_pos [vehid][1];
- vehpos [2] = vehpos [2] - old_veh_pos [vehid][2];
- GetVehiclePos (vehid, old_veh_pos [vehid][0], old_veh_pos [vehid][1], old_veh_pos [vehid][2]);
- new Float: distance = floatsqroot (vehpos [0] * vehpos [0] + vehpos [1] * vehpos [1] + vehpos [2] * vehpos [2]);
- TotalDistance [vehid] = TotalDistance [vehid] + distance * 4 / 5;
- DistanceFromStart [vehid] = DistanceFromStart [vehid] + distance * 4 / 5;
- if (distance != 0)
- {
- rfs_VehicleFuel [vehid] = rfs_VehicleFuel [vehid] - VehicleConsumption (vehid) / 25000 * distance;
- }
- else
- {
- rfs_VehicleFuel [vehid] = rfs_VehicleFuel [vehid] - VehicleConsumption (vehid) / 25000 * 20;
- }
- format (str, sizeof (str), "Distance~n~ %d km", floatround (rfs_VehicleFuel [vehid] / VehicleConsumption (vehid) * 100, floatround_tozero));
- TextDrawSetString (rfs_td_distance [vehid], str);
- format (str, sizeof (str), "Distance travelled~n~in total: %0.3f km", TotalDistance [vehid] / 1000);
- TextDrawSetString (rfs_td_dist_total [vehid], str);
- format (str, sizeof (str), "Distance travelled~n~since start: %0.3f km", DistanceFromStart [vehid] / 1000);
- TextDrawSetString (rfs_td_dist_start [vehid], str);
- }
- }
- }
- }
- return 1;
- }
- public UpdateTextDraws ()
- {
- for (new i = 0; i < MAX_PLAYERS; i++)
- {
- if (IsPlayerConnected (i))
- {
- if (IsPlayerInAnyVehicle (i))
- {
- if (GetPlayerState (i) == PLAYER_STATE_DRIVER)
- {
- new vehid = GetPlayerVehicleID (i);
- if (VehicleType (GetVehicleModel (vehid) == 0 )) continue;
- switch (veh_display [vehid])
- {
- case 0:
- {
- HideTextDraws (i);
- }
- case 1:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_distance [vehid]);
- }
- case 2:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_fuel_available [vehid]);
- }
- case 3:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_fuel_consumption [vehid]);
- }
- case 4:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_dist_total [vehid]);
- }
- case 5:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_dist_start [vehid]);
- }
- case 6:
- {
- HideTextDraws (i);
- TextDrawShowForPlayer (i, rfs_td_time_total [vehid]);
- }
- }
- }
- }
- else
- {
- HideTextDraws (i);
- pl_vehid [i] = INVALID_VEHICLE_ID;
- }
- }
- }
- return 1;
- }
- // Credits to Srdjan
Add Comment
Please, Sign In to add comment