26.11.2013, 19:39
So I'm working on fuel / engine and gas stations system.. everything was ok when my timer to count down fuel level was set to 1 sec, now I set it to 15 secs so it would be more balanced and there is a bug, if I write /engine to turn it on, it's working good, but when I write /engine again to turn it off and if I wait a bit, my fuel textdraws show and it won't kill timer :/ here is the command, FLower callback and Engine start up callback - everything on what is command based to work.. how to fix this cuz I can't find mistake :/
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new vehicleid = GetPlayerVehicleID(playerid);
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
if(strcmp(cmdtext, "/engine", true) == 0) {
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to use this command.");
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
if(Carinfo[vehicleid][F] < 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}This vehicle is out of fuel.");
if(ES[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You are already starting your engine.");
if(engine == 1) {
KillTimer(GasTimer[playerid]);
SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
TextDrawHideForPlayer(playerid, vName[playerid]);
TextDrawHideForPlayer(playerid, vSpeed[playerid]);
TextDrawHideForPlayer(playerid, vGear[playerid]);
TextDrawHideForPlayer(playerid, vHP[playerid]);
TextDrawHideForPlayer(playerid, vFuel[playerid]);
TextDrawHideForPlayer(playerid, HP[playerid]);
TextDrawHideForPlayer(playerid, Speed[playerid]);
TextDrawHideForPlayer(playerid, Gear[playerid]);
TextDrawHideForPlayer(playerid, Veh[playerid]);
TextDrawHideForPlayer(playerid, Fuel[playerid]);
return 1;
} else {
SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twisted the key, wait 4 seconds.");
ES[playerid] = 1;
SetTimerEx("EngStart", 4000, false, "d", playerid);
return 1;
}
}
pawn Код:
public EngStart(playerid)
{
new vname[50];
// This will help us to detect vehicle HP
new Float:vehHP, vehicle = GetPlayerVehicleID(playerid);
GetVehicleHealth(vehicle, vehHP);
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
// If vehicle HP is 550 or more it will turn it's engine on 100%
if(vehHP >= 550)
{
SendClientMessage(playerid, COLOR_YELLOW,"{00FF00}INFO: {FFFFFF}Engine is succesfully started, write {FF6A22}/engine {FFFFFF}to turn off engine.");
ES[playerid] = 0;
SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
SetTimerEx("FLower", 15000, true, "i", playerid);
format(vname, sizeof(vname), "%s", Vehicles[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400]);
TextDrawSetString(vName[playerid], vname);
TextDrawShowForPlayer(playerid, vName[playerid]);
TextDrawShowForPlayer(playerid, vSpeed[playerid]);
TextDrawShowForPlayer(playerid, vGear[playerid]);
TextDrawShowForPlayer(playerid, vHP[playerid]);
TextDrawShowForPlayer(playerid, HP[playerid]);
TextDrawShowForPlayer(playerid, Speed[playerid]);
TextDrawShowForPlayer(playerid, Gear[playerid]);
TextDrawShowForPlayer(playerid, Veh[playerid]);
return 1;
}
// If vehicle HP is under 550 it will be 1/3 chance to turn it's engine one because it's broken
else
{
switch(random(3))
{
case 0:
{
SendClientMessage(playerid, COLOR_YELLOW,"{00FF00}INFO: {FFFFFF}Engine is succesfully started, write {FF6A22}/engine {FFFFFF}to turn off engine.");
SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
ES[playerid] = 0;
GasTimer[playerid] = SetTimerEx("FLower", 15000, true, "i", playerid);
format(vname, sizeof(vname), "%s", Vehicles[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400]);
TextDrawSetString(vName[playerid], vname);
TextDrawShowForPlayer(playerid, vName[playerid]);
TextDrawShowForPlayer(playerid, vSpeed[playerid]);
TextDrawShowForPlayer(playerid, vGear[playerid]);
TextDrawShowForPlayer(playerid, vHP[playerid]);
TextDrawShowForPlayer(playerid, HP[playerid]);
TextDrawShowForPlayer(playerid, Speed[playerid]);
TextDrawShowForPlayer(playerid, Gear[playerid]);
TextDrawShowForPlayer(playerid, Veh[playerid]);
return 1;
}
case 1:
{
SendClientMessage(playerid, COLOR_YELLOW,"{FF0000}INFO: {FFFFFF}Engine failed to start because your engine is broken, please try again.");
SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
return 1;
}
case 2: // added another case so it will be harder to turn on engine if car is broken
{
SendClientMessage(playerid, COLOR_YELLOW,"{FF0000}INFO: {FFFFFF}Engine failed to start because your engine is broken, please try again.");
SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
return 1;
}
}
}
return 1;
}
pawn Код:
public FLower(playerid)
{
new vehicleid = GetPlayerVehicleID(playerid);
Carinfo[vehicleid][F] = Carinfo[vehicleid][F] - FUEL_DECREASE;
TextDrawShowForPlayer(playerid, vFuel[playerid]);
TextDrawShowForPlayer(playerid, Fuel[playerid]);
if(Carinfo[vehicleid][F] < 1)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
Carinfo[vehicleid][F] = 0;//-----
KillTimer(GasTimer[playerid]);
GameTextForPlayer(playerid, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
TextDrawHideForPlayer(playerid, Veh[playerid]);
TextDrawHideForPlayer(playerid, Gear[playerid]);
TextDrawHideForPlayer(playerid, Speed[playerid]);
TextDrawHideForPlayer(playerid, HP[playerid]);
TextDrawHideForPlayer(playerid, vHP[playerid]);
TextDrawHideForPlayer(playerid, vGear[playerid]);
TextDrawHideForPlayer(playerid, vSpeed[playerid]);
TextDrawHideForPlayer(playerid, vName[playerid]);
TextDrawHideForPlayer(playerid, Fuel[playerid]);
TextDrawHideForPlayer(playerid, vFuel[playerid]);
}
if(Carinfo[vehicleid][F] > 95) TextDrawSetString(vFuel[playerid]," ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 90 && Carinfo[vehicleid][F] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~llll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 85 && Carinfo[vehicleid][F] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 80 && Carinfo[vehicleid][F] < 85) TextDrawSetString(vFuel[playerid], " ~g~~n~ll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 75 && Carinfo[vehicleid][F] < 80) TextDrawSetString(vFuel[playerid], " ~g~~n~l~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 70 && Carinfo[vehicleid][F] < 75) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 65 && Carinfo[vehicleid][F] < 70) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~llll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 60 && Carinfo[vehicleid][F] < 65) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~lll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 55 && Carinfo[vehicleid][F] < 60) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~ll~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 50 && Carinfo[vehicleid][F] < 55) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~l~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 45 && Carinfo[vehicleid][F] < 50) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lllll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 40 && Carinfo[vehicleid][F] < 45) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~llll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 35 && Carinfo[vehicleid][F] < 40) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 30 && Carinfo[vehicleid][F] < 35) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~ll~n~~r~lllll");
if(Carinfo[vehicleid][F] > 25 && Carinfo[vehicleid][F] < 30) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~l~n~~r~lllll");
if(Carinfo[vehicleid][F] > 20 && Carinfo[vehicleid][F] < 25) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~lllll");
if(Carinfo[vehicleid][F] > 15 && Carinfo[vehicleid][F] < 20) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~llll");
if(Carinfo[vehicleid][F] > 10 && Carinfo[vehicleid][F] < 15) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~lll");
if(Carinfo[vehicleid][F] > 5 && Carinfo[vehicleid][F] < 10) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~ll");
if(Carinfo[vehicleid][F] > 1 && Carinfo[vehicleid][F] < 5) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~l");
if(Carinfo[vehicleid][F] < 1) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~|");
return 1;
}