Current time: 25.11.2024, 02:05 Hello There, Guest! (LoginRegister)
Language: english | russian  

Thread Closed 
Threaded Mode | Linear Mode
New Era Of Heroes
» WoG 3.58f + Era 1.81
Author Message
Berserker Offline
Administrators

Posts: 16657
Post: #331

Украл из dll бараторча:
IsNetworkGame (69959C) dword
GameType (698A40) dword (hotseat = 3)


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
23.07.2011 18:45
Find all posts by this user
FallenAngel Offline

Posts: 844
Post: #332

MOP, странно, у меня ЭРА ненавидит все твои dll и bin, кроме AllStartHeroes. Встречалось такое? Как только любой из них оказывается в папке с плагинами, при нажатии на кнопку "Сценарии" игра вылетает сразу после того, как прочтет карты.
26.07.2011 02:26
Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #333

Как применялись заплатки?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
26.07.2011 04:38
Find all posts by this user
FallenAngel Offline

Posts: 844
Post: #334

Berserker, все лежит в своих фолдерах. В частности, в EraPlugins. Честно говоря, куда я их только ни кидал.
26.07.2011 10:07
Find all posts by this user
MOP Offline
Moderators

Posts: 1468
Post: #335

Вот то-то и оно, что не всё должно лежать в папках. Я ведь не случайно указываю - "это для памяти", "это для exe". Что для exe - должно быть внутри exe, который патчить надо этим бинарником с помощью ExeBuilder-а.
Вообще, стоило бы делать всегда версии и для памяти, и для экзешника, но мне лень. В последнее время предпочитаю для народа делать только для памяти, чтобы подобных вопросов не возникало.
Длл-ки должны работать, если им ничего не мешает.

P.S. Обновил Battery.dll. Исправил одну ошибку (спасибо Майору за тестинг) и добавил триггер на клики к окне Форта (по его же предложению).


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
29.07.2011 08:57
Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #336

http://zalil.ru/31485326
Две главы из руководства по Эре. Если есть замечания - пишите сейчас. Осталась глава для программистов/скриптописцев, самая объёмная.
MOP, а где сам майор-то?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
29.07.2011 23:44
Find all posts by this user
FallenAngel Offline

Posts: 844
Post: #337

Berserker, MOP, прошу прощения. Я не очень то и внимателен в таких вещах.
30.07.2011 16:12
Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #338

+) В ядро Эры 1.9 добавлен контроль выполнения ЕРМ кода, так что F12 не действует больше во время выполнения ЕРМ.
+) Добавлены события OnBeforeTrigger/OnAfterTrigger для универсального отлова вызова любого ЕРМ триггера. Эра использует их для сохранения y-переменных.
-) Исправлена критическая ошибка в движке Эра 1.9- (не сохранялись локальные y-переменные для всех триггеров с ID > 30000).


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
01.08.2011 17:49
Find all posts by this user
MOP Offline
Moderators

Posts: 1468
Post: #339

(29.07.2011 23:44)Berserker Wrote:  MOP, а где сам майор-то?
Это и для меня загадка. Когда-то был частым гостем, а теперь даже если на форум зайдёт - ничего не пишет.


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
01.08.2011 18:01
Find all posts by this user
GreyGhost Offline

Posts: 178
Post: #340

немного не скромный вопрос, Берс - на сколько ты знаешь внутряк ERM, можешь прицепить lua.dll к era.dll
ждать 3.59 можно бесконечно, а реализовать частичное LUA-програмирование можно и сейчас.
если мне не изменяет восприятие (не совсем трезвого мозга), то:
инструкции - STANDART function с обязательным вызовом при старте
триггеры - CALLBACK function
ресиверы - STANDART function
вроде вся эта ахинея доступна для реализации на lua.

с учётом сколько всего нагородили, очень странно что до сих пор луа не фурычит
02.08.2011 19:59
Visit this user's website Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #341

   GreyGhost, ЕРМ я знаю настолько, насколько могу знать из случайных вылазок в отладчик и поиска нужных вещей в исходниках. Lua может кто хочет добавлять, Эра всё для этого даёт: секции в сохранённом файле, подписку на события, выполнение команд ЕРМ на лету. Если не ошибаюсь, были попытки на heroescommunity.
   Мне это просто не интересно, а мало кто из нас делает то, что неинтересно.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
02.08.2011 20:25
Find all posts by this user
gamecreator Offline

Posts: 7107
Post: #342

луа уже добавлено в 3.59, можно выпросить у корвог Sm


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
02.08.2011 22:10
Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #343

Там через исходники. Здесь нужно самим. Главное найти энтузиаста.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
02.08.2011 22:38
Find all posts by this user
gamecreator Offline

Posts: 7107
Post: #344

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


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
03.08.2011 00:03
Find all posts by this user
Berserker Offline
Administrators

Posts: 16657
Post: #345

Пописал немножко, отдаю на рецензирование:

Quote: I. Новые команды.
    Новые команды были введены при помощи расширения стандартной операции "SN". Все команды Эры могут работать со следующими элементами ЕРМ:
    - Числовыми положительными и отрицательными константами;
    - Синтаксисом установки (без модификатора "d") и получения ("?") значений;
    - Переменными y+, v, w, x, z+, f..t, e;
    - Строковыми константами в виде ^...^.
    Ядро Эры передаёт командам набор целых чисел (4 байта каждое). В случае строк или синтаксиса получения значения, эти числа представляют собой адреса переменных. Адрес переменной - числовое значение, описывающее местоположение данных в оперативной памяти. Максимальное количество параметров команды: 64.
    Примеры:
    !!SN:Xv1; передать число в v1
    !!SN:X?v1; передать адрес переменной v1
    !!SN:Xz1; передать адрес переменной z1
    !!SN:X^text^; сохранить текст и передать его адрес
   
    << Подгрузка динамической библиотеки (DLL) >>
    !!SN:L[путь к библиотеке]/?[описатель загруженной библиотеки];
   
    Пример:
    !!SN:L^kernel32.dll^/?y1;
   
    << Получить адрес машинной функции из библиотеки >>
    !!SN:[описатель загруженной библиотеки]/[название функции]/?[адрес функции];
   
    Пример:
    !!SN:L^kernel32.dll^/?y1 Ay1/^lstrcpyA^/?y2;
   
    << Выполнить машинную функцию >>
    !!SN:E[адрес функции]/[соглашение о вызове]/аргументы...
   
    Соглашение о вызове:
    - 0 (PASCAL)
    - 1 (CDECL или STDCALL)
    - 2 (THISCALL)
    - 3 (FASTCALL)
   
    По умолчанию от функции ожидается целочисленный результат, который будет помещён в переменную v1. Если же функция возвращает вещественный результат, то к номеру соглашения нужно прибавить 4. Все системные библиотеки используют соглашение STDCALL.
   
    Пример:
    !!SN:L^kernel32.dll^/?y1;
    !!SN:Ay1/^lstrcpyA^/?y2;
    !!SN:Ey2/1/z1/z2; Скопировать содержимое z2 в z1. Аналог !!VRz1:Sz2;
   
    << Переход на определённую команду текущего триггера >>
    !!SN:G[номер команды, начиная с 0];
   
    Пример:
    !?CM0; правая кнопка мыши на карте приключений
    0; !!SN:G2; перейти на команду №2
    1; !!IF:M^данный текст никогда не покажется^;
    2; !!IF:M^покажется этот текст^;
   
    Примечание: нумерация команд приведена сугубо для примера.
   
    << Получение адреса ЕРМ функции >>
    !!SN:C0/[номер функции]/?[адрес функции];
   
    Адрес ЕРМ функции используется для перехода на её любую команду.
   
    << Переход на команду ЕРМ функции >>
    !!SN:C[адрес ЕРМ функции]/[номер команды, начиная с 0];
   
    Функция, получившая управления, использует те же локальные переменные, что и вызывающая. В этом её плюс. Обычный вызов функции (!!FU:P) - весьма дорогостоящая операция, а переход происходит почти мгновенно, при этом Эра запоминает адрес возврата.
   
    << Возврат из перехода к ЕРМ функции >>
    !!SN:R;
   
    Пример:
    !?FU40000;
    0; !!IF:M^пока^;
    1; !!IF:M^привет^;
    2; !!SN:R;
   
    !?CM0; правая кнопка мыши на карте приключений
    !!SN:C0/40000/?y1; y1 - адрес ЕРМ функции 40000
    !!SN:Cy1/1; Выполнить переход на 40000:1
    !!IF:M^мир^;
   
    Будет показано два сообщения: "привет" и "мир".

    ! Внимание ! Очень важно, чтобы количество переходов совпадало с количеством возвратов.
   
    << Прервать обработку текущего события >>
    !!SN:Q;
   
    Команда отличается от !!FU:E тем, что прерывает всю цепочку однотипных триггеров.
    Пример:
    !?FU40000;
    !!SN:Q; покинуть цепочку триггеров FU40000
   
    !?FU40000;
    !!IF:M^это сообщение никогда не будет показано^;
   
    !?CM0;
    !!FU40000:P; вызвать функцию 40000
   
    << Доступ к параметрам новых событий >>
    !!SN:X[до 16 параметров]...
   
    Новые события Эры (о которых речь пойдёт ниже) и добавляемые модулями события нуждаются в возможности обмениваться данными со скриптами. Эту возможность обеспечивает команда X, выступающая в качестве хранилища значений. Тип значений определяется способом работы с ними. Так, можно установить в слот 0 значение 5, а потом получить его в вещественную e-переменную. Поскольку работа происходит на машинном уровне, то в "e" окажется вовсе не 5, а неопределённый мусор. В случае получения строки, команда трактует значение в слоте как адрес. Поэтому "!!SN:X0; !!SN:X?z1;" приведёт к вылету, так как по адресу 0 нет никакой строки.
   
    Пример:
    !!SN:X?y1/?y2; получить первых два параметра события
    !!SN:Xz1; первый параметр - адрес строки z1
    !!SN:X?y1; y1 - адрес строки z1
   
    << Работа с дополнительной памятью >>
    !!SN:M[...];
   
    ЕРМ переменные статичны и ограничены в количестве. Статичность приводит к невозможности организовывать динамические структуры данных (например, списки), для которых нужны функции выделения и освобождения памяти, а ограниченное количество ведёт к необходимости строгого учёта индексов без возможности выйти за их пределы. Более того, ЕРМ строки в виде z-переменных занимают ровно 512 байт каждая в независимости от размера их содержимого. Эра предоставляет программисту до 2 млрд. слотов под массивы новых переменных (числовых или строковых). Размер массивов может изменяться средствами ЕРМ. Поскольку работа с динамическими структурами предполагает автоматическое выделение номеров слотов, то такая возможность присутствует. Слоты с положительными индексами принадлежат пользователю, а с отрицательными используются при автовыделении памяти.
   
    << Удаление слота памяти >>
    !!SN:M[номер слота, начиная с 0];
   
    Пример:
    !!SN:M5; удалить слот 5
   
    << Получение/установка размера слота >>
    !!SN:M[номер слота]/[?][количество элементов];
   
    Размер слота - это количество элементов в массиве. Команда возвращает -1, если слот не существует.
    Пример:
    !!SN:M2/5; установить количество элементов в слоте 2 равное 5.
    !!SN:My1/?y2; получить размер слота y1 в переменную y2.
   
    << Работа со значениями элементов слотов >>
    !!SN:M[номер слота]/[номер элемента, начиная с 0]/[?][значение];
   
    Пример:
    !!SN:M1/3; размер слота 1 - 3 элемента
    !!SN:M1/0/111 M1/1/222 M1/2/333; содержимое слота 1: 111, 222, 333
    !!SN:M1/1/?y5; y5 - содержимое 1-го элемента слота 1
    !!IF:M^%Y5^; выведет: "222"
   
    << Получение адреса элемента слота >>
    !!SN:M[номер слота]/?[адрес элемента]/[номер элемента];
   
    ! Внимание ! При удалении слота или изменении его размера адрес станет недействительным!
   
    Пример:
    !!SN:M1/?y1/2; y1 содержит адрес 2-го элемента слота 1
   
    << Создание нового слота >>
    !!SN:M[номер слота]/[количество элементов]/[тип элементов]/[запоминать ли значения в сохранёнках];
   
    Старое содержимое слота, если оно было, уничтожается.
    *номер слота* - "-1" для автовыделения свободного номера и помещения его в v1.
    *тип элементов*:
    - 0 (число)
    - 1 (строка)
    *запоминать ли значения в сохранёнках*
    - 0 (нет, при загрузке игры содержимое элементов будет представлять собой случайный мусор)
    - 1 (да, содержимое нужно сохранять как есть)
    Примечание: при 0 экономится место в файле и возрастает скорость сохранения.
   
    Пример:
    !!SN:M0/4/1/1; выделить массив из 4-х строк в слоте 0. Сохранять их содержимое при загрузке
    !!SN:M0/2/^привет^; установить значение 2-й строки слота 0
    !!SN:M0/3/^мир^; установить значение 3-й строки слота 0
    !!SN:M0/2/?z1 M0/3/?z2; получить значения 2-й и третьей строк в z1, z2
    !!IF:M^%Z1 %Z2^; выведет "привет мир"
    !!SN:M0; удалить слот 0
    !!SN:M-1/0/0/0; выделить пустой слот под временный массив чисел
    !!VRy1:S1 R6; сгенерировали случайное число 1..6
    !!SN:Mv1/y1; установили размер нового слота в это число
    !!VRy1:-1; y1 - индекс последнего элемента в слоте
    !!SN:Mv1/y1/777; значение последнего элемента слота - 777
   
    << Получение размера строки >>
    !!SN:K[строка или её адрес]/?[размер строки];
   
    Пример:
    !!VRz1:S^123^;
    !!SN:Kz1/?y1; y1 = 3
   
    << Работа с символами строки >>
    !!SN:K[строка или её адрес]/[номер символа, начиная с 0]/[?][значение символа];
   
    Пример:
    !!VRz1:S^abc^;
    !!SN:Kz1/2/^d^; установить 2-й символ строки z1 в "d"
    !!IF:M^%Z1^; выведет "abd"
   
    << Копирование блока памяти >>
    !!SN:K[кол-во байт]/[адрес источника]/[адрес приёмника]/[произвольное значение];
   
    Пример:
    !!SN:K12/?v1/?y1/1; скопировать 12 байт (3 числа по 4 байта) из v1, v2, v3 в y1, y2, y3
    !!VRv1:C1/2/3; v1 = 1, v2 = 2, v3 = 3
    !!SN:K12/?y1/?v1/1; восстановить значения v1, v2, v3
   
   
    II. Новые события (триггеры).
    Новые события вводятся в игру не в виде привычных ЕРМ триггеров в виде !?XX, а в виде нестандартных номеров функций > 30000. Эра резервирует для своих нужд функции с номерами 77000..77999. Скриптописцы и создатели плагинов могут использовать значения в диапазоне 40000..134217727. Была убрана привязка к диапазону 0..30000 для ЕРМ функций.
    Все новые события обладают набором из 16 локальных (неизменяемых повторно генерируемыми событиями) параметров. Доступ к параметрам осуществляется посредством команды SN:X.
   
    << Расширенные стандартные события >>
    Расширенные стандартные события также обладают собственными SN:X параметрами и дополнительными возможностями.
   
    << !?GM1 >>
    Параметры: Имя сохранения.
   
    Пример:
    !?GM1;
    !!SN:X?z1; получили имя сохраняемой игры
    !!VRz1:+^_%Gc^; добавили к нему цвет текущего игрока
    !!SN:Xz1; установили новое имя сохранения
   
    Если красный игрок выбрал newgame, то игра будет сохранена в файл: "newgame_Красный.gm1".
   
    << !?MM0 >>
    Параметры:
    1: Номер текущего отряда или -1.
    2: Номер отряда, на который наведён курсор или -1.
    3: Минимальный урон.
    4: Максимальный урон.
   
    Триггер удобен для замены стандартной подсказки на расширенную с указанием, сколько единиц противника будут убиты при ударе.
   
    Пример:
    !?MM;
    !!SN:X?y1/?y2/?y3/?y4; получили параметры события
    !!FU&y2=-1:E; вышли, если это не подсказка об уроне
    !!BMy2:H?y5 L?y6 N?y7; y5 - жизнь, y6 - потерянное здоровье, y7 - кол-во единиц противника
    !!VRy8:Sy5-y6; y8 - здоровье последней единицы отряда
    !!VRy9:Sy3:y5; y9 - мин. кол-во умрут
    !!VRy10:Sy3%y5; y10 - урон по последней единице в худшем случае
    !!VRy9&y10>=y8:+1; y9 - мин. кол-во умрут
    !!VRy11:Sy4:y5; y11 - макс. кол-во умрут
    !!VRy12:Sy4%y5; y12 - урон по последней единице в лучшем случае
    !!VRy11&y12>=y8:+1; y11 - макс. кол-во умрут
    !!VRy13:Sy5*y7-y6; y13 - общее кол-во здоровья отряда
    !!VRy9&y9>y7:Sy7; y9 - мин. кол-во умрут
    !!VRy11&y11>y7:Sy7; y11 - макс. кол-во умрут
    !!IF:V2/0;
    !!IF&y9=y11:V2/1; флаг 2 говорит о том, что мин. и макс. уроны совпадают
    !!IF:V3/0;
    !!IF&y9=y7:V3/1; флаг 3 говорит о том, что весь отряд по-любому умрёт
    !!VRz2:S^%Y3-%Y4^; урон в формате "мин - макс"
    !!VRz2&y3=y4:S^%Y3^; урон в формате "урон"
    !!VRz3:S^Damage:^;
    !!if&3:; если весь отряд умрёт
    !!VRz1:S^%Z3 %Z2. {~Yellow}FATALITY{~}^;
    !!el:;
    !!VRz1:S^%Z3 %Z2. Kills: {~Yellow}%Y9-%Y11{~}^; урон с разбросом
    !!VRz1&2:S^%Z3 %Z2. Kills: {~Yellow}%Y9{~}^; урон без разброса
    !!en:;
    !!MM:Mz1; установить новую подсказку


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
03.08.2011 00:33
Find all posts by this user
« Next Oldest | Next Newest »
Thread Closed 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group