PDA

Просмотр полной версии : [Вопрос] Баг с командой /kick



iDiego
21.12.2014, 21:27
Когда кикаю игрока, в каждый раз по разному, иногда ему пишется причина, но не отключает, а просто рестартит игрока, а бывает, кикает, но игроку не пишется почему его кикнули, а в чат игрокам - пишет.
Команда:

CMD:kick(playerid, params[])
{
if(AdminLevel[playerid] < 3) return true;
if(sscanf(params, "us[30]", params[0], params[1])) return SendClientMessage(playerid, 0xFFFFFFFF, "Используйте: /kick [playerid] [reason]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xFFFFFFFF, "Такого игрока нет на сервере.");
new str[121];
format(str, 121, "Администратор %s кикнул игрока %s. Причина: %s", Name[playerid], Name[params[0]], params[1]);
SendClientMessageToAll(0xFF5030FF, str);
Kick(params[0]);
print(str);
return true;
}

$continue$
21.12.2014, 21:49
Если я правильно понял, после инклуда a_samp поставьте следующие:


forward KickPublic(playerid);
public KickPublic(playerid) return Kick(playerid);

#define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0)

L0ndl3m
21.12.2014, 23:37
Вместо

Kick(params[0]);
это:

SetTimerEx("@__kick_player_with_timer", 500, 0, "i", params[0]);

В конец скрипта:


@__kick_player_with_timer(playerid);
@__kick_player_with_timer(playerid) {
Kick(playerid);
}

$continue$
22.12.2014, 00:59
Вместо

Kick(params[0]);
это:

SetTimerEx("@__kick_player_with_timer", 500, 0, "i", params[0]);

В конец скрипта:


@__kick_player_with_timer(playerid);
@__kick_player_with_timer(playerid) {
Kick(playerid);
}


Расскажите разницу между выше представленным кодом :)

Пельмень
22.12.2014, 10:41
Расскажите разницу между выше представленным кодом :)

Дело в том, что в одной из последних версий сампа, разработчики решили, мол кик есть кик, и не надо ничего перед ним делать с игроком, такой троллинг от Калькора.