Проблема с ReHLDS build > 788

Сообщения
253
Реакции
83
Ошибка
Игроки заходят в слот под никами предыдущих игроков
ОС
Linux
Amx Mod X
1.10.0.5467
Билд
3.13.0.823-dev
ReGamedll
5.26.0.668-dev
Версия Metamod
1.3.0.131
Список метамодулей
[ 1] SafeNameAndChat     RUN   -    SafeNameAndChat.so          v1.2 Beta 3        ini  ANY   ANY  
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.92d ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.7 ini Chlvl ANY
[ 5] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 6] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 7] Revoice RUN - revoice_plus_mm.so v2.1.0 ini ANY Never
[ 8] VoiceUtils RUN - voice_utils_amxx_i386.so v1.0.0 ini ANY ANY
[ 9] AMX Mod X RUN - amxmodx_mm_i386.so v1.10.0.5467 ini Start ANY
[10] HitBox Fix RUN - hitbox_fix_mm_i386.so v1.1.5 ini Start ANY
[11] Accuracy Fix (ACS) RUN - accuracyfix_mm.so v1.0.7b ini ANY ANY
[12] MySQL RUN - mysql_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[13] CSX RUN - csx_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[14] CStrike RUN - cstrike_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[15] ReAPI RUN - reapi_amxx_i386.so v5.24.0.300-dev pl9 ANY Never
[16] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl9 ANY Never
[17] Engine RUN - engine_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[18] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[19] FakeMeta RUN - fakemeta_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[20] Fun RUN - fun_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
[21] AuthEmu RUN - authemu_amxx_i386.so v5.2.12.525-dev+m pl9 ANY Never
[22] GeoIP RUN - geoip_amxx_i386.so v1.10.0.5467 pl9 ANY ANY
Список плагинов
[  1] 0   ACS Log System          2.0.5       ACADEMY-CS.RU                                      acs_log.amx  debug    
[ 2] 1 ACS Admin Commands 1.2.9 ACADEMY-CS.RU acs_admincm running
[ 3] 2 ACS Admin Menus 1.1.9 ACADEMY-CS.RU acs_plmenu. running
[ 4] 3 ACS Security 1.0.5 ACADEMY-CS.RU acs_securit running
[ 5] 4 ACS Mute 1.0.1.1 ACADEMY-CS.RU acs_mute.am debug
[ 6] 5 ACS Weapon Control Sys 1.2.0.2 DEV-CS.RU acs_wcs.amx debug
[ 7] 6 ACS Teams Balancer 1.1.6 ACADEMY-CS.RU acs_balance debug
[ 8] 7 AuthEmu API 1.0 Dev-MS Team authemu.amx running
[ 9] 8 GameCMS_API 5.6.3 zhorzh78 gamecms_api running
[ 10] 9 ReAimDetector API 0.2.2 ReHLDS Team reaimdetect running
После обновления с ReHLDS билда 788, начались проблемы с именами игроков:
1714078978715_41967945308828436.jpeg

Хронология, примерно, такая:

Код:
L 04/18/2024 - 17:39:32: [ACS_LOG] session: ( 3 ), check_trust: ALL-MS | BOSS < STEAM_1:0:1397272665 > = 58.103118, suspected = 0
L 04/18/2024 - 17:39:33: [ACS_LOG] session: (  3 ), check vpn: 84.54.70.190 [ STEAM_1:0:1397272665 ]
L 04/18/2024 - 17:40:46: [ACS_LOG] session: (  3 ), SetClientUserInfoName(), new_name = владик, punish_processed = 0, punish_flag = 0
L 04/18/2024 - 17:43:04: [ACS_LOG] session: (  3 ), DROPPED!!!, is_drop = 1, msg = Client sent 'drop'
L 04/18/2024 - 17:43:05: [ACS_LOG] session: ( 3 ), new player = владик [ 178.120.X.X:0 ] < STEAM_1:1:7200XXXXXX >
На полном сервере игрок желающий подключиться постоянно жмет кнопочку обновить и как только предыдущий игрок выходит с сервера, тут же подключается новый... НО, под ником предыдущего. Если перезайти (отключиться+подключиться) - то ник обновляется на установленный у нового игрока в настройках клиента. Если же будет просто смена карты - ник все равно останется прежнего игрока, не смотря на настройки клиента.

HLTV вчера у нас тоже зашла с ником игрока и никакие танцы с бубном до полного перезапуска сервера не помогли.

Это какой-то глюк сборки от Арены или баг в ReHLDS, возможно, связанный с ошибкой в SetClientUserInfoName()?
 
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование:
Сообщения
253
Реакции
83
Nordic Warrior, проблема в наличии 32 игроков... я с ботами не могу повторить подобного сценария.
 
Последнее редактирование:
Сообщения
3,384
Реакции
1,481
Помог
124 раз(а)
Refresh, уверен что дело в рехлдс? У меня была такая проблема, когда я давно ещё плохо разбирался, и написал некачественный плагин блокировки смены ников, и возникали ровно такие же ситуации, что иногда у игрока подхватывался ник другого.
Если есть такой функционал, то стоит его отключить.
 
Сообщения
253
Реакции
83
Nordic Warrior, это началось с обновления, если бы была проблема ДО - ее уже давно бы заметили. У меня есть код в обработчике SetClientUserInfoName() но он срабатывает только если пользователь меняет ник находясь на сервере (никаких строк отладки этого события в процессе коннекта я никогда не видел). При коннекте ничего что бы могло влиять на "имя пользователя" в любых вариациях отсутствует.

В client_connect() имя пользователя выдается от предыдущего игрока.

Была аналогичная проблема с HLTV имеющая на сервере абсолютный иммунитет, никакие процессы не могут быть запущены для игрока is_user_hltv(), поэтому я уверен, что это проблема на стороне сервера.

Даже если принять во внимание гипотетическую возможность блокировки события SetClientUserInfoName(), например, в процессе работы плагина заблокировалась смена ника предыдущим игроком:
Код:
SetHookChainReturn(ATYPE_BOOL, false);
return HC_BREAK;
Я не вижу причин, по которым бы сервер при заходе нового игрока не обновлял бы свои данные.
 
Последнее редактирование:
Сообщения
3,384
Реакции
1,481
Помог
124 раз(а)
Refresh, проверяй на практике. Отключай этот функционал, ставь официальные билды рехлдс, перебором ищи билд, с которого всё пошло не так, если это в рехлдс дело. Гадать сколько угодно можно. Я посмотрел последние коммиты рехлдс, вроде не увидел ничего связанного с name
 
Сообщения
253
Реакции
83
Nordic Warrior, Я смог устойчиво воспроизвести проблему:

  1. Игрок мертвый. Висит в спектраторах или в своей команде.
  2. Меняет имя: name ZZZTT2S. Имя не изменится сразу до следующего спавна. Я это корректирую, чтобы в TAB-е отображалось корректно:
    Код:
    set_entvar(id, var_netname, new_name)
  3. Игрока дропает с сервера или он уходит сам.
  4. В его слот коннектится новый игрок. Причем у него будет тот ник на который предыдущий игрок его изменил и не дождался спавна... В моем примере ZZZTT2S.
Попробую еще установить set_user_info(...) или при дисконнекте var_netname обнулять, но в алгоритме изменения имени игрока очевидный косяк... Если игрок отключится, дальнейшие задачи по нему выполнять бесмысленно. Я попробую поискать ошибку, у вас.

1714406630299.png

Upd: В дисконнекте set_entvar(id, var_netname, ""); решило проблему... Наверно, нужно сделать аналогично в ReHLDS.

Upd2: Корректно так:
Код:
public client_disconnected(id, bool:drop, message[], maxlen) {
    if (!is_nullent(id))
        set_entvar(id, var_netname, 0);
}
Если не проверять:
Код:
[ReAPI] set_entvar: invalid or uninitialized entity
 
Последнее редактирование:
Сообщения
59
Реакции
28
Помог
3 раз(а)
Аналогично встречал проблему если менять ник через var_netname, через set_user_info проблема исчезла
 
Сообщения
253
Реакции
83
Nordic Warrior, :scratch_one-s_head:а мне показалось, что если игрок отключился и новый игрок подключается к серверу, то сервер должен брать имя нового игрока, а не предыдущего... в 100 из 100 случаях. Но это не точно... Поскольку логику разрабов понять довольно сложно. Возможно, плагин одной командой сломал сервер.
Вторник в 02:19
CSBishop, через set_user_info не меняет сразу ник мертвому игроку или наблюдателю :sad:
 
Последнее редактирование:
Сообщения
526
Реакции
462
Предупреждения
16
Помог
9 раз(а)
Скорее всего это баг в регейме.

Имя не изменится сразу до следующего спавн
Он хранится в мемберах временно и восстанавливается при след. спавне.



Я вообще не вижу в коде сброс этих 2 мемберов при дисконнекте.
В обычных условиях возможно будет работать нормально. Но при
наличии 32 игроков
Возможен такой сценарий.
Вторник в 02:55
Скорее всего это баг в регейме.
Хотя может быть это более глубокий баг движка если оно возникнет только при 32 игроках.
 
Сообщения
253
Реакции
83
Сейчас еще попробую сбросить два мембера:
Код:
Public:
    bool m_bHasChangedName;   
    char m_szNewName[MAX_PLAYER_NAME_LENGTH];
 
Сообщения
526
Реакции
462
Предупреждения
16
Помог
9 раз(а)
Refresh, А баг стабильно воспроизводится?
 
Сообщения
253
Реакции
83
Vaqtincha, да, тут можно попробовать 93.85.88.50:27017. Пофиксил.
Сейчас еще попробую сбросить два мембера:
Код:
Public:
    bool m_bHasChangedName;
    char m_szNewName[MAX_PLAYER_NAME_LENGTH];
Это не работает, ни в CBasePlayer_SetClientUserInfoName ни в client_disconnected(). Пока рабочий вариант обнуление var_netname при дисконнекте.
Вторник в 03:27
Vaqtincha, Да. Количество игроков не имеет значения. Просто когда мало игроков, вероятность такой ситуации - входа в слот где предыдущий игрок "мертвым" изменил имя и вышел до респавна - значительно ниже.
 
Последнее редактирование:

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

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