Перейти к содержанию

@ipban, @unbanip


Рекомендуемые сообщения

  • 2 года спустя...

Создал себе репозиторий. Скидываю туда разный хлам. Переписал старые @ipban и @unbanip.

Пользуйтесь наздоровье.

а можно конкретней написать как поставить а не просто сылку на файлы...

Буть Бобр)

Изменено пользователем RelaX
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Открываешь ea/src/map/atcommand.c , ищешь эти строки:


#include "../custom/atcommand.inc"
/**
* Fills the reference of available commands in atcommand DBMap
**/

Перед ними вставляешь это:


/* @ipban by Griniy. */
/* Updated by Oxxy */
ACMD_FUNC(ipban)
{
struct map_session_data *pl_sd;
char *modif_p, *data, *last_ip;
int month, value = 0;
char ip[16];
nullpo_retr(-1, sd);

memset(atcmd_output, '\0', sizeof(atcmd_output));
memset(atcmd_player_name, '\0', sizeof(atcmd_player_name));

if(!message || !*message || sscanf(message, "%199s %99[^\n]", atcmd_output, atcmd_player_name) < 2) {
clif_displaymessage(fd, msg_txt(1600));
return -1;
}

atcmd_output[sizeof(atcmd_output)-1] = '\0';

modif_p = atcmd_output;
month = 0;
while (modif_p[0] != '\0') {
value = atoi(modif_p);
if(value == 0)
modif_p++;
else {
if(modif_p[0] == '-' || modif_p[0] == '+')
modif_p++;

while(modif_p[0] >= '0' && modif_p[0] <= '9') {
modif_p++;
if(modif_p[0] == 'm') {
month = value;
modif_p++;
} else if (modif_p[0] != '\0') {
modif_p++;
}
}
}
}

if(month == 0) {
clif_displaymessage(fd, msg_txt(1601));
return -1;
}

if(SQL_ERROR == Sql_Query(mmysql_handle, "SELECT `last_ip` From `login`, `char` WHERE login.account_id = char.account_id AND char.name = '%s'", atcmd_player_name ) )
Sql_ShowDebug(mmysql_handle);

if(Sql_NumRows(mmysql_handle) == 0) {
clif_displaymessage(fd, msg_txt(1602));
Sql_FreeResult(mmysql_handle);
return -1;
}

Sql_NextRow(mmysql_handle);

Sql_GetData(mmysql_handle, 0, &data, NULL); last_ip = data;
strcpy(ip, last_ip);
Sql_FreeResult(mmysql_handle);

if(Sql_NumRows(mmysql_handle) > 0) {
clif_displaymessage(fd, msg_txt(1603));
Sql_FreeResult(mmysql_handle);
return -1;
} else
Sql_FreeResult(mmysql_handle);

if(SQL_ERROR == Sql_Query(mmysql_handle, "INSERT INTO `ipbanlist` (`list`,`btime`,`rtime`,`reason`) VALUES ('%s', NOW() , NOW() + INTERVAL %d MONTH ,'AtCommand ban for user name : %s')", ip, month, atcmd_player_name))
Sql_ShowDebug(mmysql_handle);

if(map_nick2sd(atcmd_player_name))
clif_GM_kick(sd, map_nick2sd(atcmd_player_name));

return 0;
}

и это :


/* @unbaip by Griniy */
/* Updated by Oxxy */
ACMD_FUNC(unbanip)
{
char *data, *last_ip, ip[16], output[255];
nullpo_retr(-1, sd);
memset(atcmd_player_name, '\0', sizeof(atcmd_player_name));
if (!message || !*message || (sscanf(message, "%23[^\n]", atcmd_player_name) < 1)) {
clif_displaymessage(fd, msg_txt(1604));
return -1;
}

if( SQL_ERROR == Sql_Query(mmysql_handle, "SELECT `last_ip` FROM `login`, `char` WHERE login.account_id = char.account_id AND char.name = '%s'",atcmd_player_name) ) {
Sql_ShowDebug(mmysql_handle);
Sql_FreeResult(mmysql_handle);
return -1;
}

if( Sql_NumRows(mmysql_handle) == 0 ) {
clif_displaymessage(fd, msg_txt(1602));
Sql_FreeResult(mmysql_handle);
return -1;
}

Sql_NextRow(mmysql_handle);
Sql_GetData(mmysql_handle, 0, &data, NULL); last_ip = data; strcpy(ip, last_ip);
if( SQL_ERROR == Sql_Query(mmysql_handle, "SELECT * FROM `ipbanlist` WHERE `list` = '%s'",ip) ) {
Sql_ShowDebug(mmysql_handle);
Sql_FreeResult(mmysql_handle);
return -1;
}
if( Sql_NumRows(mmysql_handle) == 0 ) {
clif_displaymessage(fd, msg_txt(1605));
Sql_FreeResult(mmysql_handle);
return -1;
}
if( SQL_ERROR == Sql_Query(mmysql_handle, "DELETE FROM `ipbanlist` WHERE `list` = '%s'",ip) ) {
Sql_ShowDebug(mmysql_handle);
Sql_FreeResult(mmysql_handle);
return -1;
}
sprintf(output, msg_txt(1606),atcmd_player_name);
clif_displaymessage(fd, output);
return 0;
}

Далее открываешь ea/src/map/map.c и ищешь эту строку:


#define MAP_MAX_MSG 1600

Меняешь на эту:


#define MAP_MAX_MSG 2000

Далее заходишь в ea/conf/map_msg_add.conf и добавляешь эти строки:


1600: Please, enter ban time and a player name (usage: @ipban <time> <name>).
1601: Invalid time for ban command.
1602: Unknown character name. Please check it and repeat.
1603: This characters is already banned by IP.
1604: Please, enter a player name to unban (usage: @unbanip <name>).
1605: No character with such name was found in Banlist.
1606: Character %s was succesfully unbanned.

После, компилируешь.

  • Upvote 2
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика