SteveStage
01.01.2020, 16:15
Вот моя система топлива (реализована в спидометре)
@_UpdateSpeed(playerid, vehicleid);
@_UpdateSpeed(playerid, vehicleid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
for(new i; i < 4; i++) PlayerTextDrawDestroy(playerid, td_speed[i]);
return false;
}
if(used_fuel_veh[vehicleid] >= 2 && veh[vehicleid][v_fuel] > 0)
{
veh[vehicleid][v_fuel] -= 1;
used_fuel_veh[vehicleid] = 0;
if(veh[vehicleid][v_fuel] == 0)
{
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
SCM(playerid, COLOR_RED, !"[SERVER] В вашем транспортном средстве кончилось топливо!");
SCM(playerid, COLOR_RED, !"[SERVER] Вы можете вызвать эвакуатор, который отбуксирует вас до ближайшей АЗС");
}
if(IsPlayerConnected(veh[vehicleid][v_ownerid]))
{
new
str[128+1];
format(str, sizeof(str), "UPDATE `vehicles` SET `fuel` = '%d' WHERE `tableid` = '%d'", veh[vehicleid][v_fuel], veh[vehicleid][v_tableid]);
mysql_function_query(connect_mysql, str, false, "", "");
}
}
new
string[16],
getspeed = GetVehicleSpeed(vehicleid);
format(string, sizeof(string), "SPEED: %d KM/H", getspeed);
PlayerTextDrawSetString(playerid, td_speed[1], string);
format(string, sizeof(string), "FUEL: %d", veh[vehicleid][v_fuel]);
PlayerTextDrawSetString(playerid, td_speed[2], string);
format(string, sizeof(string), "LOCK: %s", (lock_veh{vehicleid} == true) ? ("LOCKED") : ("UNLOCKED"));
PlayerTextDrawSetString(playerid, td_speed[3], string);
for(new i = 1; i < 4; i++) PlayerTextDrawShow(playerid, td_speed[i]);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
return true;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
switch(newkeys)
{
case KEY_SPRINT:
{
if(IsPlayerInAnyVehicle(playerid))
{
new
vehicleid = GetPlayerVehicleID(playerid),
getspeed = GetVehicleSpeed(vehicleid);
if(getspeed >= 1 && veh[vehicleid][v_fuel] > 0) used_fuel_veh[vehicleid] += 1;
printf("used fuel - %d, fuel - %d", used_fuel_veh[vehicleid], veh[vehicleid][v_fuel]);
return true;
}
}
}
return true;
}
И если я буду задрачивать кнопку "w", то бензин будет отниматься быстрее, чем если я просто зажму её. Как можно реализовать нормальную систему бензина, где что при нажатии, что при зажатии "w" бензина будет отниматься одинаково, а если "w" не нажата - вовсе не отнимать бензин? (Знаю, что надо еще отнятие бензина и на "s" сделать, но мне бы логику действий понять хотя бы)
@_UpdateSpeed(playerid, vehicleid);
@_UpdateSpeed(playerid, vehicleid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
for(new i; i < 4; i++) PlayerTextDrawDestroy(playerid, td_speed[i]);
return false;
}
if(used_fuel_veh[vehicleid] >= 2 && veh[vehicleid][v_fuel] > 0)
{
veh[vehicleid][v_fuel] -= 1;
used_fuel_veh[vehicleid] = 0;
if(veh[vehicleid][v_fuel] == 0)
{
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
SCM(playerid, COLOR_RED, !"[SERVER] В вашем транспортном средстве кончилось топливо!");
SCM(playerid, COLOR_RED, !"[SERVER] Вы можете вызвать эвакуатор, который отбуксирует вас до ближайшей АЗС");
}
if(IsPlayerConnected(veh[vehicleid][v_ownerid]))
{
new
str[128+1];
format(str, sizeof(str), "UPDATE `vehicles` SET `fuel` = '%d' WHERE `tableid` = '%d'", veh[vehicleid][v_fuel], veh[vehicleid][v_tableid]);
mysql_function_query(connect_mysql, str, false, "", "");
}
}
new
string[16],
getspeed = GetVehicleSpeed(vehicleid);
format(string, sizeof(string), "SPEED: %d KM/H", getspeed);
PlayerTextDrawSetString(playerid, td_speed[1], string);
format(string, sizeof(string), "FUEL: %d", veh[vehicleid][v_fuel]);
PlayerTextDrawSetString(playerid, td_speed[2], string);
format(string, sizeof(string), "LOCK: %s", (lock_veh{vehicleid} == true) ? ("LOCKED") : ("UNLOCKED"));
PlayerTextDrawSetString(playerid, td_speed[3], string);
for(new i = 1; i < 4; i++) PlayerTextDrawShow(playerid, td_speed[i]);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
return true;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
switch(newkeys)
{
case KEY_SPRINT:
{
if(IsPlayerInAnyVehicle(playerid))
{
new
vehicleid = GetPlayerVehicleID(playerid),
getspeed = GetVehicleSpeed(vehicleid);
if(getspeed >= 1 && veh[vehicleid][v_fuel] > 0) used_fuel_veh[vehicleid] += 1;
printf("used fuel - %d, fuel - %d", used_fuel_veh[vehicleid], veh[vehicleid][v_fuel]);
return true;
}
}
}
return true;
}
И если я буду задрачивать кнопку "w", то бензин будет отниматься быстрее, чем если я просто зажму её. Как можно реализовать нормальную систему бензина, где что при нажатии, что при зажатии "w" бензина будет отниматься одинаково, а если "w" не нажата - вовсе не отнимать бензин? (Знаю, что надо еще отнятие бензина и на "s" сделать, но мне бы логику действий понять хотя бы)