IPB

Здравствуйте, гость ( Вход | Регистрация )

9 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Тонкости ЕРМ, использование UN:C, ERM для профессионалов :)
sergroj
сообщение 15 Sep 2008, 15:43 (Сообщение отредактировал sergroj - 09 Feb 2013, 10:10)
Сообщение #21

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Вместо MR:N для TE
MR:N не работает в 3.58f и TE. Эта функция его заменяет. Только для exe'шника TE:
Код
!?FU8229;
!!UN:C42231940/4/?x1; [TE only - get MR stack]
!!UN:C6919200/4/?y1; [get combatManager]
!!VRx1:-y1 -21708 :1352;

Соответственно, вызывается так:
!?MR0;
!!FU8229:P?v1;
!!IF:M^%V1^;

[edit] Необходимо проверять, что номер полученного стека находится в диапазоне 0..41, т.к. иногда игра вызывает MR:N для временной копии какого-нибудь монстра - номер её оригинала так не получить.


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
Миханик
сообщение 06 Oct 2008, 05:04
Сообщение #22

починяю примусы
Сообщений: 147
Спасибо сказали: 14 раз




Функция для управления подтипом дороги
вообще-то этим должен заниматься 6й параметр TR:T, но он этого почему-то не делает. пришлось самому искать. таблица, где записан подтип (и не только он), располагается по адресу, на к-рый указывает указатель, к-рый располагается по адресу, к-рый на 130112 больше, чем тот, на к-рый указывает указатель, находящийся по адресу 69953816. записи имеют длину 38 и сортированы по XYL, подтип дороги в них на смещении 9. просто и понятно. на сием и основана функция:
Код
!?FU20113;
!!UN:C6919480/4/?y1;
!!VRy1:+130112;
!!UN:Cy1/4/?y2 X?y3/?y4;
!!VRx3:*y3 +x2 *y3 +x1 *38 +9 +y2;
!!UN&x5=0:Cx3/1/x4;
!!UN&x5<>0:Cx5/1/?x4;
Вызов:
!!FU20113:P#1#2/#3/$/#4;
!!FU20113:P#1/#2/#3/$; (#4=0)
#1/#2/#3 - X/Y/L - координаты
$ - значение подтипа дороги
#4 - 0 - установить $, любое другое значение - получить $.
кстати, можете меня поздравить - это первое моё опубликованное достижение в области артманелогии.


--------------------
Всякий процесс делится на четыре стадии: шумиха, неразбериха, наказание невиновных и награждение непричастных. (М. Задорнов)
Подающий нищему - подаёт Богу. А Бог не нищий, чтобы ему подавали!


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 06 Oct 2008, 09:19
Сообщение #23

пират с чёрной меткой
Сообщений: 23 630
Спасибо сказали: 12911 раз




Отлично! Спачибо.
Кстати, "получить" подтип по-моему вполне воззможно было бы с TR:T
Нет разве?


--------------------
Давший быка на убой не выпросил и печень на жаркое.
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 06 Oct 2008, 21:41
Сообщение #24

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Нет, в TR:T параметр подтип дороги работал, как подтип реки.
Еще можно получить тип и подтип объекта, находящегося на клетке - это 2-байтовые числа по смещениям 30 и 34 (вместо 9 для типа дорги).


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
Миханик
сообщение 11 Oct 2008, 17:25 (Сообщение отредактировал Миханик - 14 Oct 2008, 12:25)
Сообщение #25

починяю примусы
Сообщений: 147
Спасибо сказали: 14 раз




Контроль типа нанимаемого в Портале Вызова существа
Код
!?FU20114&x1=-1;
!!UN:C6919500/4/?y1;
!!VRy1:+56;
!!UN:Cy1/4/?y2;
!!VRy2:+60;
!!UN&x3=0:Cy2/4/x2;
!!UN&x3<>0:Cy2/4/?x2;
!?FU20114&x1<>-1;
!!UN:C6933756/4/?y1;
!!VRy1:+2884;
!!UN:Cy1/4/?y2;
!!VRx1:*360 +60 +y2;
!!UN&x3=0:Cx1/4/x2;
!!UN&x3<>0:Cx1/4/?x2;
Вызов:
!!FU20114:P#1/$/#2;
!!FU20114:P#1/$; (#2=0)
#1 - № города (-1 - текущий)
$ - тип существа. -1 - значит нет Портала или ещё не сгенерирован тип (сгенерируется при заходе).
#2 - 0 - установить $, любое другое значение - получить $.
Ещё кое-что насчёт картинок для IF
Опыт с подтипом -1 даёт картинку опыта с подписью "+1 уровень", как у Древа Знаний.
З. Ы. 2sergroj: там вообще много чего есть. чуть ли не все !!OB и !!TR. но, афаик, усё это уже раскопали в WoG Team до нас.


--------------------
Всякий процесс делится на четыре стадии: шумиха, неразбериха, наказание невиновных и награждение непричастных. (М. Задорнов)
Подающий нищему - подаёт Богу. А Бог не нищий, чтобы ему подавали!
Go to the top of the pageAdd Nick
 
+Quote Post
Миханик
сообщение 14 Oct 2008, 12:23 (Сообщение отредактировал Миханик - 22 Oct 2008, 11:30)
Сообщение #26

починяю примусы
Сообщений: 147
Спасибо сказали: 14 раз




Контроль количества нанимаемых в Портале Вызова существ
Код
!?FU20115&x1=-1;
!!UN:C6919500/4/?y1;
!!VRy1:+56;
!!UN:Cy1/4/?y2;
!!VRy2:+64;
!!UN&x3=0:Cy2/2/x2;
!!UN&x3<>0:Cy2/2/?x2;
!?FU20115&x1<>-1;
!!UN:C6933756/4/?y1;
!!VRy1:+2884;
!!UN:Cy1/4/?y2;
!!VRx1:*360 +64 +y2;
!!UN&x3=0:Cx1/2/x2;
!!UN&x3<>0:Cx1/2/?x2;
Вызов:
!!FU20115:P#1/$/#2;
!!FU20115:P#1/$; (#2=0)
#1 - № города (-1 - текущий)
$ - кол-во существ
#2 - 0 - установить $, любое другое значение - получить $.
примечание. если на первой неделе в город ни разу не заходили (или нет Портала), тип и кол-во существ ещё не сгенерены и количество будет выдавать всякий мусор.


--------------------
Всякий процесс делится на четыре стадии: шумиха, неразбериха, наказание невиновных и награждение непричастных. (М. Задорнов)
Подающий нищему - подаёт Богу. А Бог не нищий, чтобы ему подавали!
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 16 Oct 2008, 05:50
Сообщение #27

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Поправка к Порталу Призвания:
Монстр не определен в начале только первой недели. При отсутствии монстра тип равен -1, а кол-во любое.


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
Миханик
сообщение 22 Oct 2008, 11:29 (Сообщение отредактировал Миханик - 03 Nov 2008, 06:09)
Сообщение #28

починяю примусы
Сообщений: 147
Спасибо сказали: 14 раз




Прочтение результатов диалога HE:C
вот, ещё наковырял. скрипт позволяет после команды HE:C посмотреть, что осталось в верхних (добавляемых) слотах, и, т. о. юзать его не только для добавления существ, но и для оставления, без особых трудностей. Для WoG 3.58 и TE.
CODE
!?FU20116;
!!UN:V=358/?i;
!!VRy1&1:S8585652;
!!VRy1&-1:S8647508;
!!UN:Cy1/4/?x1;
!!VRy1:+4;
!!UN:Cy1/4/?x3;
!!VRy1:+4;
!!UN:Cy1/4/?x5;
!!VRy1:+4;
!!UN:Cy1/4/?x7;
!!VRy1:+4;
!!UN:Cy1/4/?x9;
!!VRy1:+4;
!!UN:Cy1/4/?x11;
!!VRy1:+4;
!!UN:Cy1/4/?x13;
!!VRy1:+4;
!!UN:Cy1/4/?x2;
!!VRy1:+4;
!!UN:Cy1/4/?x4;
!!VRy1:+4;
!!UN:Cy1/4/?x6;
!!VRy1:+4;
!!UN:Cy1/4/?x8;
!!VRy1:+4;
!!UN:Cy1/4/?x10;
!!VRy1:+4;
!!UN:Cy1/4/?x12;
!!VRy1:+4;
!!UN:Cy1/4/?x14;
Вызов:
!!FU20116:P?1/?2/?3/?4/?5/?6/?7/?8/?9/?10/?11/?12/?13/?14;
?1,?3..?13 - типы существ 1..7, ?2,?4..?14 - их количество.


--------------------
Всякий процесс делится на четыре стадии: шумиха, неразбериха, наказание невиновных и награждение непричастных. (М. Задорнов)
Подающий нищему - подаёт Богу. А Бог не нищий, чтобы ему подавали!


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Миханик
сообщение 03 Nov 2008, 06:41 (Сообщение отредактировал Миханик - 11 Nov 2008, 03:20)
Сообщение #29

починяю примусы
Сообщений: 147
Спасибо сказали: 14 раз




Функции для работы с дефами объектов
позволяют менять № данного дефа, и узнавать, какому имени этот № соответствует. сами скрипты не проверял. для WoG 3.58 и TE.
CODE
!?FU20117;
!!UN:C6919480/4/?y1;
!!VRy1:+129924;
!!UN:Cy1/4/?y2;
!!VRy1:+4;
!!UN:Cy1/4/?y3;
!!VRy2:+4;
!!VRy3:-8;
!!DO20118/y2/y3/12:Px1/x2/x3/=y4/?y4;
!!VRx4:Sy4;
!?FU20118;
!!VRx5:Sx4;
!!UN:Cx16/1/=x1;
!!FU&-1:E;
!!VRy1:Sx16 +1;
!!UN:Cy1/1/=x2;
!!FU&-1:E;
!!VRy1:+1;
!!UN:Cy1/1/=x3;
!!VRx5&1:+1;
!?FU20119;
!!UN:C6919480/4/?y1;
!!VRy1:+129924;
!!UN:Cy1/4/?y2;
!!VRy1:+4;
!!UN:Cy1/4/?y3;
!!VRy2:+4;
!!VRy3:-8;
!!VRi:Sx4;
!!DO20120/y2/y3/12:Px1/x2/x3/y3/?y5;
!!VRy5:+2;
!!UN&x6<>0:Cy5/2/x5;
!!UN&x6=0:Cy5/2/?x5;
!?FU20120;
!!UN:Cx16/1/=x1;
!!FU&-1:E;
!!VRx5:Sx16 +1;
!!UN:Cx5/1/=x2;
!!FU&-1:E;
!!VRx5:+1;
!!UN:Cx5/1/=x3;
!!VRi&1:-1;
!!VRx16&i=0:Sx4;
!?FU20121;
!!UN:C2257160/4/?y1;
!!VRy1:+4;
!!UN:Cy1/4/?y2;
!!VRx2:*68 +4 +y2;
!!UN:Cx2/4/?y3;
!!VRz1:S^8+3 символов^;
!!FU12925:Px1/?y4;
!!FU12926:Py3/y4;
!?FU20122;
!!UN:C2257160/4/?y1;
!!VRy1:+4;
!!UN:Cy1/4/?y2;
!!VRy2:+4;
!!VRy1:+4;
!!UN:Cy1/4/?y3;
!!VRy3:+4;
!!VRz1:S^8+3 символов^;
!!FU12925:P1/?y4;
!!DO20123/y2/y3/68:Px1/y3/y4/?y5;
!!VRx2&y5>0:Sy5 -y2 :68;
!!VRx2&y5=0:S-1;
!?FU20123;
!!UN:Cx16/4/?y1;
!!FU12926:Py1/x3;
!!FU&zx1<>z1:E;
!!VRx4:Sx16;
!!VRx16:Sx2;
вызов:
!!FU20117:P#1/#2/#3/?;
получить в ? кол-во дефов, обретающихся по координатам #1/#2/#3; координаты дефа считаются по нижней правой клетке.
!!FU20119:P#1/#2/#3/#4/$/#5;
установить/получить в $ номер #4го дефа на координатах #1/#2/#3. соответственно #5=0 - установить, остальные значения - получить.
!!FU20121:P#1/#2;
получить в z#1 имя дефа №#2. стандартные дефы:
№0 - AVWmrnd0.def
№1 - AVLholg0.def
остальные номера зависят от карты и характера использования UN:I.
!!FU20122:P#/?;
получить в ? номер дефа с именем z#. если деф ни разу не юзался, он не подгружен и номера не имеет. в таких случаях возвращается -1.
используются строчные функции ShadowTheAge. не забудьте их скопировать тоже, если хотите юзать эти.


--------------------
Всякий процесс делится на четыре стадии: шумиха, неразбериха, наказание невиновных и награждение непричастных. (М. Задорнов)
Подающий нищему - подаёт Богу. А Бог не нищий, чтобы ему подавали!


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 15 Nov 2008, 21:54 (Сообщение отредактировал sergroj - 31 Jul 2011, 15:42)
Сообщение #30

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Проверка, доступна ли клетка монстру

!?FU#:Pv1/?v2;
v1 - номер клетки на поле боя
v2:
= 0 - клетка недоступна (из-за радиуса ходьбы или препятствий по пути, или занята препядствием или дружественным монстром)
= 1 - стоит вражеский монстр, которого можно ударить (в том числе, выстрелить), либо сам монстр, который собирается ходить
= 3 - клетка свободна

Код
!?FU#;
!!UN:C6919200/4/?y1;  [y1 = combatManager]
!!VRx1:+y1 +76;
!!UN:Cx1/1/?x2;


[edit] Оказалось, что это информация о затененности клеток, поэтому её нет когда отключен показ полей, на которые может ходить монстр.

Номер клетки 2хклеточного монстра

!?FU#:Pv1/?v2;
v1 - номер клетки на поле боя
v2:
= -1 - одноклеточный монстр или нет монстра
= 0 - левая клетка
= 1 - правая клетка

Код
!?FU#;
!!UN:C6919200/4/?y1;  [y1 = combatManager]
!!VRx1:*112 +y1 +478;
!!UN:Cx1/1/?x2;


Соседи клетки

!?FU#:Pv1/v2/?v3; - возвращает одну из 6 соседних клеток
v1 - номер клетки на поле боя
v2 - индекс соседа (0..5) (порядок - по часовой стрелке, начиная с клетки справа-сверху)
v3 - возвращает номер соседней клетки (-1 если того соседа нет или он вне поля боя, например, клетка 0, клетка 16, ...)

Код
!?FU#;
!!UN:C6919200/4/?y1;  [y1 = combatManager]
!!VRx1:*12 +y1 +78952 + x2;
!!UN:Cx1/1/?x3;


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 20 Nov 2008, 03:47
Сообщение #31

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




FU20119 все-равно не работает. Вылетает с Access Violation.
Код
!?CM;
!!CM:P?v1/?v2/?v3;
!!FU20119:Pv1/v2/v3/0/?v1/1;
!!IF:M^%V1^;


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 18 Jun 2009, 07:33
Сообщение #32

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2376 раз




Прошу, так сказать, проверить домашнюю работу (может, адреса разнятся в разных системах).
Скрипт позволяет создавать новые двеллинги существ с подтипами >100, с корректными названиями как по ПКМ, так и во внутренних текстах. Существа и охрану же в них можно настраивать обычным путём - через DW.
Для теста, конечно же, двеллинг с нужным подтипом нужно разместить на карте.
У меня работает (под ТЕ).

Код
ZVSE
!?PI;
!!UN:I27/22/0/17/101/17/101/-1/0;
!!VRz906:S^Обитель Страха^; название нового двеллинга
!!UN:C4240673/4/?y-1; найти таблицу по одному из указателей
!!VRy-2:S905*512+9597416; адрес z905
!!DO7777/0/103/1:Py-1/y-2; копировать таблицу ссылок на названия двеллингов в z905
!!VRy-3:S101*4+y-2; адрес ссылки на название двеллинга 101
!!VRy-4:S906*512+9597416; адрес z906
!!UN:Cy-3/4/y-4; забить адрес ссылки в нужное место таблицы
!!UN:C4240673/4/y-2; название двеллинга во внутреннем тексте сообщения, указатели на подсказки по правому клику и внизу экрана.
!!UN:C4275832/4/y-2;
!!UN:C4855123/4/y-2;
!!UN:C4240663/4/y-2; подсказка внизу экрана, если объект принадлежит игроку
!!UN:C4275821/4/y-2; подсказка по правому клику, если объект принадлежит игроку
!?FU7777;
!!UN:Cx1/4/?y1 Cx2/4/y1;
!!VRx1:+4;!!VRx2:+4;


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 28 Jun 2009, 20:53 (Сообщение отредактировал Дьяк - 28 Jun 2009, 21:00)
Сообщение #33

Member
Сообщений: 97
Спасибо сказали: 80 раз




Вроде адреса все статические, наверное должно работать. Как раз мне пригодится для новых замков... скоро собирался этим заняться... Спасибо...
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 29 Jun 2009, 05:34 (Сообщение отредактировал Master Of Puppets - 29 Jun 2009, 07:13)
Сообщение #34

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2376 раз




Тут два больших недостатка:
1)Обновления адреса таблицы при рестарте карты или начале новой игры без перезапуска не происходит - никто ведь не рассчитывал, что эти данные будут менять. Поэтому приходиться хранить в памяти старый адрес таблицы в возвращать его указателям при выходе в главное меню по клику и клавишам. То есть, та же проблема, что и с NOT USED-ами, даже малость сложнее.
2)В функции должно быть, видимо, больше кругов, ибо копировать надо не только таблицу ссылок на названия двеллингов, но и связанные с нею ссылки на названия некоторых других объектов. "Откуда и докуда", я ещё не разобрался. К примеру, если на карте Пирамида, то при попытке навести на неё мышь будет вылет.

Первую проблему я решил. Со второй требуется помощь.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 30 Jun 2009, 18:46
Сообщение #35

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2376 раз




В общем, тут замануха ещё та. Перенос таблицы или просто её дописывание ("внаглую") крашит внутренние опции ВОГа - к примеру, разрушение городов и сброс артефактов на карту. Копаться уже лень стало. Кому не лень - можете продолжить. А мне придётся делать новые двеллинги ещё более геморными, но более безопасными способами...


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
Jelu
сообщение 30 Jun 2009, 20:37
Сообщение #36

СкриптоDеL
Сообщений: 89
Спасибо сказали: 1 раз




Увеличение в exe или просто ERM?


--------------------
Жизнь это болезнь с летальным исходом.
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 06 Aug 2009, 20:47 (Сообщение отредактировал sergroj - 06 Aug 2009, 20:52)
Сообщение #37

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Пара функций работы с диалогами в Эре:

1) Показ диалога, пока зажата клавиша мыши (левая или правая).
x1 = номер диалога
Код
!?FU<номер>;
!!VRy1:Sv1;
!!SN:E7510739/1/x1; [find HDlg -> v1]
!!VRy2:Sv1; [v2 = HDlg]
!!if&y2<>0:;
 !!SN:E5864096/1; [stop animation]
 !!UN:Cy2/4/?v1; [v1 = dialog]
 !!SN:E6245264/2/v1; [show while holding mouse button]
 !!SN:E5864272/1; [continue animation]
 !!SN:E7518240/2/y2; [destroy HDlg]
!!en:;
!!VRv1:Sy1;

(после показа диалог уничтожается - перед следующим показом надо загружать снова)

2) Уничтожение диалога.
x1 = номер диалога
Полезно при редактировании диалогового темплейта, чтобы при каждом показе диалог загружался заново.
Код
!?FU<номер>;
!!VRy1:Sv1;
!!SN:E7510739/1/x1; [find HDlg -> v1]
!!SN&v1<>0:E7518240/2/v1; [destroy HDlg]
!!VRv1:Sy1;


--------------------
ДНК банана на 50% состоит из человека.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 06 Aug 2009, 22:27
Сообщение #38

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2376 раз




Цитата(sergroj @ 06 Aug 2009, 20:47)
2) Уничтожение диалога.
x1 = номер диалога
Полезно при редактировании диалогового темплейта, чтобы при каждом показе диалог загружался заново.
Код
!?FU<номер>;
!!VRy1:Sv1;
!!SN:E7510739/1/x1; [find HDlg -> v1]
!!SN&v1<>0:E7518240/2/v1; [destroy HDlg]
!!VRv1:Sy1;

Хочу спросить: малопонятные ошибки, ссылающиеся на совершенно нормальные команды DL:A и иногда ведущие к вылету - они обусловлены именно тем, что при загрузке диалога старая информация его настроек даёт о себе знать?


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 07 Aug 2009, 00:14
Сообщение #39

В миру GrayFace
Сообщений: 2 528
Спасибо сказали: 816 раз




Не знаю. Какие ошибки?


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 07 Aug 2009, 01:19
Сообщение #40

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2376 раз




Ну вот - теперь как назло не могу их поймать...
Короче, отбой - ложная тревога.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post

9 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19 April 2024 - 11:26
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика