Как сделать пустой Erm артефакт со свойством 25%, 50% или 100% сопротивление магии.
В триггере MR1 проверяешь надет ли на героя артефакт. Если надет, то отнимаешь (с помощью рисивера MR) от вычисленного урона 25% базового (следишь чтобы не стало меньше нуля).
Does anyone know how to change battlefield picture during battle, if battleground is regular?
I have the following issues:
1) If during battle I change background with BA:B^file.pcx^, from regular battleground, it does not work
2) If at battle start, battleground was set to custom, we can change battlegrounds as many as we want, any battle round.
I am confused.
This is because of how WoG battlefield changing works. It hooks into SoD battle code, and either just calls default function (if you do BA:B-1) or chooses from several standard and one custom positions. Because there is only one custom position, every new custom battlefield is set into the same variable, so changes are applied instantly. BTW this way the battlefiend name can't be longer than 255 characters.
To make this work, you have to emulate battle code: either call WoG hook 0x761B8A (cdecl, no args) to obtain the standard memory address after BA:B or allocate Era string instead and get its memory address, then assign this memory address to [[0x699420]+0x13464].
I believe it would look like this:
Thanks you very much, you solved a big issue.
I created a topic in english forums about the mod I am currently working on, as it raised some unexpected issues.
The second way in unsafe, nope? SN:M will be deallocated on other map/game start/load.
Berserker, сохраняться и загружаться посреди боя нельзя. А какие могут быть баттлфилды вне боя?
Просто первый вариант работает ещё и для числовых обозначений полей.
Looks like a special check/update is processed when:
-you open combat options (click on button is sufficient)
-select a spell in magic book (no need to cast)
-move/attack with creature (or maybe is triggered by next creature moving, hard to check, is going fast)
I tried all other buttons/actions, only those three options trigger battlefield redraw.
а если попробовать обновить окно боя через эту функцию
0x00493F10 void __thiscall CombatMan_Redraw(_CombatMan_ *a1, int a2, signed int item)
{
_CombatMan_ *v3; // ebx@1
signed int v4; // esi@3
int list; // [sp+8h] [bp-1Ch]@3
void *v6; // [sp+Ch] [bp-18h]@3
int v7; // [sp+10h] [bp-14h]@3
int v8; // [sp+14h] [bp-10h]@3
int v9; // [sp+20h] [bp-4h]@3
v3 = a1;
if ( !gbProcessingCombatAction || item )
{
LOBYTE(list) = BYTE3(item);
v6 = 0;
v7 = 0;
v8 = 0;
v4 = a2;
v9 = 0;
if ( a2 >= 0 && a2 < 187 && a2 % 17 && a2 % 17 != 16 )
{
item = a2;
AddItemToList(&list, 0, 1u, (void **)&item);
}
else
{
v4 = -1;
}
CombatMan_DrawCursorShadow((int)v3, v4, (int)&list, 0);
delete(v6);
}
только вот как узнать необходимые параметры для выполнения функции
upd:
(28.10.2014 21:34)igrik Wrote: [ -> ]только вот как узнать необходимые параметры для выполнения функции 
Как-как: взять да и посмотреть в дизасме.
Чаще всего a2 = -1 и item = 0. Значит так и надо вызывать, а не какая-то магия у тебя в ЕРМ коде.
Вот и всё, не надо ничего мудрить.
хорошо, я понял.
Тогда встречный вопрос: возможно ли узнать номер заданного артефакта (int a2), в случае, если мне его нужно проверить а не получить?
в !!SN:E5084256/2/v2/129; , где: v2 - ссфлка на героя; 129 - номер арта. Могу ли я узнать как-то этот номер арта?
0x004D9460 (5084256d) char __thiscall HeroHasArt(_Hero_ *this, int a2)
Что значит узнать? Это функция проверочная. Возвращает true если арт у героя есть и false - если нет.
то что проверочная я знаю. И знаю что во флаг v1 заносится результат проверки. Но вопрос тот же: могу ли я через ERM узнать номер проверяемого арта или нет.
А ты в функции этой что-то перехватываешь? Потому что за пределами функции номер этот не существует.