PDA

Просмотр полной версии : [Вопрос] Не правильно работает kick



Айболит
02.07.2014, 20:05
Здравствуйте форумчане п-п.р, Такая проблема, когда хочу кикнуть игрока, кикает меня вместо того кого указал... Вообще не знаю из за чего..



if(dialogid == 5)
{
if(!response) return 1;
if(!IsPlayerConnected(strval(inputtext))) return SendClientMessage(playerid, -1, "Игрок не найден");
SendClientMessage(playerid,0xFF00000,"Вы кикнули игрока с сервера.");
SendClientMessage(strval(inputtext),0xFF00000,"Администратор кикнул вас с сервера.");
new adm[MAX_PLAYER_NAME], user[MAX_PLAYER_NAME], mes[256];//
GetPlayerName(playerid, adm, sizeof(adm));
GetPlayerName(strval(inputtext), user, sizeof(user));
format(mes, sizeof(mes), "Администратор %s кикнул игрока %s",adm,user);
SendClientMessageToAll(0xFFFF00AA, mes);
SetTimerEx("kick",1000*1,0,"i",strval(inputtext));
return 1;
}



forward kick(playerid,inputtext[]);
public kick(playerid,inputtext[])
{
Kick(strval(inputtext));
return 1;
}

Flime
02.07.2014, 20:09
Наверное


forward kick(playerid);
public kick(playerid)
{
Kick(playerid);
return 1;
}

Айболит
02.07.2014, 20:13
Так ты кикнешь игрока, который кикает..

- - - Добавлено - - -


Наверное


forward kick(playerid);
public kick(playerid)
{
Kick(playerid);
return 1;
}


А хотя, проверил работает.. ++ Спасибо

DeimoS
02.07.2014, 20:15
Не проще ли в самое начало мода

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

#define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0)
использовать напрямую Kick и не мучиться?

Flime
02.07.2014, 20:18
Так ты кикнешь игрока, который кикает..

- - - Добавлено - - -



А хотя, проверил работает.. ++ Спасибо


В каждом паблике значения меняются. То есть strval(inputtext) в public kick станет playerid :)

- - - Добавлено - - -


Не проще ли в самое начало мода

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

#define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0)
использовать напрямую Kick и не мучиться?

Так тогда можно не вводить SetTimerEx а сделать еще проще. Через общий секундный таймер. Вопрос в другом заключается :)
Вот так:
В секундный


if(GetPVarInt(playerid, "KickTimer") != 0 && GetPVarInt(playerid, "KickTimer") < GetTickCount()) return Kick(playerid);

И везде где кикать будешь писать


SetPVarInt(playerid, "KickTimer",GetTickCount()+1000);

Айболит
02.07.2014, 20:19
Не проще ли в самое начало мода

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

#define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0)
использовать напрямую Kick и не мучиться?



Ну я же учусь) а за совет спасибо..

OKStyle
04.07.2014, 08:13
использовать напрямую Kick и не мучиться?
А если надо другое время установить, через которое кикнуть игрока надо?

DeimoS
04.07.2014, 10:43
Для извращенцев могу предложить следующий код

forward KickPublic(playerid);
public KickPublic(playerid) return Kick(playerid);
stock KickEx(playerid, time = 100) return SetTimerEx("KickPublic", time, false, "i", playerid);
#define Kick KickEx
Это из самого элементарного. Использовать точно так же, как и ранее

Kick(playerid);
И так же можно указать время до кика

Kick(playerid, 50000);
В теории работать должно