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

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,032
Реакции
828
Помог
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
 
Последнее редактирование:
Сообщения
212
Реакции
334
Помог
3 раз(а)
Javekson, сработает, только выражение в скобки взять надо то что в макросе. Использование макросов эквивалентно копипасту кода из макроса там где ты его используешь. Поэтому за синтаксис можно не переживать
 
Сообщения
1,304
Реакции
2,303
Помог
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,032
Реакции
828
Помог
10 раз(а)
Хотя такая реализация наверное не правильная, но попробуем.

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

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

Или лучше вообще OPM__PENALTY вынести в отдельную настройку? С возможностью вкл/выкл, ибо тогда проблем не будет, как я понимаю, так-как ONLINE_PLAYERS_MODE пустым не сможет быть, будет ошибка в принципе.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bits && (bits & OPM__PENALTY)
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
fl0wer, а оператор отрицания (не) есть в битах?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Сообщения
1,032
Реакции
828
Помог
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?
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
Просто return HC_SUPERCEDE; попробуй
 
Сообщения
2,143
Реакции
1,225
Помог
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,032
Реакции
828
Помог
10 раз(а)
Minni, да, именно... Жоска, я снова туплю, вроде ошибка должна была выскакивать когда путаешь ATYPE_BOOL и ATYPE_INTEGER
5 Окт 2020
Minni, вру, ошибка была... я просто слепошарый
 
  • Lol
Реакции: Ayk
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Можно ли сменить ник минуя хук RG_CBasePlayer_SetClientUserInfoName ?
 
Статус
В этой теме нельзя размещать новые ответы.

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

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