public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
new Float:health;
new vehid = GetPlayerVehicleID(playerid);
GetVehicleHealth(vehid, health);
if(health <= 500)
{
SendClientMessage(playerid, -1, "BROKEN");
}
}
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
new Float:health;
new vehid = GetPlayerVehicleID(playerid);
new message = GetPVarInt(playerid, "Message");
GetVehicleHealth(vehid, health);
if(health <= 500 && message == 0) // Checks if we didn't receive a message yet
{
SendClientMessage(playerid, -1, "BROKEN");
SetPVarInt(playerid, "Message", 1); // Message sent
}
}
return 1;
}
It keeps sending the message because the health stays below 500. If you want it to send one message you'll have to use another variable. For example:
pawn Код:
|
// Timer interval for vehicle update
#define VEHICLE_UPDATE_TIME 1000
// Amount before car is broken
#define VEHICLE_BROKEN_DAMAGE 500
// Current car status
#define STATUS_WORKING 0
#define STATUS_BROKEN 1
// Vehicle enum data
enum VINFO
{
vModel,
vStatus,
}
// Vehicle data
new gVehicleData[MAX_VEHICHLES][VINFO];
// Start the update timer
public OnGameModeInit()
{
SetTimer("VUpdate", VEHICLE_UPDATE_TIME, true);
return 1;
}
// update vehicles
forward VUpdate();
public VUpdate()
{
// We only need to check if players online are the driver (requires foreach() include otherwise use a MAX_PLAYER loop / IsPlayerConnected();
foreach(new i : Player)
{
// Player is was not the driver skip iteration
if(GetPlayerVehicleSeat(i) != 0) continue;
// Get the vehicleid of the car
new vid = GetPlayerVehicleID(i);
// Is it broken? skip iteration
if(gVehicleData[vid][vStatus] == STATUS_BROKEN) continue;
// Lets check the health now
new Float:hp;
GetVehicleHealth(vid , hp);
// Health too low? set to broken status message player
if(hp <= VEHICLE_BROKEN_DAMAGE)
{
gVehicleData[vid][vStatus] = STATUS_BROKEN;
SendClientMessage(playerid, -1, "BROKEN");
}
}
}
// When a vehicle respawns set the status to working
public OnVehicleSpawn(vehicleid)
{
gVehicleData[vid][vStatus] = STATUS_WORKING;
return 1;
}