Русское сообщество по скриптингу

Random Name Generator

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Random Name Generator

Сообщение Chuvi » 21 июл 2014, 15:49

Авторы: Chuvi / Вы должны зарегистрироваться, чтобы видеть ссылки.
Версия: 0.6

Описание:
Плагин призван помогать игрокам, не имеющим фантазии, придумать ник, отличный от стандартных.

Используемые модули:
Fakemeta

Настройки:
В директории с конфигами AmxModX-a создать файл BadNames.ini, в который построчно вписать запрещённые ники. Если какой-то ник нужно временно заккоментировать, можно поставить перед ним &.

Пример BadNames.ini
Код: Выделить всё
Player
unnamed
Player [CS-SERVERA]
Strikes
Player
[AMX]Slayer
Oox
Straiker


Команды:
BadNameUpdate - перечитать список ников из BadNames.ini (Нужен флаг ADMIN_CFG)
[spoiler]RandomName - Взять себе случайный ник. -выпилено в версии 0.6[/spoiler]


Warning
Вообще, я не планировал выкладывать эту поделку, но раз уж выложил... в общем, критика приветствуется.


Changelog
0.5 - Что было, то и выложил.
0.6 - Вы должны зарегистрироваться, чтобы видеть ссылки. оптимизировал плагин, за что ему большое спасибо.
Последний раз редактировалось Chuvi 25 июл 2014, 20:37, всего редактировалось 3 раз(а).
Плагинами на заказ не занимаюсь.
Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2253
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 127 раз.
Поблагодарили: 562 раз.

Re: Random Name Generator

Сообщение 9iky6 » 24 июл 2014, 17:21

Про меню. Даже не знаю, стоит ли
P.S. set_user_info сбросится при следующем заходе в игру? А то не проверял что-то даже такое.
Последний раз редактировалось 9iky6 24 июл 2014, 18:30, всего редактировалось 1 раз.
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

Re: Random Name Generator

Сообщение Dmitry Beast » 24 июл 2014, 17:32

жду конечный вариант)
обязательно с менюшкой сохранения ника ;)
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Random Name Generator

Сообщение PRoSToTeM@ » 24 июл 2014, 17:39

9iky6, set_user_info "сбросится" как только игрок заново зайдёт на сервер (не через reconnect).
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Random Name Generator

Сообщение Leonidddd » 24 июл 2014, 17:40

Сейчас скину свой вариант...
fakemeta:
[pawn]
  1. public fm_set_user_model( player, const modelname[] )

  2. {

  3.     engfunc( EngFunc_SetClientKeyValue, player, engfunc( EngFunc_GetInfoKeyBuffer, player ), "model", modelname )

  4.    

  5.     copy(g_player_model[player], charsmax(g_player_model[]), modelname);

  6.     g_has_custom_model[player] = true

  7. }

  8.  

  9. stock fm_cs_get_user_model( player, model[], len )

  10. {

  11.         engfunc( EngFunc_InfoKeyValue, engfunc( EngFunc_GetInfoKeyBuffer, player ), "model", model, len )

  12. }

  13.  

  14. public fw_SetClientKeyValue( id, const infobuffer[], const key[] )

  15. {

  16.         if(g_has_custom_model[id] && equal(key, "model"))

  17.         {

  18.                 new currentmodel[32]

  19.                 fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))

  20.  

  21.                 if (!equal(currentmodel, g_player_model[id]))

  22.                         fm_set_user_model(id, g_player_model[id])

  23.  

  24.                 return FMRES_SUPERCEDE;

  25.         }

  26.    

  27.         return FMRES_IGNORED;

  28. }
[/pawn]
Использование:
[pawn]
  1.                 fm_set_user_model(id, "LeonidD");
[/pawn]

Не забывайте обнулять массив new bool:g_has_custom_model[33];
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Random Name Generator

Сообщение Leonidddd » 24 июл 2014, 17:49

[pawn]
  1. new bool:g_has_custom_name[33];
[/pawn]
[pawn]
  1. public fm_set_user_name( player, const name[] )

  2. {

  3.     engfunc( EngFunc_SetClientKeyValue, player, engfunc( EngFunc_GetInfoKeyBuffer, player ), "name", name)

  4.    

  5.     g_has_custom_name[player] = true

  6. }

  7.  

  8. stock fm_cs_get_user_name( player, name[], len )

  9. {

  10.         engfunc( EngFunc_InfoKeyValue, engfunc( EngFunc_GetInfoKeyBuffer, player ), "name", name, len )

  11. }

  12.  

  13. public fw_SetClientKeyValue( id, const infobuffer[], const key[] )

  14. {

  15.         if(g_has_custom_name[id] && equal(key, "name"))

  16.         {

  17.                 new currentmodel[32]

  18.                 fm_cs_get_user_name(id, currentname, charsmax(currentname))

  19.  

  20.                 if (!equal(currentmodel, g_player_name[id]))

  21.                         fm_set_user_model(id, g_player_name[id])

  22.  

  23.                 return FMRES_SUPERCEDE;

  24.         }

  25.    

  26.         return FMRES_IGNORED;

  27. }
[/pawn]
Чтобы игрок не мог поменять ник в игре.
Ну с сохранением уже сами придумайте, по айпи или стим айди..
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Random Name Generator

Сообщение 9iky6 » 24 июл 2014, 18:29

Вот полностью вариант от меня. Если кто-то сможет сделать замеры (хотя думаю и без них ясно, что вариант оптимальнее), я буду рад.

[spoiler][pawn]
  1. #include <amxmodx>

  2. #include <amxmisc>

  3. #include <fakemeta>

  4.  

  5. #define PLUGIN "Random Name Generator"

  6. #define VERSION "0.6"

  7. #define AUTHOR "Chuvi / maeStro"

  8.  

  9. #if AMXX_VERSION_NUM < 183

  10.         #define MAX_NAME_LENGTH 32

  11.         #include <colorchat>

  12. #else

  13.         #define DontChange  print_team_default

  14.         #define Blue        print_team_blue

  15.         #define Red         print_team_red

  16.         #define Grey        print_team_grey

  17.         #define ColorChat   client_print_color

  18. #endif

  19.  

  20. #define LenMin 6

  21. #define LenMax 10

  22.  

  23. new Trie:g_tBadNames

  24.  

  25. public plugin_init()

  26. {

  27.         register_plugin(PLUGIN, VERSION, AUTHOR)

  28.         register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged")

  29.         register_clcmd("BadNameUpdate", "ReadConfig", ADMIN_CFG, "Re-read banned names");

  30.        

  31.         g_tBadNames = TrieCreate();

  32.        

  33.         ReadConfig(0, 0, 0);

  34. }

  35.  

  36. public ReadConfig(id, level, cid)

  37. {

  38.         if(id && !cmd_access(id, level, cid, 1, false)) return PLUGIN_HANDLED;

  39.        

  40.         TrieClear(g_tBadNames)

  41.         static CfgFile[255]; get_configsdir(CfgFile,charsmax(CfgFile));

  42.         add(CfgFile, charsmax(CfgFile), "/BadNames.ini");

  43.         if(!file_exists(CfgFile))

  44.         {

  45.                 server_print("[RndName] BadNames.ini not found in cfg dir^n");

  46.                 return 0;

  47.         }

  48.        

  49.         new sString[32];

  50.         new f = fopen(CfgFile, "rt");

  51.         while(!feof(f))

  52.         {

  53.                 fgets(f, sString, charsmax(sString));

  54.                 trim(sString);

  55.                 strtolower(sString);

  56.                 if(!sString[0] || sString[0] == ';' || sString[0] == '/') continue;

  57.                 TrieSetCell(g_tBadNames, sString, true);

  58.         }

  59.         fclose(f);

  60.         return 1;

  61. }

  62.  

  63. public client_putinserver(id)

  64. {

  65.         new ClientName[MAX_NAME_LENGTH];

  66.         get_user_info(id, "name", ClientName, charsmax(ClientName));

  67.         if(ClientName[0] == '(' && ClientName[2] == ')')

  68.         {

  69.                 return equali_name(id, ClientName[3]);

  70.         }

  71.         return equali_name(id, ClientName);

  72. }

  73.  

  74. public ClientUserInfoChanged(id)

  75. {

  76.         new name[MAX_NAME_LENGTH], oldname[MAX_NAME_LENGTH];

  77.         pev(id, pev_netname, oldname, charsmax(oldname));

  78.         if(!oldname[0]) return FMRES_IGNORED;

  79.         get_user_info(id, "name", name, charsmax(name));

  80.         strtolower(name);

  81.         if(!equal(name, oldname, strlen(oldname)))

  82.         {

  83.                 if(equali_name(id, name))

  84.                 {

  85.                         ColorChat(0, id, "^3[RndName] ^1Игрок ^4%s ^1хотел поставить запрещённый ник ^4%s", oldname, name);

  86.                        return FMRES_HANDLED;

  87.                 }

  88.         }

  89.         return FMRES_IGNORED;

  90. }

  91.  

  92. public plugin_end()

  93. {

  94.         TrieDestroy(g_tBadNames);

  95. }

  96.  

  97. stock equali_name(id, const name[])

  98. {

  99.         if(TrieKeyExists(g_tBadNames, name))

  100.         {

  101.                 cl_RandomName(id, name);

  102.                 return 1;

  103.         }

  104.         return 0;

  105. }

  106.  

  107. stock cl_RandomName(id, const name[])

  108. {

  109.         new sNewName[MAX_NAME_LENGTH]; GetRandomName(sNewName, random_num(LenMin,LenMax));

  110.         ColorChat(0, id, "^3[RndName] ^1Ник игрока ^4%s ^1был автоматически изменён на ^4%s", name, sNewName);

  111.         set_user_info(id, "name", sNewName);

  112. }

  113.  

  114. stock GetRandomName(word[],len)

  115. {

  116.         if(len < 2) return;

  117.         static const cons_start[][]=

  118.         {

  119.                 // single consonants. Beware of Q, it"s often awkward in words

  120.                 "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",

  121.                 "n", "p", "r", "s", "t", "v", "w", "x", "z",

  122.                 // possible combinations excluding those which cannot start a word

  123.                 "pt", "gl", "gr", "ch", "ph", "ps", "sh", "st", "th", "wh"

  124.         };

  125.        

  126.         static const cons_all[][]=

  127.         {

  128.                 // single consonants. Beware of Q, it"s often awkward in words

  129.                 "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",

  130.                 "n", "p", "r", "s", "t", "v", "w", "x", "z",

  131.                 // possible combinations excluding those which cannot start a word

  132.                 "pt", "gl", "gr", "ch", "ph", "ps", "sh", "st", "th", "wh" ,

  133.                 "ck", "cm",

  134.                 "dr", "ds",

  135.                 "ft",

  136.                 "gh", "gn",

  137.                 "kr", "ks",

  138.                 "ls", "lt", "lr",

  139.                 "mp", "mt", "ms",

  140.                 "ng", "ns",

  141.                 "rd", "rg", "rs", "rt",

  142.                 "ss",

  143.                 "ts", "tch"

  144.         }

  145.        

  146.         static const vows[][]=

  147.         {

  148.                 // single vowels

  149.                 "a", "e", "i", "o", "u", "y",

  150.                 // vowel combinations your language allows

  151.                 "ee", "oa", "oo"

  152.         }

  153.        

  154.         format(word, len, "");

  155.         new cur = random_num(0, 1);

  156.         new rnd;

  157.         new rndlen;

  158.         formatex(word, len, "%s", cur ? vows[random_num(0, charsmax(vows))] : cons_start[random_num(0, charsmax(cons_start))]);

  159.         word[0] -= ('a'-'A'); //для заглавной буквы

  160.         cur =! cur;

  161.        

  162.         while( strlen(word) <len)

  163.         {

  164.                 rnd = cur ? random_num(0, charsmax(vows)) : random_num(0, charsmax(cons_all));

  165.                 rndlen = cur ? strlen(vows[rnd]) : strlen(cons_all[rnd])

  166.                

  167.                 // check if random sign fits in word length

  168.                 if( strlen(word)+rndlen <=len)

  169.                 {

  170.                         formatex(word[strlen(word)], len, "%s", cur ? vows[rnd] : cons_all[rnd]);

  171.                         // alternate sounds

  172.                         cur=!cur;

  173.                 }

  174.         }

  175. }
[/pawn][/spoiler]
Рандомизатор не стал трогать, пока мне непонятно как он там работает :-)

UPD [20:12]: вроде поправил проблему с регистром
Последний раз редактировалось 9iky6 25 июл 2014, 16:51, всего редактировалось 1 раз.
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

Re: Random Name Generator

Сообщение Dmitry Beast » 25 июл 2014, 00:06

почему оптимальнее?
какой стоит юзать и каковы причины?
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Random Name Generator

Сообщение 9iky6 » 25 июл 2014, 16:39

BeasT писал(а):почему оптимальнее?
какой стоит юзать и каковы причины?

Я не считываю имя, не создаю массив под имя и так далее. Всё делает модуль (работа модуля сама по себе происходит гораздо быстрее). Модуль сам скажет есть такое имя или его нет. Я конечно понимаю, разницу никто не увидит при 10-20 записях, а если их пара-тройка сотен? :-) Выше я обратился ко всем, с просьбой, сделать замеры.
Аватара пользователя
9iky6
 
Сообщения: 2174
Зарегистрирован: 30 янв 2012, 19:07
Откуда: Россия
Благодарил (а): 375 раз.
Поблагодарили: 707 раз.

Re: Random Name Generator

Сообщение Chuvi » 25 июл 2014, 20:42

9iky6, большое спасибо, добавил твою версию в шапку.
PS: RandomName выпилил "во избежание"?
Плагинами на заказ не занимаюсь.
Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2253
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 127 раз.
Поблагодарили: 562 раз.

Re: Random Name Generator

Сообщение antihero » 30 июл 2014, 17:49

Chuvi,
Собственно такая глобальная проблема!
Мой BadNames.ini
[spoiler]
Код: Выделить всё
Player
(1)Player
unnamed
(1)unnamed
empty
(1)empty
Admin
Moderator
Fuck
Fucker
Fuck you
Motherfucker
[/spoiler]
Подключившийся игрок на сервер из этого списка допустим "Player" выходит вот что:
[spoiler][/spoiler]
[spoiler][/spoiler]
Если подключатся на сервер с ником не из BadNames.ini то никаких проблем нет!
Аватара пользователя
antihero
 
Сообщения: 100
Зарегистрирован: 03 мар 2014, 20:37
Благодарил (а): 11 раз.
Поблагодарили: 4 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Пред.

Вернуться в Добавленные новые плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2