akvorok.ego
Участник
- Сообщения
- 314
- Реакции
- 186
C-подобный:decl AdminFlag:Flags; BitToFlag(ReadFlagString(sFlagsAccess), Flags); FindFlagByChar(c, &AdminFlag:flag);
new Flags;
BitToFlag(ReadFlagString(sFlagsAccess), AdminFlag:Flags);
PrintToServer("Flags: %d", Flags);
Ты вообще сколько букв проверяешь? Чего хочешь добиться конкретно?Flags = 0
Одну букву fТы вообще сколько букв проверяешь?
Желательно чтобы можно было использовать несколько флагов одновременно. (Типо: ADMFLAG_SLAY|ADMFLAG_BAN|ADMFLAG_KICK)Чего хочешь добиться конкретно?
Это уже #define флаги. Ты уж определись.Типо: ADMFLAG_SLAY
Это уже #define флаги. Ты уж определись.
#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) не работает
Так он же вызывается 1 раз. ОффтопДля AddToTopMenu
#define PLUGIN_FLAGS ADMFLAG_SLAY|ADMFLAG_BAN|ADMFLAG_KICK
Так в плагин старте бы из конфига флаги ставить.Так он же вызывается 1 раз. ОффтопОт повторных даже защита ставится.Т.е., никакой квар там смысла не имеет быть.
Конфиг подгружается далеко не в OnPluginStart(), будучи там указанным, а позже, после OnMapStart(). А вот когда меню строится - не проверял. Протестируй, наверняка в этом и есть проблема.из конфига
Можно таймер создать на 0.3Конфиг подгружается далеко не в OnPluginStart(), будучи там указанным, а позже, после OnMapStart(). А вот когда меню строится - не проверял. Протестируй, наверняка в этом и есть проблема.
У разного оборудования - разная скорость загрузки. Вот пример без таймера:таймер создать на 0.3
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_AdminFlags, sFlagsAccess, AdminFlags_TOTAL+1);
g_ObjectTop = AddToTopMenu(menu, "SuperMyCategory", TopMenuObject_Item, CallBack_Category, category, "sm_testplugin", ReadFlagString(sFlagsAccess));
bMenutop = false;
}
}
}
}
У разного оборудования - разная скорость загрузки. Вот пример без таймера: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_AdminFlags, sFlagsAccess, AdminFlags_TOTAL+1); g_ObjectTop = AddToTopMenu(menu, "SuperMyCategory", TopMenuObject_Item, CallBack_Category, category, "sm_testplugin", ReadFlagString(sFlagsAccess)); bMenutop = false; } } } }
Прикрепи сразу свой тестовый код, как проверяешь и что делаешь.если стоит не z флаг
Мап старт:Прикрепи сразу свой тестовый код, как проверяешь и что делаешь.
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");
}
}
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_TOPMENUOBJECT) player_weapon_blocker = AddToTopMenu(hTopMenu, "category_player_weapon_blocker", TopMenuObject_Category, AdminMenu_CategoryPlayerWeaponBlocker, INVALID_TOPMENUOBJECT);
AddToTopMenu(hTopMenu, "player_weapon_block", TopMenuObject_Item, AdminMenu_PlayerWeaponBlock, player_weapon_blocker, "player_weapon_block", ReadFlagString(sFlagsAccess));
AddToTopMenu(hTopMenu, "player_weapon_block_list", TopMenuObject_Item, AdminMenu_PlayerWeaponBlockList, player_weapon_blocker, "player_weapon_block_list", ReadFlagString(sFlagsAccess));
//PrintToServer("Flags: %d", Flags);
}
}
Ты вообще в курсе, что это самостоятельный вызов? Т.е. он вызывается "сам по себе" единожды.public OnAdminMenuReady(Handle:topmenu)
А этим ты блокируешь все дальнейшие вызовы.if(topmenu != hTopMenu)
{
hTopMenu = topmenu;
И это у тебя идёт в никуда.OnAdminMenuReady(topmenu);
Теперь да. Стало понятно почему не работало.Ты вообще в курсе, что это самостоятельный вызов?