users.inifantom, не совсем понял,нужно проверку в плагине допустим автовыдачи брони и тп,переписать проверку на тег клана?
но ведь игрок должен быть добавлен в базу админов чтоб получить флаг доступа b типа как это реализовать?
"[DEV-CS]" "" "a" "b"
Я попытался показать как выдавать флаг за тег на основе которого ты можешь выдавать какие-то плюшки. А на счет пускать не пускать - я просто не пробовал "b" флаг авторизации, по этому и не знаю требует он пароль или нет.Rias, да наверно не правильно поняли меня,кс банс и прочее не причему тут должно,в плагине было что он просто проверяет ник на наличие например тега Команда1 если есть то выдает например броню и тп. Мне не нужно что бы без клантега не пускало на сервер :D
@Rias,To_be_or_not_to_be,Все сделал,работает но криво. Если игрок поставил тэг,флаг ему выдается и это видно в консоли,не работает пока не будут перезагружены админы через amx_reloadadmins
Стоит admin_loader_3.5
После реконнекта флаг так же спадает :'(
#include <amxmodx>
#include <reapi>
//#include <csstatsx_sql>
/* SETTINGS */
#define IGNORE_FLAGS "m"
// Игнорируемые флаги
// Закомментировать, если не нужно игнорируемые флаги
#define TIME 1.0
// Каждые n секунды проверить статистику игрока
#define MAX_AWARDS 254
// Максимальная кол-во наград
/* DICTIONARY */
#define TOP_CHAT_MESSAGE "^1[^4Сервер^1] Вы поднялись на^3 %d ^1место. Бонусные флаги: ^4%s"
// Закомментировать, если не нужно сообщение при поднятие место
#define NO_TOP_CHAT_MESSAGE "^1[^4Сервер^1] Вы занимаете^3 %d ^1место"
// Закомментировать, если не нужно сообщение при понижение место
/* Do not touch arrays */
new bool:GiveAward[MAX_PLAYERS+1];
enum _:DATA { FLAGS[32] };
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1;
public plugin_init()
{
register_plugin("top_awards", "0.1", "xxx")
RegisterHookChain(RG_CBasePlayer_Spawn, "client_player_spawn", true);
}
public plugin_cfg()
{
new szPath[PLATFORM_MAX_PATH];
get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
add(szPath, charsmax(szPath), "/top_awards.ini");
new iFile = fopen(szPath, "rt");
if(!iFile)
{
new szError[96];
formatex(szError, charsmax(szError), "File '%s' not found OR incorrect CHMOD!", szPath);
set_fail_state(szError);
}
new szBuffer[MAX_AWARDS];
while(!feof(iFile))
{
fgets(iFile, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!szBuffer[0] || szBuffer[0] == ';')
continue;
if(parse(szBuffer,
g_arrAwardData[g_iDataSize][FLAGS], charsmax(g_arrAwardData[][FLAGS])
) == 1) g_iDataSize++;
}
fclose(iFile);
}
public client_putinserver(id) GiveAward[id] = false;
public client_disconnected(id) GiveAward[id] = false;
public client_player_spawn(id) set_task(TIME, "ItemAwards", id)
public ItemAwards(id)
{
#if defined IGNORE_FLAGS
if(!GiveAward[id] && get_user_flags(id) & read_flags(IGNORE_FLAGS))
return
#endif
new szStats[STATSX_MAX_STATS];
new iRank = get_user_stats_sql(id, szStats, szStats);
if(iRank < g_iDataSize)
{
if(~get_user_flags(id) & read_flags(g_arrAwardData[iRank][FLAGS]))
{
set_user_flags(id, read_flags(g_arrAwardData[iRank][FLAGS]))
#if defined TOP_CHAT_MESSAGE
client_print_color(id, print_team_default, TOP_CHAT_MESSAGE, iRank, g_arrAwardData[iRank][FLAGS]);
#endif
GiveAward[id] = true;
}
}
else
{
remove_user_flags(id);
#if defined NO_TOP_CHAT_MESSAGE
client_print_color(id, print_team_default, NO_TOP_CHAT_MESSAGE, iRank);
#endif
GiveAward[id] = false;
}
}
new name[32]
get_user_info(id, "name", name, 31)
if(contain(name, "DEV-CS") != -1)
#include <amxmodx>
#include <reapi>
//#include <csstatsx_sql>
/* SETTINGS */
#define IGNORE_FLAGS "m"
// Игнорируемые флаги
// Закомментировать, если не нужно игнорируемые флаги
#define TIME 1.0
// Каждые n секунды проверить статистику игрока
#define MAX_AWARDS 254
// Максимальная кол-во наград
/* DICTIONARY */
#define TOP_CHAT_MESSAGE "^1[^4Сервер^1] Вы поднялись на^3 %d ^1место. Бонусные флаги: ^4%s"
// Закомментировать, если не нужно сообщение при поднятие место
#define NO_TOP_CHAT_MESSAGE "^1[^4Сервер^1] Вы занимаете^3 %d ^1место"
// Закомментировать, если не нужно сообщение при понижение место
/* Do not touch arrays */
new bool:GiveAward[MAX_PLAYERS+1];
enum _:DATA { FLAGS[32] };
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1;
public plugin_init()
{
register_plugin("top_awards", "0.1", "xxx")
RegisterHookChain(RG_CBasePlayer_Spawn, "client_player_spawn", true);
}
public plugin_cfg()
{
new szPath[PLATFORM_MAX_PATH];
get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
add(szPath, charsmax(szPath), "/top_awards.ini");
new iFile = fopen(szPath, "rt");
if(!iFile)
{
new szError[96];
formatex(szError, charsmax(szError), "File '%s' not found OR incorrect CHMOD!", szPath);
set_fail_state(szError);
}
new szBuffer[MAX_AWARDS];
while(!feof(iFile))
{
fgets(iFile, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!szBuffer[0] || szBuffer[0] == ';')
continue;
if(parse(szBuffer,
g_arrAwardData[g_iDataSize][FLAGS], charsmax(g_arrAwardData[][FLAGS])
) == 1) g_iDataSize++;
}
fclose(iFile);
}
public client_putinserver(id) GiveAward[id] = false;
public client_disconnected(id) GiveAward[id] = false;
public client_player_spawn(id) set_task(TIME, "ItemAwards", id)
public ItemAwards(id)
{
#if defined IGNORE_FLAGS
if(!GiveAward[id] && get_user_flags(id) & read_flags(IGNORE_FLAGS))
return
#endif
new name[32]
get_user_info(id, "name", name, 31)
if(contain(name, "DEV-CS") != -1)
{
if(~get_user_flags(id) & read_flags(g_arrAwardData[FLAGS]))
{
set_user_flags(id, read_flags(g_arrAwardData[FLAGS]))
#if defined TOP_CHAT_MESSAGE
client_print_color(id, print_team_default, TOP_CHAT_MESSAGE, g_arrAwardData[FLAGS]);
#endif
GiveAward[id] = true;
}
}
else
{
remove_user_flags(id);
#if defined NO_TOP_CHAT_MESSAGE
client_print_color(id, print_team_default, NO_TOP_CHAT_MESSAGE);
#endif
GiveAward[id] = false;
}
}
Думаю логичнее и практичнее:Код:new name[32] get_user_info(id, "name", name, 31)
new name[MAX_NAME_SIZE];
get_entvar(id, var_netname, name, charsmax(name));
#include <amxmodx>
#include <reapi>
#define PLUGIN "[WA] Steam Flag"
#define VERSION "1.0"
#define AUTHOR "Rias"
new vipaccess[32], defaccess[32];
new check_time, steam_flag, default_access
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
check_time = register_cvar("amx_check_after", "3.0");
steam_flag = register_cvar("steam_flag", "v");
default_access = register_cvar("default_access", "z");
}
public client_putinserver(id)
{
set_task(get_pcvar_float(check_time), "check_access", id);
}
public check_access( id )
{
get_pcvar_string(steam_flag, vipaccess, 31);
get_pcvar_string(default_access, defaccess, 31);
new name[33];
new DefaultFlag = read_flags(defaccess);
new SteamFlag = read_flags(vipaccess);
get_entvar(id, var_netname, name, charsmax(name));
if(is_user_connected(id))
{
if(contain(name, "DEV-CS") != -1)
{
if(get_user_flags(id) & ADMIN_BAN_TEMP)
return;
if (DefaultFlag)
{
remove_user_flags(id, DefaultFlag);
set_user_flags(id, SteamFlag);
}
if(get_user_flags(id) & ADMIN_LEVEL_H || get_user_flags(id) & ADMIN_KICK)
{
new myFlags;
myFlags = get_user_flags(id);
set_user_flags( id, myFlags | SteamFlag );
}
}
}
}
Чем? Подключать модуль, чтобы получить имя?Думаю логичнее и практичнее:
Код:new name[MAX_NAME_SIZE]; get_entvar(id, var_netname, name, charsmax(name));
Неугомоновский....Вебморда не позволяет но в базе то можно вставить флаг авторизации - b
- else if(strcmp(name, g_sUser[Auth]) != 0)
+ else if(strcmp(name, g_sUser[Auth]) != 0 && (g_sUser[Flags] & FLAG_TAG && strfind(name, g_sUser[Auth]) != 0))
+ else if(g_sUser[Flags] & FLAG_TAG ? strfind(name, g_sUser[Auth]) != 0 : strcmp(name, g_sUser[Auth]) != 0)
d3m37r4, Лишнего модуля? Обратите внимание, что он и до меня подключен былЧем? Подключать модуль, чтобы получить имя?
Код:#include <amxmodx> #include <reapi>