Wake of Gods Forum | Форум Во Имя Богов

Full Version: ERA III
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Было бы здорово иметь возможность подменять часть скрипта построчно вместо замены его целиком.
ElfbI, а кто заставляет менять целиком? Всё работает именно так, чтобы начать пользоваться сразу из коробки.

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

Примеры корректных имён функций есть в changelog: elf_GiveItTry, например.
Некорректная: (This.is.test Ab
Berserker, вы меня не поняли. Представим, что я создаю мод, который меняет кол-во стартовых денег, и вместо того, чтобы класть в мод скрипт 38 с новым значением целиком, я создаю скрипт с указанием подменить строчку такую-то в файле таком-то.
ElfbI, нет, так код не организуется вообще. Практически никогда и нигде.
Monkey patching — обезьяньи заплатки, это от безысходности.

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

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

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

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

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

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

!#MA:A0/20;

!#MA:A0/30;

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

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

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

Ладно, понял-принял, что делать.
Berserker, ссылка на скачивание не открываеться можеш другую кинуть
(21.06.2020 23:26)daemon_n Wrote: [ -> ]Artyr1995ua, держи - скопировал на ГУГЛ

Спасибо!)
daemon_n, Не запускаеться!(
Artyr1995ua, перекачай - вес файла 77мб должен быть
(22.06.2020 00:25)daemon_n Wrote: [ -> ]Artyr1995ua, перекачай - вес файла 77мб должен быть
Все верно.

(22.06.2020 00:25)daemon_n Wrote: [ -> ]Artyr1995ua, перекачай - вес файла 77мб должен быть
Все верно че делать просто не запускаеться
Reference URL's