15.12.2011, 20:01
Try this one (Not tested yet):
pawn Код:
//..Some code
new PlayerTime[MAX_PLAYERS], PlayerState[MAX_PLAYERS], Float:PlayerVehicleHP[MAX_PLAYERS], bool:UsableVehicle[MAX_VEHICLES];
stock IsVehicleUsable(vehicleid) return ((vehicleid > 0 && vehicleid < MAX_VEHICLES+1) ? UsableVehicle[vehicleid-1] : false);
stock MakeVehicleUsable(vehicleid) if(vehicleid > 0 && vehicleid < MAX_VEHICLES+1) UsableVehicle[vehicleid-1] = true;
stock MakeVehicleUnusable(vehicleid) if(vehicleid > 0 && vehicleid < MAX_VEHICLES+1) UsableVehicle[vehicleid-1] = false;
public OnPlayerDisconnect(playerid, reason)
{
//...
PlayerTime[playerid] = 0;
PlayerState[playerid] = 0;
PlayerVehicleHP[playerid] = 0;
//...
return 1;
}
public OnPlayerUpdate(playerid)
{
new tick = GetTickCount();
if(PlayerTime[playerid] >= tick) return 1; //Prevents script overkill (will delay up to < 1ms)
PlayerTime[playerid] = tick;
//...
new pvID = GetPlayerVehicleID(playerid);
if(pvID != 0)
{
new Float:pvHP;
GetVehicleHealth(pvID, pvHP);
if(PlayerVehicleHP[playerid] != pvHP)
{
if(pvHP < 251.0 && IsVehicleUsable(pvID))
{
MakeVehicleUnusable(vehicleid);
new Float:angle;
GetVehicleZAngle(pvID, angle);
SetVehicleZAngle(pvID, angle);
SetVehicleAngularVelocity(pvID, 0.0, 0.0, 0.0);
SetVehicleHealth(pvID, 251.0);
new vParams[7];
GetVehicleParamsEx(pvID, vParams[0], vParams[1], vParams[2], vParams[3], vParams[4], vParams[5], vParams[6]);
SetVehicleParamsEx(pvID, 0, 0, vParams[2], vParams[3], vParams[4], vParams[5], vParams[6]);
}
else if(pvHP >= 251.0 && !IsVehicleUsable(pvID))
{
MakeVehicleUsable(vehicleid);
new vParams[7];
GetVehicleParamsEx(pvID, vParams[0], vParams[1], vParams[2], vParams[3], vParams[4], vParams[5], vParams[6]);
SetVehicleParamsEx(pvID, 1, 1, vParams[2], vParams[3], vParams[4], vParams[5], vParams[6]);
}
PlayerVehicleHP[playerid] = pvHP;
}
}
else if(PlayerVehicleHP[playerid] != 0.0) PlayerVehicleHP[playerid] = 0.0;
return 1;
}
//..Some code