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 и все. Я когда делал такой античит, то замерял максимальную скорость для каждой ситуации (в воде, при прыжках, при залезании на преграды и т.п.) и там еще куча всяких проверок, например, не сбила ли игрока машина.
|