Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Визуальная замена ника на сервере.

Skywrath
сообщение 9.7.2015, 18:20
Сообщение #1
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

И так не как не угомонюсь с плагином который рандомно визуально меняет ник только на сервере, откомал данный плагин на amx-x.
Но не пойму откуда он берет ники которые подлежат визуальной замене, может сможет кто переделать?
что бы было 2 файла .ini в одном пишутся дефолтные ники которые подлежат визуальной замене, а из другого .ini файла будут браться ники которые будут визуально заменять дефолтные.
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN "Random Name Generator"
#define VERSION "0.6"
#define AUTHOR "Chuvi / maeStro"

#if AMXX_VERSION_NUM < 183
#define MAX_NAME_LENGTH 32
#include <colorchat>
#else
#define DontChange print_team_default
#define Blue print_team_blue
#define Red print_team_red
#define Grey print_team_grey
#define ColorChat client_print_color
#endif

#define LenMin 6
#define LenMax 10

new Trie:g_tBadNames

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged")
register_clcmd("BadNameUpdate", "ReadConfig", ADMIN_CFG, "Re-read banned names");

g_tBadNames = TrieCreate();

ReadConfig(0, 0, 0);
}

public ReadConfig(id, level, cid)
{
if(id && !cmd_access(id, level, cid, 1, false)) return PLUGIN_HANDLED;

TrieClear(g_tBadNames)
static CfgFile[255]; get_configsdir(CfgFile,charsmax(CfgFile));
add(CfgFile, charsmax(CfgFile), "/BadNames.ini");
if(!file_exists(CfgFile))
{
server_print("[RndName] BadNames.ini not found in cfg dir^n");
return 0;
}

new sString[32];
new f = fopen(CfgFile, "rt");
while(!feof(f))
{
fgets(f, sString, charsmax(sString));
trim(sString);
strtolower(sString);
if(!sString[0] || sString[0] == ';' || sString[0] == '/') continue;
TrieSetCell(g_tBadNames, sString, true);
}
fclose(f);
return 1;
}

public client_putinserver(id)
{
new ClientName[MAX_NAME_LENGTH];
get_user_info(id, "name", ClientName, charsmax(ClientName));
if(ClientName[0] == '(' && ClientName[2] == ')')
{
return equali_name(id, ClientName[3]);
}
return equali_name(id, ClientName);
}

public ClientUserInfoChanged(id)
{
new name[MAX_NAME_LENGTH], oldname[MAX_NAME_LENGTH];
pev(id, pev_netname, oldname, charsmax(oldname));
if(!oldname[0]) return FMRES_IGNORED;
get_user_info(id, "name", name, charsmax(name));
strtolower(name);
if(!equal(name, oldname, strlen(oldname)))
{
if(equali_name(id, name))
{
ColorChat(0, id, "^3[RndName] ^1Игрок ^4%s ^1хотел поставить запрещённый ник ^4%s", oldname, name);
return FMRES_HANDLED;
}
}
return FMRES_IGNORED;
}

public plugin_end()
{
TrieDestroy(g_tBadNames);
}

stock equali_name(id, const name[])
{
if(TrieKeyExists(g_tBadNames, name))
{
cl_RandomName(id, name);
return 1;
}
return 0;
}

stock cl_RandomName(id, const name[])
{
new sNewName[MAX_NAME_LENGTH]; GetRandomName(sNewName, random_num(LenMin,LenMax));
ColorChat(0, id, "^3[RndName] ^1Ник игрока ^4%s ^1был автоматически изменён на ^4%s", name, sNewName);
set_user_info(id, "name", sNewName);
}

stock GetRandomName(word[],len)
{
if(len < 2) return;
static const cons_start[][]=
{
// single consonants. Beware of Q, it"s often awkward in words
"b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "r", "s", "t", "v", "w", "x", "z",
// possible combinations excluding those which cannot start a word
"pt", "gl", "gr", "ch", "ph", "ps", "sh", "st", "th", "wh"
};

static const cons_all[][]=
{
// single consonants. Beware of Q, it"s often awkward in words
"b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "r", "s", "t", "v", "w", "x", "z",
// possible combinations excluding those which cannot start a word
"pt", "gl", "gr", "ch", "ph", "ps", "sh", "st", "th", "wh" ,
"ck", "cm",
"dr", "ds",
"ft",
"gh", "gn",
"kr", "ks",
"ls", "lt", "lr",
"mp", "mt", "ms",
"ng", "ns",
"rd", "rg", "rs", "rt",
"ss",
"ts", "tch"
}

static const vows[][]=
{
// single vowels
"a", "e", "i", "o", "u", "y",
// vowel combinations your language allows
"ee", "oa", "oo"
}

format(word, len, "");
new cur = random_num(0, 1);
new rnd;
new rndlen;
formatex(word, len, "%s", cur ? vows[random_num(0, charsmax(vows))] : cons_start[random_num(0, charsmax(cons_start))]);
word[0] -= ('a'-'A'); //для заглавной буквы
cur =! cur;

while( strlen(word) <len)
{
rnd = cur ? random_num(0, charsmax(vows)) : random_num(0, charsmax(cons_all));
rndlen = cur ? strlen(vows[rnd]) : strlen(cons_all[rnd])

// check if random sign fits in word length
if( strlen(word)+rndlen <=len)
{
formatex(word[strlen(word)], len, "%s", cur ? vows[rnd] : cons_all[rnd]);
// alternate sounds
cur=!cur;
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 9.7.2015, 18:44
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ники на замену плагин генерирует сам от балды.

Кстати, на ник кириллицей (в GS начали появляться и такие) может не сработать.

Не используй термин 'визуальная смена': ник на сервере меняется по-настоящему.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 9.7.2015, 18:52
Сообщение #3
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Safety1st, пробежался по коду, вроде только с strtolower могут быть проблемы на amxx < 1.8.3, ничего критичного
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.7.2015, 19:02
Сообщение #4
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Там всё посерьёзнее, но не будем углубляться smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 19:13
Сообщение #5
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

Safety1st,
Цитата
Не используй термин 'визуальная смена': ник на сервере меняется по-настоящему
.
а при выходи с сервера, он останеться прежним? то есть от сборки!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.7.2015, 19:15
Сообщение #6
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Skywrath, если менять без слоухакинга ‒ да, останется.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 19:18
Сообщение #7
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

Safety1st,
А этот код без слоухакинга?
Я просто ни хрена не понимаю.

Отредактировал: Skywrath, - 9.7.2015, 19:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.7.2015, 19:19
Сообщение #8
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Этот код без слоухакинга, да.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 19:22
Сообщение #9
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

Safety1st,
а можно как то сделать:
Цитата
что бы было 2 файла .ini в одном пишутся дефолтные ники которые подлежат визуальной замене, а из другого .ini файла будут браться ники которые будут визуально заменять дефолтные.

Так как если плагин сам гененрирует ники, то выйдет бред

Отредактировал: Skywrath, - 9.7.2015, 19:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.7.2015, 20:51
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Skywrath, ничего не понял.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 9.7.2015, 21:06
Сообщение #11


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Safety1st, ему нужно два списка:
1. Черный список (запрещенные ники)
2. База ников (список из которого будет браться ник на замену)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 21:08
Сообщение #12
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

Bloo,
в точку!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.7.2015, 21:10
Сообщение #13
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Bloo @ 9.7.2015, 22:06) *
Safety1st, ему нужно два списка:
1. Черный список (запрещенные ники)
2. База ников (список из которого будет браться ник на замену)

Я в курсе. Более того, всё его ТЗ - тупой копипаст моего текста.
Вопрос в силе.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 21:12
Сообщение #14
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

Safety1st,
ну не мастер я ТЗ составлять)
Цитата
Вопрос в силе.

какой?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 9.7.2015, 21:19
Сообщение #15
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Если на скорую руку, то как-то так
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN "Random Name Generator"
#define VERSION "0.6"
#define AUTHOR "Chuvi / maeStro"

#if AMXX_VERSION_NUM < 183
#define MAX_NAME_LENGTH 32
#include <colorchat>
#else
#define DontChange print_team_default
#define Blue print_team_blue
#define Red print_team_red
#define Grey print_team_grey
#define ColorChat client_print_color
#endif

#define FILENAME "goodnames.ini" // название файла
#define STR_COUNT 1337 // количество имен в файле, важно

new Trie:g_tBadNames

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged")
register_clcmd("BadNameUpdate", "ReadConfig", ADMIN_CFG, "Re-read banned names");

g_tBadNames = TrieCreate();

ReadConfig(0, 0, 0);
}

public ReadConfig(id, level, cid)
{
if(id && !cmd_access(id, level, cid, 1, false)) return PLUGIN_HANDLED;

TrieClear(g_tBadNames)
static CfgFile[255]; get_configsdir(CfgFile,charsmax(CfgFile));
add(CfgFile, charsmax(CfgFile), "/BadNames.ini");
if(!file_exists(CfgFile))
{
server_print("[RndName] BadNames.ini not found in cfg dir^n");
return 0;
}

new sString[32];
new f = fopen(CfgFile, "rt");
while(!feof(f))
{
fgets(f, sString, charsmax(sString));
trim(sString);
strtolower(sString);
if(!sString[0] || sString[0] == ';' || sString[0] == '/') continue;
TrieSetCell(g_tBadNames, sString, true);
}
fclose(f);
return 1;
}

public client_putinserver(id)
{
new ClientName[MAX_NAME_LENGTH];
get_user_info(id, "name", ClientName, charsmax(ClientName));
if(ClientName[0] == '(' && ClientName[2] == ')')
{
return equali_name(id, ClientName[3]);
}
return equali_name(id, ClientName);
}

public ClientUserInfoChanged(id)
{
new name[MAX_NAME_LENGTH], oldname[MAX_NAME_LENGTH];
pev(id, pev_netname, oldname, charsmax(oldname));
if(!oldname[0]) return FMRES_IGNORED;
get_user_info(id, "name", name, charsmax(name));
strtolower(name);
if(!equal(name, oldname, strlen(oldname)))
{
if(equali_name(id, name))
{
ColorChat(0, id, "^3[RndName] ^1Игрок ^4%s ^1хотел поставить запрещённый ник ^4%s", oldname, name);
return FMRES_HANDLED;
}
}
return FMRES_IGNORED;
}

public plugin_end()
{
TrieDestroy(g_tBadNames);
}

stock equali_name(id, const name[])
{
if(TrieKeyExists(g_tBadNames, name))
{
cl_RandomName(id, name);
return 1;
}
return 0;
}

stock cl_RandomName(id, const name[])
{
new sNewName[MAX_NAME_LENGTH], trash;
new filename[128];
get_configsdir(filename, charsmax(filename));
format(filename, charsmax(filename), "%s/%s", filename, FILENAME)
read_file(FILENAME, random_num(0, STR_COUNT - 1), sNewName, charsmax(sNewName), trash);
ColorChat(0, id, "^3[RndName] ^1Ник игрока ^4%s ^1был автоматически изменён на ^4%s", name, sNewName);
set_user_info(id, "name", sNewName);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Skywrath
сообщение 9.7.2015, 21:34
Сообщение #16
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

voed,
а в каком файле деф ники, и из какого файла будут браться ники на замену?

Отредактировал: Skywrath, - 9.7.2015, 21:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 9.7.2015, 21:38
Сообщение #17


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

BadNames.ini - список запрещенных ников
goodnames.ini - список ников на замену
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
voed
сообщение 9.7.2015, 21:40
Сообщение #18
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Код:
#define FILENAME "goodnames.ini" // название файла
#define STR_COUNT 1337 // количество имен в файле, важно

пс если STR_COUNT будет больше кол-ва строк в файле плагин будет сыпать ошибки
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя BornToBeFree
сообщение 10.7.2015, 8:44
Сообщение #19


Стаж: 12 лет

Сообщений: 741
Благодарностей: 287
Полезность: 602

Меценат Меценат

Правила GS-M обновились, смена ника запрещена теперь


Скидка 5% при заказе сервера
Чтобы получить 5% скидку при заказе сервера на хостинге Serva4ok.ru
Необходимо ввести это кодовое слово gKUt-FENO-ZonE-aIaa
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Skywrath
сообщение 10.7.2015, 8:52
Сообщение #20
Стаж: 11 лет

Сообщений: 1058
Благодарностей: 419
Полезность: < 0

ExTPuMaJI,
ииии
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: