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

Автор темы #1
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
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'ом, все компилируется норм. Но сервер не запускается, при старте сообщает о проблеме с прагмами:

00:000] FOnline server, version 626.
[Main][06:136] * Starting initialization **
[Main][07:115] Script system initialization...
[Main][07:123] Reload scripts...
[Main][42:465] Reload scripts complete.
[Main][42:467] Script system initialization complete.
[Main][42:467] Load language packs...
[Main][42:686] Load language packs complete, count 2.
[Main][42:686] Reload client scripts...
[Main][42:695] Reload scripts...
[Main][51:525] Reload scripts complete.
[Main][52:475] Reload client scripts complete.
[Main][52:478] Indexing client data...
[Main][52:478] Indexing client data complete, count 0.
[Main][52:479] Load dialogs...
[Main][53:810] Load dialogs complete, count 858.
[Main][53:810] Load prototypes...
[Main][01:44:377] Load prototypes complete, count 5678.
[Main][01:45:767] Error in pragma(s) during loading.
[Main][01:45:767] Initialization fail!
Найти причину ошибки не удается. Возможно, нужно поднимать версию до более поздних ревизий SDK?

Обнаружил, что ошибка [Main][01:45:767] Error in pragma(s) during loading. возникает через раз. Каждый последующий запуск после изменения любого скрипта приводит к возникновению этой ошибки. Если запустить сервер еще раз, запуск происходит. (Правда, тут же падает с дампом)
 
Последнее редактирование:
Автор темы #2
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
В общем, сервер удалось запустить, с дампами при запуске разобрался. Но сервер не видит маску проходимости tla_relief. Клиент не может прочитать тексты из *.msg файлов. Возможно, что-то не так с путями, но, с другой стороны, графика для интерфейса грузится норм.

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

По всей видимости придётся поднимать используемую
версию SDK.
 
Дата рег
22 Окт 2012
Сообщения
119
Симпатии
63
я конечно могу путать тк фиг знает когда последний раз имел общение с сдк но разве компилятор из сдк не может компелировать скрипты в бинари что бы пропустить компиляцию сервером при запуске?
 
Автор темы #4
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Даже если бы ASCompiler компилировал скрипты так, что серверу не пришлось бы это делать, это не решило бы всех проблем. Некоторые баги проявляются только при работе сервера.

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

Сервер в любом случае нужно запускать и тут проявляется эта особенность с прагмами и кешем.
 
Автор темы #5
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Обновил ТЛА до 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 ^)
 
Последнее редактирование:
Автор темы #6
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Проверил 631 ревизию sdk

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

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

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

Вложения

Последнее редактирование:
Автор темы #7
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Поднял версию контента до 645 ревизии.
Сервер не запускается без шаманства - в момент генерации мира и загрузки локаций происходит спам отложенных событий и сервер падает с дампом до запуска

Traceback: (Prepared, Caller 'Event', CallFunc 'EventPragma::ScriptEvent::RaiseImpl', Thread 'Main')
CritterItemMovement.fos : void critter_move_item(Critter&inout, Item&inout, uint8) : Line 112
Убрал загрузку всех локаций, кроме Дэна пока.
Чтобы запустить сервер, пришлось также изменить объявление двух эвентов в SDK (Core.fosh): EventCritterMoveItem и EventCritterCheckMoveItem. Убрал ключевое слово deffered.
После этого сервер перестал давиться событиями и запустился.

Продолжается раздражающая проблема с прагмами. Сервер приходится запускать дважды.
[01:15:425] Error in pragma(s) during loading.
[01:15:425] Initialization fail!
Маппер работает нормально, анимации fallout в маппере загружаются корректно, карты, объекты, нпц, на первый взгляд все на местах.

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

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

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

645 rhumanoid.jpg
 
Автор темы #8
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Удалось выяснить, в чем состоит проблема неработающих анимаций на клиенте.

Оказалось, что 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: Огромное спасибо Крекеру за помощь в поиске истины :)
 
Дата рег
2 Июн 2013
Сообщения
62
Симпатии
17
В общем, пока не буду дальше поднимать версию, если только прагмы заколебут вконец. Попробую разобраться, что не так с анимациями, настроить работу с контейнерами, интерфейсом и глобальной картой.
Отличная работа, но привязка к любой устаревшей ревизии сделает все бесполезным. Нужно продолжать
 
Автор темы #11
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
привязка к любой устаревшей ревизии сделает все бесполезным. Нужно продолжать
Да, тоже пришел к этому выводу.

Между делом удалось выяснить, что послужило причиной проблем с прагмами при запуске сервера. Из-за задублированного объявления эвента 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.", которое не мешает компиляции, кстати, и там уже нашел проблемную прагму.
 
Последнее редактирование:
Автор темы #12
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
https://github.com/rifleman17/fonline_tla

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

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

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

При открытии диалогов в редакторе часто возникают ошибки, но диалоги открываются.
 
Автор темы #13
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Довел интерфейсы *.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
 
Автор темы #14
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
В общем, работа движется, хотя и не так быстро, как хотелось.
До 693 ревизии удалось перешагнуть достаточно просто.
На ней сервер-маппер-клиент запускаются и все вроде работает.

Сейчас занят переводом на 814 ревизию. Благодаря помощи Cvet'a И Cracker'a это уже не кажется невыполнимой задачей.

Сел в большую лужу при реализации изменений 694 ревизии, кроме объявления указателей и ссылок удалил лишние амперсанды из условий if'ов.
Заметил это слишком поздно, откатить уже не смог :)
 
Автор темы #15
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
В процессе переноса скриптов на 814 ревизию.

Совершенно упустил один момент, связанный с изменениями в 694 ревизии: экземпляры объектов теперь не создаются при объявлении, требуют инициализации конструктором класса.
Пришлось отключить пока практически все в :D (караваны, события, генерацию карт и т.д), чтобы заставить сервер стартануть.
Количество бардака в скриптах увеличивается в геометрической прогрессии, нужно уже разобрать все объявления, убрать заглушки и начать причесывать скрипты по содержанию.
Частично временный функционал вынес в отдельную папку (FonlineCommon).

Сервер при запуске давится диалогами и падает без дампа.
Но, если в момент начала запуска сформировать дамп командой серверной панели (кнопка Dump), сервер все же стартует.
Клиент пока не запускается, нужно вычислять неинициализированные переменные во всех интерфейсах. Упрощает эту задачу то, что сервер теперь не падает при генерации клиентских скриптов.

Подскажите, кстати, имеет ли право на жизнь копирование массивов-словарей при объявлении переменных вместо явного указания типа копируемого свойства?

Это:

Код:
#pragma property Critter PrivateServer dict< uint, uint > StealExpCount
....
auto stealExpCount = cr.StealExpCount.clone();
cr.StealExpCount = stealExpCount;
Вместо:

Код:
#pragma property Critter PrivateServer dict< uint, uint > StealExpCount
....
auto stealExpCount = dict< uint, uint > ( cr.StealExpCount );
cr.StealExpCount = stealExpCount;
 
Дата рег
16 Сен 2011
Сообщения
208
Симпатии
72
И пуш свои изменения в репозиторий тла, может кто еще подключится поможет.
 
Автор темы #18
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Причесал скрипты для 814 ревизии.

И пуш свои изменения в репозиторий тла, может кто еще подключится поможет.
Отправил pull-реквест на мерж своих изменений с основной репой ТЛА на github (самому сделать merge - прав не хватает)

Маппер загружает карты, запускается, сервер стартует, если в момент запуска сгенерить вручную дамп. Клиент падает с непонятным дампом, я на нем и застрял. Наверное, нужно собирать клиента из исходников движка, чтобы понять, что там не так :)

Что остается делать (не считая дальнейшего апгрейда скриптов):

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

И вообще:
Глобальная карта и группа на глобальной карте.
Некоторые события больше не вызываются, нужно самому их вызывать (например все события, связанные с планами НПЦ)
Звуки выстрелов и перезарядки.
Работа с контейнерами, поднятие предметов, двери.
Нужно проверить взаимодействие с триггерами и сценери.
Не работают багажники и вообще ChildItems.
Проигрывание музыки на карте.
Регенерация АП.
И т.д.

Кроме этого все скрипты нуждаются в форматировании, нужно разобраться с объявлением свойств/прагм/событий.
 

Вложения

Автор темы #19
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Клиент с глюками, но запустился. Ура! Каких-то 15 ревизий накатить осталось!:D

Проблема при запуске сервера была связана с банлистом, удалил шаблон Active.txt и дампы прекратились.

814.png
 
Автор темы #20
Дата рег
14 Мар 2011
Сообщения
24
Симпатии
51
Перевел скрипты ТЛА на 832 ревизию СДК.
Все изменения теперь будут тут: https://github.com/cvet/fonline_tla
Маппер, сервер, клиент запускаются.
Для запуска сервера нужно скопировать файлы из папки SDKPatch/832 и заменить ими скрипты в FonlineSDK/Modules/Core.
В папке с батниками создать две папки: Server и Client
 
Последнее редактирование: