10.11.2016, 06:59
В дробных частях координат, указанных в GangZoneCreate, округли их до целого.
|
if(Player[playerid][AFK] == 0) Player[playerid][AFK] -= 1; else if(Player[playerid][AFK] == -1) { Player[playerid][AFK] = 1; new string[128]; format(string, sizeof(string), "АФК: %s", ConvertSeconds(Player[playerid][AFK])); SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000); } else if(Player[playerid][AFK] > 0) { new string[255]; Player[playerid][AFK] += 1; format(string, sizeof(string), "АФК: %s", ConvertSeconds(Player[playerid][AFK])); SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000); if(Player[playerid][AFK] >= 30) { Kick(playerid); } } |
|
Нормальных методов нет. На ум приходит добавить проверку на нажатые кнопки или на анимацию в OnPlayerUpdate, запомнить время и, по истечении нужного времени, в том же OnPlayerUpdate опустить игрока на землю с помощью связки GetPlayerPos + SetPlayerPosFindZ. Но, как по мне, оно того не стоит)
|
new
Float:OldSpeed[MAX_PLAYERS],
SpeedTime[MAX_PLAYERS];
public OnPlayerSpawn(playerid)
{
OldSpeed[playerid] = 0.0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING &&
GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID &&
GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID)
{
new Float:vX, Float:vY, Float:vZ;
GetPlayerVelocity(playerid, vX, vY, vZ);
vX = GetSpeed(vX, vY, vZ);
if(vX > 212.0 && vX > OldSpeed[playerid] && GetTickCount() > SpeedTime[playerid] + 500)
{
Kick(playerid); //Наказание своё
return 0; //Рассинхрон, это важно
}
OldSpeed[playerid] = vX;
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(PLAYER_STATE_DRIVER <= oldstate <= PLAYER_STATE_PASSENGER)
{
new Float:vX, Float:vY, Float:vZ;
GetPlayerVelocity(playerid, vX, vY, vZ);
OldSpeed[playerid] = GetSpeed(vX, vY, vZ);
SpeedTime[playerid] = GetTickCount();
}
return 1;
}
GetSpeed(Float:X, Float:Y, Float:Z = 0.0)
return floatround(VectorSize(X, Y, Z) * 179.28625);
|
Как была замерена максимальная скорость? Что-то у вас все чересчур просто, 212 и все. Я когда делал такой античит, то замерял максимальную скорость для каждой ситуации (в воде, при прыжках, при залезании на преграды и т.п.) и там еще куча всяких проверок, например, не сбила ли игрока машина.
|