ArKan
Posts: 238
|
Повторяю просьбу.
Нужно модифицировать скрипт так, чтобы стало возможым совместное владение Мельницами и Садами Лепреконов для союзников.
ZVSE
ERMS_ScriptDate=22.9(September).2012
_WARNING_#1=IMPORTANT! This file is not in a plain text format. NEVER use any editor except ERM_S for making any kind of changes!
ERMS_PoweredBy=ERM Scripter v. 2004.10.5.945
** Author orig. : DracoLich
** Name : Capture the mills and leprechaun's gardens
** Name rus. : Захват мельниц и садов лепрекона
** Changes rus. : [Algor] вынос опции в отдельный файл для мода ERA, построчные комментарии
** [Algor] вынос текстов в ert-файл
** [Algor] технология быстрого поиска для UN:U
** [Algor] Замена TM100 на "стандартный" TM51, перенумерация функций/переменных и пр.
** Options : 879
** Dialogs : -
** Variables : -
** Tmp variables : v1-v3, z1
** Timers : TM51 (standard)
** Functions : FU7934
** PO-values : V0,V1 (mills and leprechaun's gardens squares)
** дублирование стандартных триггеров
!#TM99:S1/999/1/255; [каждый день для всех игроков]
!?OB109; [посещение Водяной мельницы игроком-человеком]
!!UN:P879/?y1; [проверяем включена ли опция в y1]
!!FU&y1=0:E; [выход, если опция не включена]
!!PO998:O?y1; [y1 - хозяин объекта]
!!OW:C?y2; [y2 - текущий игрок]
!!OB998:R; [разрешаем посещение объекта всем игрокам]
!!PO998:Oy2; [меняем владельца мельницы]
!!WM998&y1=-1:B?y3 B0; [y3 - количество золота на мельнице, если мельница ничейная]
!!VRy3&y1=-1:*500; [...]
!!OW&y1=-1:R-1/6/dy3; [увеличиваем игроку золото, если мельница была ничейной]
!!PO998&y1=-1:V0/6 V1/y3; [устанавливаем тип/количество текущих ресурсов в V0/V1 значения клетки]
!!FU&-1000:E; [выход, если игрок ИИ]
!!OB998:S; [запрещаем посещение объекта всем игрокам]
!!VRz1&y1=y2:Sz179072; [сообщение, если игрок уже получал золото]
!!IF&y1=y2:M^%Z1^; [...]
!!VRz1&y1=-1:Sz179073; [сообщение о захвате и получении ресурсов]
!!IF&y1=-1:Q2/6/y3/1^%Z1^; [...]
!!VRz1&y1<>y2/y1>-1:Sz179074; [сообщение о захвате мельницы]
!!IF&y1<>y2/y1>-1:M^%Z1^; [...]
!?OB112; [посещение Ветряной мельницы]
!!UN:P879/?y1; [проверяем включена ли опция в y1]
!!FU&y1=0:E; [выход, если опция не включена]
!!PO998:O?y1; [y1 - хозяин объекта]
!!OW:C?y2; [y2 - текущий игрок]
!!OB998:R; [разрешаем посещение объекта всем игрокам]
!!PO998:Oy2; [меняем владельца мельницы]
!!ML998&y1=-1:B?y3/?y4 Bd/0; [y3/y4 - тип/количество ресурса на мельнице, если мельница ничейная]
!!OW&y1=-1:R-1/y3/dy4; [увеличиваем игроку ресурсы, если мельница была ничейной]
!!PO998&y1=-1:V0/y3 V1/y4; [устанавливаем тип/количество текущих ресурсов в V0/V1 значения клетки]
!!FU&-1000:E; [выход, если игрок ИИ]
!!OB998:S; [запрещаем посещение объекта всем игрокам]
!!VRz1&y1=y2:Sz179075; [сообщение, если игрок уже получал ресурсы]
!!IF&y1=y2:M^%Z1^; [...]
!!VRz1&y1=-1:Sz179076; [сообщение о захвате и получении ресурсов]
!!IF&y1=-1:Q2/y3/y4/1^%Z1^; [...]
!!VRz1&y1<>y2/y1>-1:Sz179077; [сообщение о захвате мельницы]
!!IF&y1<>y2/y1>-1:M^%Z1^; [...]
!?OB55; [посещение Сада лепрекона]
!!UN:P879/?y1; [проверяем включена ли опция в y1]
!!FU&y1=0:E; [выход, если опция не включена]
!!PO998:O?y1; [y1 - хозяин объекта]
!!OW:C?y2; [y2 - текущий игрок]
!!OB998:R; [разрешаем посещение объекта всем игрокам]
!!PO998:Oy2; [меняем владельца мельницы]
!!GD998:B?y3; B0; [y3/y4 - тип/количество ресурса в саду, если сад ничейный]
!!VRy4&y3<>6:S5; [...]
!!VRy4&y3=6:S500; [...]
!!OW&y1=-1:R-1/y3/dy4; [увеличиваем игроку ресурсы, если сад был ничейным]
!!PO998&y1=-1:V0/y3 V1/y4; [устанавливаем тип/количество текущих ресурсов в V0/V1 значения клетки]
!!FU&-1000:E; [выход, если игрок ИИ]
!!OB998:S; [запрещаем посещение объекта всем игрокам]
!!VRz1&y1=y2:Sz179078; [сообщение, если игрок уже получал ресурсы]
!!IF&y1=y2:M^%Z1^; [...]
!!VRz1&y1=-1:Sz179079; [сообщение о захвате и получении ресурсов]
!!IF&y1=-1:Q2/y3/y4/1^%Z1^; [...]
!!VRz1&y1<>y2/y1>-1:Sz179080; [сообщение о захвате сада]
!!IF&y1<>y2/y1>-1:M^%Z1^; [...]
!?CM0; [информация по ПКМ на карте/объекте]
!!UN:P879/?y1; [проверяем включена ли опция в y1]
!!CM:F?y2; [тип клика 512-ПКМ]
!!FU|y1=0/y2<>512:E; [выход, если опция не включена или не ПКМ]
!!CM:P?v2/?v3/?v4; [v2-v4 - координаты клика]
!!FU420000:P; [корректировка координат]
!!OB2:T?y1; [y1 - тип объекта]
!!FU&y1<>112/y1<>109/y1<>55:E;[выход если клик не на мельнице/садке]
!!CM:R0; [отключаем стандартное ПКМ-действие]
!!PO2:O?y2; [y2 - владелец объекта]
!!OW:C?y3; [y3 - текущий игрок]
!!UN:P36/?y9; [y9 - проверка скрипта Mithril Enhancements]
!!PO2&y9>0:N?y10; [y10 - пользовательское число, если Mithril Enhancements активен (см. скрипт 42wog)]
!!VRz1&y2<>y3/y1=112/y2=-1:Sz179081;[сообщение "ничейная возд. мельница"]
!!VRz1&y2<>y3/y1=112/y2>-1:Sz179084;[сообщение "чужая возд. мельница"]
!!VRz1&y2=y3/y1=112:Sz179088; [сообщение "своя ветряная мельница"]
!!VRz1&y2<>y3/y1=112/y2=-1/y10<4/y10>1:Sz179651;[сообщение "ничейная улучшенная возд. мельница"]
!!VRz1&y2<>y3/y1=112/y2>-1/y10<4/y10>1:Sz179652;[сообщение "чужая улучшенная возд. мельница"]
!!VRz1&y2=y3/y1=112/y10<4/y10>1:Sz179653; [сообщение "своя улучшенная ветряная мельница"]
!!VRz1&y2<>y3/y1=109/y2=-1:Sz179082;[сообщение "ничейная водн. мельница"]
!!VRz1&y2<>y3/y1=109/y2>-1:Sz179085;[сообщение "чужая водн. мельница"]
!!VRz1&y2=y3/y1=109:Sz179650; [сообщение "своя водн. мельница"]
!!VRz1&y2<>y3/y1=109/y2=-1/y10<4/y10>1:Sz179654;[сообщение "ничейная улучшенная водн. мельница"]
!!VRz1&y2<>y3/y1=109/y2>-1/y10<4/y10>1:Sz179655;[сообщение "чужая улучшенная водн. мельница"]
!!VRz1&y2=y3/y1=109/y10<4/y10>1:Sz179656; [сообщение "своя улучшенная водн. мельница"]
!!VRz1&y2<>y3/y1=55/y2=-1:Sz179083;[сообщение "ничейный сад"]
!!VRz1&y2<>y3/y1=55/y2>-1:Sz179086;[сообщение "чужой сад"]
!!VRz1&y2=y3/y1=55:Sz179087; [сообщение "свой сад"]
!!PO2&y2=y3:V0/?y4 V1/?y5; [y4/y5 - тип и количество принесенных ресурсов, если объект свой]
!!IF&y2=-1:Q2/-1/-1/4/z1; [вывод сообщения "ничейный"]
!!IF&y3<>y2/y2>-1:Q2/10/y2/4/z1;[вывод сообщения "чужой"]
!!IF&y3=y2:Q2/y4/y5/4/z1; [вывод сообщения "свой"]
!?TM99; [поставка ресурсов владельцам мельниц/садов каждый первый день недели, начиная с 8го дня]
!!UN:P879/?y1; [проверяем включена ли опция в y1]
!!FU&y1=0:E; [выход, если опция не включена]
!!VRy1:Sc; !!FU&y1<2:E; [автосбор отключен в первый день]
!!VRy1:%7; !!FU&y1<>1:E; [автосбор ресурсов по понедельникам]
!!OW:C?y1; [y1 - текущий игрок]
!!UN:U112/-1/?y2; [y2 - количество Ветряных мельниц]
!!VRv1:S-1; [инициализация v1 для быстрого поиска]
!!DO7934/1/y2/1:Py1/112; [для каждого объекта передаем ресурсы владельцу]
!!UN:U109/-1/?y2; [y2 - количество Водных мельниц]
!!VRv1:S-1; [инициализация v1 для быстрого поиска]
!!DO7934/1/y2/1:Py1/109; [для каждого объекта передаем ресурсы владельцу]
!!UN:U55/-1/?y2; [y2 - количество Садов лепрекона]
!!VRv1:S-1; [инициализация v1 для быстрого поиска]
!!DO7934/1/y2/1:Py1/55; [для каждого объекта передаем ресурсы владельцу]
!?FU7934; [x1 - текущий игрок, x2 - тип объекта]
!!UN:Ux2/-1/-1/1; [получаем координаты объекта в v1-v3]
!!PO1:O?y1; [y1 - владелец объекта]
!!FU&y1<>x1:E; [выход, если текущий игрок не владелец]
!!UN:P36/?y9; [y9 - проверка скрипта Mithril Enhancements]
!!PO1&y9>0:N?y10; [y10 - пользовательское число, если Mithril Enhancements активен (см. скрипт 42wog)]
!!ML1&x2=112:B?y2/?y3 By2/0; [y2/y3 - тип/количество текущих ресурсов объекта. обнуляем количество]
!!VRy3&x2=112/y9>0/y10<4/y10>1:*2; [*2 количества ресурсов за апгрейд]
!!WM1&x2=109:B?y3 B0; [...]
!!VRy3&x2=109:*500; [...]
!!VRy2&x2=109:S6; [...]
!!VRy3&x2=109/y9>0/y10<4/y10>1:*2; [х2 количества денег за апгрейд]
!!GD1&x2=55:B?y2; [...]
!!VRy3&x2=55/y2<>6:S5; [...]
!!VRy3&x2=55/y2=6:S500; [...]
!!PO1:V0/y2 V1/y3; [устанавливаем тип/количество текущих ресурсов в V0/V1 значения клетки]
!!OW:Rx1/y2/dy3; [увеличиваем ресурсы игрока]
!?FU420000; Координаты объекта в v2/v3/v4 обновляются на правильные (желтый квадрат). Автор: gamecreator
; v2/v3/v4 - coords
!!UN:C6919480/4/?y1; 0x699538
!!VRy1:+130112; 0x1FC40
!!UN:Cy1/4/?y2; y2 = map tiles
!!VRy1:+4;
!!UN:Cy1/4/?y3; y3 = map size
!!VRy5:Sv4 *y3 +v3 *y3 +v2 *38 +y2; this object, 0x26 is tile size
!!VRv2:C0/0/0; reuse vars
**SN:E4239120/2/?v2/y5/0/0; thiscall 0x40AF10 (map tile, screenX?, screenY?) for struct{0,0,0}
!!SN:E5230832/2/y5; !!VRv1&v1<1:Sy5; [© igrik]
; v1 = yellow tile
!!VRv1:-y2 :38; object index
!!VRv2:Sv1 %y3; x
!!VRv3:Sv1 :y3 %y3; y
!!VRv4:Sv1 :y3 :y3; l
** end
# Text resource for "option 879 - capture mills and gardens.erm"
179072 {Водяная Мельница}
На этой неделе Водяная мельница уже отсылала золото.
Новое будет только на следующей неделе.
179073 {Водяная Мельница}
Вы захватили Водяную мельницу под свой контроль.
Теперь каждую неделю Водяная мельница будет приносить Вам золото.
Сейчас она Вам отдает:
179074 {Водяная Мельница}
Вы захватили Водяную мельницу под свой контроль.
Теперь каждую неделю Водяная мельница будет приносить Вам золото.
179075 {Ветряная Мельница}
На этой неделе Ветряная мельница уже отсылала ресурсы.
Новые будут только на следующей неделе.
179076 {Ветряная Мельница}
Вы захватили Ветряную мельницу под свой контроль.
Теперь каждую неделю Ветряная мельница будет приносить Вам ресурсы.
Сейчас она Вам отдает:
179077 {Ветряная Мельница}
Вы захватили Ветряную мельницу под свой контроль.
Теперь каждую неделю Ветряная мельница будет приносить Вам ресурсы.
179078 {Мистический сад}
На этой неделе Мистический сад уже отсылал ресурсы.
Новые будут только на следующей неделе.
179079 {Мистический сад}
Вы захватили Мистический сад под свой контроль.
Теперь каждую неделю Мистический сад будет приносить Вам ресурсы.
Сейчас он Вам отдает:
179080 {Мистический сад}
Вы захватили Мистический сад под свой контроль.
Теперь каждую неделю Мистический сад будет приносить Вам ресурсы.
179081 {Ветряная Мельница}
Никому не принадлежит.
179082 {Водяная Мельница}
Никому не принадлежит.
179083 {Мистический сад}
Никому не принадлежит.
179084 {Ветряная Мельница}
Принадлежит игроку:
179085 {Водяная Мельница}
Принадлежит игроку:
179086 {Мистический сад}
Принадлежит игроку:
179087 {Мистический сад}
На этой неделе мистический сад принес:
179088 {Ветряная Мельница}
На этой неделе ветряная мельница принесла:
179650 {Водяная Мельница}
На этой неделе водяная мельница принесла:
179651 {Улучшенная Ветряная Мельница}
Никому не принадлежит.
179652 {Улучшенная Ветряная Мельница}
Принадлежит игроку:
179653 {Улучшенная Ветряная Мельница}
На этой неделе ветряная мельница принесла:
179654 {Улучшенная Водяная Мельница}
Никому не принадлежит.
179655 {Улучшенная Водяная Мельница}
Принадлежит игроку:
179656 {Улучшенная Водяная Мельница}
На этой неделе водяная мельница принесла:
179657
|
|
| 01.12.2025 20:24 |
|
ArKan
Posts: 238
|
Исправленный ещё хуже, к нему союзники липнут как мухи.
|
|
| 02.12.2025 00:38 |
|
ArKan
Posts: 238
|
Увы, так и есть. По крайней мере у меня. Или у меня была другая версия нового скрипта.
|
|
| 02.12.2025 22:03 |
|
daemon_n
Posts: 4395
|
ArKan, что за версия игры у тебя?
Code:
ZVSE2
** Author orig. : DracoLich
** Updated by : Archer30
** Name : Capture the mills and leprechaun's gardens
** Options : 879
** Dialogs : -
** Variables : -
** Tmp variables : v1-v3, z1
** Timers : -
** Functions : -
** PO-values : V0, V1 (mills and leprechaun's gardens squares)
28.07.2022 Fully rewritten by daemon_n
15.10.2023 Updated by daemon_n: Added graphics with flags;
15.10.2023 Updated by daemon_n: Now supported capture status in MP game during enemy turn but not added in replay turn;
Jun 18 2025 Updated by daemon_n: Added "warehouses" object support, rewritten visit and auto visit logic / graphics is by @JackSlater
!#DC(ES_OBJ_WAREHOUSE) = 142;
!?FU(ES_CreateERMHook);
!#VA(address:x);
!!UN:P879/?(isCaptureObjOpt:y);
!!if&(isCaptureObjOpt);
!!SN:E(address)/1/4882852/(ES_OnPlayerVisitObject); [Trigger on player visiting Any Object] 4A81A4]
!!SN:E(address)/1/4263804/(ES_OnMapItem_GetOwner);
!!SN:E(address)/1/4263370/(ES_OnMapItem_Draw);
!!SN:E(address)/1/5183597/(ES_Hook_OnPlayerDefeated);
!!SN:E(address)/1/4239726/(ES_HOOK_OnObjectHintGetType);
!!SN:E(address)/1/4274460/(ES_HOOK_OnObjectRmcHintGetType);
!!SN:E(address)/1/4283008/(ES_HOOH_OnObjectRmcHintMsgBox);
!!en;
!?FU(OnGameEnter);
!!UN:P879/?(isCaptureObjOpt:y);
!!if&(isCaptureObjOpt);
//replace wind mill grass
!!re i/0/7; [(end_value);]
!!SN:R^AVMwndd0.def:0_%i.png^/^Data\Defs\ESwind00.def\0_%i.png^; [;]
!!en;
//replace wind mill snow
!!re i/0/7; [(end_value);]
!!SN:R^AVMwmsn0.def:0_%i.png^/^Data\Defs\ESwind10.def\0_%i.png^; [;]
!!en;
//replace OBJ_WATER_WHEEL
!!re i/0/7; [(end_value);]
!!SN:R^AVMwwhl0.def:0_%i.png^/^Data\Defs\ESwtr00.def\0_%i.png^; [;]
!!en;
//replace OBJ_WATER_WHEEL snow
!!SN:R^AVMwwsn0.def:0_0.png^/^Data\Defs\ESwtr10.def\0_0.png^; [;]
//replace OBJ_MYSTICAL_GARDEN
!!re i/0/13; [(end_value);]
!!SN:R^avtmyst0.def:0_%i.png^/^Data\Defs\ESmyst0.def\0_%i.png^; [;]
!!SN:R^avtmystd0.def:0_%i.png^/^Data\Defs\ESmystd0.def\0_%i.png^; [;]
!!en;
//replace warehouses
//wood
!!SN:R^avwrhswd.def:0_0.png^/^Data\Defs\ESwrhswd.def\0_0.png^;
//mercury
!!re i/0/7; [(end_value);]
!!SN:R^avwrhsmc.def:0_%i.png^/^Data\Defs\ESwrhsmc.def\0_%i.png^;
!!en;
//ore
!!SN:R^avwrhsor.def:0_0.png^/^Data\Defs\ESwrhsor.def\0_0.png^;
//sulfur
!!re i/0/11; [(end_value);]
!!SN:R^avwrhssf.def:0_%i.png^/^Data\Defs\ESwrhssf.def\0_%i.png^;
!!en;
//crystall
!!re i/0/7; [(end_value);]
!!SN:R^avwrhscr.def:0_%i.png^/^Data\Defs\ESwrhscr.def\0_%i.png^;
!!en;
//gem
!!re i/0/7; [(end_value);]
!!SN:R^avwrhsgm.def:0_%i.png^/^Data\Defs\ESwrhsgm.def\0_%i.png^;
!!en;
//gold
!!re i/0/5; [(end_value);]
!!SN:R^avwrhsgl.def:0_%i.png^/^Data\Defs\ESwrhsgl.def\0_%i.png^;
!!en;
// mithril
!!re i/0/6; [(end_value);]
!!SN:R^avwrhsmt.def:0_%i.png^/^Data\Defs\ESwrhsmt.def\0_%i.png^;
!!en;
!!en;
!?FU(ES_OnMapItem_GetOwner)&i^ES_879_DrawObjectType^;
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBP)/4/?(ebp:y) C(ebp)/-68/4/?(coords:y);
!!FU(ES_UnPackedCoords):P?(x:y)/?(y:y)/?(z:y)/(coords);
!!if&(x)>-1/(y)>-1/(z)>-1; [This check is required for some maps]
!!PO(x)/(y)/(z):O?(owner:y);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EAX)/4/(owner);
!!VRi^ES_879_DrawObjectType^:S(NULL);
!!en;
!?FU(ES_OnMapItem_Draw);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EDI)/4/?(mapitem:y) C(mapitem:y)/56/4/?(objType:y);
!!if|(objType)=(OBJ_WATER_WHEEL)/(objType)=(OBJ_MYSTICAL_GARDEN)/(objType)=(OBJ_WINDMILL)/(objType)=(ES_OBJ_WAREHOUSE);
!!UN:C6916676/4/?(noShowObjectcts:y);
!!if&(noShowObjectcts)=0;
!!VRi^ES_879_DrawObjectType^:S(objType);
!!SN:X?t/0;
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_RET)/4/4263617;
!!en;
!!en;
!?FU(ES_OnPlayerVisitObject)&i^ES_879_isAuto^=(FALSE); [4A81A4]
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBX)/(UNC_INT)/?(objType:y);
!!if|(objType)=(OBJ_WATER_WHEEL)/(objType)=(OBJ_MYSTICAL_GARDEN)/(objType)=(OBJ_WINDMILL)/(objType)=(ES_OBJ_WAREHOUSE);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBP)/(UNC_INT)/?(ebp:y) C(ebp)/16/(UNC_INT)/?(packedCoords:y);
!!FU(ES_UnPackedCoords):P?(x:y)/?(y:y)/?(z:y)/(packedCoords);
!!PO(x)/(y)/(z):O?(oldOwner:y);
!!VR(ownerChanged:y):S(FALSE);
!!if&(oldOwner)=(NO_OWNER);
!!PO(x)/(y)/(z):V0/0 V1/0; [res type and num]
!!VR(ownerChanged):S(TRUE);
!!el;
!!OW:T(oldOwner)/?(team:y) Ti^timerOwner^/?(newTeam:y);
!!if&(team)<>(newTeam);
!!PO(x)/(y)/(z):V0/0 V1/0; [res type and num]
!!VR(ownerChanged):S(TRUE);
!!en;
!!en;
!!if&(ownerChanged);
!!IP:D(ANY_PLAYER);
!!FU(ES_879_MP_SetObjectOwner):D(x)/(y)/(z)/i^timerOwner^ P(x)/(y)/(z)/i^timerOwner^;
!!en;
!!en;
!?FU(ES_879_MP_SetObjectOwner);
!#VA (packedCoords[3]:x) (newOwner:x);
!!POx1/x2/x3:O(newOwner);
!?FU(OnEveryDay)&i^timerWeekday^=1/i^timerDay^>1/i^timerOnce^; [поставка ресурсов владельцам мельниц/садов каждый первый день недели, начина€ с 8го дн€]
!!UN:P879/?(wogOption:y); [провер€ем включена ли опци€ в y1]
!!FU&(wogOption)<>(TRUE):E; [выход, если опци€ не включена]
!!FU(ES_879_CollectResources):P;
!?FU(ES_Hook_OnPlayerDefeated);
!!FU(ES_879_CollectResources):P;
!?FU(ES_879_CollectResources);
!!FU(NewIntArray):P8/?(liveArr:y);
!!re (playerID:y)/0/(PLAYER_LAST);
!!OW:I(playerID)/d/?(isDead:y);
!!SN&(isDead)=(FALSE):V(liveArr)/(playerID)/(TRUE);
!!en;
!!re i/0/(HERO_LAST_WOG);
!!HEi:O?(owner:y);
!!if&(owner)=(NO_OWNER);
!!HEi:Z?(hero:y);
!!br;
!!en;
!!en;
!!VRi^ES_879_isAuto^:S(TRUE);
!!FU(ES_879_IterateObjects):P(OBJ_MYSTICAL_GARDEN)/(hero)/(liveArr);
!!FU(ES_879_IterateObjects):P(OBJ_WATER_WHEEL)/(hero)/(liveArr);
!!FU(ES_879_IterateObjects):P(OBJ_WINDMILL)/(hero)/(liveArr);
!!FU(ES_879_IterateObjects):P(ES_OBJ_WAREHOUSE)/(hero)/(liveArr);
!!UN:C(hero)/34/1/(NO_OWNER);
!!VRi^ES_879_isAuto^:S(FALSE);
!?FU(ES_879_IterateObjects);
!#VA(objType:x) (hero:x) (liveArr:x);
!#VA(x:y) (y:y) (z:y);
!!VR(x):S-1; [init as start]
!!UN:C(ADV_MANAGER)/4/?(advMgr:y);
!!re i; [endless loop]
!!UN:U(objType)/(ANY_OBJ)/-1/(x)/(y)/(z);
!!br&(x)<0; [exit loop if nothing found]
!!PO(x)/(y)/(z):O?(owner:y); [get obj owner]
!!if&(owner)<>(NO_OWNER); [if there is one]
!!SN:V(liveArr)/(owner)/?(isAlive:y);[check if lives]
!!if&(isAlive);
!!UN:C(hero)/34/1/(owner); [set hero as obj owner color]
!!OB(x)/(y)/(z):T?(heroCheck:y);
!!if&(heroCheck)=(OBJ_HERO);
!!FU(ES_AdvMgr_HideHero):P(x)/(y)/(z); [hide hero if it is there]
!!en;
!!FU(ES_879_AdjustStoredRes):P(x)/(y)/(z)/(objType);
!!FU(ES_879_AdvMgr_HeroEnterObjectAsAi):P(x)/(y)/(z)/(hero);
!!el;
!!PO(x)/(y)/(z):O(NO_OWNER) V0/0 V1/0; [set no owner if is dead]
!!FU(ES_879_MP_SetObjectOwner):P(x)/(y)/(z)/(NO_OWNER);
!!en;
!!en;
!!en;
!?FU(ES_879_AdvMgr_HeroEnterObjectAsAi);
!#VA(x:x) (y:x) (z:x) (hero:x);
!#VA(storedOpp[5]:y);
!!re i/0/4;
!!UN:Ci/4882831/(UNC_INT8)/?(storedOpp[i]) Ci/4882831/(UNC_INT8)/(OPCODE_NOP_1);
!!en;
!!FU(ES_PackedCoords):P(x)/(y)/(z)/?(packed:y);
!!FU(ES_AdvMgr_GetMapItem):P(x)/(y)/(z)/?(mapItem:y);
!!UN:C(ADV_MANAGER)/(UNC_UINT32)/?(advMgr:y);
!!UN:C(mapItem)/(UNC_UINT32)/?(objSetup:y) C(mapItem)/30/(UNC_UINT32)/?(objType:y);
!!SN:E4882784/(CALLCONV_THISCALL)/(advMgr)/(hero)/(mapItem)/(packed)/(FALSE); [AdvMgr_Enter2Object_Player]
!!re i/0/4;
!!UN:Ci/4882831/(UNC_INT8)/(storedOpp[i]);
!!en;
!?FU(ES_879_AdjustStoredRes);
!#VA(x:x) (y:x) (z:x) (objType:x);
!!if&(objType)=(OBJ_MYSTICAL_GARDEN);
!!GD(x)/(y)/(z):B?(resType:y);
!!VR(value:y):S5;
!!VR(value)&(resType)=(RES_GOLD):S500;
!!el&(objType)=(OBJ_WATER_WHEEL);
!!WM(x)/(y)/(z):B?(resCoeff:y);
!!VR(value:y):S(resCoeff)*500;
!!VR(resType):S(RES_GOLD);
!!el&(objType)=(OBJ_WINDMILL);
!!ML(x)/(y)/(z):B?(resType:y)/?(value:y);
!!el&(objType)=(ES_OBJ_WAREHOUSE);
!!OB(x)/(y)/(z):C?(cWord:y);
!!VR(resType):S(cWord) &(BITS_5_MASK);
!!VR(value):S(cWord) Sd>>13 &(BITS_10_MASK);
!!if&(resType)=(RES_MITHRIL); [replace resType with gold if there is no mithril]
!!UN:B0/?(mithrilEnabled:y);
!!if&(mithrilEnabled)=(FALSE);
!!VR(resType):S(RES_GOLD);
!!en;
!!en;
!!if&(resType)=(RES_GOLD);
!!VR(value):*500;
!!en;
!!en;
!!PO(x)/(y)/(z):V0/(resType) V1/(value);
!?FU(ES_HOOK_OnObjectHintGetType);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBX)/4/?(ebx:y) C(ebx)/30/2/?t; [(objType:y);]
!!if|t=(OBJ_MYSTICAL_GARDEN)/t=(OBJ_WATER_WHEEL)/t=(OBJ_WINDMILL)/t=(ES_OBJ_WAREHOUSE);
!!VRi^es_879_hint_object_type^:St;
!!en;
!?FU(OnAdventureMapTileHint)&i^es_879_hint_object_type^;
!#VA(x:x) (y:x) (z:x); [Object entrance coordinates]
!!PO(x)/(y)/(z):O?(owner:y);
!!if&(owner)>(NO_OWNER);
!!VR(ownerStrIndex:y):S(owner) +23;
!!FU(GetTextFileString):P^arraytxt^/(ownerStrIndex)/?(ownerStr:z);
!!VR(newHint:z):S^ - %(ownerStr)^;
!!MM:M?(hint:z) M^%(hint:z)%(newHint:z)^;
!!en;
!!VRi^es_879_hint_object_type^:S0;
!?FU(ES_HOOK_OnObjectRmcHintGetType);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBX)/4/?(mapItem:y);
!!if&(mapItem)>(BIT_16);
!!UN:C(mapItem:y)/30/2/?t; [(objType:y);]
!!if|t=(OBJ_MYSTICAL_GARDEN)/t=(OBJ_WATER_WHEEL)/t=(OBJ_WINDMILL)/t=(ES_OBJ_WAREHOUSE);
!!VRi^es_879_rmc_hint_object_type^:St;
!!en;
!!en;
!?FU(ES_HOOH_OnObjectRmcHintMsgBox)&i^es_879_rmc_hint_object_type^;
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_EBP)/4/?(ebp:y) C(ebp)/-32/4/?(coords:y);
!!FU(ES_UnPackedCoords):P?(x:y)/?(y:y)/?(z:y)/(coords);
!!SN:O?(x:y)/?(y:y)/?(z:y);
!!VRt:Si^es_879_rmc_hint_object_type^;
!!VRi^es_879_rmc_hint_object_type^:S0;
!!PO(x)/(y)/(z):O?(owner:y);
!!if&(owner)<>(NO_OWNER);
!!UN:Cx1/(STRUCT_HOOK_CONTEXT_ECX)/4/?(textBuffer:y);
!!FU(ES_GameMgr_GetObjOwnerStr):P(owner)/?(ownerStr:z);
!!SN:B(textBuffer)/d/?(currHint:z) B(textBuffer)/d/^%(currHint:z)%T(es.endl)%(ownerStr:z)^;
!!en;
; Reveal the area for owners every day (in case it's covered by Cover of Darkness)
; Warning: must not use OnEveryDay and UN:S as they don't work exactly the same as native behaviours
!?FU(ES_OnNewDay);
!!UN:P879/?(wogOption:y);
!!FU&(wogOption)<>(TRUE):E;
!!UN:C(GAME_MANAGER)/4/?(gameMgr:y);
; get size of the map
!!UN:X?(mapSize:y)/?(hasUnderground:y);
; pass once through all cells of the map
!!re l/0/(hasUnderground)/1; [coord z]
!!re k/0/(mapSize)/1/-1; [coord y]
!!re i/0/(mapSize)/1/-1; [coord x]
!!OBi/k/l:T?(objType:y);
!!if|(objType)=(OBJ_WATER_WHEEL)/(objType)=(OBJ_MYSTICAL_GARDEN)/(objType)=(OBJ_WINDMILL)/(objType)=(ES_OBJ_WAREHOUSE);
!!TRi/k/l:E?(isYellowSquare:y);
!!VR(isYellowSquare):X(TRUE); [reverse param isYellowSquare]
!!if&(isYellowSquare);
!!FU(ES_AdvMgr_GetMapItem):Pi/k/l/?(mapItem:y);
!!POi/k/l:O?(owner:y);
!!SN:E4836816/(CALLCONV_THISCALL)/(gameMgr)/i/k/l/(owner)/3/0;
!!en;
!!en;
!!en;
!!en;
!!en;
; Reveal the area when an object is captured with Sorcery I (WoG Scripts)
!?FU(WOG_23_OnAfterEnterObject);
!#VA(x:x) (y:x) (z:x);
!#VA(objType:x);
!#VA(owner:x);
!!UN:P879/?(isCaptureObjOpt:y);
!!if&(isCaptureObjOpt);
!!if|(objType)=(OBJ_WATER_WHEEL)/(objType)=(OBJ_MYSTICAL_GARDEN)/(objType)=(OBJ_WINDMILL)/(objType)=(ES_OBJ_WAREHOUSE);
!!UN:C(GAME_MANAGER)/4/?(gameMgr:y);
!!SN:E4836816/(CALLCONV_THISCALL)/(gameMgr)/(x)/(y)/(z)/(owner)/3/0;
!!en;
!!en;

Новейший Heroes Launcher
|
|
| 03.12.2025 05:09 |
|
ArKan
Posts: 238
|
3.9.2
Для этой версии скрипта нужны дополнительные ресурсы (изображения объектов с флагами)?
(This post was last modified: 03.12.2025 14:29 by ArKan.)
|
|
| 03.12.2025 14:27 |
|
Elmore
Posts: 668
|
(03.12.2025 14:27)ArKan Wrote: 3.9.2
Игра точно установлена через Heroes Launcher и обновлена?
|
|
| 03.12.2025 14:54 |
|
daemon_n
Posts: 4395
|
|
| 04.12.2025 00:07 |
|
daemon_n
Posts: 4395
|
|
| 04.12.2025 22:14 |
|
ArKan
Posts: 238
|
Там вроде много вырезано было?
|
|
| 05.12.2025 01:50 |
|
daemon_n
Posts: 4395
|
|
| 05.12.2025 02:32 |
|
ArKan
Posts: 238
|
Уже и не припомню причину, почему я к старой версии вернулся....
|
|
| 05.12.2025 13:52 |
|