PDA

Просмотр полной версии : [Мануал] Доступ к 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..

BadPawn
14.03.2016, 14:59
Скажите пож, для какой цели в коде присутствуют вот эти строки:

#if defined foreach
#else
#endif

vovandolg
14.03.2016, 15:15
Скажите пож, для какой цели в коде присутствуют вот эти строки:

#if defined foreach
#else
#endif

Я так понял если у тебя в моде отсутствует инклуд foreach.inc ему на замену идёт внутреигровой перебор через GetPlayerPoolSize()

StevenH
14.03.2016, 15:24
Я так понял если у тебя в моде отсутствует инклуд 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

iWors
15.03.2016, 13:29
Где используется getip[16+1] ?

DeimoS
15.03.2016, 14:47
Где используется getip[16+1] ?


GetPlayerIp(i, getip, sizeof(getip));
if(!strcmp(ip,getip,true))

Wise
15.03.2016, 15:17
if(!strcmp(sendername, "Ваш ник", true))}[/PHP]
В этой проверке надо использовать false, а не true. Может это и не важно, но какой-нибудь хитрый умник поменяет регистр в твоём нике и всё.. Пиши пропало.

Иван Бубнов
15.03.2016, 16:44
Используется она

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

Обновил, теперь учитвается регистр букв при проверке ника.