14.12.2020, 18:02
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
14.12.2020, 18:41
Quote:Фатальный недостаток json - отсутствие комментариев.В Эре парсер Json поддерживает однострочные // комментарии.
Я очень люблю этот формат, конечно, хоть и в плюсах он не так удобен, как в ЯП, хранящих метаинформацию, но все-таки этот факт сильно ограничивает его применимость именно для конфигов.
Quote:Эээ.. и как это будет осуществляться в реальности?Как сейчас с *.btn-кнопками, только лучше. Появляется плагин на новых монстров с описанием формата. Он закрывает все вопросы, предоставляя декларативное json-api (под который без проблем можно писать визуальный редактор) и набор функций API для остальных. Для базовых потребностей по монстрам без учёта новых способностей RedirectBlock + одной функции GetMonCount хватило бы за глаза.
Quote:Лучше не надо. Тот патч, который я выложил, вызовет несместимость с ERA+.Эра+ — потенциальная сборка. С ней просто не включать неудобные плагины, дублирующие функциональность. Это же решается в два щелчка. Нет?
14.12.2020, 18:55
Quote:Мне видится правильным такой подход к разработке платформ, при котором обеспечивается максимально широкий доступ к модификациям, богатый формат описания объектов и отсутствие привязки к фиксированным значениям. То есть правильный плагин на новых монстров — это плагин, парсящий json из VCMI и предоставляющий API для получения адреса таблицы с монстрами, размера одной записи, максимального числа монстров, актуального числа монстров. Завязывать же всю игровую структуру, а то и все структуры на конкретном разработчике нельзя.
Вероятно, разумным будет предложить библиотеку с методами получения/установки адресов и пределов для всех основных игровых структур.
ПолучитьМаксимальныйИДМонстра, ПолучитьЧислоМонстров, ПолучитьТаблицуМонстров. Установить первое, втрое и третье.
Поскольку правильное расширение структур, на мой взгляд, должно иметь динамическую природу (монолитов 8, 50 или 100 зависит от содержимого json-конфигов), то и переносить подструктуры по методу Хероманта или Игрика не вариант. Исходный код gameManager->twoWayTeleports всё время генерирует команду доступа от базового адреса, который можно пропатчить смело, не боясь нарушить остальной код, поскольку далее будет всё тот же gameManager->другоеПоле, который компилятор не имел права оптимизировать. Доступ по указателю — это такая штука, которая предполагает, что значение указателя может измениться даже из соседнего потока. Потому чаще всего можно подструктуру перенести на массив динамического размера без последствий. Если найдёте в патче Хероманта доказательство обратного, сообщите, пожалуйста.
После переноса остаётся несколько вопросов:
-) Какой теперь новый адрес подструктуры?
-) Размер её элемента?
-) Количество элементов?
Вопрос, схожий с обсуждением RedirectMemoryBlock/GetAddr и решаемый на уровне АПИ и соглашений, а не на уровне «никто не имеет права расширять ни одну структуру кроме автора мода ХХХ». Стоит ещё раз подумать, какого АПИ хватило бы всем.
Для начала можно попробовать сделать 26 монолитов отдельным модом. Можно не вносить пока изменений в движок.
Quote:Как сейчас с *.btn-кнопками, только лучше. Появляется плагин на новых монстров с описанием формата. Он закрывает все вопросы, предоставляя декларативное json-api (под который без проблем можно писать визуальный редактор) и набор функций API для остальных. Для базовых потребностей по монстрам без учёта новых способностей RedirectBlock + одной функции GetMonCount хватило бы за глаза.
Just wait a bit, will ya?

14.12.2020, 19:04
(14.12.2020 18:41)Berserker Wrote: [ -> ]Эра+ — потенциальная сборка. С ней просто не включать неудобные плагины, дублирующие функциональность. Это же решается в два щелчка. Нет?
Да, но как пользователям это объяснишь? Давно прошу добавить в ERA режим глобального мода (или сборки), принудительно отключающий ненужные моды, но вот воз и ныне там.

14.12.2020, 19:45
Quote:Появляется плагин на новых монстров с описанием формата. Он закрывает все вопросы, предоставляя декларативное json-api (под который без проблем можно писать визуальный редактор) и набор функций API для остальных.Но ведь это не ответ.
Т.е. "автор сделает нам зашибись, а как - ну как-нибудь сделает". Я за такое даже за бабки грязно ругаюсь и иногда даже отказываюсь, а тут прост так.
Как будет реализовываться единообразное чтение json? Эра поддерживает комментарии, но не предоставляет плагинам ничего для работы с json (емнип), поэтому библиотек будет..разнообразно, и с теми же нестандартизированными комментариями будут наблюдаться всякие интересные эффекты.
Если это будет не просто "api c json", а именно JSON:API "типа я restful", то нужна сразу эталонная реализация. Кто её подгонит? Кто будет гарантировать, что она адекватна всем возникающим задачам? Как убедить людей, что она нужна?
Как будет это апи реализовываться? Экспорты из дллплагина, и заголовочник? Это возможно и без эры, но почему-то этим никто не пользуется. Не говоря уже об опухании дллмейна от всяких InitializeEra(); InitializeMonsterExtender(); InitializeMonsterExtender2(); InitializeArtifactExtender(); InitializeSomeshit1Extender(); InitializeSomeshit2Extender(); .. InitializeSomeshit37Extender();
Как будет решаться вопрос с разными версиями плагинов, и вообще с известной проблемой пятнадцатого стандарта? У нас уже есть два разных плагина для добавления монстров, и при этом этот зоопарк еще и не закрывает всех потребностей.
Альтернативное предложение: нам просто нужен обмен переменными на уровне эры, как это делают плагины и хота для общения с HD-модом.
Т.е. никакого внешнего апи, которое поддерживается волшебными гномиками, а тупо глобальное key-value хранилище, и функции типа GetEraDword("name", [default_value]), добавить по вкусу вариаций для разных типов.
Тогда, для получения размера монстров - GetEraDword("amethyst.monster_count", 197) или там даже GetEraDword("amethyst.monster_count", GetEraDword("typhon.monster_count", 197))
Более того, мы даже для массива существ можем использовать тогда конструкции вида (_CreatureInfo_*)GetEraDword("amethyst.monster_table_ptr", o_Creatures)
И вообще функция универсальная. У меня давно подгорает от того, что для SN:W-переменных нету прямого доступа, например, приходится писать всякие ненужные обертки над erm.
Туда же можно заливать прочитанный эрой JSON, типа какой-нибудь {plugin_config":{"param":1}} будет мапиться в "_json.plugin_config.param".. ладно, увлекся.
14.12.2020, 20:39
Quote:Давно прошу добавить в ERA режим глобального мода (или сборки), принудительно отключающий ненужные моды, но вот воз и ныне там.Так с любой игрой с модами. Есть параметр командной строки modlist="путь к файлу со списком модом". Если это сборка, то и вовсе включи в архив list.txt. А если я всё равно хочу включить какой-то мод, я его включу.
Quote:Just wait a bit, will ya?It's not an announcement. Just point of view.
Quote:Альтернативное предложение: нам просто нужен обмен переменными на уровне эры, как это делают плагины и хота для общения с HD-модом.Это форма неявного, нечёткого и более хрупкого API. Конкретно его низкоуровневая часть. В твоём высокоуровневом коде всё равно будут функции-обёртки, если делаешь по уму.
Т.е. никакого внешнего апи, которое поддерживается волшебными гномиками, а тупо глобальное key-value хранилище, и функции типа GetEraDword("name", [default_value]), добавить по вкусу вариаций для разных типов.
Тогда, для получения размера монстров - GetEraDword("amethyst.monster_count", 197) или там даже GetEraDword("amethyst.monster_count", GetEraDword("typhon.monster_count", 197))
15 стандартов есть, когда нет ни одного удобного. Сам плагин через любую json-библиотеку сам считывает json-конфиги в своём формате. Как Yona считывает свой ini-файл. В чём сложность? Другим lua/dll/erm модулям нужно простое и рабочее API для доступа к новым возможностям. Даже указатель на массив структур можно получать, считывая части кода SoD, как и предлагали выше.
Доступ к SN:W переменным и глобальному хранилищу ключ-значение сделаю.
14.12.2020, 21:17
Quote:Сам плагин через любую json-библиотеку сам считывает json-конфиги в своём формате. Как Yona считывает свой ini-файл. В чём сложность?А в чем смысл?
Ну т.е. это все то же самое, что и сейчас, ровно с теми же проблемами. Только стильный, модный, молодежный json (со своими новыми стильными проблемами).
Quote:Другим lua/dll/erm модулям нужно простое и рабочее API для доступа к новым возможностям.Ну всем понятно, что лучше быть здоровым и богатым, чем бедным и больным, но это неконструктивное утверждение.
Это просто клич "авторы, чаще используйте extern "C" __declspec( dllexport )"? Ну ок, будем использовать, но к чему эти разговоры про единое замечательное апи, если его предлагается не то что реализовывать, а даже декларировать своими силами — и следовательно, оно не будет ни таким уж единым, ни таким уж и замечательным.
Quote:Это форма неявного, нечёткого и более хрупкого API. Конкретно его низкоуровневая часть. В твоём высокоуровневом коде всё равно будут функции-обёртки, если делаешь по уму.Нет, не будут, я же не бессмертный оборачивать все, что у нас там нареверсено, под обертки.
¯\_(ツ)_/¯
Либо тогда мне нужна стоковая поставка из Эры описывающих герои заголовочников, которые по функционалу эквивалентны хотя бы тем, которые когда-то в начале десятых были в последних HD-шных сорцах, 3.15f, кажется. Там немного, килобайт триста.
Алсо
> хрупкое
НD общаться с HotА и HD с плагинами так общаться нехрупко, а тут ну не норм.
И сравнивать с решением, в котором мы будем зависеть как минимум от имени dll-файла плагина и считать это менее хрупким.. ну такое.
И да, оно неявное, нечеткое и низкоуровневое - и это еще не все его достоинства!
Смешно бояться хрупкости в реверсинговой сцене.
15.12.2020, 13:26
Berserker, reporting an issue related to characters/colour
Check this one:

Debug+Save
The menu pops up when fighting a neutral stack is totally messed up.
Checked w/ and w/o WoG Native Dialgos/HD mod, it turns out
1. w/o WoG Native Dialog, the issue can be resolved.
2. w/o HD, the issue persists.
This could be a problem with WoG Naitve Dialog, but since ERA gets so many updates related to characters/colour recently, I believe it's more likely needed to be adjust from ERA
Check this one:
Spoiler (Click to View)


The menu pops up when fighting a neutral stack is totally messed up.
Checked w/ and w/o WoG Native Dialgos/HD mod, it turns out
1. w/o WoG Native Dialog, the issue can be resolved.
2. w/o HD, the issue persists.
This could be a problem with WoG Naitve Dialog, but since ERA gets so many updates related to characters/colour recently, I believe it's more likely needed to be adjust from ERA

15.12.2020, 13:50
(14.12.2020 19:04)XEPOMAHT Wrote: [ -> ]Подписываюсь под Вашими словами. В качестве варианта реализации могу предложить использование текстовика или ini-файла, лежащего в папке с модом, который будет считываться одновременно с list.txt, и в котором будут указаны моды, которые нужно отключить. Соответственно, при чтении списка модов нужно просто пробегаться циклом по этому списку исключений и проводить сравнение с данными из, например, mod.json или ещё откуда-нибудь.(14.12.2020 18:41)Berserker Wrote: [ -> ]Эра+ — потенциальная сборка. С ней просто не включать неудобные плагины, дублирующие функциональность. Это же решается в два щелчка. Нет?
Да, но как пользователям это объяснишь? Давно прошу добавить в ERA режим глобального мода (или сборки), принудительно отключающий ненужные моды, но вот воз и ныне там.
15.12.2020, 14:08
(15.12.2020 13:50)Raistlin Wrote: [ -> ]В качестве варианта реализации могу предложить использование текстовика или ini-файла, лежащего в папке с модом, который будет считываться одновременно с list.txt, и в котором будут указаны моды, которые нужно отключить. Соответственно, при чтении списка модов нужно просто пробегаться циклом по этому списку исключений и проводить сравнение с данными из, например, mod.json или ещё откуда-нибудь.
Думаю, что вместо чёрного списка модов лучше использовать белый список - проверенные на совместимость моды. Т.е. пользователь подключает ERA+, перед загрузкой движок ERA рядом с list.txt находит whitelist.txt, сравнивает содержимое с list.txt и подгружает только моды, имена которых совпали в обоих листах. Пользователь отключает ERA+, и моды уже грузятся согласно list.txt (т.е. список модов, который пользователь мог собирать и настраивать под себя годами, никак не повреждается от включения/выключения ERA+, т.е. всё проходит автоматически и мне потом не нужно уговаривать людей УСТАНАВЛИВАТЬ ERA+ В ОТДЕЛЬНУЮ ПАПКУ С ГЕРОЯМИ, ЧТОБЫ НИКАКИЕ СТОРОННИЕ МОДЫ НЕ МЕШАЛИ ПОЛЬЗОВАТЕЛЯМИ, КОТОРЫЕ В НИХ НИЧЕГО НЕ ПОНИМАЮТ И ХОТЯТ ТОЛЬКО ИГРАТЬ В САМУ ИГРУ

15.12.2020, 19:25
Имхо, это уровень ответственности настроек мода в json и менеджера модов. Менеджер модов должен предупреждать о несовместимых модах по набору критериев: явные чёрные списки и и явные белые.
Archer30, thank you. My bug, will be fixing it.
Archer30, thank you. My bug, will be fixing it.
15.12.2020, 20:19
(15.12.2020 19:25)Berserker Wrote: [ -> ]Менеджер модов должен предупреждать о несовместимых модах по набору критериев: явные чёрные списки и и явные белые.
Вообще-то Менеджер Модов

15.12.2020, 20:31
У твоей аудитории уже давно стоят Windows 10. И да, они пользуются менеджером модов.
15.12.2020, 21:14
Berserker, help needed with SN:D/BU:R
How exactly does these work? Why are they sometimes result in crashes that only reproducable in particular PC?
From discord:
I had this report a week ago. I tested with the savegame the player sent and not able to reproduced his issue, while he had a very high chance of crash (like every 3 battles). I thought that was only a rare situation. But since now I see the second report, it must be something.
How exactly does these work? Why are they sometimes result in crashes that only reproducable in particular PC?
From discord:
Quote:всё ещё пытался поймать вылет тума и пока что он работает без вылета и выключение помогает, но произошло это: включена автобитва, прилетаю в хижину ведьмы, там страж, победа, начинается бой, краш.debug - This is a crash realated to SN:D from 40 Karmic Battles.
I had this report a week ago. I tested with the savegame the player sent and not able to reproduced his issue, while he had a very high chance of crash (like every 3 battles). I thought that was only a rare situation. But since now I see the second report, it must be something.
15.12.2020, 21:49
SN:D calls BU:R. BU:R crashes if called on round 0. That's all I know. Thanks for report.
Seems like some def was not loaded still and BU:R requires it.
Ah, seems like BU:R in autobattle is a bit unsafe.
Seems like some def was not loaded still and BU:R requires it.
Ah, seems like BU:R in autobattle is a bit unsafe.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174