Вопрос по AdminFlag

Тема в разделе "Программирование / Скриптинг", создана пользователем san911, 13 окт 2016.

  1. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Как можно преобразовать строковые флаги(Например: abcdf) в AdminFlag ?
    Так не работает:
    PHP:
            new AdminFlag:Flags;
            
    FindFlagByChar(ReadFlagString(sFlagsAccess), Flags);
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Код:
    decl AdminFlag:Flags;
    BitToFlag(ReadFlagString(sFlagsAccess), Flags);
    
    FindFlagByChar(c, &AdminFlag:flag);
     
    Последнее редактирование: 13 окт 2016
    san911 нравится это.
  3. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    PHP:
            new Flags;
            
    BitToFlag(ReadFlagString(sFlagsAccess), AdminFlag:Flags);

            
    PrintToServer("Flags: %d"Flags);
    Flags = 0 всегда
     
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Ты вообще сколько букв проверяешь? Чего хочешь добиться конкретно?
     
  5. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Одну букву f
    Желательно чтобы можно было использовать несколько флагов одновременно. (Типо: ADMFLAG_SLAY|ADMFLAG_BAN|ADMFLAG_KICK)
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Это уже #define флаги. Ты уж определись.
     
    CrazyHackGUT нравится это.
  7. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Ну вот они:
    PHP:
    #define ADMFLAG_RESERVATION            (1<<0)        /**< Convenience macro for Admin_Reservation as a FlagBit */
    #define ADMFLAG_GENERIC                (1<<1)        /**< Convenience macro for Admin_Generic as a FlagBit */
    #define ADMFLAG_KICK                (1<<2)        /**< Convenience macro for Admin_Kick as a FlagBit */
    #define ADMFLAG_BAN                    (1<<3)        /**< Convenience macro for Admin_Ban as a FlagBit */
    #define ADMFLAG_UNBAN                (1<<4)        /**< Convenience macro for Admin_Unban as a FlagBit */
    #define ADMFLAG_SLAY                (1<<5)        /**< Convenience macro for Admin_Slay as a FlagBit */
    #define ADMFLAG_CHANGEMAP            (1<<6)        /**< Convenience macro for Admin_Changemap as a FlagBit */
    #define ADMFLAG_CONVARS                (1<<7)        /**< Convenience macro for Admin_Convars as a FlagBit */
    #define ADMFLAG_CONFIG                (1<<8)        /**< Convenience macro for Admin_Config as a FlagBit */
    #define ADMFLAG_CHAT                (1<<9)        /**< Convenience macro for Admin_Chat as a FlagBit */
    #define ADMFLAG_VOTE                (1<<10)        /**< Convenience macro for Admin_Vote as a FlagBit */
    #define ADMFLAG_PASSWORD            (1<<11)        /**< Convenience macro for Admin_Password as a FlagBit */
    #define ADMFLAG_RCON                (1<<12)        /**< Convenience macro for Admin_RCON as a FlagBit */
    #define ADMFLAG_CHEATS                (1<<13)        /**< Convenience macro for Admin_Cheats as a FlagBit */
    #define ADMFLAG_ROOT                (1<<14)        /**< Convenience macro for Admin_Root as a FlagBit */
    #define ADMFLAG_CUSTOM1                (1<<15)        /**< Convenience macro for Admin_Custom1 as a FlagBit */
    #define ADMFLAG_CUSTOM2                (1<<16)        /**< Convenience macro for Admin_Custom2 as a FlagBit */
    #define ADMFLAG_CUSTOM3                (1<<17)        /**< Convenience macro for Admin_Custom3 as a FlagBit */
    #define ADMFLAG_CUSTOM4                (1<<18)        /**< Convenience macro for Admin_Custom4 as a FlagBit */
    #define ADMFLAG_CUSTOM5                (1<<19)        /**< Convenience macro for Admin_Custom5 as a FlagBit */
    #define ADMFLAG_CUSTOM6                (1<<20)        /**< Convenience macro for Admin_Custom6 as a FlagBit */

    Ну мне нужно подставить флаг(и) в битах. ReadFlagString(sFlagsAccess) не работает.

    Для AddToTopMenu
     
  8. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Я его везде использую, самая эффективная штука.
    Так он же вызывается 1 раз. Оффтоп Т.е., никакой квар там смысла не имеет быть.
    Просто впиши тот же #define:
    Код:
    #define PLUGIN_FLAGS ADMFLAG_SLAY|ADMFLAG_BAN|ADMFLAG_KICK
     
  9. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Так в плагин старте бы из конфига флаги ставить.
     
  10. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Конфиг подгружается далеко не в OnPluginStart(), будучи там указанным, а позже, после OnMapStart(). А вот когда меню строится - не проверял. Протестируй, наверняка в этом и есть проблема.
     
  11. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Можно таймер создать на 0.3
    Думаю этого хватит чтобы конфиг прочитать и записать инфу в массив.
     
  12. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    У разного оборудования - разная скорость загрузки. Вот пример без таймера:
    PHP:
    new TopMenuObject:g_ObjectTop;
    new 
    Handle:cvar_AdminFlags;

    public 
    OnConfigsExecuted()
    {
        static 
    bool:bMenutop true;
        if (
    bMenutop)
        {
            
    decl Handle:menu;
            if ((
    menu GetAdminTopMenu()))
            {
                
    decl TopMenuObject:category;
                if ((
    category FindTopMenuCategory(menu"ServerCommands")) != INVALID_TOPMENUOBJECT)
                {
                    
    decl String:sFlagsAccess[AdminFlags_TOTAL+1];
                    
    GetConVarString(cvar_AdminFlagssFlagsAccessAdminFlags_TOTAL+1);
                    
    g_ObjectTop AddToTopMenu(menu"SuperMyCategory"TopMenuObject_ItemCallBack_Categorycategory"sm_testplugin"ReadFlagString(sFlagsAccess));
                    
    bMenutop false;
                }
            }
        }
    }
     
  13. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    ReadFlagString(sFlagsAccess) всегда возвращает 0, только если стоит не z флаг.
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Прикрепи сразу свой тестовый код, как проверяешь и что делаешь.
     
  15. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Мап старт:
    PHP:
        PrintToServer("ReadFlagString: %d"ReadFlagString(sFlagsAccess));
       
        static 
    bool:MenuCreated;
        if(
    MenuCreated == false)
        {
            new 
    Handle:topmenu;
            if(
    LibraryExists("adminmenu") && (topmenu GetAdminTopMenu()) != INVALID_HANDLE
            {
                
    MenuCreated true;
                
    OnAdminMenuReady(topmenu);
                
    PrintToServer("Menu Add");
            }
        }
    PHP:
    public OnAdminMenuReady(Handle:topmenu)
    {
        if(
    topmenu != hTopMenu)
        {
            
    hTopMenu topmenu;
          
            
    //new Flags;
            //BitToFlag(ReadFlagString(sFlagsAccess), AdminFlag:Flags);
          
            
    new TopMenuObject:player_weapon_blocker FindTopMenuCategory(hTopMenu"player_weapon_blocker");
            if(
    player_weapon_blocker == INVALID_TOPMENUOBJECTplayer_weapon_blocker AddToTopMenu(hTopMenu"category_player_weapon_blocker"TopMenuObject_CategoryAdminMenu_CategoryPlayerWeaponBlockerINVALID_TOPMENUOBJECT);
          
            
    AddToTopMenu(hTopMenu"player_weapon_block"TopMenuObject_ItemAdminMenu_PlayerWeaponBlockplayer_weapon_blocker"player_weapon_block"ReadFlagString(sFlagsAccess));
            
    AddToTopMenu(hTopMenu"player_weapon_block_list"TopMenuObject_ItemAdminMenu_PlayerWeaponBlockListplayer_weapon_blocker"player_weapon_block_list"ReadFlagString(sFlagsAccess));
              
            
    //PrintToServer("Flags: %d", Flags);
        
    }
    }
     
  16. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Ты вообще в курсе, что это самостоятельный вызов? Т.е. он вызывается "сам по себе" единожды.
    А этим ты блокируешь все дальнейшие вызовы.
    И это у тебя идёт в никуда.
     
    san911 и Серый™ нравится это.
  17. san911

    san911 Вообще короче нечего

    Сообщения:
    177
    Симпатии:
    37
    Теперь да. Стало понятно почему не работало.