// This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #include <a_samp> new fuel[MAX_VEHICLES]; //fuel per vehicle forward timer_fuel_lower(); //timer for lowering the fuel value forward timer_refuel(playerid); //timer to refuel vehicle new isrefuelling[MAX_PLAYERS] = 0; //bool to check if player is already refuelling new Text:td_fuel[MAX_PLAYERS]; //textdraw with fuel #define Yellow 0xFFFF00AA public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Fuel System by Zoe Loaded!!"); print("--------------------------------------\n"); for(new i=0;i<MAX_VEHICLES;i++) { fuel[i] = 100; //sets every car's fuel to 100 in a loop } SetTimer("timer_fuel_lower",4200,true); //sets the timer to drop the fuel return 1; } public OnPlayerSpawn(playerid) { td_fuel[playerid] = TextDrawCreate(45,324,"Fuel: 100"); //create the textdraw at position TextDrawBackgroundColor(td_fuel[playerid],0x00000033); //setting an nice backgroundcolor TextDrawFont(td_fuel[playerid],3); //font type of textdraw TextDrawLetterSize(td_fuel[playerid],0.699999,1.700000); //size... TextDrawColor(td_fuel[playerid],0x000000ff); //color TextDrawSetShadow(td_fuel[playerid],3); //dropping the shadow return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { if (!strcmp("/refuel",cmdtext,true,7)) { if (!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFC800FF,"You are not in an vehicle!"); //if a player isnt in a vehicle, it stops here if (isrefuelling[playerid]) return SendClientMessage(playerid,0xFFC800FF,"You are already refuelling!"); //if a player is already refuelling, it stops here if (GetPlayerMoney(playerid) - 80 <0) return SendClientMessage(playerid,0xFFC800FF,"You dont have enough money!"); //if a player doesnt have $80 anymore, it stops here GivePlayerMoney(playerid,-80); //Sets the player's cash -$80 SetCameraBehindPlayer(playerid); //Sets the camera behind the player (looks better because the player will be frozen for a few secs) TogglePlayerControllable(playerid,0); //freezes the player so he cant drive and refuel at the same time isrefuelling[playerid] = 1; //setting isrefuelling to 1 so the player cant spam /refuel TextDrawSetString(td_fuel[playerid],"Refuelling..."); //changing textdraw to /refuel SetTimerEx("timer_refuel",4500,false,"i",playerid); //setting refueltimer return 1; } return 0; } public OnPlayerStateChange(playerid, newstate, oldstate) { if (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) { new vid = GetPlayerVehicleID(playerid); new string[125];format(string,sizeof string,"Fuel:%i",fuel[vid]); //quickly doing a small update on fuel (so it wont jump from 100 to its real value) TextDrawSetString(td_fuel[playerid],string); TextDrawShowForPlayer(playerid,td_fuel[playerid]); //showing if an player is a driver or passenger of the ar } else { TextDrawHideForPlayer(playerid,td_fuel[playerid]); //hiding if a player isnt driving/or an passenger } return 1; } public timer_fuel_lower() { for(new i=0;i<MAX_PLAYERS;i++) { //loop for all players if (isrefuelling[i]) continue; //stop when a player is already refuelling new vid = GetPlayerVehicleID(i); //getting vehicle ID if (GetPlayerVehicleSeat(i) == 0) { //if the player is a driver (it should only lower the fuel when theres an driver!) fuel[vid] = fuel[vid] -1; //lowering fuel value if (fuel[vid]<1) //if fuel is empty { fuel[vid] = 0; //setting fuel to 0 (else the timer will set it to -1 -2 -3 etc before removing player) RemovePlayerFromVehicle(i); //remove player out of vehicle GameTextForPlayer(i,"~r~You are out of ~w~fuel~r~!",5000,4); //show text } } new string[125];format(string,sizeof string,"Fuel:%i",fuel[vid]); //preparing string with next fuel value TextDrawSetString(td_fuel[i],string); //updating textdraw } return 1; } public timer_refuel(playerid) { new vid = GetPlayerVehicleID(playerid); fuel[vid] = fuel[vid] = 100; //restoring fuel to 100 isrefuelling[playerid] = 0;//resetting anti-spam thingy :3 TextDrawSetString(td_fuel[playerid],"Fuel:100"); //small update on textdraw TogglePlayerControllable(playerid,1); //unfreeze player }
Well first you need to get the positions of all fuel stations you want in San Andreas.
Next you need to add distance checks to the '/refuel' command, to check if the player is near a fuel station position. Obviously you don't want to have a ton of if statements in your command, you need to have an array of positions and use a loop to check the distance between you and each position. Understand? if not I will guide you through it ![]() |
public OnPlayerCommandText(playerid, cmdtext[])
{
if (!strcmp("/refuel",cmdtext,true,7)) {
if (!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFC800FF,"You are not in an vehicle!"); //if a player isnt in a vehicle, it stops here
if (isrefuelling[playerid]) return SendClientMessage(playerid,0xFFC800FF,"You are already refuelling!"); //if a player is already refuelling, it stops here
if (GetPlayerMoney(playerid) - 80 <0) return SendClientMessage(playerid,0xFFC800FF,"You dont have enough money!"); //if a player doesnt have $80 anymore, it stops here
GivePlayerMoney(playerid,-80); //Sets the player's cash -$80
SetCameraBehindPlayer(playerid); //Sets the camera behind the player (looks better because the player will be frozen for a few secs)
TogglePlayerControllable(playerid,0); //freezes the player so he cant drive and refuel at the same time
isrefuelling[playerid] = 1; //setting isrefuelling to 1 so the player cant spam /refuel
TextDrawSetString(td_fuel[playerid],"Refuelling..."); //changing textdraw to /refuel
SetTimerEx("timer_refuel",4500,false,"i",playerid); //setting refueltimer
return 1;
}
return 0;
}
if (!strcmp("/refuel",cmdtext,true,7)) {
if(IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z)) return SendClientMessage(playerid,0xFFFFFFFF,"You are not at a Gas Station");
@BATAD that's for one position, he needs it for many, if you read his post.
@Phoebe I shall tell you how to do it, give me a few minutes to write ![]() |
@BATAD that's for one position, he needs it for many, if you read his post.
@Phoebe I shall tell you how to do it, give me a few minutes to write ![]() |
if(IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z) || IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z) ||
IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z) || IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z) ||
FUCK THAT i have like 100 odd positions to put in u can forget that Batad
|
@BATAD that's for one position, he needs it for many, if you read his post.
@Phoebe Ok, so you want to load the positions from a file? First thing I'm going to say is you don't need DINI for this Secondly, you need to do is make sure the positions are in the file in the correct format "x, y, z" If you saved them using /save in game then you will have an extra parameter for the rotation, don't worry about that. For example one line in the file should look like this: 359.8384, -1285.4875, 12.3564, 180.3853 (maybe an extra parameter here for rotation) So if you have a file full of co-ordinate sets now I'll show you how to read form them and save to a file. First thing is you need a global variable at the top of your script to save all the data form the file in while you use them in the script. Step 1 new gStationPos[enter your amount of fuel station slots here][3]; That declares an array variable with the amount of cells for your sets of co-ordinates for fuel stations, each with 3 'sub' cells of their own that each contain either the X, Y or Z of the position. Step 2 Now you need a function to call when your gamemode loads to put all the file data into that variable, so you can use it in your command. pawn Code:
Step 3 Now you need to put the check on the command, this involves a simple loop and check to see if the player is near Any of the positions pawn Code:
That should work, keep in mind this was written entirely from theory, no tests and I am renowned for making small mistakes (or large ones!) Hope it helps you still ![]() |