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

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Berserker Offline
Administrators

Posts: 10163
Post: #16

   Плагины можно писать в старом и новом стиле. Совместимость сохраняется. Старые грузятся как раньше и имеют расширение *.dll. Новые грузятся до ВоГа и могут экспортировать функции с именами событий, на которые они хотят подписаться (так как выполнять код в DllMain идеологически неверно). В функции OnBeforeWoG меняем до вога, а в функции OnAfterWoG - после.
   Новые плагины сами могут генерировать события. Например, сообщение из чата. Плагин вызывает FireEvent('OnChatMsg', адрес данных, размер данных) и все, кто экспортирует функцию "OnChatMsg" смогут обработать событие.
01.07.2011 18:18
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 476
Post: #17

Quote: все, кто экспортирует функцию "OnChatMsg" смогут обработать событие.
Особо регистрировать не надо?

Какие будут события?
Хотелось бы, конечно, увидеть реализацию всех триггеров ВоГа (:
01.07.2011 20:13
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #18

   Если бы писалась 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);
01.07.2011 20:29
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #19

Блин, хайрез портит цвета. То ли он неправильно переводит 16-битный цвет, то ли просто использует 32-битный.
01.07.2011 21:15
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 476
Post: #20

Quote: Есть ЕРМ.
Вогификация отключаема (я, в частности, зачастую играю без неё). Собственно, из-за этого я не люблю гибриды типа "библиотеки+скрипты"
Quote:Да, ЕРМ из dll использовать легко.
Читал. Правда, смутило кэширование - значит ли это, что выполнение, скажем, команды типа !!HE111:I?y1 будет возвращать один и тот же результат (ну, по крайней мере, до очистки кэша) независимо от реального количества маны?
01.07.2011 21:16
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #21

Quote:Вогификация отключаема (я, в частности, зачастую играю без неё). Собственно, из-за этого я не люблю гибриды типа "библиотеки+скрипты"
Отключать на платформе скрипты неразумно (проще удалить все ненужные или стандартные), они такое же средство расширения игры, как и плагины. При этом скрипты хранятся в сейве, легче меняются и уже давно применяются.

Quote:Читал. Правда, смутило кэширование - значит ли это, что выполнение, скажем, команды типа !!HE111:I?y1 будет возвращать один и тот же результат (ну, по крайней мере, до очистки кэша) независимо от реального количества маны?
Кэш в плане того, что команда уже скомпилирована и не нужен повторный синтаксический анализ.
01.07.2011 21:45
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 476
Post: #22

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

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

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

Quote:Кэш в плане того, что команда уже скомпилирована и не нужен повторный синтаксический анализ.
ага, понятно
(This post was last modified: 01.07.2011 22:08 by feanor.)
01.07.2011 22:04
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #23

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

Quote:Правда таймер реального времени такая гадость..
Для отладки Sm
02.07.2011 00:11
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 476
Post: #24

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

Quote:полноценный перехват должен ещё параметры для каждого события вытаскивать
Какие параметры? В ресиверах же нет параметров. Или речь о том, чтоб сообщать, мол, не просто вызван триггер AE, а еще и v998/999 передавать в параметрах для функции?
(This post was last modified: 02.07.2011 01:03 by feanor.)
02.07.2011 00:47
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #25

Для любого события есть много параметров. У щелчка мышкой это CM:IFS (место щелчка, нажатые кнопки, статус кнопок, включена ли стандартная реакция) и другие. Но их можно получить через динамическое выполнение ЕРМ, так что не проблема. А таймер реального времени не так и страшен, ведь он кратен секундам.
02.07.2011 01:26
Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7096
Post: #26

(01.07.2011 21:15)Berserker Wrote:  Блин, хайрез портит цвета. То ли он неправильно переводит 16-битный цвет, то ли просто использует 32-битный.
32-битный.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
02.07.2011 01:43
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #27

Да нет, цвет заносится в два байта при обработке, значит конвертация на лету. Такое ощущение, что схалтурили и, поскольку цветов текста было всего три, прописали жёстко.
02.07.2011 13:37
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #28

По хайрезу был не прав. Бараторч подсказал решение. Изменение масок цвета позволяет игре полноценно воспринимать формат r5g6b5.
03.07.2011 01:20
Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7096
Post: #29

Т.е. в оригинальных героях 5-5-5-1, а в хайрезе 5-6-5?


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
03.07.2011 01:24
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10163
Post: #30

Есть три переменные, в которых содержатся маски цветов. Стандартные маски 5-5-5, а хайрезовы: 5-6-5. Решение - установить режим 5-6-5 и не париться.
03.07.2011 01:28
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-2017 MyBB Group