Просмотр полной версии : [Мануал] Доступ к RCON логированию
Иван Бубнов
14.03.2016, 00:05
Думал над тем, как дать доступ к RCON логированию только определенному ника, вот набросал пример быдлокодом. Без if(success || !success) скрипт отказывался работать, протестил - все работает как надо.
#include <a_samp>
public OnRconLoginAttempt(ip[], password[], success)
{
new
getip[16+1],
sendername[MAX_PLAYER_NAME];
#if defined foreach
foreach(new i : Player)
#else
for(new i = GetPlayerPoolSize(); i != -1; i--)
#endif
{
GetPlayerIp(i, getip, sizeof(getip));
if(!strcmp(ip,getip,true))
{
GetPlayerName(i, sendername, sizeof(sendername));
if(strcmp(sendername,"Ваш ник", false)) // Если ники не совпадают - кик
{
Kick(i);
printf("Игрок %s [%d] был кикнут, попытка RCON логирования.", sendername, i);
break;
}
}
}
return 1;
}
$continue$
14.03.2016, 00:15
Что ты данной проверкой хотел сказать коду?
if(success || !success)
Иван Бубнов
14.03.2016, 00:24
Что ты данной проверкой хотел сказать коду?
if(success || !success)
а он по другому никак не реагировал.
vovandolg
14.03.2016, 01:13
Думал над тем, как дать доступ к RCON логированию только определенному ника, вот набросал пример быдлокодом. Без if(success || !success) скрипт отказывался работать, протестил - все работает как надо.
return printf("Игрок %s [%d] был кикнут, попытка RCON логирования.", sendername, i);
логиниться и логировать разные вещи вроде бы..
И ещё про этот паблик не знаю, но в других где в аргументах есть playerid,
вот там сперва выводятся все месседжи, логи и т.п., а потом уже кикает или банит злодея ;)
Ещё + к тому что тут цикл, и тут если не ошибаюсь надо не return, а continue или break..
Скажите пож, для какой цели в коде присутствуют вот эти строки:
#if defined foreach
#else
#endif
vovandolg
14.03.2016, 15:15
Скажите пож, для какой цели в коде присутствуют вот эти строки:
#if defined foreach
#else
#endif
Я так понял если у тебя в моде отсутствует инклуд foreach.inc ему на замену идёт внутреигровой перебор через GetPlayerPoolSize()
Я так понял если у тебя в моде отсутствует инклуд foreach.inc ему на замену идёт внутреигровой перебор через GetPlayerPoolSize()
Верно, если нету foreach, переходим к циклу..
Иван Бубнов
14.03.2016, 15:40
логиниться и логировать разные вещи вроде бы..
И ещё про этот паблик не знаю, но в других где в аргументах есть playerid,
вот там сперва выводятся все месседжи, логи и т.п., а потом уже кикает или банит злодея ;)
Ещё + к тому что тут цикл, и тут если не ошибаюсь надо не return, а continue или break..
Я буду принимать ваши комментарий за адекватную критику, после восстановления LessGlobal Rp
$continue$
14.03.2016, 16:04
Так на пальцах поясни, что ты хотел сказать этим?
а он по другому никак не реагировал.
vovandolg
14.03.2016, 19:49
Этот public срабатывает когда вводится ркон(независимо верный пасс или нет),
в этом случае можно убрать эти два значения, ибо делали их для других отдельных целей.
if(success || !success) //пароль верный или не верный, убрать их обоих и будет тоже самое
У себя проверил только что работало без этих двух значений,
ты скорее всего одно значение оставлял и метался с восклицательный вставить или не вставить,
вот и вышло что влепил два значения или я не прав?
Иван Бубнов
14.03.2016, 20:01
Этот public срабатывает когда вводится ркон(независимо верный пасс или нет),
в этом случае можно убрать эти два значения, ибо делали их для других отдельных целей.
if(success || !success) //пароль верный или не верный, убрать их обоих и будет тоже самое
У себя проверил только что работало без этих двух значений,
ты скорее всего одно значение оставлял и метался с восклицательный вставить или не вставить,
вот и вышло что влепил два значения или я не прав?
Делал вообще без этих проверок, сейчас еще раз проверил, опять не срабатывает. Наверное баг с клиентом (Absoute samp что-ли аддон называется)
- - - Показал на пальцах - - -
Так на пальцах поясни, что ты хотел сказать этим?
public OnRconLoginAttempt(ip[], password[], success)
{
// if(success || !success)
// {
new
getip[16+1],
sendername[MAX_PLAYER_NAME];
#if defined foreach
foreach(new i : Player)
#else
for(new i = GetPlayerPoolSize(); i != -1; i--)
#endif
{
GetPlayerIp(i, getip, sizeof(getip));
if(!strcmp(ip,getip,true))
{
GetPlayerName(i, sendername, sizeof(sendername));
if(!strcmp(sendername,"Ваш ник",true))
{
Kick(i);
return printf("Игрок %s [%d] был кикнут, попытка RCON логирования.", sendername, i);
}
}
}
// }
return 1;
}
http://i.imgur.com/elmpMPV.jpg
Где используется getip[16+1] ?
Где используется getip[16+1] ?
GetPlayerIp(i, getip, sizeof(getip));
if(!strcmp(ip,getip,true))
if(!strcmp(sendername, "Ваш ник", true))}[/PHP]
В этой проверке надо использовать false, а не true. Может это и не важно, но какой-нибудь хитрый умник поменяет регистр в твоём нике и всё.. Пиши пропало.
Иван Бубнов
15.03.2016, 16:44
Используется она
- - - Добавлено - - -
Обновил, теперь учитвается регистр букв при проверке ника.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot