[Pawn] Вопросы от Javekson

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Раз предупреждаете значит сделаю, как некоторые, одну тему на все мои глупенькие вопросы )

Первый вопрос касаемо работы #define, возможно ли работать с ним, как с битами?

C++:
enum ( <<= 1 ) { OPM__TOTAL, OPM__GAMING, OPM__LIVE, OPM__PENALTY }

#define ONLINE_PLAYERS_MODE OPM__TOTAL | OPM__GAMING | OPM__LIVE | OPM__PENALTY
Сработает ли такая реализация? И как затем сделать условие на проверку существования, скажем, бита OPM__TOTAL в #define ONLINE_PLAYERS_MODE
 
Последнее редактирование:
Сообщения
203
Реакции
324
Помог
3 раз(а)
Javekson, сработает, только выражение в скобки взять надо то что в макросе. Использование макросов эквивалентно копипасту кода из макроса там где ты его используешь. Поэтому за синтаксис можно не переживать
 
Сообщения
1,176
Реакции
2,144
Помог
57 раз(а)
~
23 Сен 2020
Javekson
Должно быть
Код:
enum ( <<= 1 ) { OPM__TOTAL = 1, OPM__GAMING, OPM__LIVE, OPM__PENALTY }
#define ONLINE_PLAYERS_MODE (OPM__TOTAL | OPM__GAMING | OPM__LIVE | OPM__PENALTY)
Код:
#if ONLINE_PLAYERS_MODE &  OPM__TOTAL 
    // some code
#endif
 
Последнее редактирование:
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Хотя такая реализация наверное не правильная, но попробуем.

#define ONLINE_PLAYERS_MODE ( OPM__TOTAL | OPM__GAMING | OPM__LIVE | OPM__PENALTY )

В данном случае OPM__PENALTY не должен существовать одиночно, должен быть как минимум в паре с одним из трех предыдущих режимов
Поэтому возникает вопрос, как это проверить, что если существует OPM__PENALTY и как минимум еще один любой бит, иначе допустим остановить плагин.

Или лучше вообще OPM__PENALTY вынести в отдельную настройку? С возможностью вкл/выкл, ибо тогда проблем не будет, как я понимаю, так-как ONLINE_PLAYERS_MODE пустым не сможет быть, будет ошибка в принципе.
 
Сообщения
1,667
Реакции
1,489
Помог
24 раз(а)
bits && (bits & OPM__PENALTY)
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
fl0wer, а оператор отрицания (не) есть в битах?
 
Сообщения
1,667
Реакции
1,489
Помог
24 раз(а)
Сообщения
1,176
Реакции
2,144
Помог
57 раз(а)
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Есть ли какой способ заблокировать смену имени на сервере без его замены на старый?

Попробовал, не сработало
Код:
public plugin_init( )
{
    RegisterHookChain( RG_CBasePlayer_SetClientUserInfoName, "hook_SetClientUserInfoName_Pre", .post = false );
}

public hook_SetClientUserInfoName_Pre( const id, iInfoBuffer, sNewName[] )
{
    SetHookChainReturn( ATYPE_INTEGER, false );
    
    return HC_SUPERCEDE;
}
Попробовал еще раз, сработало
Код:
public plugin_init( )
{
    RegisterHookChain( RG_CBasePlayer_SetClientUserInfoName, "hook_SetClientUserInfoName_Pre", .post = false );
}

public hook_SetClientUserInfoName_Pre( const id, iInfoBuffer, sNewName[] )
{
    new sOldName[ MAX_LENGTH__NAME ];
    get_entvar( id, var_netname, sOldName, charsmax( sOldName ) );
    
    SetHookChainArg( 3, ATYPE_STRING, sOldName );
    
    return HC_SUPERCEDE;
}
Но, можно ли заблокировать саму смену без изменение имени игроку на на OldName?
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
Просто return HC_SUPERCEDE; попробуй
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Есть ли какой способ заблокировать смену имени на сервере без его замены на старый?

Попробовал, не сработало
Код:
public plugin_init( )
{
    RegisterHookChain( RG_CBasePlayer_SetClientUserInfoName, "hook_SetClientUserInfoName_Pre", .post = false );
}

public hook_SetClientUserInfoName_Pre( const id, iInfoBuffer, sNewName[] )
{
    SetHookChainReturn( ATYPE_INTEGER, false );
  
    return HC_SUPERCEDE;
}
Разве там не ATYPE_BOOL?
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Minni, да, именно... Жоска, я снова туплю, вроде ошибка должна была выскакивать когда путаешь ATYPE_BOOL и ATYPE_INTEGER
5 Окт 2020
Minni, вру, ошибка была... я просто слепошарый
 
  • Lol
Реакции: Ayk
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Можно ли сменить ник минуя хук RG_CBasePlayer_SetClientUserInfoName ?
 
Статус
В этой теме нельзя размещать новые ответы.

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

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