Current time: 22.11.2024, 21:41 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
FunLib
» Мод - библиотека функций для ERA
Author Message
Zur13 Offline

Posts: 223
Post: #16

(21.04.2020 18:06)Berserker Wrote:  Данный функционал скорее вреден, чем полезен. Нельзя пытаться получать адреса динамических строк и таким вот хаком их применять. Просто одна сплошная бомба-костыль.

SN:H^spec^/hero/short (0), full (1) or descr (2)/hint
SN:H^secskill^/skill/name (0), basic (1), advanced (2) or expert (3)/text
SN:H^monname^/monster/single (0), plural (1), description (2)/text

Только для артефакта сейчас нет функционала. Временно (на жизненный цикл триггера) в Эра 3 можно сменить через создание временной z-переменной
!!VR(strPtr:y):Z^новый текст для арта^;
...установить описание штатной командой, передав strPtr в качестве номера z-переменной.

Могу, если очень нужно на постоянной основе, добавить поддержку артефактов в SN:H

Добавить и для артефактов конечно же надо. Я так понимаю этот функционал работает только в ЭРА 3? На ЭРА 2 есть минимум 3 мода которые используют функцию для экономии переменных из фан.ерм.

Предлагаю в библиотеке всё-же оставить версию этой функции, а с повсеместным переходом на ЭРА 3 сменить ее реализацию и пометить ее @deprecated с коментарием что вместо нее теперь нужно использовать SN:H.
21.04.2020 19:01
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #17

(21.04.2020 18:06)Berserker Wrote:  Данный функционал скорее вреден, чем полезен. Нельзя пытаться получать адреса динамических строк и таким вот хаком их применять. Просто одна сплошная бомба-костыль.
Видишь, библиотека еще даже в альфе на вышла, а уже какая польза!

Итак, зайдем сначала.

1) Стоит задача изменять большое количество максимально разных текстовых элементов в игре (имена, описания навыков, монстров, специализаций, артефактов, городов, объектов и пр.).
2) Делать это надо максимально единообразным инструментом (не обязательно функцией).
3) При этом не должны использоваться существенно ограниченные ресурсы.
4) При использовании в различных скриптах необходимо минимизировать (в идеале, исключить) вероятность коллизий

Для текущей реализации все эти пункты неплохо выполняются. Да, может и плохо, но выполняются и взрыв костыль-бомбы никого еще критично не зацепил. Но:
5) надо уходить от ert на json
6) это все же некорректно и потенциально опасно

Из пожеланий к новой реализации могу выделить еще одно, достаточно важное:
7) хотелоь бы иметь возможность не только устанавливать тексты, но и получать текущие. Сейчас это есть не везде.
8) хотелоь бы иметь возможность сбрасывать тексты на тексты по-умолчанию. Сейчас это тоже есть не везде. Не так важно, как п. 7)

Вопрос: как можно реализовать выполнение пунктов 1-5 +, желательно, 7 и 8 без недостатков п.6?

Текущего инструментария достаточно? Или нужен еще?
Если второе, то что делать пока нужного инструментария нет?


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
21.04.2020 21:51
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #18

Описания должны автоматом сохраняться в сейве и восстанавливаться при загрузке, не умирать от F12 (привет прямые ссылки на ERT/что угодно динамическое) и любых схожих техник.

SN:H и есть такая команда.
Для удаления/восстановления подсказок нужно вместо ^spec^-подобного имени группы указать ^-spec^.

SN:H^object^/#type/#subtype or -1/$hint
SN:H^object^/x/y/z/hint
На получение тоже работает. Возвращает ранее установленное через SN:H значение.

SN:H^spec^/hero/short (0), full (1) or descr (2)/hint
SN:H^secskill^/skill/name (0), basic (1), advanced (2) or expert (3)/text
SN:H^monname^/monster/single (0), plural (1), description (2)/text
Работает и GET-синтаксис на актуальные значения.

----------------------

Замечу, всё это в 2.9.13, когда можно даже SN:H^xxx^/1/2/3/^%T(algor.loves.json)^;

----------------------

Поддержки артефактов пока нет.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
21.04.2020 22:30
Find all posts by this user Quote this message in a reply
Zur13 Offline

Posts: 223
Post: #19

Вот мой предварительный набросок списков на ЕРМ. Пока только небольшой тест сделал, там в конце файла и думаю про еще пару функций это филл, шаффл, поиск (с компаратором как сортировка), форич, копия списка. Просто уточняю что до конца функционал не протестирован, это только чтобы посмотреть и оценить выбраный подход.
(This post was last modified: 22.04.2020 04:25 by Zur13.)
21.04.2020 23:20
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #20

Berserker, хм, выглядит вкусно, надо переползать на 2.9.13 (я ща на 2.9.12 сижу)

Zur13, глянул только одно место, есть пара вопросов (Click to View)


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
22.04.2020 10:23
Visit this user's website Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #21

(22.04.2020 10:23)Algor Wrote:  Berserker, хм, выглядит вкусно, надо переползать на 2.9.13 (я ща на 2.9.12 сижу)

Zur13, глянул только одно место, есть пара вопросов (Click to View)

Кстати, общестратегический вопрос по функциям:
если в функцию передаются неверные параметры, что лучше делать?
а) ничего не делать, пусть вылетает ошибка и моддер чешет репу
б) молча отфильтровывать некорректные параметры и пусть моддер чешет репу
в) выводить предупреждение через IF:L/IF:M
г) выводить сообщение через спец.функцию Fun_Warning, которая на основании какого-нить значения типа Warnings=# в ini/json действует по одному из вышеперечисленных правил


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
22.04.2020 10:29
Visit this user's website Find all posts by this user Quote this message in a reply
Zur13 Offline

Posts: 223
Post: #22

(22.04.2020 10:29)Algor Wrote:  
(22.04.2020 10:23)Algor Wrote:  Berserker, хм, выглядит вкусно, надо переползать на 2.9.13 (я ща на 2.9.12 сижу)

Zur13, глянул только одно место, есть пара вопросов (Click to View)

Кстати, общестратегический вопрос по функциям:
если в функцию передаются неверные параметры, что лучше делать?
а) ничего не делать, пусть вылетает ошибка и моддер чешет репу
б) молча отфильтровывать некорректные параметры и пусть моддер чешет репу
в) выводить предупреждение через IF:L/IF:M
г) выводить сообщение через спец.функцию Fun_Warning, которая на основании какого-нить значения типа Warnings=# в ini/json действует по одному из вышеперечисленных правил

2) Список это массив размера М у которого первый элемент хранит количество элементов в списке L, причем всегда M > L, так как есть нулевой элемент недоступный модеру. В данном случае initial size задает изначальный размер массива М, там кстати недоработка нужно бы так:

Code:
!!VRy1&x1>0:Sx1 +1;   [y1, initial array size]

Далее при операциях вставки размер массива периодически увеличивается чтобы он был на 20-30 элементов больше чем размер самого списка (не при каждой вставке а с шагом по 10 элементов), при удалении наоборот уменьшается шагом по 10 элементов, плюс перекрытие (threshold) между добавлением и удалением чтобы избежать ресайзов когда модер добавляет/удаляет приграничный элемент несколько раз, тут еще надо проверить и подкрутить если что.

По ошибкам и варнингам, а) не очень пдходит, потому что у меня например есть кастомные ошибки, например попытка доступа к нулевому элементу массива/списка, сама по себе ошибку не выбросит. Я тут пошел по сценарию, что некритичные ошибки отфильтровываются, а для остальных ситуаций есть статус операции, сложно сказать что более правильно. Возможно Fun_Warning более правильное решение, но при разбивке по файлам модеру нужно будет к себе забирать не только нужный файл но и базовый файл в котором описана Fun_Warning.

Правка: если товарищ Berserker, добавит АПИ для выброса кастомных исключений, то всё станет намного проще, выбрасываем исключения для ошибок и всё, это самый правильный подход, потому что тогда модер сразу видит где он лажает. Эх если бы еще в окне ЕРМ ошибки показывали кусок стека вызовов функций ЕРМ, цены бы ему не было. Вот такое небольшое дополнение к окошку с ЕРМ ошибкой намного всё упростило бы:
Code:
!?CM5;(fun_lists.erm:403)
!?FU(Fun_ListAppend)(fun_lists.erm:248)
!?FU(Fun_ListSize) (fun_lists.erm:55)
(This post was last modified: 22.04.2020 13:39 by Zur13.)
22.04.2020 12:54
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #23

Algor, в 2.9.12 все эти SN:H команды есть. Они вводились постепенно, всегда мыли в журналах изменений. Так что попробуй.

Fun_ShowErmError с автогенерацией отладочной информации (GenerateDebugInfo до показа диалога) + по возможности наиболее мягкое решение.

Zur13, нет, исключений добавлять не буду. Хватит насиловать ЕРМ. Нужно уже срочно писать обёртку для Lua. Я закончил переписывать !!VR полностью. ЕРМ почти принял достаточно стабильный и целостный вид.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
22.04.2020 16:50
Find all posts by this user Quote this message in a reply
ElfbI Offline

Posts: 325
Post: #24

Berserker, оказывается не мне одному не хватает справочника по новым командам! Искать все в чейнджлогах ну такое Fie


The dreams you kill will break your heart
22.04.2020 19:36
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #25

ElfbI, мне тоже не хватает.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
22.04.2020 19:52
Find all posts by this user Quote this message in a reply
ElfbI Offline

Posts: 325
Post: #26

Berserker, 96-copy


The dreams you kill will break your heart
22.04.2020 21:13
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #27

Закину пока сюда, чтобы не потерялось:
Code:
!?FU(FUN_SpellDisabled);
; x1 - spell id
; x2 - get/set enabled(0) or disabled(1) spell status
!!FU|x1<0/x1>69:E;    check incorrect parameters
!!UN:C6919480/4/?y1;  get ptr GameMng
!!VRy2:Sx1 +74 +y1;   offset to array disabled spells status
!!FU:S2/?y3;          get function syntax type
!!UN&y3=0:Cy2/1/?x2;  get disabled spell status
!!UN&y3=1:Cy2/1/x2;   set disabled spell status


game bug fixes extended.dll || My Plugins || My GitHub
23.04.2020 10:33
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #28

У меня сразу же вопрос: мы в библиотеке будем поддерживать новый синтаксис (введенный в 2.9.13) HE:Z, BM:Z и UN:C?


game bug fixes extended.dll || My Plugins || My GitHub
23.04.2020 10:52
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #29

(23.04.2020 10:33)igrik Wrote:  Закину пока сюда, чтобы не потерялось:
Code:
!?FU(FUN_Spell_CheckIsDisabled);
; x1 - spell id
; x2 - get/set enabled(0) or disabled(1) spell status
!!FU|x1<0/x1>69:E;    check incorrect parameters
!!UN:C6919480/4/?y1;  get ptr GameMng
!!VRy2:Sx1 +74 +y1;   offset to array disabled spells status
!!FU:S2/?y3;          get function syntax type
!!UN&y3=0:Cy2/1/?x2;  get disabled spell status
!!UN&y3=1:Cy2/1/x2;   set disabled spell status

Это дубликат воговской !!UN:J0. Но зачем???
23.04.2020 11:06
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #30

А разве проверить статус можно?

Тьфу блин! Я не знал, что можно проверить. Нужно указать, чтобы занесли описание в справочник.


game bug fixes extended.dll || My Plugins || My GitHub
23.04.2020 11:16
Visit this user's website Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group