Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ERM-->LUA
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > In the Wake of Gods
dik X.B.
Не знал где открыть тему, но инфа вроде интересная.

http://heroescommunity.com/viewthread.php3?TID=33943
Berserker
Ну вот и на этом поле у вогтим поражение.
dik X.B.
Похоже, что да.
hippocamus
Берс, это имхо детский конструктор для начинающих скриптёров. Они же пишут, что охват триггеров 90% и ресиверов 40%. То есть, при имеющейся беспомощности ERM вообще, этот эмулятор и того не может...
Berserker
Цитата
о есть, при имеющейся беспомощности ERM вообще, этот эмулятор и того не может...

При имеющейся силе ЕРМ, превосходящей Луа в Героях 5 по выразительности (читать: возможностям), автор сможет дописать переходники к остальным триггерам и командам. Это не сложно, просто рутинно. Я предложил другую модель реализации на форуме, в десятки, если не сотни раз быстрее.
Etoprostoya
Цитата(Berserker @ 31 Oct 2010, 00:25) *
Я предложил другую модель реализации на форуме, в десятки, если не сотни раз быстрее.

Имеешь в виду, писать скрипты на высокоуровневом языке, обрабатываемом потом PHP?
feanor
Не, делать перехват триггеров не механикой "хуки вога - ерм - ангел.длл - луа.длл", а напрямую. Ну и ресиверы исполнять через нативный код.
hippocamus
Цитата(Berserker @ 30 Oct 2010, 23:25) *
Цитата
о есть, при имеющейся беспомощности ERM вообще, этот эмулятор и того не может...

При имеющейся силе ЕРМ, превосходящей Луа в Героях 5 по выразительности (читать: возможностям),

Сила ERM?
Напиши на ERM скрипт, воскрешающий последний убитый отряд!
Напиши на ERM скрипт, сажающий героя в лодку!
Напиши на ERM скрипт, закрывающий карту-загадку!
Напиши на ERM скрипт, обеспечивающий диалог герой-герой, или открывающий окно определённого города!
Напиши на ERM скрипт, обеспечивающий посещение героем объекта без подтверждения!
Напиши на ERM скрипт, ставящий на карту тюрьму!
Не пиши про UN:C, с помощью UN:C можно всё, но всё это аналогично бинарной правке экзешника. C помощью UN:C можно написать геройский вирус.

Слабо? Разве это не есть то, чего мы ждём от ЛУА - нормальной работы со всеми объектами, без исключений?
feanor
Нет. От луа я жду нормальных именованных переменных, нормального синтаксиса и нормальной структуры программы. Ну и интерфейса для низкого уровня, да. А все функции реализовать всё равно невозможно.
packa
Я не понял что это штука делает, но

Ограничения снимает эта штуковина или нет (127 лвл, 10 городов, 255 юнитов)
Vizit0r
это язык скриптования, удобный и почти полноценный - не больше и не меньше.
Berserker
Цитата
Сила ERM?
Напиши на ERM скрипт, воскрешающий последний убитый отряд!
Напиши на ERM скрипт, сажающий героя в лодку!
Напиши на ERM скрипт, закрывающий карту-загадку!
Напиши на ERM скрипт, обеспечивающий диалог герой-герой, или открывающий окно определённого города!
Напиши на ERM скрипт, обеспечивающий посещение героем объекта без подтверждения!
Напиши на ERM скрипт, ставящий на карту тюрьму!
Не пиши про UN:C, с помощью UN:C можно всё, но всё это аналогично бинарной правке экзешника. C помощью UN:C можно написать геройский вирус.

Слабо? Разве это не есть то, чего мы ждём от ЛУА - нормальной работы со всеми объектами, без исключений?

По твоим меркам все Герои должны быть написаны на ЕРМ. Иначе нельзя из ЕРМ управлять каждой возможностью игры. Достаточно того, что функционал позволяет реализовывать целые карты-миры-моды с абсолютно другой механикой, чего не сделать ни в четвёрке, ни в пятёрке. А Луа не панацея. Точно также нужно выполнять обратный реинжиниринг кода и писать переходники/функции для реализации нужных фич.
hippocamus
Понятно. Я не знаю Луа, предполагал, что это си-подобный язык, дающий нам работу напрямую с классами. Примерно так (пишу на Делфи):

Код
if Heroes[I].Owner in Alliances[0] then
  begin
     Inc(Heroes[I].PrimarySkills[psSpellPower], 10);
     Heroes[I].DirectVisit(GetObject(0, 14, 52));
  end
else Heroes[I].ActiveSpells := Heroes[I].ActiveSpells or [spVisions];
feanor
Для этого классы надо расковырять.
А если они будут все разобраны - проще будет написать SDK для внешних DLL. Или вообще клон героев.
Айвен
Цитата
Понятно. Я не знаю Луа

Понятно. Информацией не владеем, а громкие заявления и решительные суждения выносим. Ну-ну. Типично.
Berserker
hippocamus, есть делфи - пиши на нём, а ЕРМ команды вызывать функцией. Вот тебе и предполагаемый язык. Единственный недостаток - исходников не видно и не сохраняется в сейве.
tolich
А зачем вызывать ERM-команды?
feanor
Потому что искать родные функции иногда напрягает.
Berserker
Потому что тысячи строк кода уже написаны в ЕРМ. Делать повторную работу = делать базу для замены ЕРМ. А от этого уже все отказались по понятным причинам. Собираюсь сделать плагин, реализующий описанный мною на HC метод. А там уж дело за модерами. Кто-то Луа, кто-то ЯП в DLL использует.
Etoprostoya
Berserker, можно поподробнее, что к чему?
feanor
На НС глянь, там вроде понятней.
Вроде как надо сначала создать "библиотеку" ERM-команд, которые нужно исполнять из длл.
Выглядеть она должна примерно так:
Код
!?FU40741;
!!ER:M^Needful erm receiver 1^;
!!ER:M^Needful erm receiver 2^;

Потом вызвать функции длл примерно так:
SetErmExecTrigger(40741);
ExecErmCmdByInd(1);
Berserker
Да, в таком ключе.
Код
!?FU70000;
!!HEv1:K; №0 убить героя с номером v1
!!HEv1:Ov2; №1 установить герою v1 хозяина v2


SetErmExecTrigger(70000);
v1:=0; // Orrin
ExecErmCmdByInd(0); выполнить 0-ую команду триггера
v1:=1;
v2:=RED;
ExecErmCmdByInd(1); выполнить 1-ую команду триггера


Переходники для Луа в итоге пишутся не сложно. Рутинно, конечно, из-за кол-ва ЕРМ команд и необходимости различать GET/SET синтаксис.
И такой подход по быстродействию много предпочтительнее, чем выбрал GrayFace - натравливание объёмной процедуры FindErm на маленький кусочек текста, его анализ и динамическое выполнение. Хотя в таком случае можно выполнять команды любые, даже динамически сгенерированные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.