Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Статус
В этой теме нельзя размещать новые ответы.
Пользователь
Регистрация
26 Мар 2024
Сообщения
35
Kick(playerid); и Kick(to_player); не кикают не могу понять в чём проблема помогите
 
Пользователь
Регистрация
3 Мар 2024
Сообщения
21
Kick(playerid); и Kick(to_player); не кикают не могу понять в чём проблема помогите
Если речь идет про команду /kick, то для чего нам кикать того, кто ввел данную команду? То есть Kick(playerid);.
В данном случае скорее всего используется params[0] - ID игрока которого мы хотим кикнуть и params[1] - причина кика.
Я бы сделал вот так:
После всех проверок создаем переменную new pid;
Дальше присваиваем данной переменной ID нашего игрока которого мы хотим кикнуть, то есть - pid = params[0];
Ну и когда дело доходит до самого кика прописываем Kick(pid);
Готово. Также я бы посоветовал сделать таймер на кик, потому-что игрок не успеет увидеть сообщение о том, что его кикнули, он сразу отключится от сервера.
 
pawn love
Активный
Регистрация
26 Сен 2023
Сообщения
251
Если речь идет про команду /kick, то для чего нам кикать того, кто ввел данную команду? То есть Kick(playerid);.
В данном случае скорее всего используется params[0] - ID игрока которого мы хотим кикнуть и params[1] - причина кика.
Я бы сделал вот так:
После всех проверок создаем переменную new pid;
Дальше присваиваем данной переменной ID нашего игрока которого мы хотим кикнуть, то есть - pid = params[0];
Ну и когда дело доходит до самого кика прописываем Kick(pid);
Готово. Также я бы посоветовал сделать таймер на кик, потому-что игрок не успеет увидеть сообщение о том, что его кикнули, он сразу отключится от сервера.
впрочем да
но если допустим делать диалог с текстом что игрок кикнут то таймер вообще не нужен
можно и через SendClientMessage оповестить его об этом

тут на фантазию автора впрочем
 
Пользователь
Регистрация
3 Мар 2024
Сообщения
21
впрочем да
но если допустим делать диалог с текстом что игрок кикнут то таймер вообще не нужен
можно и через SendClientMessage оповестить его об этом

тут на фантазию автора впрочем
Когда я занимался разработкой мода с нуля, я пробовал оповещать через диалог и SCM, но к сожалению без таймера ничего не получалось, хотя сам кик был прописан после всего этого. Игрок кикался моментально.
 
pawn love
Активный
Регистрация
26 Сен 2023
Сообщения
251
Когда я занимался разработкой мода с нуля, я пробовал оповещать через диалог и SCM, но к сожалению без таймера ничего не получалось, хотя сам кик был прописан после всего этого. Игрок кикался моментально.
вполне возможно
просто сидя в игре мне казалось что все идет иначе
но если подумать логически, то да, функция закончит свое действие преждевременно, чем диалог \ SCM
 
Пользователь
Регистрация
26 Мар 2024
Сообщения
35
Извиняюсь что долго не отвечал занят был

CMD:kick(playerid, params[])
{
if(GetPlayerAdminEx(playerid) < 2) return 1;

if(!strlen(params)) return SendClientMessage(playerid, COLOR_GOLD, "Èñïîëüçóéòå:{"#cW"} /kick [ID èãðîêà] [ïðè÷èíà (íåîáÿçàòåëüíî)]");

extract params -> new to_player;

if(!IsPlayerConnected(to_player)) return SendClientMessage(playerid, 0xFF6600FF, "Òàêîãî èãðîêà íåò");
else if(GetPlayerAdminEx(to_player) > GetPlayerAdminEx(playerid)) return SendClientMessage(playerid, 0xFF6600FF, "Íåëüçÿ êèêíóòü àäìèíèñòðàòîðà âûøå ïî ðàíãó");

new reason[31];
sscanf(params, "{d}s[30]", reason);

new fmt_msg[128];
format(fmt_msg, sizeof fmt_msg, "Àäìèíèñòðàòîð %s êèêíóë èãðîêà %s", GetPlayerNameEx(playerid), GetPlayerNameEx(to_player));

if(strlen(reason) > 0)
format(fmt_msg, sizeof fmt_msg, "%s. Ïðè÷èíà: %s", fmt_msg, reason);

SendClientMessageToAll(0xFF5533FF, fmt_msg);

format(fmt_msg, sizeof fmt_msg, "Êèêíóë %s[acc:%d]", GetPlayerNameEx(to_player), GetPlayerAccountID(to_player));
SendLog(playerid, LOG_TYPE_ADMIN_ACTION, fmt_msg);

new message[324];

new year, month, day;

getdate(year, month, day);

format
(
message,
sizeof(message),
"{"#cW"}Äàòà: %d %s %d ã.\n\
{"#cW"}Âàø íèê: %s\n\
{"#cW"}Íèê àäìèíèñòðàòîðà: %s\n\
{"#cW"}Ïðè÷èíà: %s\n\n\
{"#cW"}Åñëè Âû íå ñîãëàñíû ñ íàêàçàíèåì, ñäåëàéòå ñêðèíøîò (F8)\n\
È îñòàâüòå æàëîáó íà ôîðóìå {"#cGold"}"SERVER_SITE"\n\
",
day,
GetMonthName(month),
year,
GetPlayerNameEx(to_player),
GetPlayerNameEx(playerid),
reason
);
Dialog(to_player, INVALID_DIALOG_ID, DIALOG_STYLE_MSGBOX, "{FF6600}Îòêëþ÷åíèå îò ñåðâåðà", message, "Çàêðûòü", "");

SendClientMessage(to_player, 0xFF6600FF, "Ââåäèòå /q(uit) ÷òîáû âûéòè");

new query[400];

mysql_format(mysql, query, sizeof query, "UPDATE admin SET kicks = kicks+1 WHERE name = '%s'", GetPlayerNameEx(playerid));
mysql_query(mysql, query, false);

mysql_format(mysql, query, sizeof query, "INSERT INTO alogs (acc_id,type,name_adm,time,reason) VALUES (%d,'%e','%e',%d,'%e')", GetPlayerAccountID(to_player), "Êèê", GetPlayerNameEx(playerid), gettime(), reason);
mysql_query(mysql, query, false);

// Kick(to_player);
Kick:(to_player);

return 1;
}

вот команда при её вводе пишет что кикнуло но не кикает с сервера
и при варне так же
 
Активный
Регистрация
20 Окт 2023
Сообщения
125
Извиняюсь что долго не отвечал занят был

CMD:kick(playerid, params[])
{
if(GetPlayerAdminEx(playerid) < 2) return 1;

if(!strlen(params)) return SendClientMessage(playerid, COLOR_GOLD, "Èñïîëüçóéòå:{"#cW"} /kick [ID èãðîêà] [ïðè÷èíà (íåîáÿçàòåëüíî)]");

extract params -> new to_player;

if(!IsPlayerConnected(to_player)) return SendClientMessage(playerid, 0xFF6600FF, "Òàêîãî èãðîêà íåò");
else if(GetPlayerAdminEx(to_player) > GetPlayerAdminEx(playerid)) return SendClientMessage(playerid, 0xFF6600FF, "Íåëüçÿ êèêíóòü àäìèíèñòðàòîðà âûøå ïî ðàíãó");

new reason[31];
sscanf(params, "{d}s[30]", reason);

new fmt_msg[128];
format(fmt_msg, sizeof fmt_msg, "Àäìèíèñòðàòîð %s êèêíóë èãðîêà %s", GetPlayerNameEx(playerid), GetPlayerNameEx(to_player));

if(strlen(reason) > 0)
format(fmt_msg, sizeof fmt_msg, "%s. Ïðè÷èíà: %s", fmt_msg, reason);

SendClientMessageToAll(0xFF5533FF, fmt_msg);

format(fmt_msg, sizeof fmt_msg, "Êèêíóë %s[acc:%d]", GetPlayerNameEx(to_player), GetPlayerAccountID(to_player));
SendLog(playerid, LOG_TYPE_ADMIN_ACTION, fmt_msg);

new message[324];

new year, month, day;

getdate(year, month, day);

format
(
message,
sizeof(message),
"{"#cW"}Äàòà: %d %s %d ã.\n\
{"#cW"}Âàø íèê: %s\n\
{"#cW"}Íèê àäìèíèñòðàòîðà: %s\n\
{"#cW"}Ïðè÷èíà: %s\n\n\
{"#cW"}Åñëè Âû íå ñîãëàñíû ñ íàêàçàíèåì, ñäåëàéòå ñêðèíøîò (F8)\n\
È îñòàâüòå æàëîáó íà ôîðóìå {"#cGold"}"SERVER_SITE"\n\
",
day,
GetMonthName(month),
year,
GetPlayerNameEx(to_player),
GetPlayerNameEx(playerid),
reason
);
Dialog(to_player, INVALID_DIALOG_ID, DIALOG_STYLE_MSGBOX, "{FF6600}Îòêëþ÷åíèå îò ñåðâåðà", message, "Çàêðûòü", "");

SendClientMessage(to_player, 0xFF6600FF, "Ââåäèòå /q(uit) ÷òîáû âûéòè");

new query[400];

mysql_format(mysql, query, sizeof query, "UPDATE admin SET kicks = kicks+1 WHERE name = '%s'", GetPlayerNameEx(playerid));
mysql_query(mysql, query, false);

mysql_format(mysql, query, sizeof query, "INSERT INTO alogs (acc_id,type,name_adm,time,reason) VALUES (%d,'%e','%e',%d,'%e')", GetPlayerAccountID(to_player), "Êèê", GetPlayerNameEx(playerid), gettime(), reason);
mysql_query(mysql, query, false);

// Kick(to_player);
Kick:(to_player);

return 1;
}

вот команда при её вводе пишет что кикнуло но не кикает с сервера
и при варне так же
Попробуй мой код

К define
#define function%0(%1) forward %0(%1) ; public %0(%1)


Ко всем Stock

stock kick_player ( playerid )
{
new ms = GetPlayerPing ( playerid ) > 200 ? 200 : GetPlayerPing ( playerid ) + 50 ;
return SetTimerEx ( "fixed_kick", ms, 0, "i", playerid ) ;
}


function fixed_kick ( playerid )
{
if ( ! IsPlayerConnected ( playerid ) ) return 1 ;
Kick ( playerid ) ;
return 1 ;
}
 
Пользователь
Регистрация
3 Мар 2024
Сообщения
21
Извиняюсь что долго не отвечал занят был

CMD:kick(playerid, params[])
{
if(GetPlayerAdminEx(playerid) < 2) return 1;

if(!strlen(params)) return SendClientMessage(playerid, COLOR_GOLD, "Èñïîëüçóéòå:{"#cW"} /kick [ID èãðîêà] [ïðè÷èíà (íåîáÿçàòåëüíî)]");

extract params -> new to_player;

if(!IsPlayerConnected(to_player)) return SendClientMessage(playerid, 0xFF6600FF, "Òàêîãî èãðîêà íåò");
else if(GetPlayerAdminEx(to_player) > GetPlayerAdminEx(playerid)) return SendClientMessage(playerid, 0xFF6600FF, "Íåëüçÿ êèêíóòü àäìèíèñòðàòîðà âûøå ïî ðàíãó");

new reason[31];
sscanf(params, "{d}s[30]", reason);

new fmt_msg[128];
format(fmt_msg, sizeof fmt_msg, "Àäìèíèñòðàòîð %s êèêíóë èãðîêà %s", GetPlayerNameEx(playerid), GetPlayerNameEx(to_player));

if(strlen(reason) > 0)
format(fmt_msg, sizeof fmt_msg, "%s. Ïðè÷èíà: %s", fmt_msg, reason);

SendClientMessageToAll(0xFF5533FF, fmt_msg);

format(fmt_msg, sizeof fmt_msg, "Êèêíóë %s[acc:%d]", GetPlayerNameEx(to_player), GetPlayerAccountID(to_player));
SendLog(playerid, LOG_TYPE_ADMIN_ACTION, fmt_msg);

new message[324];

new year, month, day;

getdate(year, month, day);

format
(
message,
sizeof(message),
"{"#cW"}Äàòà: %d %s %d ã.\n\
{"#cW"}Âàø íèê: %s\n\
{"#cW"}Íèê àäìèíèñòðàòîðà: %s\n\
{"#cW"}Ïðè÷èíà: %s\n\n\
{"#cW"}Åñëè Âû íå ñîãëàñíû ñ íàêàçàíèåì, ñäåëàéòå ñêðèíøîò (F8)\n\
È îñòàâüòå æàëîáó íà ôîðóìå {"#cGold"}"SERVER_SITE"\n\
",
day,
GetMonthName(month),
year,
GetPlayerNameEx(to_player),
GetPlayerNameEx(playerid),
reason
);
Dialog(to_player, INVALID_DIALOG_ID, DIALOG_STYLE_MSGBOX, "{FF6600}Îòêëþ÷åíèå îò ñåðâåðà", message, "Çàêðûòü", "");

SendClientMessage(to_player, 0xFF6600FF, "Ââåäèòå /q(uit) ÷òîáû âûéòè");

new query[400];

mysql_format(mysql, query, sizeof query, "UPDATE admin SET kicks = kicks+1 WHERE name = '%s'", GetPlayerNameEx(playerid));
mysql_query(mysql, query, false);

mysql_format(mysql, query, sizeof query, "INSERT INTO alogs (acc_id,type,name_adm,time,reason) VALUES (%d,'%e','%e',%d,'%e')", GetPlayerAccountID(to_player), "Êèê", GetPlayerNameEx(playerid), gettime(), reason);
mysql_query(mysql, query, false);

// Kick(to_player);
Kick:(to_player);

return 1;
}

вот команда при её вводе пишет что кикнуло но не кикает с сервера
и при варне так же
CMD:kick(playerid, params[])
{
if(pLogin[playerid] != true) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Вы не можете сейчас использовать команды.");
if(player_info[playerid][admin] < 2) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}У вас нету доступа к данной команде.");
if(temp_info[playerid][aLogin] == false) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Вы не авторизованы как администратор.");
if(sscanf(params, "ds[64]", params[0], params[1])) return SCM(playerid, COLOR_INFO, "[Информация]: {FFFFFF}Используйте /kick [id игрока] [причина].");
if(params[0] < 0 || params[0] > 1000) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Вы ввели неверный ID игрока.");
new pid = params[0];
if(pLogin[pid] != true) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Данного игрока нет на сервере или он не авторизован.");
if(strlen(params[1]) < 3 || strlen(params[1]) > 60) return SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Причина должна состоять от 3 до 60 символов.");
new tempstring[256];
if(player_info[playerid][name] == player_info[pid][name])
{
SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Вы ввели свой ID.");
return 1;
}
if(player_info[playerid][admin] <= player_info[pid][admin])
{
format(tempstring, sizeof(tempstring), "[Информация]: {FFFFFF}Администратор %s[%d] попытался Вас кикнуть.", player_info[playerid][name], playerid);
SCM(playerid, COLOR_ERROR, "[Ошибка]: {FFFFFF}Вы не можете кикнуть админа выше или равного себе (администратор был уведомлен).");
SCM(pid, COLOR_INFO, tempstring);
return 1;
}
format(tempstring, sizeof(tempstring), "Администратор %s[%d] кикнул игрока %s[%d]. Причина: %s", player_info[playerid][name], playerid, player_info[pid][name], pid, params[1]);
SCMTA(COLOR_ADM_CMD, tempstring);
format(tempstring, sizeof(tempstring), "[Информация]: {FFFFFF}Вас кикнул администратор %s[%d], причина: %s", player_info[playerid][name], playerid, params[1]);
SCM(pid, COLOR_INFO, tempstring);
SetTimerEx("kick_player", 2000, false, "i", pid);
return 1;
}

к stock

stock kick_player(playerid)
{
Kick(playerid);
return 1;
}



Идеальный код как по мне, только подстрой под твои переменные
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху