Рейтинг темы:
  • Голосов: 0 - Средняя оценка: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Лимиты, ошибки, баги CoD2 Engine
#1
I.I КЛИЕНТСКИЕ ОШИБКИ
возникающие на стороне клиента, но способствуют этому - модификации сервера и, при этом сервер продолжает свою работу
P.s: Некоторые ошибки могут быть параллельны, вот, например: Iwd Sum name... там аж 3 ответвления...
  • 1. Gamestate - Это общий "вес" информации в байтах, отсылаемой от сервера к клиенту один раз при подключении. При этом при первом подключении, gamestate увеличивается на 1k. При смене карты, не выходя с сервера, на 1k снижается. Всё это единожды! Лимит в версиях 1.0;1.2 - 16384(16k), 1.3: 128k(сколько именно не тестил). P.S: 16384 уже вызовет ошибку.
    1.1. Ошибки:
    CL_Parsegamestate: bad command byte - не возможно подключиться повторно
    1.2. Что влияет на приближение к лимиту:
    а)скриптовая нагрузка:
    при каждом обращении к новому скрипту увеличивает байты для следующего подключающегося к серверу - в течение карты.
    А так же:
    level._effect["что-то"] дает +38байт, если где-то есть ф-я с её участием!
    любой прекеш зависит от длины, может доходить и до +50байт, 1символ = + 1.5 байта
    1 PrecacheString = +30 байт
    1 PrecacheModel = +26 байт
    1 PrecacheShader = +15 байт
    1 precacheHeadIcon("материал");
    1 precacheStatusIcon("материал");
    тоже +15 байт
    1 PrecacheItem(оружия) = +30 байт
    в среднем 1 прекеш съедает 30байт геймстаты
    б)карта:
    её размеры и наполненность

2. Лимит оружия(PrecacheItem).
2.1. Ошибки:
пропадает вид оружия в первом лице, либо переливается(то появляясь, то исчезаю из виду) при привышении лимита 64, на сколько превысили - столько и будет пропадать оружек в 1 лице(случайное). Лимит в версии 1.0 - 64 оружия, на 1.3 - 128 оружия.
2.2. Что влияет на приближение к лимиту:
PrecacheItem оружия.
2.3. Для чего он делается(PrecacheItem)?
чтобы видны были gunModel и worldModel играющим и наблюдающим за ним.
  • 3. Iwd Sum/name Mismatch - ошибка возникает , потому что info_string имеет лимит в 1024(1025 и выше вызовет ошибку) знака , и ошибка получается из-за того что клиент не может (или не успевает) выполнить основных операций, необходимых для проверки сервером идентичности(легальности) файлов клиента.
    3.1. В рконе:
    • Info string length exceeded(Превышение длины информационной строки). При смене карты, копируем Info string, и вставляем в онлайн сервис подсчета символов(либо же вводим каждую из ниже команд и складываем).
    • System info settings(/systeminfo) у меня составляет 136 знаков:
      \bg_fallDamageMaxHeight\480\bg_fallDamageMinHeight\256\fs_game\
      russia_test\g_synchronousClients\0\sv_cheats\0\sv_disableClientConsole\0
    • sv_iwdNames(включая карты): 211 символов.
    • sv_iwds - Это внутриигровая проверка знаков/кодов. Она используется, чтобы удостоверится, что на сервере используется одинаковая с клиентом версия IWD:
      354 символов.
    • sv_referencedIwdNames - Это список всех активно загружаемых сервером IWD имён(сюда не входят все карты, а только одна - которая сейчас на сервере):
      156 символов.
    • sv_referencedIwds - Это контрольная сумма всех загружаемых IWD файлов. Это косяк IW, так как это, по существу, повторения номеров в sv_iwds. Но я предполагаю, что это сделано для того, чтобы проще осуществлялось соответствие имён файлов с их контрольными суммами и они вероятно не ожидали проблему длины info_string'a:
      167 символов.
    • /serverinfo(Server info settings) - не влияет на лимит info_string. В лимит входят пробелы. В лимит входят переменные(например: sv_referencedIwds и т.д).
  • 3.2. Чтобы не появлялась данная ошибка:
    в папке main должны лежать только моды, а карты в Library.
    Итого 1024.
    3.3. Арифметика(подсчет и пошаговое описание).
    Учитываем:
    Количество повторений у sv_iwdNames и sv_iwds совпадает. На каждый новый файл лимит увеличивается в sv_iwdNames на длину имени файла, а в sv_iwds на 9-10 символов и в sv_referencedIwds на 9-10 символов. В sv_referencedIwdNames добавляется к лимиту длина имени карты, которая в данный момент на сервере стоит.
    Итого карта с названием в 1 символ, вызовет нагрузку и приближая нас к лимиту на 1+9+9+1= как минимум +20 символов.
    Добавляю каждую новую карту, можно смело прибавлять к длине имени карты 18-1= 17 символов - это и будет добавочной нагрузкой.
    Так убрав 1 маппак длиной имени в 14 символов - info_string освободилась на 1024-1008= 16 символов(Так подтверждается описанное выше предположение).
    Любые другие моды и карты с других серверов в клиентской папке main, не влияют на данный лимит!
    3.4. Ошибки
    P.S: Превысив 1024 и при смене карты, подсчитав Info string из Rcon, значение должно быть ниже 1024(1020 например).
    3.5. Решение
    Не допускайте Info String больше 1020 - это может вызвать CL_ParseServerMessage: illegible server message и файл может не начать скачиваться с сервера - будет висеть 0 байт из 0 байт скопировано. А если есть у карты загрузочный экран - то вечная её загрузка.
    А так же: не держите файлы в папке main, перенаправляйте в другую папку(Туда, где у вас fs_game). А карты в Library(чтоб качалась та, - которая на данный момент идет в игре).

4. Ошибка(диалоговое окно WIN_ERROR):
Can't create dvar 'keyvalue': 1280 dvars already existself

setclientcvar(key, value);
Это у нас двар, и лимит на двары: 1280 шт. При условии что клиент обратится к 1280 кварам.
  • 5. CL_GetServerCommand: Надежная команда вышла из строя
    Ошибка появляется когда выполняется много действий за короткий промежуток времени.

6. CL_ParseServerMessage: illegible server message
Есть два варианта:
a)При подключении к серверу нескольких игроков с одной локальной сети(один и тот же айпи). Последующие подключившиеся после первого, могут получить эту ошибку через некоторое время - в режиме спеков(зрителей).
b)Info String сервера - близкое к 1020 символам.

I.II КЛИЕНТСКИЕ ОШИБКИ
7. Обнаружен клиент, не прошедший проверку подлинности - неверные IWD-файлы! путь - Идет сравнение всех файлов на сервере и у клиента. Если какого-то файла нет в модах или картах на сервере, к которому подключились, и которые где-то прекешатся(откуда-то идет обращение к несуществующему файлу), то наличие его у клиента в любом другом скачанном файле с других серверов - приведет к конфликту.
7.1. Для тех, кто держит сервер: добавить этот файл в свой мод или карту.
7.2. Для клиентов: удалить этот файл у себя, на который было указано в ошибке, и скачать новый с сервера, на котором хотите играть.
7.3. Причины: На тот сервер, на который не пускает у того и косяк - у них конфликтит их мод с другими модами клиентов(которые были скачаны ими с других серверов).
Цитата:"Причин конфликта может быть много:
cкорее всего в моде стоит на загрузка что то лишнее;
Что то есть в одном моде чего нет в другом;
Надо понять что именно не хватает в моде. И добавить это! Либо удалить.."
А вот карты могут конфликтить даже при условии абсолютного сходства(например карта в Library с картой в main): при наличии одинаковых maps\mp\имя_карты.csv и даже если .csv присутствует только в одном из файлов(конфликт при любом исходе=(, при условии что название .csv совпадает с названием карты на сервере.).
7.4. Решения проблемы: переименовать все файлы карты(для тех, кто держит сервер), для клиентов - удалить файл, на который было указано в диалоговом окне(при disconnect'е).
Держать карты с loadscreen(загрузочным экраном, файл .csv) в Library нельзя - при смене карты будет конфликт(скачанного файла с файлом на сервере) придется перезаходить.
Сначала удаляем по одному своему моду на хостинге рестартим мапу и смотрим исчез ли конфликт, как исчезнет - запоминаем последний удаленный файл, он конфликтный. Дальше в этом файле удаляем по одной папке, аналогично. Если дело не в скриптах. Можно и с чужого(но xmodel связана с xmodelsurf, xmodelparts, materials, images). В первом случае вы выйдете на файл, во втором на причину.
7.5. Примеры совершаемых ошибок:
У тех, кто держит сервер:
precacheItem("fg42_mp"); есть в ваших скриптах в weapons.gsc
НО! его(fg42_mp) нет в вашем моде в папке weapons/mp
НО! есть в любом чужом моде клиента.
Поэтому не создавайте пути к объектам, которых нет.

8. Missing FX - неправильная загрузка эффекта из мода. Нужно сверить пути в моде и загрузку эффекта в скрипте, а также его работоспособность в CoD2_EffectsEd.exe

II. ОШИБКИ НА СТОРОНЕ СЕРВЕРА(прекращают работу сервера).
1. G_Spawn: no free entities
1.1. Лимит на спавн моделей 1024 шт. (Ркон команда: g_listEntity - там 1023 слота, если слот не занят выводится null)
1.2. Лимит на спавн триггеров 128 шт. В этот лимит входят любые classname.
3. Sys_Error: recursive error after: Can't create dvar 'xd1002': 1280 dvars already exist
Лимит на setcvar 1280.
Схожа с пунктом I - 4.
4. script runtime error
exceeded maximum number of script variables

Лимит на количество выполнения скриптов(функции, переменные и т.д. - к которым обращаются игроки) 63k(~63100)
прибавляется к entity не в count, а в var usages (/scriptUsage).
около +100var за каждого игрока. + К скриптам будет обращаться больше игроков, и будет происходить приближение к лимиту.
5. Attempted to overrun string in call to va().
функция va() предназначена для быстрого построения string сообщений с использованием удалённого буфера. Как только отправленное сообщение превышает норму, происходит вызов процедуры Com_Error и сервер немедленно падает. Достаточно запрос послать с длинным хэшэвым сообщением и сервер удалённо накроется.
Лимит 1024байт для одной команды(1 символ несет нагрузку в 1 байт).
Лечится вшиванием функции в cod2_lnxded.
6. ERROR: Netchan_Transmit: length = 16450
Отправлен пакет от клиента к серверу размером свыше 1024x16 = 16384 байта.
При snaps 1. Snaps - клиентская переменная, устанавливающая количество snaps (сокр. от Snapshots), отвечающих, своего рода, за обновление "мира", то есть всего окружающего. Лечится вшиванием функции в libcod(защитит от snaps 1).
Если на сервере есть голосование /callvote map aaa... вызовет прерывание связи(краш сервера).

III. ЛИМИТЫ, ПРИ КОТОРЫХ НЕКОРРЕКТНО ВЫПОЛНЕНИЕ.
1. iprintln и iprintlnbold - длиной в 256 символов(при 256 уже некорректно отобразится).

IV. IW(master-server)
1. KEY_IS_GOOD - Ожидание авторизации ключа
Причина: мастер сервер не отвечает
2. 256 менюшек ItemDef в одном MenuDef - при привышении лимита - не корректное отображение меню в игре.

V. ОШИБКИ НА СТОРОНЕ СЕРВЕРА(останавливают работоспособность на время у всех игроков).
1. script runtime error: potential infinite loop in script - killing thread.
@ число

Возникает при не правильно составленной функции.
Зависает сервер на пару секунд. Функция завершается принудительно.
-------------------------------------------------------------------
По мере новых тестов, будут добавлять новые ошибки и их описание.


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)