Перейти к содержимому


Фотография

[Сборка карт] Запрет входа со старой версии


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 05 Октябрь 2019 - 18:01

Здравствуйте!
 
Можно ли и куда воткнуть номер версии в vpk (или bsp), чтобы выполнялась сверка и игрока выбрасывало еще до стадии кеширования объектов карты (string table)?
(иначе говоря, до момента появления ошибки "String table differs from the server")
 
Я пытаюсь сделать "патчи" для доп. карт Left 4 dead (хотя м.б. актуально и для L4D2/CS), где автора забыли про создание таблиц кеширования (файл stringtable_dictionary.dct).
 
Признаки проблемы: https://forums.allie...386&postcount=3
Кратко: серв. крашится при попытке игроков подключиться посреди карты (при этом, при переходе с карты на карту всё нормально).
 
После локальной пересборки bsp-шек через команды stringtabledictionary + buildcubemaps и залития на серв и клиент проблема с крашем устраняется,
но появляется новая - при попытке зайти посреди карты клиентом, у которого установлена старая версия карты, у всех клиентов происходит вылет на рабочий стол (а серв продолжает работу).
 
Как временная мера, пока что ставлю пароль на серв.
 
P.S. Полная перекомпиляция не допустима (в виду отсутствия исходников). Максимум, правка текст. файлов в VPK, и ресурсов bsp через pakrat.

Сообщение отредактировал dragokas: 06 Октябрь 2019 - 15:36


#2 BHaType

BHaType

    Пользователь

  • Пользователь
  • PipPipPip
  • 358 сообщений

Отправлено 06 Октябрь 2019 - 7:08

А что если её вручную создать?

signed int __cdecl CNetworkStringTableDictionaryManager::WriteDictionaryToBSP(CNetworkStringTableDictionaryManager *this, const char *a2, CUtlBuffer *a3, bool a4)


#3 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 06 Октябрь 2019 - 14:33

Тогда уж проще наоборот удалять (WriteBaselines): https://forums.allie...977&postcount=9

 

Создавать то может и можно, только вопрос что. Под каждую карту нужно иметь подготовленный список строк для прекеша, но у нас его нет, пока вручную не введешь команду stringtabledictionary и движок запихнет файл stringtable_dictionary.dct в bsp перепаковав его. Может и можно получить список прекеша иначе, но я не в курсе.

 

PS. По хорошему, можно попробовать просто прочитать все строковые таблицы. Если другие игроки не крешатся при переходе между картами, то по идее внутри все необходимое уже должно быть, странно только как такое вообще может быть возможно - если списка прекеша нет, как все остальные игроки не вылетают. Чёт мне кажется этот список просто мигрирует с одной карты на другую, но на новой карте список объектов все равно больше/меньше (читай, другой), и для входа нового игрока со старым списком это может оказаться недостаточным.
 

Сейчас с ребятами начали эстафету - проходим вообще все-все какие есть доп. карты с gamemaps, так почти все-все карты, что мне попадаются под руку - всегда имеют этот баг хотя бы на одном из уровней.


Сообщение отредактировал dragokas: 06 Октябрь 2019 - 14:38


#4 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 06 Октябрь 2019 - 14:59

 

Здравствуйте!
 
Можно ли и куда воткнуть номер версии в vpk (или bsp), чтобы выполнялась сверка и игрока выбрасывало еще до стадии кеширования объектов карты (string table)?
(иначе говоря, до момента появления ошибки "String table differs from the server")
 
Я пытаюсь сделать "патчи" для доп. карт Left 4 dead (хотя м.б. актуально и для L4D2/CS), где автора забыли про создание таблиц кеширования (файл stringtable_dictionary.dct).
 
Признаки проблемы: https://forums.allie...386&postcount=3
Кратко: серв. крашится при попытке игроков подключиться посреди карты (при этом, при переходе с карты на карту всё нормально).
 
После локальной пересборки bsp-шек через команды stringtabledictionary + buildcubemaps и залития на серв и клиент проблема с крашем устраняется,
но появляется новая - при попытке зайти посреди карты клиентом, у которого установлена старая версия карты, у всех клиентов на сервере происходит краш (а серв продолжает работу).
 
Как временная мера, пока что ставлю пароль на серв.
 
P.S. Полная перекомпиляция не допустима (в виду отсутствия исходников). Максимум, правка текст. файлов в VPK, и ресурсов bsp через pakrat.

 

Написал бы "вылет на раб. стол", а не краш. Если бы происходил краш, сервер бы перезапускался, а не продолжал работать.


Сейчас с ребятами начали эстафету - проходим вообще все-все какие есть доп. карты с gamemaps, так почти все-все карты, что мне попадаются под руку - всегда имеют этот баг хотя бы на одном из уровней.

Вероятно, проблема в сервере, а не в картах в таком случае.

Может, проще переустановить сервер и закинуть все плагины/конфиги обратно, чем компилировать заново стандартные кампании игры.


Сообщение отредактировал BloodyBlade: 06 Октябрь 2019 - 15:02


#5 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 06 Октябрь 2019 - 15:36

Написал бы "вылет на раб. стол", а не краш. Если бы происходил краш, сервер бы перезапускался, а не продолжал работать.


Вероятно, проблема в сервере, а не в картах в таком случае.

Может, проще переустановить сервер и закинуть все плагины/конфиги обратно, чем компилировать заново стандартные кампании игры.

спасибо, поправил.

 

 

Написал бы "вылет на раб. стол", а не краш. Если бы происходил краш, сервер бы перезапускался, а не продолжал работать.


Вероятно, проблема в сервере, а не в картах в таком случае.

Может, проще переустановить сервер и закинуть все плагины/конфиги обратно, чем компилировать заново стандартные кампании игры.

 

нет, ошибка видна в консоли даже при запуске локальной игры,

да и в этом не так сложно убедится - просто открой с помощью pakrat плохой bsp - и там в ресурсах будет отсутствовать файл stringtable_dictionary.dct

 

Вот тебе для примера список из последних карт с такими ошибками, что я тестировал и исправлял:

Brain 4 Dead

Derailed

Bloodact

Last Night

Last Train Home

Dead Zone 327

5 Five to Life

 

(не все уровни этих кампаний имеют проблему, только некоторые из bsp, и не все из них имеют полностью отсутствующий stringtable_dictionary.dct, у некоторых он просто неполный)

 

[spoiler="Примеры ошибок"]
#######################################Map l4d_lastnight06_ravenrock missing stringtable dictionary, don't ship this way!!!#######################################
 
###########################################################################################################################Can't recreate dictionary for maps/l4d_lastnight07_mineshaft.bsp, file must be writable (checked out of perforce)!!!###########################################################################################################################
 
либо некритичная(?)
 
String Table dictionary for Scenes should be rebuilt, only found 4403 of 4986 strings in dictionary
[/spoiler]

Сообщение отредактировал dragokas: 06 Октябрь 2019 - 15:43


#6 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 06 Октябрь 2019 - 15:38

нет, ошибка видна в консоли даже при запуске локальной игры.

Ошибка то понятно, но ведь на локалке вылетов нет, так?



#7 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 06 Октябрь 2019 - 15:59

Прости, BloodyBlade, но я не понимаю к чему ты клонишь.

 

Вылет проявляется только когда игрок заходит, если карта уже загружена и кто-то уже есть на сервере.

Локалка здесь не при чем. При переходе нескольких игроков с одной карты на другую (при round_win) все нормально.



#8 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 08 Октябрь 2019 - 14:41

Прости, BloodyBlade, но я не понимаю к чему ты клонишь.

 

Вылет проявляется только когда игрок заходит, если карта уже загружена и кто-то уже есть на сервере.

Локалка здесь не при чем. При переходе нескольких игроков с одной карты на другую (при round_win) все нормально.

String Table dictionary for Scenes should be rebuilt, only found 4403 of 4986 strings in dictionary - такая ошибка у меня постоянно появляется, не знал что это из-за карт, хотя она появляется даже на стандартных компаниях (сервер l4d2) при этом вылетов из-за этого еще вроде небыло (с учетом что вылетает возможно из-за плагинов с говнокодом и то редкие случаи раз в 2-5 дней)

из решения я просто через расширение скрыл эти ошибки в консоли и тестирую сервер дальше, думал это типичная служебная инфа или не критическая ошибка, хз..



#9 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 08 Октябрь 2019 - 16:45

Потому что это не критичная ошибка.

Хз, почему на стандартных картах это появляется. Могу только предполагать, что Valve что-то поудаляли из файлов игры, а карты не были пересобраны, чтобы соответствовать этим изменениям,

но пересборка карты через команду stringtabledictionary убирает эти ошибки. Естественно, новая карта должна быть у всех, иначе клиент не сможет подключиться.

 

P.S. Чувствую тема ушла в оффтоп.

Название темы одно, а мне советуют и спрашивают совсем о другом. Печаль.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных