Zur13
Posts: 223
|
Может кто-то помочь, мне нужно в бою динамически изменять описание юнита в окне по ПКМ на нем, само открытие окна ПКМ я думаю смогу поймать через триггер ММ0, но если в нем менять дескрипшн юнита например через
!!FU7701:P1/2/2/192514; или через МА
то в окне всё-равно остается старый дескрипшн. Я попробовал способ отсюда https://forum.df2.ru/index.php?showtopic...t&p=193891 , но что-то функция для получения адресов Z переменных из следующего сообщения в той ветке не работает, я вот про эту функцию
Code:
!?FU12925; Получение адреса z переменной номер x1 (возврат в x2)
Поддерживаются версии: 3.58, ТЕ
!!UN:V?y1/?y2;
!!VRy3&y1=358:S40225400;
!!VRy3&y1=359:S9597416;
!!VRx2&y3=0:S0;
!!FU&y3=0:E;
!!VRx2:Sx1*512+y3;
|
|
19.04.2020 04:00 |
|
daemon_n
Posts: 4343
|
|
19.04.2020 04:03 |
|
Zur13
Posts: 223
|
(19.04.2020 04:03)daemon_n Wrote: Zur13, а если "обновить" экран?
Я попробовал BU:R, но явно проблема не в нем, новый текст появляется только в следующей битве, а до конца текущей так и остается изначальное описание, так что похоже что эти строки где-то кешируются до начала битвы. Я вот про этот текст:
Правка: в общем частично удалось сделать, просто адрес новой строки получил с помощью куска кода из FUN.erm как-то так:
!!SN:E7824928/1/192517; !!VRy31:Sv1;
Но этот код не обрабатывает строку, в том смысле что нельзя подставлять туда значения переменных типа %Y1, может есть другой способ? Пока у меня в ММ0 триггере вот такой код:
Code:
!!SN:E7824928/1/192517; !!VRy31:Sv1; [y31, mem address of z192517]
!!BMy1:G-66/?y30/d; [y30, mem address of stack's y1 description text]
!!FU12926:Py31/y30; [copy mem bytes from y31 to y30]
!?FU12926; Копирование строки по адресу. x1 - источник, x2 - приемник.
!!DO12927/0/511/1:Px1/x2;
!?FU12927;
!!VRy1:Sx1+x16;
!!VRy2:Sx2+x16;
!!UN:Cy1/1/?y3Cy2/1/y3;
!!VRx16&y3=0:S511;
Правка 2: оно похоже еще и что-то портит в памяти потому что иногда игра вылетает с таким кодом. Нужны другие варианты...
(This post was last modified: 19.04.2020 13:30 by Zur13.)
|
|
19.04.2020 10:48 |
|
igrik
Posts: 2819
|
(19.04.2020 04:00)Zur13 Wrote: Может кто-то помочь, мне нужно в бою динамически изменять описание юнита в окне по ПКМ на нем
1. Конечно будут утечки памяти.
2. Обрати внимание! Тут есть новый синтаксис рессиверов BM0 и UN:C (мне куда удобнее новый синтаксис. Но он не будет работать на старых версиях ЭРЫ)
Можно сделать и через старый синтаксис - как? Читай тут (под спойлером я показал разницу кодов ERM, которые делают одно и то же)
game bug fixes extended.dll || My Plugins || My GitHub
|
|
19.04.2020 14:57 |
|
Berserker
Posts: 16657
|
|
19.04.2020 16:49 |
|
Zur13
Posts: 223
|
(19.04.2020 14:57)igrik Wrote: (19.04.2020 04:00)Zur13 Wrote: Может кто-то помочь, мне нужно в бою динамически изменять описание юнита в окне по ПКМ на нем
1. Конечно будут утечки памяти, ни у хрен с ними. Это уже более сложна... Не такие уж и большие утечки будут))
2. Обрати внимание! Тут есть новый синтаксис рессиверов BM0 и UN:C (мне куда удобнее новый синтаксис. Но он не будет работать на старых версиях ЭРЫ)
Можно сделать и через старый синтаксис - как? Читай тут (под спойлером я показал разницу кодов ERM, которые делают одно и то же)
Спасибо, работает супер! Вот код, работает и для старой ЭРЫ если кому надо, с подчисткой памяти (заточено на один стек, перед показом окна сменили текст FU(имя вашей функции для смены описания), сразу после показа окна вернули как было FU(имя вашей функции чтобы вернуть как было)):
Code:
********************************************************************************
** Function to change stack description to new one
********************************************************************************
** x1 == stack ID
!?FU(имя вашей функции для смены описания);
!!VRz9:S^New stack description text^;
!!VRy2:S9 *512 +9597416; [y2, new z9 mem addr]
*!BM0:Z?y1; [получаем структуру первого стека атакующей стороны (стек 0) в y1]
!!UN:C6919200/4/?y10; [y10, BattleManager struct addr]
!!VRy1:Sx1 *1352 +21708 +y10; [y1, desired stack struct]
!!VRy1:+144; [y1, add shift for monster stack description text reference]
!!UN:Cy1/4/?y3; [y3, initial monster desc reference]
!!UN:Cy1/4/y2; [change initial monster desc reference to new one]
!!SN:W^имя вашей переменной^/?y4; [y4, get initial monster desc reference]
!!SN&y4=0:W^имя вашей переменной^/y3; [store initial monster desc reference]
********************************************************************************
** Function to restore original stack description
********************************************************************************
** x1 == stack ID
!?FU(имя вашей функции чтобы вернуть как было);
!!VRy2:S9 *512 +9597416; [y2, new z9 mem addr]
*!BM0:Z?y1; [получаем структуру первого стека атакующей стороны (стек 0) в y1]
!!UN:C6919200/4/?y10; [y10, BattleManager struct addr]
!!VRy1:Sx1 *1352 +21708 +y10; [y1, desired stack struct]
!!VRy1:+144; [y1, add shift for monster stack description text reference]
!!SN:W^имя вашей переменной^/?y3; [get initial monster desc reference]
!!UN&y3<>0:Cy1/4/y3; [restore initial monster desc reference]
!!SN:W^имя вашей переменной^/0; [reset storage]
(This post was last modified: 19.04.2020 17:49 by Zur13.)
|
|
19.04.2020 17:34 |
|
Bes
Posts: 5422
|
Berserker, он тебя троллит..
Quote:Модульность и разделение ответственное — наше всё.
так оно звучит красиво, но только для десятка заинтересованных коддеров-моддеров-фанатов. Массово людям нужна готовая сборка, чтобы скачать и запустить без каких-либо телодвижений. им даже порой влом понравившийся мод устанавливать, ведь окажется что он не в том приоритете или конфликтует с чем-то и начинается... хочу сборку с ним... а что если так...
это реальность, одними ответственными поступками далеко не уйти из своей песочницы.
|
|
19.04.2020 20:48 |
|
Berserker
Posts: 16657
|
|
19.04.2020 23:32 |
|
Bes
Posts: 5422
|
а когда не станет такого "сборщика вкуснятины"? всё опять в застой провалится?
печально будет
(This post was last modified: 20.04.2020 00:03 by Bes.)
|
|
19.04.2020 23:57 |
|
Berserker
Posts: 16657
|
|
20.04.2020 03:31 |
|