Discussion Tla vanilla конвертация в актуальный формат sdk

Тема в разделе "Разработка", создана пользователем rifleman17, 28 авг 2018.

  1. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    IMG_20180828_124326.jpg

    Давно собирался заняться актуализацией контента ТЛА, но только сейчас дошли руки.
    Изменений слишком много, поэтому решил апгрейдить ТЛА в несколько шагов.
    В качестве основы взята работа Skycast'a и остальных, под SDK 605 ревизии: https://github.com/cvet/fonline_tla

    Начиная с 628 ревизии из движка исключена глобальная карта, чтобы ее не реализовывать, буду пробовать запустить сервер под SDK 627.

    Исправил все серверные и клиентские скрипты, настроил интерфейсы, прототипы криттеров, переделал эвенты под новую систему событий (https://xp-dev.com/sc/change/76003/625). Проверил скрипты (кроме мапперских) ASCompiler'ом, все компилируется норм. Но сервер не запускается, при старте сообщает о проблеме с прагмами:

    Найти причину ошибки не удается. Возможно, нужно поднимать версию до более поздних ревизий SDK?

    Обнаружил, что ошибка [Main][01:45:767] Error in pragma(s) during loading. возникает через раз. Каждый последующий запуск после изменения любого скрипта приводит к возникновению этой ошибки. Если запустить сервер еще раз, запуск происходит. (Правда, тут же падает с дампом)
    Последнее редактирование: 11 сен 2018
    Tab10id, Akkella, Arh-Wish и 2 другим нравится это.
  2. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    В общем, сервер удалось запустить, с дампами при запуске разобрался. Но сервер не видит маску проходимости tla_relief. Клиент не может прочитать тексты из *.msg файлов. Возможно, что-то не так с путями, но, с другой стороны, графика для интерфейса грузится норм.

    Сильно раздражает цикл: 1) изменил скрипт; 2)очистил кэш сервера; 3) запустил сервер, он упал с ошибками прагм; 4)запустил сервер повторно

    По всей видимости придётся поднимать используемую
    версию SDK.
  3. MEXAHOTABOP

    MEXAHOTABOP

    Регистрация:
    22 окт 2012
    я конечно могу путать тк фиг знает когда последний раз имел общение с сдк но разве компилятор из сдк не может компелировать скрипты в бинари что бы пропустить компиляцию сервером при запуске?
  4. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Даже если бы ASCompiler компилировал скрипты так, что серверу не пришлось бы это делать, это не решило бы всех проблем. Некоторые баги проявляются только при работе сервера.

    Например, случайный выбор одной из локаций осады нкр приводил к созданию локации несуществующего прототипа и вылету сервера.

    Сервер в любом случае нужно запускать и тут проявляется эта особенность с прагмами и кешем.
  5. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Обновил ТЛА до 627 ревизии sdk. К сожалению, версия не работоспособная. Сервер запускается, клиент тоже, маппер нет.
    Не работают анимации персонажей, зато шестиугольники могут ползать по карте!!! (см. скрин) Много чего нужно допиливать в интерфейсах (например нет выпадающего меню по клику на объект, не показываются тексты в основном игровом интерфейсе, и т.д). Нужно восстанавлиать прототипы криттеров тактикса и 3дэ, которые использовались в ТЛА,
    Глобальную карту проверить не удалось, поскольку нет возможности ввода команд и не вызываются диалоги с нпц.
    Основная проблема, конечно, с анимациями. Было подозрение, что не работают только анимации fallout, попробовал восстановить анимации тактикса, не помогло. Скорее всего проблема была исправлена в 631 ревизии

    Текущее состояние можно установить так:
    1. Склонировать форк репы с https://github.com/rifleman17/fonline_tla.git
    2. Обновить ресурсы ТЛА ..\TLA\Resources (графику, музыку, архивы dat-файлы), например, взять их отсюда https://xp-dev.com/svn/fonline_tla/TLA/Resources/ (Структура папок точно такая же). На github нет этих файлов.
    3. Установить 627 версию SDK в папку FonlineSDK (https://xp-dev.com/svn/fonline_sdk/)

    Сервер запустится со второго раза.
    Если после изменения скриптов сервер все еще не запустился, нужно очистить содержимое кеша
    Следующая ревизия для проверки - 640. Из серьезного: придется как-то реализовывать глобальную карту в скриптах.

    627 jpg initial.png

    P.S: отдельная большое спасибо Tabl01d'у за помощь с настройкой git ^)
    Последнее редактирование: 11 сен 2018
    Krizalis нравится это.
  6. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Проверил 631 ревизию sdk

    Все, что касается работы с глобальной картой пока заменил заглушкой GlobalmapGroupExtended.fos
    Версия не рабочая, происходит спам параметризованных эвентов(..SubscribeToCritter, etc), сервер не запускается.
    Предположительно, было исправлено в 648 ревизии. Но вообще, есть большая вероятность, что в скриптах проблемы с DeferredCalls. Время во всех скриптах осталось в секундах, без учета перехода на расчеты в ms. Нужно еще будет каждый скрипт проверять.

    Маппер запускается, не грузит и не создает новые карты, но просмотреть объекты частично можно, видно, что анимации в порядке, криттеры норм. отображаются.
    Между делом проверил маппер 642 ревизии. На первый взгляд, там все работает, карты создаются, открываются, анимации проигрываются.
    Следующий этап - 645 ревизия.

    Самая трудоемкая ревизия для переноса - 646. Там нужно инклуды и импорты во всех скриптах.

    Вложения:

    Последнее редактирование: 13 сен 2018
    Krizalis нравится это.
  7. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Поднял версию контента до 645 ревизии.
    Сервер не запускается без шаманства - в момент генерации мира и загрузки локаций происходит спам отложенных событий и сервер падает с дампом до запуска

    Убрал загрузку всех локаций, кроме Дэна пока.
    Чтобы запустить сервер, пришлось также изменить объявление двух эвентов в SDK (Core.fosh): EventCritterMoveItem и EventCritterCheckMoveItem. Убрал ключевое слово deffered.
    После этого сервер перестал давиться событиями и запустился.

    Продолжается раздражающая проблема с прагмами. Сервер приходится запускать дважды.
    Маппер работает нормально, анимации fallout в маппере загружаются корректно, карты, объекты, нпц, на первый взгляд все на местах.

    В клиенте не работают анимации. В обработчик события EventCritterAnimation приходит некорректный hash модели
    , и движок ее не может опознать.
    Возможно, проблема в протиотипах криттеров. Кто-нибудь может предположить, куда копать?

    Прописал в обработчике события присваивание анимации робота из тактикса, она норм. отображается, персонаж поворачивается, ходит, даже бегает.
    Только не может дверь открыть (хахах!) потому что работу с дверями нужно переписывать.

    В общем, пока не буду дальше поднимать версию, если только прагмы заколебут вконец. Попробую разобраться, что не так с анимациями, настроить работу с контейнерами, интерфейсом и глобальной картой.

    645 rhumanoid.jpg
    Medvedev и Krizalis нравится это.
  8. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Удалось выяснить, в чем состоит проблема неработающих анимаций на клиенте.

    Оказалось, что hash, в который записан тип криттера, не известен клиенту. Клиент не может преобразовать число в хеш (unknown hash error). Но, если в момент запуска клиента, перед первым обращением к анимациям, вручную пройтись по всем хешам, проблема устраняется.

    Код:
    string[] animsList = { "harobe", "hfcmbt"...};
    hash hashA;
    for(int i = 0, l = animsList.length(); i < l; i++)
    hashA = GetStrHash("art/critters/" + animsList[i]);
    
    Таким образом, из серьезных проблем остается необходимость перезапуска сервера из-за ошибки с прагмами.

    Думаю, что после перехода на 646+ ревизию она должна быть устранена.

    На 645 ревизию SDK состояние такое:

    - Не реализован глобал.
    - Анимации со скрипом, но работают.
    - Нельзя взаимодействовать с окружением (скилы, диалоги, контейнеры и т.д), в лог-окно, чат не пишутся сообщения или любой текст.
    - Не работают консольные команды (сервер валится с дампом при вызове команд)
    - Много проблем с интерфейсами, кое-где остались устаревшие вызовы CustomCall, есть другие ошибки, приводящие к вылету клиента.
    - Сервер запускается, если отключить отложенные (deferred) события в SDK core.fosh
    - Маппер нормально читает и загружает карты. Списки объектов не настроены.
    - Наверняка много, что еще не пашет, нужно проверять.

    645 amimated.png

    https://github.com/rifleman17/fonline_tla/releases/tag/Fonline_TLA_645

    P.S: Огромное спасибо Крекеру за помощь в поиске истины :)
    madrob, Brightside, Krizalis и ещё 1-му нравится это.
  9. Brightside

    Brightside

    Регистрация:
    2 июн 2013
    Отличная работа, но привязка к любой устаревшей ревизии сделает все бесполезным. Нужно продолжать
    rifleman17 нравится это.
  10. cvet

    cvet

    Регистрация:
    16 сен 2011
    Супер! Как подтянешь до актуальной ревизии, то порешаем вопросы с непонятными и неработающими вещами.
    rifleman17 и Krizalis нравится это.
  11. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Да, тоже пришел к этому выводу.

    Между делом удалось выяснить, что послужило причиной проблем с прагмами при запуске сервера. Из-за задублированного объявления эвента EventGlobalMapInvite в скрипте caravan.fos сервер, при запуске, в момент формирования кеша, периодически отказывался стартовать. Таким образом, для 645 версии SDK сейчас есть полностью рабочий комплект скриптов. Можно, основываясь на данной ревизии, допилить все, чего не хватает и создать рабочий сервер. Но смысла в этом нет, поскольку перенос 645->646 самый трудоемкий из всех, что мне попадались, и останавливаться на 645 версии = только создавать себе новые трудности в будущем.

    Комплект скриптов и контента для 645 ревизии, работоспособный: https://github.com/rifleman17/fonline_tla/tree/Fonline_TLA_645

    P.S: ошибку с прагмами, кстати, возможно локализовать только до 646 версии, поскольку, начиная с 646 все скрипты компилируются в один мега-скриптЪ, и, в каком именно скрипте из всех находится ошибка, определить невозможно. Я прочитал компилятором каждый скрипт, пока не наткнулся на сообщение "Finish pragmas fail.", которое не мешает компиляции, кстати, и там уже нашел проблемную прагму.
    Последнее редактирование: 9 окт 2018
  12. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    https://github.com/rifleman17/fonline_tla

    Частично перешагнул на 646 ревизию (Осталось разобраться с интерфейсом). Оказалось самым сложным переходом, далеко не все получилось автоматизировать, потребовалось куча ручной работы. После того, как запустил патч, пропатчил переименования скриптов, замену defines, импорты, указания неймспейсов и тд, компилятор показал около 8000 ошибок :) Чуть было не бросил нафиг все, но за пару вечеров руками разобрал.

    Пока не исправлены *.fogui файлы интерфейсов, исправления вносил в GuiScreens.fos. Еще нужно придумать, как перенести изменения из GuiScreens.fos в *.fogui. Есть проблема с неправильными перечислениями, явно что-то не так с перечислением screens, из-за которой валится клиент, но оно решаемое.

    Сервер запускается, клиент падает при некорректном вызове окна, нужно разбираться. Маппер запускается, загружает карты, но не видны тайлы. Есть еще странная проблема в маппере, при вводе с клавиватуре возникает эффект "залипания" клавиш, вводишь один текст, он повторяется икс раз.

    При открытии диалогов в редакторе часто возникают ошибки, но диалоги открываются.
    madrob, Brightside, Tab10id и ещё 1-му нравится это.
  13. rifleman17

    rifleman17

    Регистрация:
    14 мар 2011
    Довел интерфейсы *.fogui до 646 версии.
    Сервер запускается, клиент работает, анимации отображаются. Маппер как-то неадекватно реагирует на клавиатурный ввод, но, если загрузить карту копипастом (~arroyo) - с картами все в порядке.

    Для запуска требуется вмешательство в скрипты SDK:

    1. Закомментировать объявление в скрипте Scores/Scores.fos свойства BestScores (перенесено в Tla.fos) - в 646 ревизии свойство изменило область видимости с Common - на Server, поэтому стало недоступно на клиенте
    Код:
    //#pragma property Global Public string[] BestScores
    2. Установить сортировку скрипту Core/Colors.fos , иначе при генерации GuiScreens.fos возникают ошибки (вручную поставить свою сортировку в GuiScreens.fos нельзя, она будет затерта Interace Editor'ом
    Код:
    // FOS Common Sort -1
    madrob и Tab10id нравится это.

Поделиться этой страницей