Current time: 23.03.2024, 04:12 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA III
Author Message
ElfbI Offline

Posts: 325
Post: #31

Было бы здорово иметь возможность подменять часть скрипта построчно вместо замены его целиком.


The dreams you kill will break your heart
21.06.2020 00:41
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #32

ElfbI, а кто заставляет менять целиком? Всё работает именно так, чтобы начать пользоваться сразу из коробки.

Берём скрипт ERA 2.
Меняем ZVSE на ZVSE2.
Переименовываем функции, на которые ругается компилятор.
Всё. Старый код работает.

Примеры корректных имён функций есть в changelog: elf_GiveItTry, например.
Некорректная: (This.is.test Ab


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

Posts: 325
Post: #33

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


The dreams you kill will break your heart
21.06.2020 13:29
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #34

ElfbI, нет, так код не организуется вообще. Практически никогда и нигде.
Monkey patching — обезьяньи заплатки, это от безысходности.

Правильный подход: доработка оригинального скрипта с:
1) Вынесением основных настроек во внешние файлы и/или
2) Генерацией пользовательских событий, которые другие скрипты/моды могут обрабатывать.

Привожу пример.

Я пишу мод, в котором при посещении города герой платит за вход Х золотых, по умолчанию 100.
Назовём мод tpm (town payment mod).

Теперь напишем другой мод. ElfbI крайне возмущён дисбалансностью оригинального мода. Отчаявшись переубедить меня, как автора, ElfbI добавляет свой мод-скрипт:
balanced town payments.erm
Итого:
-) Герой заходит в город
-) Оригинальный мод ставит плату в 100 золотых, вызывает нигде не объявленную функцию-событие, которой даёт возможность изменить значение платы
-) Другой человек пишет крошечный мод-скрит, где в обработчике нового события устанавливает справедливую плату за вход.


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

Posts: 3880
Post: #35

Berserker, а потом появляется третий мод, использующий эту функцию и ты рвешь зад пытаясь найти проблему, т.к. вызов вункции запрятам в скрипте, а очередность выполнения завязанная на имени скрипта вообще неочевидна.
Тут, имхо, лучше через ini-файлы. Действует ini'шка из более приоритетного мода. Тут приоритет указывается явно, и для смены значения не нужно лезть в скрипты и знать язык.
Я в ES такие вещи как раз в ini и выношу. Пользователь (по-хорошему) копирует ini в свою мод-папку с максимальным приоритетом, правит по вкусу и в дальнейшем при обновлении ES уже ничего делать не нужно.

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


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
21.06.2020 16:33
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4333
Post: #36

85


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
21.06.2020 16:53
Visit this user's website Find all posts by this user Quote this message in a reply
ElfbI Offline

Posts: 325
Post: #37

Berserker, ага, осталось только все скрипты делать правильно. И переделать весь ВОГ скриптс. Вот я делаю мод, скажем, на двойной каст для магов, но есть пещера приключений, в которой отшельник дает двойной каст на первом ходу каждому герою. Теперь мне нужно поймать событие в BG0, добавив туда SN:W переменную. Вы предлагаете ради одной-двух строчек в скрипте пещеры подменять мне в моде весь скрипт целиком. Может в программировании это и мартышкина заплатка, но для мода гораздо логичнее подменить строчку, чем скрипт.


The dreams you kill will break your heart
21.06.2020 17:43
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #38

Algor, именно так и работают расширяемые системы. Данный форум, например, или, сюрприз, WoG. Задницу ты не рвёшь. Отключаешь один из противоречащих модов, по F11 определяешь виновника. Гибкое поведение достигается через генерацию событий. Чем больше событий, тем гибче можно мод под себя подстроить. В остальном твоя претензия сродни следующей:

Почему три мода вида
!#MA:A0/10;

!#MA:A0/20;

!#MA:A0/30;

Несовместимы друг с другом и хз где меняют настройки монстров? Может запретить эти три мода и внести настройку в ini, то есть в txt…Или стоп. Настройки и так уже есть в txt и это самая худшая реализация из возможных 96-copy

ElfbI, ваша идея реализуется только очень грубо. Через утилиты патчинга файлов. И они будут зависимы от того, чтобы исходный код мода не менялся. Такой подход где-то ещё есть, например в скриптах для Ведьмака 3, когда нужно вручную разрешать конфликты merge-3 систем. То ещё удовольствие. Уж лучше отключить один из двух модов, которые ну крайне не дружат друг с другом из-за спора в каком-то событии.


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

Posts: 325
Post: #39

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

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

Ладно, понял-принял, что делать.


The dreams you kill will break your heart
(This post was last modified: 21.06.2020 22:58 by ElfbI.)
21.06.2020 22:46
Find all posts by this user Quote this message in a reply
Artyr1995ua Offline

Posts: 205
Post: #40

Berserker, ссылка на скачивание не открываеться можеш другую кинуть
(This post was last modified: 21.06.2020 23:15 by Artyr1995ua.)
21.06.2020 23:15
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4333
Post: #41



Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
21.06.2020 23:26
Visit this user's website Find all posts by this user Quote this message in a reply
Artyr1995ua Offline

Posts: 205
Post: #42

(21.06.2020 23:26)daemon_n Wrote:  Artyr1995ua, держи - скопировал на ГУГЛ

Спасибо!)
21.06.2020 23:56
Find all posts by this user Quote this message in a reply
Artyr1995ua Offline

Posts: 205
Post: #43

daemon_n, Не запускаеться!(
22.06.2020 00:06
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4333
Post: #44

Artyr1995ua, перекачай - вес файла 77мб должен быть


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
22.06.2020 00:25
Visit this user's website Find all posts by this user Quote this message in a reply
Artyr1995ua Offline

Posts: 205
Post: #45

(22.06.2020 00:25)daemon_n Wrote:  Artyr1995ua, перекачай - вес файла 77мб должен быть
Все верно.

(22.06.2020 00:25)daemon_n Wrote:  Artyr1995ua, перекачай - вес файла 77мб должен быть
Все верно че делать просто не запускаеться
(This post was last modified: 22.06.2020 00:52 by Artyr1995ua.)
22.06.2020 00:37
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