Current time: 23.03.2024, 07:24 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Управление ближним ударом стека
» Damage.era
Author Message
Sav Offline

Posts: 2180
Post: #1

Dll модифицирует код определения целей при ближнем ударе существ.

Для Era 1.9 и выше.

Damage.era (v1.02).
Исходник (MSVC++).

Возможности: (Click to View)

Использование dll (Click to View)

Что на самом деле происходит (в порядке выполнения): (Click to View)

Что происходит в некоторых в специфических случаях: (Click to View)

Пример скрипта на основе dll (даёт пожарам свойство - при ударе атаковать сразу все стеки противника): (Click to View)
(This post was last modified: 20.06.2014 21:07 by Sav.)
27.11.2010 23:12
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #2

Sav, есть предложение параметры устанавливать через SN:X (как - покажу). Второе предложение - номер пост-триггера назначить на 78ххх, то есть следующая тысяча после Эры. Более универсально и логически правильно будет, IMHO.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
28.11.2010 00:35
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #3

Berserker Wrote:Sav , есть предложение параметры устанавливать через SN:X ( как - покажу ).
Дело в том, что между установкой параметров и их использованием может выполниться немаленький кусок кода. Кроме того, как только цель вычисляется, по ней сразу же наносится удар с вызовом !?MF, а лишь потом вычисляется следующая цель (с использованием параметров, естественно).
Если переданные через !!SN:X параметры сохранятся после всего этого, то, конечно, лучше передавать через них и не занимать переменные.

Berserker Wrote:Второе предложение -
номер пост- триггера назначить на 78 ххх, то есть
следующая тысяча после Эры. Более универсально
и логически правильно будет , IMHO.
Без проблем.
28.11.2010 00:58
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #4

Quote:Кроме того, как только цель вычисляется, по ней сразу же наносится удар с вызовом !?MF, а лишь потом вычисляется следующая цель (с использованием параметров, естественно).

Если переданные через !!SN:X параметры сохранятся после всего этого, то, конечно, лучше передавать через них и не занимать переменные.
Можно ли сделать триггер на начало удара?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
28.11.2010 01:09
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #5

Вот как условно выглядит сруктура кода после модификации:
Code:
...
for(i = 0; i < 41; i++)
{
1. Проверка бита v-переменной для текущего стека (i), если 0, то continue.
2. Вычисление адреса конструкций стека (что конкретно находится по этому адресу, я ещё не разбирал, но это используется при нанесении урона).
3. Нанесение урона (с вызовом !?MF).
}
...

Триггер здесь можно вствить куда угодно, будет ли от него толк - другой вопрос.
28.11.2010 01:45
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #6

Триггер нужно поставить до входа в цикл.

В модуле:
Code:
TYPE
    PEventParams    =    ^TEventParams;
    TEventParams    =    ARRAY[0..63] OF INTEGER;

VAR
    EventsParam:        PEventParams;
    LeftSideBits:        INTEGER;
    RightSideBits:    INTEGER;
    
BEGIN
    EventsParam    :=    Win.GetProcAddr(Win.GetModuleHandle('Angel.dll'), 'EventParams');
END.

EventsParam будет указывать на массив из 64 параметров SN:X. В триггере до входа в цикл нужно лишь обнулить первые два значения, вызвать ЕРМ-функции, сохранить два значения в LeftSideBits и RightSideBits. А в самом цикле использовать их, а не v-ки.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
28.11.2010 02:28
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #7

Спасибо. Переделал.
28.11.2010 18:55
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #8

Обновил dll - теперь она модифицирует и удар без флага бить всех вокруг (через вмешательство в проверки на этот флаг).
01.01.2011 20:19
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #9

Обновил dll.
Теперь она перед вызовом dll определяет, какие цели должны быть у удара, если его не модифицировать.

Теперь и исходник не стыдно выложить.Sm
03.01.2011 17:11
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #10

Отлично. Тестил на надёжность?

//Переенная битов целей атакующей стороны (1-й - 21-й биты) и включённости модификации (32-й бит).

//Если старые цели не совпадают с новыми, записываем новые цели в переменные целей и включаем модмфицирование.

Quote:Damage_ch_shit
36


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
03.01.2011 17:25
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #11

Спасибо за орфографию.Sm

Berserker Wrote:Тестил на надёжность?
Да, тестил на пожарах, лазурных драконах, горынычах и церберах - ошибок нет.
Не могу 100% гарантировать, что всегда будет нормально (всё-таки из-за проверки 2 раза выполняется большой кусок кода с записями в стек и пр.), но судя по тестам, все типы ближних ударов работают.

Quote:Damage_ch_shit
Это standart hit. Я не специально.147
03.01.2011 18:53
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #12

Обновил dll. Теперь в ней можно получить (изменить нельзя) номер основной цели (той, на которую игрок нажал мышкой при ударе) и номер атакующего стека. Последнее наконец-то даёт возможность нормально использовать эту dll.

Скрипт в примере теперь полностью рабочий и не обладает побочными эффектами.
03.01.2011 22:20
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #13

Исправил ошибку с адресом, из-за которой удар со сработавшим дыханием дракона блокировался.
07.06.2011 17:25
Find all posts by this user Quote this message in a reply
izrukvruki Offline

Posts: 2133
Post: #14

я плакаЛь Sorry (плакающий смайл есть у нас?), вспоминая те времена, когда каждый мод снабжался примерчиком (была такая практика), на котором каждый смертный мог видеть, что дает данный мод...
07.06.2011 18:31
Visit this user's website Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #15

Вот такой есть: 112.

Только у меня "что даёт" написано отдельно, а пример, скорее, для "как использовать". Sm
07.06.2011 22:53
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-2024 MyBB Group