30.06.2013, 10:28
Оставлю тут. Может работать как ФС. Суть АФК бага: на одном транспорте могут ездить несколько игроков.
pawn Code:
#include <a_samp>
new NewWVehicle[MAX_PLAYERS];
new WVehicle[MAX_PLAYERS];
new EnterWVehicleTime[MAX_PLAYERS];
new WVehicleDriver[MAX_VEHICLES];
forward PutPlayerInVehicleEx(playerid, vehicleid, seatid);
public PutPlayerInVehicleEx(playerid, vehicleid, seatid)
{
//Из-за пинга возможны проблемы. Нужно высадить и лишь потом посадить, если игрок уже был в другом транспорте.
NewWVehicle[playerid]=vehicleid;
EnterWVehicleTime[playerid]=0;
return PutPlayerInVehicle(playerid, vehicleid, seatid);
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
//---------------------- AntiQuikCarChange ------------------------
NewWVehicle[playerid]=vehicleid;
return 1;
}
public OnPlayerUpdate(playerid)
{
//---------------------- AntiQuikCarChange ------------------------
new vehicleid=GetPlayerVehicleID(playerid);
if(vehicleid == 0)WVehicle[playerid]=0; else//exit
{
if(WVehicle[playerid] == 0)//enter
{
if(NewWVehicle[playerid] != vehicleid)
{
SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
Kick(playerid);
return 0;
}
else
{
if(GetTickCount()-EnterWVehicleTime[playerid] < 1500)
{
SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
Kick(playerid);
return 0;
}
else
{
WVehicle[playerid]=vehicleid;
NewWVehicle[playerid]=0;
EnterWVehicleTime[playerid]=GetTickCount();
//---------------------- Anti AFK Bug ----------------------------
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)WVehicleDriver[vehicleid]=playerid;
}
}
}
else if(WVehicle[playerid] != vehicleid)
{
SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
Kick(playerid);
return 0;
}
//---------------------- Anti AFK Bug ----------------------------
if(GetPlayerState(playerid)==PLAYER_STATE_DRIVER && WVehicleDriver[vehicleid] != playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
}
}
//...
return 1;
}