Current time: 04.04.2025, 14:26 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Ваши вопросы по ERM-скриптам
Author Message
Berserker Offline
Administrators

Posts: 16731
Post: #9286

Archer30, you don't need to get semi-formed string. You can modify existing string object by appending another string (line) to it with your custom text.

  1. !?FU(arch_OnAfterSetArtLuckDesc);
  2. !#VA(hook:x);
  3. !!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBP)/4/?(ebp:y);
  4. !!UN:C(ebp)/-32/4/?(ptr:y);
  5. ...
  6. !!SN:E.../.../^you appended string, probably with newline^/length of your appended string;


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

Posts: 1190
Post: #9287

So it should be like this?

  1. !?FU(arch_CreateERMHook);
  2. !!SN:Ex1/1/4505502/(arch_OnAfterSetArtLuckDesc); 44BF9E
  3. !?FU(arch_OnAfterSetArtLuckDesc);
  4. !#VA(hook:x);
  5. !!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBP)/4/?(ebp:y);
  6. !!UN:C(ebp)/-32/4/?(ptr:y);
  7. !!VRz2:S^you appended string, probably with newline^;
  8. !!SN:Kz2/?(size:y);
  9. !!SN:E4305568/(CALLCONV_THISCALL)/(ptr)/9598440/(size);
  10. *!SN:E4305568/(CALLCONV_THISCALL)/(ptr)/?z2/(size);

Got crashes Rolleyes


Latest ERA mods and scripts in development - My GitHub
19.04.2024 01:25
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16731
Post: #9288

replace !!UN:C(ebp)/-32/4/?(ptr:y); with !!VR(ptr:y):S(ebp) -32;


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

Posts: 1190
Post: #9289

Berserker, everything's working perfect, thanks!

___________________


Hold on, there is one more thing.
The game stores how many morale/luck descriptions have been "registered" and leaves those "unregistered" as "temporary" like in the pic. It compares the morale/luck values in creature stack info and the morale/luck description value. If there is a difference, the temporary value would be shown.
Image: etfqdnH.png
Now I can register a few more with the tricks here. How do I register so that the temporary description can be hidden?

_____

Fixed. That's EBP+10h around my hook


Latest ERA mods and scripts in development - My GitHub
(This post was last modified: 19.04.2024 20:05 by Archer30.)
19.04.2024 11:22
Find all posts by this user Quote this message in a reply
fatsawhorse Offline

Posts: 1022
Post: #9290

Здравствуйте.. Может кто-нибудь знает как заставить командира при получении своего хода не колдовать автоматически, а идти в бой только при помощи скрипта, чтобы каждый раз не щёлкать мышью на выборе между колдовством и борьбы на основной панели боя (а то вместо боя командир отсиживается на своей клетки, колдуя и не идёт в бой)?
(This post was last modified: 24.04.2024 01:18 by fatsawhorse.)
24.04.2024 01:17
Find all posts by this user Quote this message in a reply
vitor Offline

Posts: 3
Post: #9291

Доброго дня, подскажите каким образом можно воскресить существо павшее в бою с помощью ERM (не архангелами и не заклинанием), и установить требуемое количество юнитов?
(This post was last modified: 24.04.2024 14:14 by vitor.)
24.04.2024 13:58
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1330
Post: #9292

vitor, возможный вариант:
нужно сначала убрать труп с поля боя, а потом вызвать на тот же гекс через команду !!BU:S новый отряд монстров.


Карта-мод "Война на Холсте"
25.04.2024 02:58
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16731
Post: #9293

Через BM:V сыграть анимацию заклинания, через SN:P звук воскрешения (имя не помню) и вручную восстановить через BM:L/N команды показатели текущего у последнего монстра в отряде и количества существ в отряде. После чего BU:R. Но это если отряд не погиб полностью. Иначе нужно ещё снимать флаг убитого через BM:F и ещё какую-то чёрную магию мутить, вроде вызова ActivateNextStack из последнего EEF и др.


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

Posts: 3
Post: #9294

SergOz, Berserker, спасибо вам большое за советы и подсказки, буду пробовать реализовать задуманное.
25.04.2024 05:36
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1330
Post: #9295

vitor, вот как убирать труп с поля боя:
  1. !!UN:C6919200/4/?(combat:y); комбат менеджер
  2. !!BG:N?(aktiveStack:y); номер активного стека
  3. !!BM(aktiveStack):Z?(struktStack:y); структура активного стека
  4. !!VR(killStack:y):S(struktStack) +234; смещение в структуре стека на гибель стека
  5. !!UN:C(killStack)/1/1; устанавливаем, что стек умер
  6. !!BM(aktiveStack):F?f; получаем флаги стека
  7. !!VRf:|268435456; ставим флаг "принесён в жертву"
  8. !!BM(aktiveStack):N0 Ff; устанавливаем кол-во в 0 и новые флаги стеку
  9. !!SN:E4621680/2/(combat)/51/1; функция "убрать тело", если мертв
  10. !!SN:E4797616/2/(combat)/0/1; обновляем сетку поля боя


Карта-мод "Война на Холсте"
25.04.2024 05:54
Find all posts by this user Quote this message in a reply
major Offline

Posts: 146
Post: #9296

25.04.2024 09:22
Find all posts by this user Quote this message in a reply
vitor Offline

Posts: 3
Post: #9297

Всем спасибо за подробные примеры и советы!
27.04.2024 10:49
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #9298

А зачем убирать труп с поля боя и призывать новый стек? В предложенном варианте призывник не связан с армией героя и потери в отчете за бой будут неверно отображаться скорее всего. Не проще ли выставить кол-во юнитов, снять флаг "помер" и сыграть анимашку воскрешения? Вроде даже тип стека можно поменять при необходимости и будет норм.
Или, если по задумке существо должен реснуть именно герой, проще героем и скастовать воскрешение с корректировкой количества юнитов и кол-ва кастов героя, но тут нужно будет проверять действие запрещающих артефактов и проклятой земли (может и в первом случае тоже нужно - зависит от авторской задумки).


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
27.04.2024 12:32
Visit this user's website Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1190
Post: #9299

Here's my script for holding Ctrl+LMB to cancel AoE shooting for Magogs/Liches.
Any suggestions?
Any void in the definition?

  1. !?FU(gem_CreateERMHook);
  2. !!SN:Ex1/1/4454185/(gem_OnBattleStackShoot); 43F729
  3. !?FU(gem_OnBattleStackShoot);
  4. !#VA(hook:x);
  5. !!UN:C(hook)/(STRUCT_HOOK_CONTEXT_ESI)/4/?(stackStruct:y);
  6. !!FU&i^gem_splashShooterStackStruct^<>(stackStruct):E;
  7. !!FU(gem_ReleaseSplashShooter):P;
  8. !!VR(oppSide:y):Si^battle_current_side^ X(TRUE);
  9. !!IP:Di^battle_owner_%(oppSide)^;
  10. !!FU(gem_ReleaseSplashShooter):D;
  11. !!SN:X?t/0;
  12. !!UN:C(hook)/(STRUCT_HOOK_CONTEXT_RET)/4/4454943;
  13. ; Ctrl-Click to shoot without area effect
  14. !?FU(OnSetupBattlefield);
  15. !!VRi^gem_splashShooterStackStruct^:S0;
  16. !?FU(OnBattleScreenMouseClick)&i^key_ctrl^/i^mouse_action^=(MOUSE_LMB_PRESSED)/i^mouse_battleHex^>=1/i^mouse_battleHex^<=185/i^battle_localHuman_%i(battle_current_side)^;
  17. ; Exit if not splash shooter
  18. !!BMi^battle_current_stack^:F?(flags:y);
  19. !!VR(isSplashShooter:y):S(flags) &(MON_FLAG_SPLASH_SHOOTER);
  20. !!FU&(isSplashShooter)=0:E;
  21. ; Exit if no stack at the position
  22. !!BU:Ei^mouse_battleHex^/?(stack:y);
  23. !!FU&(stack)=(NO_STACK):E;
  24. ; Exit if from the same side
  25. !!BM(stack):I?(targetSide:y);
  26. !!FU&(targetSide)=i^battle_current_side^:E;
  27. ; Exit if the current stack can't shoot
  28. !!BMi^battle_current_stack^:Z?(stackPtr:y);
  29. !!SN:E4466192/(CALLCONV_THISCALL)/(stackPtr)/0; 442610
  30. ; Enable standard action as we want to make sure it shoots
  31. !!CM:R1;
  32. !!FU(gem_MarkSplashShooter):P(stackPtr);
  33. !!VR(oppSide:y):Si^battle_current_side^ X(TRUE);
  34. !!IP:Di^battle_owner_%(oppSide)^;
  35. !!FU(gem_MarkSplashShooter):D(stackPtr);
  36. !?FU(gem_MarkSplashShooter);
  37. !#VA(stackPtr:x);
  38. !!VRi^gem_splashShooterStackStruct^:S(stackPtr);
  39. !?FU(gem_ReleaseSplashShooter);
  40. !!VRi^gem_splashShooterStackStruct^:S(NULL);

I believe there is pretty much to improve.
Here I have to check whether it's going to shoot (after Ctrl + LMB) in an external way, and I even had to make sure it shoots with CM:R1. It should not be like this.
My ideal implementation is to store a global var for Ctrl+LMB, and then reset this var either when a shoot successfully takes place or fails.
Unfortunately, I failed to find a suitable timing to restore this global var when Ctrl + LMB doesn't lead to shooting. Thus I have to go with the way here.


Latest ERA mods and scripts in development - My GitHub
(This post was last modified: 30.04.2024 01:31 by Archer30.)
29.04.2024 15:37
Find all posts by this user Quote this message in a reply
fatsawhorse Offline

Posts: 1022
Post: #9300

Неужели нет возможности скриптом заставить командира сражаться, а не колдовать? Не сильно хочется мне обнулять его колдовскую силу через !?BG0, а потом через !?BG1 возвращать снова. Это геморно! Может всё-таки скриптом есть какой-нибудь другой способ?
13.05.2024 10:37
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-2025 MyBB Group