Добавить админов в исключение

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Нужно сделать как-то так

C-подобный:
if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && не админ)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}

Или так

if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && не админ флаг b && не админ флаг z)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}

Если не трудно продемонстрируйте как должны выглядеть оба варианта.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #2
C-подобный:
if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && GetUserAdmin(iClient) != INVALID_ADMIN_ID)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}
C-подобный:
if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && (GetUserFlagBits(iClient) & ADMFLAG_ROOT|ADMFLAG_GENERIC) == 0)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C-подобный:
if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && GetUserAdmin(iClient) != INVALID_ADMIN_ID)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}
C-подобный:
if(IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bCheckFirstConnection[iClient] && (GetUserFlagBits(iClient) & ADMFLAG_ROOT|ADMFLAG_GENERIC) == 0)
{
    g_iStatusSwapTeams[iClient] = g_cvRoundsBlock.IntValue;
    CGOPrintToChat(iClient, "%t", "New Block Swap Team", g_sTag, g_iStatusSwapTeams[iClient]);
}
При записи GetUserAdmin(iClient) != INVALID_ADMIN_ID на админов все равно отрабатывает.

(GetUserFlagBits(iClient) & ADMFLAG_ROOT|ADMFLAG_GENERIC) == 0) не отрабатывает не на ком. Будто все админы.

При таком условии (GetUserFlagBits(iClient) & ADMFLAG_ROOT) == 0 работает на нужный флаг но если делать
((GetUserFlagBits(iClient) & ADMFLAG_ROOT) == 0 || (GetUserFlagBits(iClient) & ADMFLAG_GENERIC) == 0) тогда на админов все равно отрабатывает.

Нужно чтобы на админов с флагом ADMFLAG_GENERIC и ADMFLAG_ROOT код не отрабатывал. Игнорить все флаги не вариант у меня флаг "а" випам выдается.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@oleg_nelasy, ты админку через какой плагин реализуешь?
Такое ощущение, что у тебя стандартная админка и всё, что на ней завязано, не пашет
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@oleg_nelasy, ты админку через какой плагин реализуешь?
Такое ощущение, что у тебя стандартная админка и всё, что на ней завязано, не пашет
На данный момент голый сервер для тестов, чтобы всякий мусор на результат не влиял. Админку в admins_simple.ini прописал. А ставится будет на сервер с materialadmin.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@oleg_nelasy, смени != в первом примере на ==, чтобы писало игроку без админки
Сообщения автоматически склеены:

во втором примере попробуй админские флаги дополнительно в скобки заключить (не помню у чего приоритет выше: у | или у &)
чтобы вышло так: & (флаг1 | флаг2)
во втором варианте у крузи должно писать тем, у кого отсутствуют оба флага (generic и root, в данном случае)
Сообщения автоматически склеены:

Игнорить все флаги не вариант у меня флаг "а" випам выдается.
В SM же есть 4 или 5 флагов для випов: ADMFLAG_CUSTOM*.
Почему именно generic, а не их выдаёшь?
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@oleg_nelasy, смени != в первом примере на ==, чтобы писало игроку без админки
Сообщения автоматически склеены:

во втором примере попробуй админские флаги дополнительно в скобки заключить (не помню у чего приоритет выше: у | или у &)
чтобы вышло так: & (флаг1 | флаг2)
во втором варианте у крузи должно писать тем, у кого отсутствуют оба флага (generic и root, в данном случае)
Сообщения автоматически склеены:


В SM же есть 4 или 5 флагов для випов: ADMFLAG_CUSTOM*.
Почему именно generic, а не их выдаёшь?
Спасибо вариант (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0 отработал как надо.

Извините что задаю глупый вопрос. && || знаю. А вот с & и | сталкиваюсь в первый раз. Можно объяснить пожалуйста?

Если я правильно понял то я могу использовать и такой вариант? (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC|флаг а| флаг h|и т. д.)) == 0
 

Madness aka null138

Участник
Сообщения
713
Реакции
739
тут должно возвращать true, если есть админка (любой флаг, даже кастомный)
я это знаю, просто зашел прочитал тему а там автор пишет про исключение админов, но в проверке кажется опечатка у крузи в данном случае. это я и уточнял на всякий случай.
Сообщения автоматически склеены:

Спасибо вариант (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC)) == 0 отработал как надо.

Извините что задаю глупый вопрос. && || знаю. А вот с & и | сталкиваюсь в первый раз. Можно объяснить пожалуйста?

Если я правильно понял то я могу использовать и такой вариант? (GetUserFlagBits(iClient) & (ADMFLAG_ROOT|ADMFLAG_GENERIC|флаг а| флаг h|и т. д.)) == 0
У рут флага и так есть все остальные флаги.

По битовая работа. Лучше всего тебе прочитать документацию по языку c++. Термин bitwise. Там и примеры должны быть.
А | тут играет роли + но по битам. То есть 0x100 | 0x1000 | 0x2000 будет на выходе 0x3100.
Обычный + не подойдет для этого.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@oleg_nelasy, это булева бинарная логика:
& возвращает совпадающие биты (1101 & 0100 вернёт 0100), т.е. это оператор И
| вернёт биты, которые хотя бы у одного из чисел равны 1 (0101 | 1000 вернёт 1101), т.е. это оператор ИЛИ

Да, можешь. Там можно прописать все флаги (их 21 шт. емнип, даже есть дефайн для их количества).

@Madness aka null138, у рута только один флаг, но он даёт доступ ко всем действиям. Загляни в инклюд admin.inc и глянь что там для него прописано. Если (1<<х), то это всего один бит.
Сообщения автоматически склеены:

admin.inc:
#define AdminFlags_TOTAL   21       /**< Total number of admin flags */

/**
 * @section Bitwise values definitions for admin flags.
 */
#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 */
 
Последнее редактирование:
Сверху Снизу