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

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

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

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

4 страниц V   1 2 3 »

Предупреждение в чат сменить ник каждые 60 секунд

Статус пользователя Bloo
сообщение 3.10.2014, 20:55
Сообщение #21


Стаж: 12 лет

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

binky, ну так подставьте id нужного игрока в client_print, проблема то в чем?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 3.10.2014, 21:00
Сообщение #22
Стаж: 12 лет

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

А цикла нет который будет каждые 60 секунд повторять это сообщение.
Да вообщем бред - он не похожее на то, что требуется.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 3.10.2014, 21:04
Сообщение #23


Стаж: 12 лет

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

binky, то что вам требуется пишется с нуля. Неужели еще не поняли что конкретно ваш запрос можно удовлетворить только заказав плагин по ТЗ
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 3.10.2014, 21:23
Сообщение #24


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

binky, все функции перечисленные вами в плагине имеются.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
binky
сообщение 3.10.2014, 21:35
Сообщение #25
Стаж: 12 лет

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

Цитата(Fintok @ 3.10.2014, 21:23) *
binky, все функции перечисленные вами в плагине имеются.


Можете вычленить всё лишнее, а оставить только проверку ника при входе на сервер
и если ник совпадает - то этому игроку каждые 60 секунд выводится в чат простба сменить ник.
Остальных функций не нужно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Andrey_iokhin
сообщение 3.10.2014, 22:05
Сообщение #26
Стаж: 13 лет

Сообщений: 350
Благодарностей: 45
Полезность: 116

Я готов даже скинуть на это дело)
Плагин будет актуальным)

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
binky
сообщение 4.10.2014, 10:13
Сообщение #27
Стаж: 12 лет

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

Даже не нужно считывать список ников с файла, у меня таких ников буквально 1-2-3 штуки, можно просто задать в самом sma их (каждый задаст свои) или через амхх-квары.
Логика работы простая - игрок входит на сервер, его ник проверяется, если он совпадает с заданным, то через колорчат ему красными буквами пишет - "Смените ваш ник" и такое сообщение пишется только ему в чат каждые 60 секунд, пока он не сменит ник.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 4.10.2014, 18:43
Сообщение #28
Стаж: 12 лет

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

Слишком много в нём лишнего и конфиг пересбрасывает и чат проверяет и кучу всего,
как с него вычленить лишнее и оставить только нужные функции.

Код:
#include <amxmodx>

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))

#define PLUGIN "Name & Say Guardian"
#define VERSION "0.9.7"
#define AUTHOR "Bushido"

// #define DEBUG_LOG // ----- Логирование информации ----- //
#define MAX_PLAYERS 33
#define NAME_LEN 32
#define FILENAME_LEN 64
#define MSG_LEN 192
#define MAX_MSGS 128

#define CFG_FILENAME "nsg.cfg"
#define MSGS_FILENAME "nsg_messages.ini"
#define NAMES_FILENAME "nsg_names.ini"

new blocked_msgs [MAX_MSGS][MSG_LEN],
approved_msgs [MAX_MSGS][MSG_LEN],
blocked_names [MAX_MSGS][NAME_LEN]

new blockedMsgsCounter,
approvedMsgsCounter,
blockedNamesCounter

new logfile[FILENAME_LEN]

new default_name[NAME_LEN]

new connected = 0,
client_immunity = 0,
user_steam = 0,
already_checked = 0

new flags[23]
new len_last_msg[MAX_PLAYERS]

new pcv_sayguard,
pcv_nameguard,
pcv_default_name,
pcv_sayguard_repeat_len,
pcv_immunity_flag,
sayguard,
nameguard,
sayguard_repeat_len

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say", "hook_say")
register_clcmd("say_team", "hook_say")

pcv_default_name = register_cvar("nsg_default_name", "[Neugomon.Ru] User")
pcv_nameguard = register_cvar("nsg_nameguard", "1")
pcv_sayguard = register_cvar("nsg_sayguard", "1")
pcv_sayguard_repeat_len = register_cvar("nsg_sayguard_repeat_len", "13" )
pcv_immunity_flag = register_cvar("nsg_immunity_flag","a")
}

public plugin_cfg()
{
#if defined DEBUG_LOG
new szDirName[] = {"addons/amxmodx/logs/nsg"}
if(!dir_exists(szDirName)){
mkdir(szDirName)
}
new configsdir[FILENAME_LEN], cfg_fullname[FILENAME_LEN];
get_time( "addons/amxmodx/logs/nsg/nsg%Y%m%d.log", logfile, charsmax(logfile))
#else
new configsdir[FILENAME_LEN], cfg_fullname[FILENAME_LEN];
get_time( "nsg%Y%m%d.log", logfile, charsmax(logfile))
#endif
get_localinfo("amxx_configsdir", configsdir, charsmax(configsdir))
formatex(cfg_fullname,FILENAME_LEN-1, "%s/nsg/%s",configsdir,CFG_FILENAME)
if( file_exists(cfg_fullname)){
server_cmd("exec ^"%s^"",cfg_fullname)
server_exec()
}
else {
log_to_file(logfile,"[Warning] Couldn't read file ^"%s^"",CFG_FILENAME)
}
get_pcvar_string(pcv_immunity_flag,flags,charsmax(flags))
get_pcvar_string(pcv_default_name,default_name,NAME_LEN-1)
nameguard = get_pcvar_num(pcv_nameguard)
sayguard = get_pcvar_num(pcv_sayguard)
sayguard_repeat_len = get_pcvar_num(pcv_sayguard_repeat_len)

new file_fullname[FILENAME_LEN]
format(file_fullname,FILENAME_LEN-1,"%s/nsg/%s",configsdir,MSGS_FILENAME)
new file_handle = fopen(file_fullname,"rt")
if(file_handle){
new buffer[MSG_LEN],i,j
while(!feof(file_handle)){
fgets(file_handle,buffer,MSG_LEN-1)
trim(buffer)
if (buffer[0]!='!'){
blocked_msgs[i++] = buffer
blockedMsgsCounter++
}
else {
buffer[0] = '^x20'
trim (buffer)
approved_msgs[j++] = buffer
approvedMsgsCounter++
}
}
fclose(file_handle)
}
else {
log_to_file(logfile,"[Error] Couldn't read file ^"%s^". Plugin stopped!",MSGS_FILENAME)
pause("ad",PLUGIN)
}
format(file_fullname,FILENAME_LEN-1,"%s/nsg/%s",configsdir,NAMES_FILENAME)
file_handle = fopen(file_fullname,"rt")
if(file_handle){
new buffer[NAME_LEN],i
while(!feof(file_handle)){
fgets(file_handle,buffer,NAME_LEN-1)
trim(buffer)
blocked_names[i ++] = buffer
blockedNamesCounter++
}
fclose(file_handle)
}
else {
log_to_file(logfile,"[Error] Couldn't read file ^"%s^". Plugin Stopped!",NAMES_FILENAME)
pause("ad",PLUGIN )
}
}

public client_putinserver(id)
{
clr_bit(connected,id)
clr_bit(already_checked,id)
clr_bit(client_immunity,id)
clr_bit(user_steam,id)
len_last_msg[id] = 0
if(ClientHasImmunity(id))
set_bit(client_immunity,id)

if(is_user_steam(id))
set_bit(user_steam,id)

if(nameguard && !get_bit(client_immunity,id)){
set_bit(connected,id)
}
return PLUGIN_CONTINUE
}

public client_infochanged(id)
{
if(nameguard && !get_bit(client_immunity,id)){
if (!get_bit(connected,id))
return PLUGIN_CONTINUE

new newname[NAME_LEN],oldname[NAME_LEN]
get_user_name(id,oldname,NAME_LEN-1)
get_user_info(id,"name",newname,NAME_LEN-1)
replace_all(newname,NAME_LEN-1,"+","")
set_user_info(id,"name",newname)
//client_cmd(id,"name ^"%s^"" ,newname)
if((!get_bit(already_checked,id) || !equal(newname, oldname))&& !is_name_valid(newname)){
set_user_info(id,"name",default_name)
//client_cmd( id,"name ^"%s^"" ,default_name )
set_bit(already_checked,id)
}
}
return PLUGIN_CONTINUE
}

public hook_say(id){
if(sayguard){
if(!get_bit(client_immunity,id)){
new said[MSG_LEN]
read_args(said,charsmax(said))
remove_quotes(said)

for(new i; i < approvedMsgsCounter; i++){
if(containi(said,approved_msgs[i]) != -1){
#if defined DEBUG_LOG
debug_log(logfile,id,"Approved message: ^"%s^" ( contain ^"%s^" )",said,approved_msgs[i])
#endif
return PLUGIN_CONTINUE
}
}

new said_len = strlen(said)
if(said_len > sayguard_repeat_len && len_last_msg[id] == said_len){
/*
if(!get_bit(user_steam,id)){
restore_config(id)
}
*/
return PLUGIN_HANDLED
}

len_last_msg[id] = said_len
for(new i; i < blockedMsgsCounter; i++){
if(containi(said,blocked_msgs[i] )!= -1){
#if defined DEBUG_LOG
debug_log(logfile, id,"Blocked message: ^"%s^" ( contain ^"%s^" )",said,blocked_msgs[i])
#endif
return PLUGIN_HANDLED
}
}
}
}
return PLUGIN_CONTINUE
}

stock bool:ClientHasImmunity(id){
return (is_user_bot(id) || is_user_hltv(id) || get_user_flags(id) & read_flags(flags))?true:false
}

stock bool:is_name_valid(const name[]){
if( containi(name,default_name)!= -1)
return true
for(new i = 0;i < blockedNamesCounter;i++){
if(containi(name,blocked_names[i])!= -1)
return false
}
return true
}

stock bool:is_user_steam(id){
static dp_pointer
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))){
server_cmd("dp_clientinfo %d",id)
server_exec()
return (get_pcvar_num(dp_pointer) == 2)?true:false
}
return false
}

stock debug_log(logfile[],const id,const message[],any:...){
static authid[34],name[NAME_LEN]
static msg[MSG_LEN]
vformat(msg,MSG_LEN-1,message, 4)
get_user_info(id,"name",name,NAME_LEN-1)
get_user_authid(id,authid,charsmax(authid))
log_to_file(logfile,"^"%s <%s>^": %s",name,authid,msg)
}
/*
restore_config(id){
static clcmds[][]={
"unbindall",
"bind ^"TAB^" ^"+showscores^"",
"bind ^"ENTER^" ^"+attack^"",
"bind ^"ESCAPE^" ^"escape^"",
"bind ^"SPACE^" ^"+jump^"",
"bind ^"'^" ^"+moveup^"",
"bind ^"+^" ^"sizeup^"",
"bind ^",^" ^"buyammo1^"",
"bind ^"-^" ^"sizedown^"",
"bind ^".^" ^"buyammo2^"",
"bind ^"/^" ^"+movedown^"",
"bind ^"0^" ^"slot10^"",
"bind ^"1^" ^"slot1^"",
"bind ^"2^" ^"slot2^"",
"bind ^"3^" ^"slot3^"",
"bind ^"4^" ^"slot4^"",
"bind ^"5^" ^"slot5^"",
"bind ^"6^" ^"slot6^"",
"bind ^"7^" ^"slot7^"",
"bind ^"8^" ^"slot8^"",
"bind ^"9^" ^"slot9^"",
"bind ^";^" ^"+mlook^"",
"bind ^"=^" ^"sizeup^"",
"bind ^"a^" ^"+moveleft^"",
"bind ^"b^" ^"buy^"",
"bind ^"c^" ^"radio3^"",
"bind ^"d^" ^"+moveright^"",
"bind ^"e^" ^"+use^"",
"bind ^"f^" ^"impulse 100^"",
"bind ^"g^" ^"drop^"",
"bind ^"h^" ^"+commandmenu^"",
"bind ^"i^" ^"showbriefing^"",
"bind ^"j^" ^"cheer^"",
"bind ^"k^" ^"+voicerecord^"",
"bind ^"m^" ^"chooseteam^"",
"bind ^"n^" ^"nightvision^"",
"bind ^"o^" ^"buyequip^"",
"bind ^"q^" ^"lastinv^"",
"bind ^"r^" ^"+reload^"",
"bind ^"s^" ^"+back^"",
"bind ^"t^" ^"impulse 201^"",
"bind ^"u^" ^"messagemode2^"",
"bind ^"w^" ^"+forward^"",
"bind ^"x^" ^"radio2^"",
"bind ^"y^" ^"messagemode^"",
"bind ^"z^" ^"radio1^"",
"bind ^"[^" ^"invprev^"",
"bind ^"]^" ^"invnext^"",
"bind ^"`^" ^"toggleconsole^"",
"bind ^"~^" ^"toggleconsole^"",
"bind ^"UPARROW^" ^"+forward^"",
"bind ^"DOWNARROW^" ^"+back^"",
"bind ^"LEFTARROW^" ^"+left^"",
"bind ^"RIGHTARROW^" ^"+right^"",
"bind ^"ALT^" ^"+strafe^"",
"bind ^"CTRL^" ^"+duck^"",
"bind ^"SHIFT^" ^"+speed^"",
"bind ^"F1^" ^"autobuy^"",
"bind ^"F2^" ^"rebuy^"",
"bind ^"F5^" ^"snapshot^"",
"bind ^"F6^" ^"save quick^"",
"bind ^"F7^" ^"load quick^"",
"bind ^"F10^" ^"quit prompt^"",
"bind ^"INS^" ^"+klook^"",
"bind ^"PGDN^" ^"+lookdown^"",
"bind ^"PGUP^" ^"+lookup^"",
"bind ^"END^" ^"centerview^"" ,
"bind ^"MWHEELDOWN^" ^"invnext^"",
"bind ^"MWHEELUP^" ^"invprev^"",
"bind ^"MOUSE1^" ^"+attack^"",
"bind ^"MOUSE2^" ^"+attack2^"",
"bind ^"PAUSE^" ^"pause^""
}
for(new i=0;i < 72;i++){
client_cmd(id,"%s",clcmds[i])
}
}
*/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
magiczoltrix
сообщение 5.10.2014, 9:20
Сообщение #29
Стаж: 12 лет

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

Чем править этот проще написать новый. Здесь 99% ненужного тебе.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
csgamerok
сообщение 5.10.2014, 18:55
Сообщение #30
Стаж: 12 лет

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

Нужный тебе плагин будет размером в 20 строк.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 6.10.2014, 19:28
Сообщение #31
Стаж: 12 лет

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

Где в представленном выше плагине, функция проверки ника?
Если будете подсказывать попробую сам
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 8.10.2014, 21:02
Сообщение #32
Стаж: 12 лет

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

Ладно, думал нормальный плагин придумал.
Но раз оно никому не надо - то тему можно удалить...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 8.10.2014, 21:11
Сообщение #33


Стаж: 12 лет

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

binky, так вы закажите платно, я же говорю, вы почему то не привлекаете альтруистов)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
magiczoltrix
сообщение 9.10.2014, 12:26
Сообщение #34
Стаж: 12 лет

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

зачем такой плагин
изпользуй амх_ник и пиши любой ник
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 9.10.2014, 12:40
Сообщение #35


Стаж: 12 лет

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

magiczoltrix, автоматизация, хорошее дело. И смысл в том что бы игрок сам сменил ник, а не ему насильно меняли его.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 9.10.2014, 21:11
Сообщение #36


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

binky, держи:
Прикрепленный файл  nick_change_alert.sma ( 6,5 килобайт ) Кол-во скачиваний: 22

теперь ты должен мне 50 рублей.
И что-то мне подсказывает, что ты будешь передо мной в долгу до конца дней (=

Или ты можешь отмазаться: "Я не ээтого хотеел! Мне совсем другоое надо!"

Ладно, шучу, можешь не платить.
Я даже, может, сам его поюзаю...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
magiczoltrix
сообщение 10.10.2014, 12:46
Сообщение #37
Стаж: 12 лет

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

Не пойму зачем какие-то плагины, если есть амхх стандартный плагин amx_nick
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 10.10.2014, 13:02
Сообщение #38


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

Цитата(magiczoltrix @ 10.10.2014, 14:46) *
Не пойму зачем какие-то плагины, если есть амхх стандартный плагин amx_nick

amx_nick, users.ini, restrictnames... у них у всех кто-то (админ или автоматика) меняет тебе ник (а то и вовсе не пускает на сервер).

А тут смысл в том, чтобы игрок сам, лично сменил себе ник на тот, который ему самому захочется.

З.Ы. осознал нюанс: многие из тех, кто гоняет со стандартными никами сборок, нуждаются в объяснении, как менять ник.
Ну, что ж, многие другие игроки умеют это делать; будем надеяться, подскажут.

З.З.Ы. дополню аналогией:
допустим, я мусорю во дворе.
amx_nick: дворник за мной убирает, если ему не лень и у него не выходной.
users.ini: робот-дворник выгоняет меня со двора пинком, увидев, что я намусорил.
restrictnames: робот-дворник убирает мусор, увидев, что я намусорил.

nick_change_alert: робот-дворник тыкает меня носом в мусор и приговаривает: "убери за собой, пожалуйста!"

Отредактировал: KaJIbIBaH, - 10.10.2014, 13:10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
binky
сообщение 10.10.2014, 15:19
Сообщение #39
Стаж: 12 лет

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

Спасибо дружище!

Ну ты конечно наворотил целое ПЛАГИНИЩЕ.
1) Какой формат файла NickChangeAlert_Cfg.cfg
как должны идти ники, через пробел, с новой строки, в кавычка??
2) Зачем использовал HUD-ы
3) Зачем столько доп информации, что там куда загружено или не загружено

Всё очень усложнил. Ну просилось же указать пару ников прямо в исходнике и сделать вывод в чат...
Но плагин зачётный!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 10.10.2014, 18:30
Сообщение #40


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

Цитата(binky @ 10.10.2014, 17:19) *
Спасибо дружище!

Ну ты конечно наворотил целое ПЛАГИНИЩЕ.
1) Какой формат файла NickChangeAlert_Cfg.cfg
как должны идти ники, через пробел, с новой строки, в кавычка??
2) Зачем использовал HUD-ы
3) Зачем столько доп информации, что там куда загружено или не загружено

Всё очень усложнил. Ну просилось же указать пару ников прямо в исходнике и сделать вывод в чат...
Но плагин зачётный!


Пожалуйста!

1) ты спрашиваешь "как заполнять файл NickChangeAlert_Cfg.cfg" ? А он должен был создаться уже заполненным, разве нет? Проверял многократно, у меня всё заполнялось.
Там должны быть квары: имя_квара [пробел] значение (если значение - это текст, содержащий пробелы, тогда кавычки обязательны).
Или что ты имеешь в виду? Формат файл - текстовый, расширение .cfg ...

2) На самом деле я использовал DHUD-ы, чтобы надпись как можно сильнее мешала играть, чтобы игрок сменил-таки ник хотя бы для того, чтобы надпись его не доставала.
Если не использовать HUD, тогда что?
Чат? Его некоторые вообще не читают.
client_print(... print_center ...) ? Тоже вполне можно игнорировать.

3) Так эта доп. инфа выводится в консоль сервера и всё. Там лишь несколько строк, засора логов они не сделают.
По команде nca_reload ты получишь 3 строчки к себе в консоль. Я люблю, когда есть какой-то отклик, мол "да, команда набрана без ошибок и выполнена должныб образом".

А вообще, как говорят, "Feel free to change..."
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
4 страниц V   1 2 3 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: