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

Full Version: ERA II
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
   Плагины можно писать в старом и новом стиле. Совместимость сохраняется. Старые грузятся как раньше и имеют расширение *.dll. Новые грузятся до ВоГа и могут экспортировать функции с именами событий, на которые они хотят подписаться (так как выполнять код в DllMain идеологически неверно). В функции OnBeforeWoG меняем до вога, а в функции OnAfterWoG - после.
   Новые плагины сами могут генерировать события. Например, сообщение из чата. Плагин вызывает FireEvent('OnChatMsg', адрес данных, размер данных) и все, кто экспортирует функцию "OnChatMsg" смогут обработать событие.
Quote: все, кто экспортирует функцию "OnChatMsg" смогут обработать событие.
Особо регистрировать не надо?

Какие будут события?
Хотелось бы, конечно, увидеть реализацию всех триггеров ВоГа (:
   Если бы писалась 2.0 с потерей совместимости, то все события Эры 1.8 + новые, а так только OnBeforeWoG/OnAfterWoG + те, что будут добавляться плагинами для других плагинов. Вызов прост: имя события, адрес, где лежат параметры и размер параметров в байтах (могут быть NIL|NULL, 0).
   Особо регистрировать не надо, но нужно экспортировать функцию чётко по имени. С сишными компиляторами нужны пляски с бубном в виде EXTERN "C" + своего def-файла (получилось на DevC++), чтобы функция не получила префиксов, постфиксов или чего похуже. С паскалем проще. Там пишешь exports MyFunc и спишь спокойно.
Quote:Хотелось бы, конечно, увидеть реализацию всех триггеров ВоГа (:

   Есть ЕРМ. 1 скрипт в виде множества !?xx перенаправит триггеры на dll, а та может вещать события для всех плагинов.
   Да, ЕРМ из dll использовать легко.
Code:
ExecErmCmd('IF:Lz1;');

   Для СИ/СИ++
Code:
void* Cmd = AllocEraStr('IF:Lz1;');
ExecErmCmd(Cmd);
FreeEraStr(Cmd);
Блин, хайрез портит цвета. То ли он неправильно переводит 16-битный цвет, то ли просто использует 32-битный.
Quote: Есть ЕРМ.
Вогификация отключаема (я, в частности, зачастую играю без неё). Собственно, из-за этого я не люблю гибриды типа "библиотеки+скрипты"
Quote:Да, ЕРМ из dll использовать легко.
Читал. Правда, смутило кэширование - значит ли это, что выполнение, скажем, команды типа !!HE111:I?y1 будет возвращать один и тот же результат (ну, по крайней мере, до очистки кэша) независимо от реального количества маны?
Quote:Вогификация отключаема (я, в частности, зачастую играю без неё). Собственно, из-за этого я не люблю гибриды типа "библиотеки+скрипты"
Отключать на платформе скрипты неразумно (проще удалить все ненужные или стандартные), они такое же средство расширения игры, как и плагины. При этом скрипты хранятся в сейве, легче меняются и уже давно применяются.

Quote:Читал. Правда, смутило кэширование - значит ли это, что выполнение, скажем, команды типа !!HE111:I?y1 будет возвращать один и тот же результат (ну, по крайней мере, до очистки кэша) независимо от реального количества маны?
Кэш в плане того, что команда уже скомпилирована и не нужен повторный синтаксический анализ.
Quote:Отключать на платформе скрипты неразумно (проще удалить все ненужные или стандартные), они такое же средство расширения игры, как и плагины. При этом скрипты хранятся в сейве, легче меняются и уже давно применяются.
Ну, я неразумен (:

Впрочем, вроде нашел б/м приемлемую альтернативу:
хук на 0074C816 - вызов функции по номеру;
взятие номера из [27C1950]
сравнение с зарезервированными номерами.

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

Quote:Кэш в плане того, что команда уже скомпилирована и не нужен повторный синтаксический анализ.
ага, понятно
Quote:Впрочем, вроде нашел б/м приемлемую альтернативу:
Угу, перехват ProcessErm. Единственная рутина - полноценный перехват должен ещё параметры для каждого события вытаскивать, хотя их можно и через ЕРМ получить, в принципе.

Quote:Правда таймер реального времени такая гадость..
Для отладки Sm
Quote:Для отладки
Просто если транслировать каждый его вызов - это ж ппц будет.

Quote:полноценный перехват должен ещё параметры для каждого события вытаскивать
Какие параметры? В ресиверах же нет параметров. Или речь о том, чтоб сообщать, мол, не просто вызван триггер AE, а еще и v998/999 передавать в параметрах для функции?
Для любого события есть много параметров. У щелчка мышкой это CM:IFS (место щелчка, нажатые кнопки, статус кнопок, включена ли стандартная реакция) и другие. Но их можно получить через динамическое выполнение ЕРМ, так что не проблема. А таймер реального времени не так и страшен, ведь он кратен секундам.
(01.07.2011 21:15)Berserker Wrote: [ -> ]Блин, хайрез портит цвета. То ли он неправильно переводит 16-битный цвет, то ли просто использует 32-битный.
32-битный.
Да нет, цвет заносится в два байта при обработке, значит конвертация на лету. Такое ощущение, что схалтурили и, поскольку цветов текста было всего три, прописали жёстко.
По хайрезу был не прав. Бараторч подсказал решение. Изменение масок цвета позволяет игре полноценно воспринимать формат r5g6b5.
Т.е. в оригинальных героях 5-5-5-1, а в хайрезе 5-6-5?
Есть три переменные, в которых содержатся маски цветов. Стандартные маски 5-5-5, а хайрезовы: 5-6-5. Решение - установить режим 5-6-5 и не париться.
Reference URL's