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

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

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

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

[Half-Life] VIP/ADM Префиксы

, [Half-Life]
Статус пользователя ssx
сообщение 13.5.2015, 23:04
Сообщение #1


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Добрые люди, помогите написать плагин префиксов в чате для халф-лайф сервера.

Перелопатил гугл, не нашел ничего подходящего.
Весь вечер пытался с форматированием разобраться - не получилось :(


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
voed
сообщение 13.5.2015, 23:23
Сообщение #2
Стаж: 11 лет

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

А чем каэсовские не подходят?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 12:12
Сообщение #3


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(voed @ 14.5.2015, 0:23) *
А чем каэсовские не подходят?

Весь гугл перерыл , не нашел подходящего .

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


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 14.5.2015, 12:17
Сообщение #4


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

ssx, prefix manager от serfreeman который
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 12:30
Сообщение #5


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(GOOD FELLOW @ 14.5.2015, 13:17) *
ssx, prefix manager от serfreeman который

Слишком тяжелый и имеет много лишнего .

Мне бы простенький .. что бы при коннекте 1 раз проверил флаги , записал в player[33] а далее через switch(player[id])
Вот как это реализовать хз, уже второй день голову ломаю .. запутался окончательно .


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя simba
сообщение 14.5.2015, 17:51
Сообщение #6
Стаж: 11 лет

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

Можно хукать сообщения в чат и добавлять префиксы тем, у кого флаги. Так, по-моему, проще

Отредактировал: simba, - 14.5.2015, 17:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 18:19
Сообщение #7


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(simba @ 14.5.2015, 18:51) *
Можно хукать сообщения в чат и добавлять префиксы тем, у кого флаги. Так, по-моему, проще

Как это реализовать ?


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 14.5.2015, 18:23
Сообщение #8


Стаж: 12 лет

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

ssx, как тут вроде Admin prefixes 4.1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 18:42
Сообщение #9


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(Bloo @ 14.5.2015, 19:23) *
ssx, как тут вроде Admin prefixes 4.1

Подпилил под ХЛ

Префиксы не работают.

ерроры
Код:
L 05/14/2015 - 19:35:13: String formatted incorrectly - parameter 7 (total 6)
L 05/14/2015 - 19:35:13: [AMXX] Displaying debug trace (plugin "AdminPrefixes.amxx")
L 05/14/2015 - 19:35:13: [AMXX] Run time error 25: parameter error
L 05/14/2015 - 19:35:13: [AMXX] [0] AdminPrefixes.sma::HookSay (line 178)


Исходник
Код:
#include <amxmodx>
#include <amxmisc>
#include <celltrie>
//#include <cstrike>

#define VERSION "4.1"
#define FLAG_LOAD ADMIN_CFG
#define MAX_PREFIXES 33

new g_listen, g_listen_flag;
new pre_ips_count = 0, pre_names_count = 0, pre_steamids_count, pre_flags_count = 0, temp_cvar[2];
new configs_dir[64], file_prefixes[128], text[128], prefix[32], type[2], key[32], length, line = 0, error[256];
new g_saytxt, g_maxplayers;
new g_typed[192], g_message[190], g_name[32];
new Trie:pre_ips_collect, Trie:pre_names_collect, Trie:pre_steamids_collect, Trie:client_prefix;
new str_id[16], temp_key[35], temp_prefix[32];
new Array:g_aFlagsCollect

new const forbidden_say_symbols[] = {
"/",
"!",
"%",
"$"
}

new const separator[] = "************************************************"
new const in_prefix[] = "[АдминПрефиксы]"

public plugin_init()
{
register_plugin("Admin Prefixes", VERSION, "m0skVi4a ;]")

g_listen = register_cvar("ap_listen", "1")
g_listen_flag = register_cvar("ap_listen_flag", "a")

g_saytxt = get_user_msgid ("SayText")
g_maxplayers = get_maxplayers()

register_concmd("ap_reload_prefixes", "LoadPrefixes")
register_clcmd("say", "HookSay")
register_clcmd("say_team", "HookSayTeam")

pre_ips_collect = TrieCreate()
pre_names_collect = TrieCreate()
pre_steamids_collect = TrieCreate()
client_prefix = TrieCreate()
g_aFlagsCollect = ArrayCreate ( 34 )

register_dictionary("admin_prefixes.txt")

get_configsdir(configs_dir, charsmax(configs_dir))
formatex(file_prefixes, charsmax(file_prefixes), "%s/ap_prefixes.ini", configs_dir)

LoadPrefixes(0)
}

public LoadPrefixes(id)
{
if(!(get_user_flags(id) & FLAG_LOAD))
{
console_print(id, "%L", LANG_SERVER, "PREFIX_PERMISSION", in_prefix)
return PLUGIN_HANDLED
}

TrieClear(pre_ips_collect)
TrieClear(pre_names_collect)
TrieClear(pre_steamids_collect)
ArrayClear ( g_aFlagsCollect )

line = 0, length = 0, pre_flags_count = 0, pre_ips_count = 0, pre_names_count = 0;

if(!file_exists(file_prefixes))
{
formatex(error, charsmax(error), "%L", LANG_SERVER, "PREFIX_NOT_FOUND", in_prefix, file_prefixes)
set_fail_state(error)
}

server_print(separator)

new sText[34]
while(read_file(file_prefixes, line++ , text, charsmax(text), length) && (pre_ips_count + pre_names_count + pre_steamids_count + pre_flags_count) <= MAX_PREFIXES)
{
if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
continue

parse(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
trim(prefix)

if(!type[0] || !prefix[0] || !key[0])
continue

replace_all(prefix, charsmax(prefix), "!g", "^x04")
replace_all(prefix, charsmax(prefix), "!t", "^x03")
replace_all(prefix, charsmax(prefix), "!n", "^x01")

switch(type[0])
{
case 'f':
{
pre_flags_count++
formatex ( sText, charsmax ( sText ), "^"%s^" ^"%s^"", key, prefix )
ArrayPushString ( g_aFlagsCollect, sText )
server_print("%L", LANG_SERVER, "PREFIX_LOAD_FLAG", in_prefix, prefix, key[0])
}
case 'i':
{
pre_ips_count++
TrieSetString(pre_ips_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_IP", in_prefix, prefix, key)
}
case 's':
{
pre_steamids_count++
TrieSetString(pre_steamids_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_STEAMID", in_prefix, prefix, key)
}
case 'n':
{
pre_names_count++
TrieSetString(pre_names_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_NAME", in_prefix, prefix, key)
}
default:
{
continue
}
}
}

if(pre_flags_count <= 0 && pre_ips_count <= 0 && pre_steamids_count <= 0 && pre_names_count <= 0)
{
server_print("%L", LANG_SERVER, "PREFIX_NO", in_prefix)
}

get_user_name(id, g_name, charsmax(g_name))
server_print("%L", LANG_SERVER, "PREFIX_LOADED_BY", in_prefix, g_name)
console_print(id, "%L", LANG_SERVER, "PREFIX_LOADED", in_prefix)

server_print(separator)

for(new i = 1; i <= g_maxplayers; i++)
{
num_to_str(i, str_id, charsmax(str_id))
TrieDeleteKey(client_prefix, str_id)
PutPrefix(i)
}

return PLUGIN_HANDLED
}

public client_putinserver(id)
{
num_to_str(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")
PutPrefix(id)
}

public HookSay(id)
{
read_args(g_typed, charsmax(g_typed))
remove_quotes(g_typed)

trim(g_typed)

if(equal(g_typed, "") || !is_user_connected(id))
return PLUGIN_HANDLED_MAIN

if(check_say_characters(g_typed))
return PLUGIN_HANDLED_MAIN

num_to_str(id, str_id, charsmax(str_id))
TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix))

get_user_name(id, g_name, charsmax(g_name))

if(temp_prefix[0])
{
formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", temp_prefix, g_name, g_typed)
}
else
{
formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", g_name, g_typed)
}

get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))

for(new i = 1; i <= g_maxplayers; i++)
{
if(!is_user_connected(i))
continue

if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
{
send_message(g_message, id, i)
}
}

return PLUGIN_HANDLED_MAIN
}

public HookSayTeam(id)
{
read_args(g_typed, charsmax(g_typed))
remove_quotes(g_typed)

trim(g_typed)

if(equal(g_typed, "") || !is_user_connected(id))
return PLUGIN_HANDLED_MAIN

if(check_say_characters(g_typed))
return PLUGIN_HANDLED_MAIN

num_to_str(id, str_id, charsmax(str_id))
TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix))

get_user_name(id, g_name, charsmax(g_name))


if(temp_prefix[0])
{
formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", temp_prefix, g_name, g_typed)
}
else
{
formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", g_name, g_typed)
}

get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))

for(new i = 1; i <= g_maxplayers; i++)
{
if(!is_user_connected(i))
continue

if(get_user_team(id) == get_user_team(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
{
if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
{
send_message(g_message, id, i)
}
}
}

return PLUGIN_HANDLED_MAIN
}

public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new g_old_name[32];

get_user_info(id, "name", g_name, charsmax(g_name))
get_user_name(id, g_old_name, charsmax(g_old_name))

if(!equal(g_name, g_old_name))
{
num_to_str(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")
set_task(0.5, "PutPrefix", id)
return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public PutPrefix(id)
{
num_to_str(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")

get_user_authid(id, temp_key, charsmax(temp_key))

if(TrieGetString(pre_steamids_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
return
}

new sFlags[32]
get_flags ( get_user_flags ( id ), sFlags, charsmax ( sFlags ) )

if ( sFlags[0] && sFlags[0] != 'z' )
{
new iSize = ArraySize ( g_aFlagsCollect )
new sBuff[34], sKey[2]
for ( new i; i < iSize; i++ )
{
ArrayGetString ( g_aFlagsCollect, i, sBuff, charsmax ( sBuff ) )
parse ( sBuff, sKey, 1, temp_prefix, charsmax ( temp_prefix ) )

if ( contain ( sFlags, sKey ) != -1 )
{
TrieSetString ( client_prefix, str_id, temp_prefix )
return
}
}
}

get_user_ip(id, temp_key, charsmax(temp_key), 1)

if(TrieGetString(pre_ips_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
return
}

get_user_name(id, temp_key, charsmax(temp_key))

if(TrieGetString(pre_names_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
}
}

send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, g_saytxt, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}

bool:check_say_characters(const check_message[])
{
for(new i = 0; i < charsmax(forbidden_say_symbols); i++)
{
if(check_message[0] == forbidden_say_symbols[i])
{
return true
}
}
return false
}

public plugin_end ()
{
ArrayDestroy ( g_aFlagsCollect )
TrieDestroy ( pre_ips_collect )
TrieDestroy ( pre_steamids_collect )
TrieDestroy ( pre_names_collect )
TrieDestroy ( client_prefix )
}


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 14.5.2015, 18:46
Сообщение #10
Стаж: 11 лет

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

Код:
"^1%s^4%s^3 %s :^4 %s",  temp_prefix, g_name, g_typed

у тебя в строке 4 параметра, а переменных всего 3
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 19:11
Сообщение #11


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(voed @ 14.5.2015, 19:46) *
Код:
"^1%s^4%s^3 %s :^4 %s",  temp_prefix, g_name, g_typed

у тебя в строке 4 параметра, а переменных всего 3

Заработало!!!

Не могу поверить.. осталось только проверить на стабильность и ошибки ..

Еще надо будет допилить проверку на стим ..
и вип+адм не удобно проверять, придется им выдавать какой-то особый флаг ..

Отредактировал: ssx, - 14.5.2015, 19:20


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя simba
сообщение 14.5.2015, 20:29
Сообщение #12
Стаж: 11 лет

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

ппц, ради 2 префиксов столько кода+)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 14.5.2015, 22:36
Сообщение #13


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(simba @ 14.5.2015, 21:29) *
ппц, ради 2 префиксов столько кода+)

Вот вот..


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: