Runtime API Audit - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Runtime API — состояние сверки
Реестр извлечён из собранного runtime. Поведение сопоставляется с клиентским bridge и первичными справочниками. Загрузка страницы источника сама по себе не считается проверкой реализации.
Текущая структура каталога
В текущем реестре 811 имён / 1305 перегрузок: 743 команды UO и 68 встроенных функций BASIC. Они распределены по 36 темам и отдельному справочнику языка. Реорганизация навигации не заменяет семантическую сверку, тестирование игры и завершение переводов.
Ранее сохранённый отчёт
Следующая таблица относится к предыдущему проходу проверки. Это исторические результаты, а не пересчитанные показатели текущего каталога.
| Проверка | Результат |
|---|---|
| Имена вызываемых команд | 802 |
| Типизированные регистрации | 1292 |
| Примеры, проверенные загрузчиком | 9841 |
| Прямые вызовы с проверенным именем и числом аргументов | 35820 |
| Динамические вызовы методов, требующие отдельной проверки | 878 |
| Ошибки синтаксиса и прямых вызовов | 0 |
| Выполненные проверки чистых учебных вычислений | 286 |
| Содержательные разделы возврата | 365 |
| Разделы отсутствия результата Unit | 276 |
| Оставшиеся содержательные разделы возврата | 161 |
| Имена с записью интернет-сверки | 233 |
| Ожидающие интернет-сверки | 569 |
| Команды с проверенным форматом комментированных примеров | 412 |
| Оставшиеся подробные комментированные примеры | 390 |
| Команды с отдельным разбором внутренних функций | 129 |
| Оставшиеся внутренние разборы | 673 |
Количество примеров включает повторяющийся код в переводах. Проверка загрузки и прямых вызовов не исполняет действия на сервере, методы динамических файловых объектов или callback, выбранные строкой. Все необходимые пользовательские функции должны быть приведены в копируемом примере. Подробный разбор внутренних алгоритмов клиента и перевод полного набора команд ещё продолжаются.
Для логических результатов 1 и TRUE равны, 0 и FALSE равны. Это правило не превращает количество, ID, индекс, sequence или многозначный статус в логический успех. Например, FindCount(ID) возвращает количество единиц в стопке, а Step и StepQ имеют собственные статусы. Правила использования.
Обновлённые IsNpc/IsMovable и проверки уничтоженных объектов проверены тестами клиента. IsNpc включает собственного персонажа и других mobile; IsMovable описывает локальную возможность поднять предмет, а не гарантированное разрешение сервера. Paralyzed проверяет флаг паралича mobile; для этой команды используется одно написание.
В карточках NewMoveXY, MoveXY и MoveXYZ разобрана цепочка внутреннего поиска и движения: функции, входные значения, возвращаемый результат, очереди, стоимость и пересчёт. NewMoveXY содержит полный учебный скрипт для формул допуска/эвристики/цены шага. Эти чистые вычисления проверены исполнением; они не заменяют тестирование карты. Callback движения получает три Integer X/Y/Z, поэтому координаты можно сразу использовать в арифметике.
Основные вызовы движения теперь выполняют поиск и пересчёт короткими порциями между обновлениями клиента: максимум 32 раскрытия узла и мягкий бюджет около 1 мс на вызов. Передвижение начинается после построения полного пути. Тайм-аут учитывает последующие порции, а stopOnStuck не считает активное планирование застреванием. Проверены независимое сравнение с Dijkstra, отмена, коррекция позиции, отказ шага и появившееся препятствие. Один сложный участок геометрии может превысить мягкий бюджет; это не обещание фиксированного времени каждого кадра. Совместимый вызов из нативного PluginHost сохраняет синхронный режим.
Запросы GetLandTilesArray/Ex и GetStaticTilesArray/Ex проверяют диапазон координат и площадь без переполнения. Чтение выполняется порциями до 32 клеток с мягким бюджетом около 1 мс и проверкой отмены; смена карты между порциями отбрасывает частичный результат. Проверки границ Map.GetChunk2 больше не позволяют слишком большому Y обратиться к соседнему столбцу карты. Карточки этих четырёх команд содержат все поля массива, шесть параметров, три полных примера и разбор внутренних этапов на десяти языках.
GetMapCell возвращает три поля graphic/Z/flags32, GetSurfaceZ — среднюю высоту земли. GetLayerCount считает записи неземельной геометрии: текущий клиент включает Static, Multi и Item. GetNextStepZ возвращает предполагаемую высоту шага; при отключении или другой карте — 0. Высота 0 может быть настоящим значением, поэтому её нельзя интерпретировать как логический отказ. Проходимость читается отдельно в IsWorldCellPassable.
Проверки состояния Dead/Alive/Hidden/Poisoned/Flying отвергают удалённые объекты. UO.Hidden принимает числовой ID так же, как строковый serial и остальные алиасы. В карточках состояния объяснено, где 1/0 соответствуют TRUE/FALSE; карточки HP/Mana/Stamina отдельно описывают числовые значения, неизвестные данные и возможную относительную шкалу чужого HP. Для этих семейств подготовлены полные вспомогательные функции и десять языков.
GetSkillValue/GetSkillCurrentValue/GetSkillCap различают базовые очки, эффективные очки и предел навыка. Десятые преобразуются непосредственно в Double: значение 95.1 правильно сравнивается с 95.1. Навык выбирается по имени из данных клиента или строгому индексу от 0; индекс за границей больше не выбирает последний навык. Режимы блокировок 0/1/2 являются кодами, не Boolean; действия возвращают Unit. Проверены пакеты изменения навыков и характеристик, алиасы, отсутствие персонажа и недопустимые номера. Карточки содержат все параметры, три полных примера, внутренние этапы и десять языков.
IsWorldCellPassable описана отдельно: семь входных параметров и массив [проходимость, Z], без изменения шестого аргумента. Только первый элемент равен логическому TRUE/FALSE. Проверки границ карты и высоты выполняются до случая одинаковых координат; недопустимая клетка больше не получает ложный успех. Карточка содержит три готовых примера, полную IsCellOpen и отдельные разборы семи внутренних функций на десяти языках.
LastStatus теперь отражает принятый пакет статуса, а не отправленный запрос. LastStatusX/Y сохраняют координаты на момент приёма. LastTargetX/Y сохраняют выбранную позицию объекта, земли или статики; перемещение и удаление объекта больше не подменяют эти значения. World.Clear сбрасывает записи, а поля сетевого target сохраняют прежний формат. Шесть карточек описывают Integer, serial 0 для координатных целей, отсутствие атомарности отдельных чтений и полные помощники на десяти языках.
Abs/Sgn/Fix/Sin/Cos/Tan/Atn/Sqr/Exp/Log сопоставлены с регистрациями BASIC и первичными контрактами System.Math. Описаны числовые типы, радианы, допустимые области, NaN/Infinity, преобразование строк и отличие числового результата от Boolean. Каждая карточка содержит три полных примера и вспомогательную функцию на десяти языках. Проверены 34 граничных случая runtime и 264 выполнения чистых математических помощников из root/переводов. Это не проверка игровых действий или сети.
Сверка всех перегрузок, переводы на десять языков, объяснение всех внутренних функций и игровые проверки ещё не закончены. Справочник пока не считается полностью проверенным.