#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", "n");
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 );
}
}
}
}
#include <amxmodx>
#include <reapi>
#include <csstatsx_sql>
/* SETTINGS */
// #define IGNORE_FLAGS "n"
// Игнорируемые флаги
// Закомментировать, если не нужно игнорируемые флаги
#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", "xxxx")
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;
}
}
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;
}
client_putinserver
public client_player_spawn(id)
{
set_task(get_pcvar_float(check_time), "check_access", id);
}
RegisterHookChain(RG_CBasePlayer_Spawn, "client_player_spawn", true);
Что не работает? Деньги на карту не поступают? Вопрос о помощи в плане поддержки клан-тега, на который я дал решение.Не работает так,или я чего то не понял)
set_user_flags
делаете read_flags
?Блин лучше бы подсказали ничего страшного что я запускаю проверку на флаг при каждому респауне или это плохо?)
Sonyx, можно поподробнее с примером? Не пойму не много
set_user_flags
добавляет флаги в набор, а не устанавливает, нет смысла их получать все, достаточно указывать лишь тот, что нужно добавить.Проверку на флаг необходимо кешировать в случае, если приходится использовать флаги в методах частого вызова, например thinkБлин лучше бы подсказали ничего страшного что я запускаю проверку на флаг при каждому респауне или это плохо?)