FWGS / xash3d-fwgs

Xash3D FWGS engine
1.57k stars 237 forks source link

При создании сервера из меню игры sv_zmax не обновляется #1813

Closed Aynekko closed 1 month ago

Aynekko commented 2 months ago

Шаги для проверки бага: Открываю игру, на фоне карта-бэкграунд В консоли ввожу sv_zmax, показывает 3000, что верно для данной карты. Захожу в LAN, Create game, выбираю карту с обширным пространством. Заспавнился на карте, ввожу sv_zmax, вижу 3000, что НЕ соответствует. Должно быть 65000, согласно прописанному значению в энтити worldspawn.

Баг не проявляется, если запустить карту из меню через команду map.

Баг проявляется, если не создавать сервер через LAN меню, а просто ввести команду maxplayers 2 и потом map karta, значение sv_zmax все еще будет с предыдущей карты-бэкграунда.

a1batross commented 2 months ago

Движок sv_zmax из worldspawn не читает, но судя по XashXT, sv_zmax ставится из CWorld::Precache.

Aynekko commented 2 months ago

Действительно, закомментил код

if ( pev->speed > 0 )
        CVAR_SET_FLOAT( "sv_zmax", pev->speed );
    else
        CVAR_SET_FLOAT( "sv_zmax", 4096 );

Но в таком случае я вообще на любой карте вижу sv_zmax 4096. Непонятно, как в таком случае пользоваться max viewable distance, которая выставляется в хаммере.

Проверил этот трюк на ксаше, на папке valve, стим-халфа. Баг остается вроде как. Должно быть на карте 8000, а показывает 4096, при maxplayers 5. Если игрок 1, то все ок.

Aynekko commented 2 months ago

В оригинальной халфе этот код тоже есть, кстати: https://github.com/ValveSoftware/halflife/blob/e5815c34e2772a247a6843b67eab7c3395bdba66/dlls/world.cpp#L629

a1batross commented 2 months ago

А в голдсорсе он интересно тоже сломан?

Прекеш мира должен всегда исполняться...

Aynekko commented 2 months ago

А в голдсорсе он интересно тоже сломан?

Нет, проверил. Выставил sv_zmax 4096, потом maxplayers 10, потом карту где 8000 дальность. Заспавнился в режиме дезматча, sv_zmax 8000.

Aynekko commented 2 months ago

Выставил алерт в прекеше World. Прекеш выполняется. Судя по всему, установка sv_zmax просто-напросто игнорируется.

N7P0L3ON commented 2 months ago

@Aynekko I had the same problem with my mod Flatline Arena. The engine is sending the value of 4096. This was a problem for me since I have shader skybox... and in some situations 4096 is not sufficient... There is however quite easy fix for it... I mean it's a bit ugly, but it does the job...

dlls\cbase.cpp

under function void DispatchThink( edict_t *pent )

add this:

auto sv_zmax = CVAR_GET_POINTER("sv_zmax"); if (sv_zmax && sv_zmax->value == 4096.0f) { CVAR_SET_FLOAT("sv_zmax", 8192); }

Maybe there is a better place to add it, but it does the job. You can also set the value to more than 8192; for me double the value is the max I need anyway. Also maybe I need to set it up to check if the value is 4096 or lower, but I think the engine is set to that value... so...

Another tip... this function can be used to change other engine cvars... Just make sure not to replace the vanilla dlls under /valve/dlls with a modified one... I hear VAC does not work for Gold Source, but you never know :D For mods it's ok.

Aynekko commented 2 months ago

I will rather wait until it is fixed in the engine. But thank you for the info.

N7P0L3ON commented 2 months ago

I have not seen it reported in the HL SDK.. so I doubt it's on Valve's radar...

Aynekko commented 2 months ago

This issue is not present on hl25 update, that's the thing. So I need it fixed in Xash

a1batross commented 1 month ago

Пофиксил в 29fd5f9fbe02678348699d91bc8d38c3ba774183. Чтобы фикс заработал, нужно удалить listenserver.cfg не только в корневом каталоге мода, но и в его базовом каталоге.