Wake of Gods Forum | Форум Во Имя Богов

Full Version: Вопросы по моддингу
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
(11.07.2020 00:02)feanor Wrote: [ -> ]
(09.07.2020 20:27)Bes Wrote: [ -> ]feanor, и если улучшал свой chalk плагин, но не публиковал, тож не пожадничай и выложи (хотя бы что есть) пожалуйста Ab
Не, ничо с ним не делал. А что-то надо?


feanor, он у меня во всех игровых папках (три как минимум: две с эра2,46 и одна сборка с эра2,9,14)... часто пользуюсь, и все пожелания, что высказывали на дф2-теме, тихо покорно ждал, вдруг ты их реализуешь... нужна история введённых команд (хотя бы повтор прошлой команды, как в dos)
feanor, большое спасибо за исходники, мне безусловно пригодятся некоторые примеры132

Ну а некоторые комментарии просто сделали мой день)))

Quote://и да, это write-only code
//прости, дяденька будущий я, я больше так не буду

Quote://и, кстати, проверка на c->ecx - фуфло

Quote://0066D03C - таблица количества окошек 0x13 - гнусный хак, и так мы делать не будем
Quote:
Code:
//прости, дяденька будущий я, я больше так не буду
Однажды, когда мне понадобился этот код, я полез в эти исходники, нашел эту строку и понял, что он мне не так уж и нужен. Проронив скупую слезу, потому что я уже успел забыть про эту смердящую капсулу времени.
Иногда одно петросянство вместо тысячи описаний механики реально экономит время.

Quote:
Code:
//0066D03C - таблица количества окошек 0x13 - гнусный хак, и так мы делать не будем
Там есть сиквел, "//не будем, но еретика нет ".

Просто обработчик диалога не умеет в более чем 18 окошек, и попытка вытащить 19ое заставляет его отрисоваться, но не заставляет реагировать на мышку. Здраво рассудив, я решил, что все равно 19 окон (сплошной, 4*3 блок спецстроений) + 7 двеллов внизу) - это реально не оч хорошая идея.

Теперь корочи смотрите.
Как вытащить гильдии 4- и 5-ого уровней для городов, где они заблокированы изначально...
4
feanor, огромное спасибо за ценную информацию для будущих поколений.
Пост нужно сохранить.

moderator Wrote:сделано, шеф 118
Может кто-то подсказать как убрать отряд более правильно? В сейве из 2.9.14 по ссылке ниже второй герой в списке стоит перед Адскими Троглодитами, при атаке на них стек палаток незаконно добавляемых командиром остается видимым пока не походит мой первый юнит, после чего он магически исчезает
https://drive.google.com/file/d/1LxemlYh...sp=sharing

Стек палаток должен быть удален вот этой функцией:

Code:
** x1 == stack ID 0..41
!?FU(zEwmIV_BFDeleteStack);
!!FU|x1<0/x1>41:E;

!!BMx1:F?y4;                               [y4 stack flags]
!!VRy4:|4194304;                           [y4 set sumonned flag]
*!VRy4:|8388608;                           [y4 set cloned flag]
!!BMx1:Fy4;                                [set set new flag]

*!BMx1:T145;                               [set type catapult]

!!UN:C6919200/4/?y10;                      [y10 combat manager]
!!VRy1:Sx1 *1352 +21708 +y10;              [y1 adddress of x1 stack struct]
!!VRy3:Sy1 +233; !!UN:Cy3/1/1;             [y3 TMP set stack lost at least one creature]
!!VRy3:Sy1 +234; !!UN:Cy3/1/1;             [y3 TMP set stack dead]

!!BMx1:F?y4;                               [y4 stack flags]
!!VRy4:|268435456;                         [y4 set sacrificed flag]
!!BMx1:N0 Fy4;                             [set stack monster count to 0 and set new flag]
!!IF:M^Dead %X1^;

*!SN:E4621680/2/y1/51/1;                   [clear dead body]
*!SN:E4797616/2/y1/0/1;                    [refresh battlefield]
*!BU:R;

Если раскаментить !!BU:R; в последней строке то игра упадет, потому что окно битвы еще не открылось. Функция выше по стеку вызовов относится к такому триггеру:

Code:
!?BR&1000;                                [Every turn of batle]
!!SN:W^zEwmIV_mod_on^/?y1; !!FU&y1<>1:E;  [Exit if mod disabled]

!!FU&v997<>-1:E;                          [Exit if not a turn -1]

вот тут еще родительская функция и вызывается

   Т.е. функция удаления стека срабатывает на !?BR для хода -1.
Quote:остается видимым пока не походит мой первый юнит, после чего он магически исчезает
Zur13, а если ты сам его вернёшь "на свет", сделав вновь видимым?
Quote:Таблица известных значений для BM:G:
-100: Видимость существа (4 - виден, 8 - не виден)
(11.07.2020 05:02)Bes Wrote: [ -> ]Zur13, а если ты сам его вернёшь "на свет", сделав вновь видимым?

Таблица известных значений для BM:G:
-100: Видимость существа (4 - виден, 8 - не виден)

Так мне наоборот нужно чтобы он вообще не появлялся, начинается битва, я на ходу -1 удаляю стек палаток с поля битвы, а он остается видимым с 0 существ пока не походит другой стек, причем пока он видим на него можно навести мышкой, для него работает правый клик, но вот массовые заклинания вроде метеоритного дождя на него не действуют. Но после любого действия выстрела или магиии на поле боя он исчезает, без анимации смерти просто растворяется.

Попробовал сделать его "невидимым", не помогло:

Code:
!!BMx1:G-100/8/d;                          [set stack invisible]
Еще вопрос, возможно ли ИИ на поле боя запретить атаковать некоторую цель. Ситуация, есть нейтральный рукопашный стек, есть герой с новой катапультой, нейтральный стек доходит до центра поля битвы и герой с помощью катапульты закидывает ему за спину стек
элементалей, если стек элементалей в пределах досягаемости, а никакой из других стеков нет, то нейтрал разворачивается и бежит бить элементаля, что бесполезно. Я попробовал обозначать такой стек нулевой и отрицательной ценностью через


но это не помогает.
Zur13, странно, сам не проверял, но отрицательная в теории должна была работать. Видимо, в алгоритме прошито при возможности атаковать хоть кого-то нейтралами. Получилось решить вопрос?
(12.07.2020 12:18)Berserker Wrote: [ -> ]Zur13, странно, сам не проверял, но отрицательная в теории должна была работать. Видимо, в алгоритме прошито при возможности атаковать хоть кого-то нейтралами. Получилось решить вопрос?

Нет, я просто пока поставил делитель, но ситуация осталась таже, когда стек нейтралов просчитывает ходы, для остальных стеков игрока варианты самые разные от -50000 до +5000, сам стек элементалей изначально оценивается в +7000..+10000, я ему принудительно ставил разные значения и +50 и 0 и -5000 и -175000, но нейтралы во всех случаях разворачиваются и бегут бить элементалей.
Правка: в обычных турнирных играх такое поведение используется для отманивания стеков, например выделяется перед битвой единички, которые подставляются таким образом чтобы как можно дольше ИИ стеки не подходили к стрелкам, но баллиста упрощает этот процес, потому хотелось бы как-то на это влиять.
(13.07.2020 00:23)Zur13 Wrote: [ -> ]я когда эксперементировал с кодом убийстива стека в какой-то момент пробовал поставить ему 0 жизней и забыл, в обычной битве это ни на что не влияло. Странно что в быстрой битве на такой стек кто-то пытается напасть ведь он помечен мертвым через

Code:
!!UN:C6919200/4/?y10;                      [y10 combat manager]
!!VRy1:Sx1 *1352 +21708 +y10;              [y1 adddress of x1 stack struct]
!!VRy3:Sy1 +234; !!UN:Cy3/1/1;             [y3 TMP set stack dead]


Zur13, щас же короче можно делать (era2,9,14+)
(13.07.2020 00:35)Bes Wrote: [ -> ]

Вообще-то если по этому адресу записать 1, то игра будет считать отряд живым, но избитым. На труп - вроде как следующий байт.
Stop мы рзные исходники смотрим?
Code:
// +E9 db = 1, если умирал хоть один
// +EA db = 1, если был убит весь стэк
EA = 234
(13.07.2020 01:20)Bes Wrote: [ -> ]Stop мы рзные исходники смотрим?

Конечно разные. У меня ж моповские 148 . По ним как-то так:

;E8 - Флаг_монстра_нужно_ударить_Огненным_Щитом
;E9 - Флаг_если_хоть_раз_монстра_били
;EA - Флаг_если_умирал_хоть_один
;EB - Флаг_если_был_убит_весь_стек

Но по факту в игре там всегда нули 148 , поэтому в MoP оно закомментировано и не используется.

Например на ту же трупность - проверка соответствующего флага монстра (1) + текущее здоровье (0), а совсем не 234-й байт в структуре.
Есть ли разница между разломами элементалов и алтарями? т.е. если я к примеру хочу заменить двеллинги элементалов, мне придётся заменять графику обоим жилищам?
Reference URL's