Узнать флаг по букве

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Приветствую всех.
Необходимо, имея строку с буквой флага (к примеру, z), записать ее в переменную типа AdminFlag.
Пробовал по разному корячиться с функциями из API, не очень помогло.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
если нужно получить все флаги по строке с их буквенным обозначением (например, "bcf"), то можно использовать функцию ReadFlagString · admin · SourceMod Scripting API Reference
А потом из полученного int выбрать необходимые можно так: if(flags & ADMFLAG_*) {...}
Сообщения автоматически склеены:

Как мне из строки сделать "интовую репрезентацию"
if(FindFlagByChar('g', flag)) {...}
 

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Скажите пожалуйста, что я делаю не так:

PHP:
#pragma tabsize 0

#include <cstrike>
#include <sourcemod>
#include <sdktools>

AdminFlag bp_flag;

public void OnPluginStart()
{
    RegConsoleCmd("sm_bp", cmd_bp);
    RegConsoleCmd("sm_batllepass", cmd_bp);
   
    char path[256];
    char temp[128];
    BuildPath(Path_SM, path, sizeof(path), "configs/BP_Config.cfg");
    KeyValues hKeyValues = new KeyValues("BattlePass");
    if(hKeyValues.ImportFromFile(path))
    {
        hKeyValues.JumpToKey("Settings");
        hKeyValues.GetString("AdminFlag", temp, sizeof(temp));
        FindFlagByChar(temp[0], bp_flag);
    }
    else
    {
        SetFailState("Not found file \"configs/BP_Config.cfg\"");
    }
}

public Action cmd_bp(int client, any args)
{
    if(GetAdminFlag(GetUserAdmin(client), bp_flag, Access_Real))
    {
        CGOPrintToChat(client, "Работает!");
    }
    return Plugin_Handled;
}

И сам конфиг:
PHP:
"BattlePass"
{
    "Settings"
    {
        "AdminFlag"        "z"
    }
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #8
А не лучше ли тут заюзать ReadFlagString() и предоставить возможность привязать свой функционал к нескольким админ флагам?
 

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
А не лучше ли тут заюзать ReadFlagString() и предоставить возможность привязать свой функционал к нескольким админ флагам?
По заказу все привязывается к одному флагу
Сообщения автоматически склеены:

В общем для решения проблемы необходимо было поменять AdmAccessMode на Access_Effective.
Следовательно вопрос, можно ли использовать сразу два аккесс мода?
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
просто проверяй оба режима
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #11
Следовательно вопрос, можно ли использовать сразу два аккесс мода?
Это лишено смысла. Access_Effective включает в себя Access_Real. Об этом явно в API не сообщается, но происходит намёк на вики.

Если говорить более простым языком...
  • pUser->flags (оно же Access_Real) - это те флаги, которые пользователь имеет без учёта админ-групп (те, которые явно прописаны в кеше).
  • pUser->eflags (оно же Access_Effective) - собственные флаги пользователя + от всех групп.
 
Сверху Снизу