Поиск Плюшки за ТЕГ

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
WILL_BE, ни одного натива или форварда из модуля не используется.
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
d3m37r4, ну давайте наглядно отключим инклуд reapi и получим ошибку в 31 строке RegisterHookChain
 
Сообщения
507
Реакции
111
Помог
16 раз(а)
Вообщем плагин который скидывал Rias работает выдает флаг. Допустим - n

Код:
#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;
    }
}
То он скидывает вообще флаги на 0 и флаг "n" уже не выдается,если добавить флаг "n" в игнорирование флагов то игроку с флагом "n" не выдается флаг за топ,я вообще голову сломал уже.

Было бы нормально,если бы плагин который выдает флаг за топ,просто добавлял флаги,которые прописаны в конфиге к уже имеющимся,и при удалении из топа их и забирал,а не ВСЕ которые были выставлены.
1 Июн 2019
zhorzh78, Не работает так,или я чего то не понял)
 
Сообщения
25
Реакции
41
Помог
1 раз(а)
r1nk0, в плагине где за топ выдаешь измени на Добавление указанных флагов к тем, которые уже есть

Код:
set_user_flags(id, read_flags(g_arrAwardData[iRank][FLAGS]))
->
Код:
new myFlags = get_user_flags(id);
set_user_flags( id, myFlags | read_flags(g_arrAwardData[iRank][FLAGS]) );
 
Сообщения
507
Реакции
111
Помог
16 раз(а)
Rias, ааа я только щас заметил что не правильно написал,суть в том что плагин за ТОП снимает все флаги,после того как ты выпал из топа,и новый флаг за тег уже не присваивается.

Плагин за топ нормально,выдает флаги. и суммирует их с ранее выданными.
А вот который ты скинул обратно уже не присваивает.

тоесть вот этим кодом он удаляет все флаги которые были.

Код:
    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;

    }
может типа перед ним проще впихнуть проверку на тег,я правда незнаю как :D

Вообщем решил проблему. Нужно было в плагин выдачи за тег,который начинает отчет времени до выдачи флага когда игрок зашел на сервер

Код:
client_putinserver
заменить на

Код:
public client_player_spawn(id)
{
    set_task(get_pcvar_float(check_time), "check_access", id);
}
и добавить в public plugin_init()

Код:
RegisterHookChain(RG_CBasePlayer_Spawn, "client_player_spawn", true);
что собственно запустит отсчет во время спавна игрока. Потому что так же делает плагин который выдает за топ.

собсвтенно работает как я и хотел. Но правильно ли я сделал? Знающие подскажите че не так.
 
Последнее редактирование:
Сообщения
25
Реакции
41
Помог
1 раз(а)
r1nk0,
Код:
remove_user_flags(id);
->
Код:
remove_user_flags(id, ADMIN_RCON);
Вместо ADMIN_RCON -> флаг который выдает топ.
 
Сообщения
507
Реакции
111
Помог
16 раз(а)
@undefined, дак я же говорю он нормально выдает,и забирает,но забирает все,которые были выданы за тег.
А так он типа удалит только те что укажу? оО

Ну это кстате не очень меняет картину я думаю,так как флаг за тег в коде который ты скинул когда игрок зашел на сервер,а я сделал типа при каждом спавне проверят есть ли в нике тег,хз даже как лучше.
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Не работает так,или я чего то не понял)
Что не работает? Деньги на карту не поступают? Вопрос о помощи в плане поддержки клан-тега, на который я дал решение.
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Sonyx, можно поподробнее с примером? Не пойму не много :swoon2:
 
Сообщения
507
Реакции
111
Помог
16 раз(а)
Блин лучше бы подсказали ничего страшного что я запускаю проверку на флаг при каждому респауне или это плохо?)
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Блин лучше бы подсказали ничего страшного что я запускаю проверку на флаг при каждому респауне или это плохо?)
Кешируй при заходе игрока на сервер(нет)
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
Sonyx, можно поподробнее с примером? Не пойму не много :swoon2:
set_user_flags добавляет флаги в набор, а не устанавливает, нет смысла их получать все, достаточно указывать лишь тот, что нужно добавить.
5 Июн 2019
Блин лучше бы подсказали ничего страшного что я запускаю проверку на флаг при каждому респауне или это плохо?)
Проверку на флаг необходимо кешировать в случае, если приходится использовать флаги в методах частого вызова, например think
 
Сообщения
289
Реакции
251
Помог
7 раз(а)
если выдаете при каждом спавне, то и таск не нужно использовать, пишите условия сразу в функцию спавна.
и ещё, я бы указал конкретно на тэг [dev-cs]
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу