hippocamus
13 Dec 2007, 14:02
Проблема вот в чём:
Возможно ли ПО НАСТОЯЩЕМУ воскресить полностью убитый отряд (лежит труп) с помощью скриптов?
Или хотя бы имитировать воскешение: убрать труп, и вызвать существ в этот же слот?
Если убрать флаг смерти (22) - отряд поднимется. Можно изменить его числе5нность. Компьютер им даже ходить будет. Но атаковать его невозможно (если враг), ходить им невозможно (если свой), магия на него не кастуется (может, кроме воскрешения?), курсор не наводится.
Если попытаться воскресить магией "Воскрешение" или "Поднятие мертвецов", поставив предварительно флаг нежити, полностью убитый отряд - игра вылетает в чёрный экран.
(Это я написал, чтобы не было лишних предложений).
Довольно проблемный вопрос... не спорю, сам как-то пытался его раскусить (по ерм-молодости)
тут меня интересует вот что - а какие флаги у поднятого стэка имеются?
Может у него всё время присутствует некий флаг, по типу №27, а может и №7, и поэтому ему ход не передаётся... Но вот что он не реагиует на курсор эту версию откидывает, имхо.
hippocamus
13 Dec 2007, 17:41
Флаги 1,2,5,23 (грифон с флагом нечисти). Без 23 тоже самое.
Д'якон
13 Dec 2007, 18:48
Можно через UN:C. Я когда-то сталкивался с этим тоже и находил нужные адреса, но к сожелению переустанавливал артмани и потер их (будет время поищу опять, хотя можешь и сам - там ничего сложного нет). Там около 5-6 значений которые нужно изменить, что бы полностью оживить отряд (если не установить их все, возможны различные нежелательные эффекты, отряд оставляет двойников или еще чего-нибудь вплоть до краха).
hippocamus
13 Dec 2007, 20:09
C памятью работать не пробовал (только переделывал чужие скрипты). Если не трудно - давай найдём и попросим Драколича занести в хелп. Это ведь важная вещь.
gamecreator
13 Dec 2007, 23:10
а еще неплохо бы сделать библиотеку функций
hippocamus
29 Jan 2008, 01:06
Функция для воскрешения стекаКто может - пожалуйста, протестируйте:
Код
!!FU1:Px1; - где х1 - номер стека воскрешаемого
!?FU1;
!!VRy1:S6919200;
!!UN:Cy1/4/?y12;
!!BMx1:P?y2;
!!VRy3:Sy2 -1 *112 +y12 +586; 1
!!VRy4:Sy3 +6; 2
!!VRy5:Sx1 *1352 +y12 +21840; 3
!!VRy6:Sy5 -56; 4
!!VRy7:Sy5 -72; 5
!!VRy8:Sx1 *16777216 +65535;
!!BMx1:B?y9;
!!BMx1:T?y10;
!!MAy10:Xy10/?y11;
!!UN:Cy3/4/y8;
!!UN:Cy4/4/0;
!!UN:Cy5/4/y11;
!!UN:Cy6/4/y9;
!!UN:Cy7/4/2;
Night Hunter
29 Jan 2008, 06:26
Эх блин... Не вовремя инет на компе пропал... Я бы потестил... А переписывать все ручками не охота... Вдруг ошибку где-нибудь сделаю...
izrukvruki
30 Jan 2008, 17:18
Вы такие все умные... а как это потестить - нужно ведь еще кусок кода накрапать, где отследишь номер убитого стека??? и под какую версию героев работает?
hippocamus
30 Jan 2008, 18:02
Работает под любую. Можно сделать, чтобы воскресал всегда 0-й стек, например.
Код
!?FU1;
!!VRy1:S6919480;
!!UN:Cy1/4/?y12;
!!BMx1:P?y2;
!!VRy3:Sy2 -1 *112 +y12 +322082; 1
!!VRy4:Sy3 +6; 2
!!VRy5:Sx1 *1352 +y12 +343336; 3
!!VRy6:Sy5 -56; 4
!!VRy7:Sy5 -72; 5
!!VRy8:Sx1 *16777216 +65535;
!!BMx1:B?y9;
!!BMx1:T?y10;
!!MA:Xy10/?y11;
!!UN:Cy3/4/y8;
!!UN:Cy4/4/0;
!!UN:Cy5/4/y11;
!!UN:Cy6/4/y9;
!!UN:Cy7/4/2;
© Д'якон
После предварительного теста могу сказать, что это работает...

, Владимир
Но есть пара ньансов с использованием этой ф-ции:
1 - когда стэк восстановлен, он получает возможность ходить... даже если он уже "в прошлой жизни" ходил
2 - без окончательной обвязки, эта ф-ция может быть "опасной", так что устите это
Если что, пишите отзывы по тестам своим...
Вот примерная демонстрация работы приведенной выше ф-ции с одним из вариантов использования её в действии...
Код
ZVSE
!?BR-1;
!!IF:V888/0;
!?CM4&-888;
!!FU&v997<0:E;
!!FU24081&587:P; activation
!!BG:Q?s;
!!BHs:M?k;
!!FU&k=1:E;
!!CM:D?y1 F?y2;
!!VRy3&s=0:S252; !!VRy3&s=1:S253;
!!FU24082&y1=y3/y2=512/-587:P;
!?FU24082;
!!BG:H?n;
!!HEn:S7/?y3 S17/?y4; мудрость/магия земли?
!!FU&y3=0:E;
!!CM:R0;
!!VRy5:S20;
!!VRy5&y4=3:S10; !!VRy5&y4=2:S15; !!VRy5&y4=1:S17;
!!IF:Q1/35/y5/2^Вы хотите эмулировать {Восстановление}?^;
!!FU&-1:E;
!!HEn:I?v5/1; !!VRv5:Sv5-y5;
!!IF&v5<0:M^У вас не достаточно маны!^;
!!IF&v5>=0:V587/1;
!?FU24081;
!!CM:R0;
!!CM:I?y1 F?y2; !!FU&y1>1:E; стоп если нажато не ЛКМ
!!IF&y2=512/587:V587/0;
!!FU&y2=512/-587:E;
!!CM:D?y1;
!!FU|y1<1/y1>=252:E; запрет "мёртвых зон"
!!FU|y1=17/y1=34/y1=51/y1=68/y1=85/y1=102/y1=119/y1=136/y1=153/y1=170:E;
!!FU|y1=16/y1=33/y1=50/y1=67/y1=84/y1=101/y1=118/y1=135/y1=152/y1=169/y1=186:E;
!!BU:Dy1/?m; stack was killed?
!!FU&m<0:E;
!!BMm:I?y1; !!BG:Q?s; узнать сторону монстра и героя
!!FU&y1<>s:E;
!!BMm:F?i; get all stack's flags
!!VRi:&67108864; действовал ли стек в текущем раунде?
!!FU25000:Pm; ф-ция Востановления
!!FU24080:Pm/i; "всякие красивости"
!?FU24080;
*x1 - stack
*x2 - control flag
!!VRz1:S^RESURECT.WAV^;
!!SN:Pz1;
!!BMx1:F?i;
!!VRi:|67108864;
!!BMx1&x2>0:Fi; restore busy-flag if exist before
!!BMx1:V50 T?t;
!!BG:H?n;
!!HEn:B0/?z-1 R2/?y3 Iv5/1;
!!UN:N3/z-3/t/1; имя отряда во мн.ч.
!!VRz-5:S^ю^; !!VRz-5&x2=1:S^е^;
!!VRz1:S^%Z-1 эмулирует {Восстановление}, оживляя отряд %Z-3 погибает.^;
!!BU:Mz1; вывод в лог
!!IF:V587/0 V888/1;
!!BHs:M1;
!!UN:R5/2/0; сменить курсор
!!BU:R;
!?MM0&587; смена курсора для закла
!!MM:D?y1;
!!UN&y1>0/y1<186:R5/3/0;
!!UN|y1<1/y1>185:R5/2/0;
!!VRz-1:S^Выберите мёртвый отряд!^;
!!MM:Mz-1;
!?FU25000; (c) Д'якон
*x1 - stack
!!VRy1:S6919480;
!!UN:Cy1/4/?y12;
!!BMx1:P?y2;
!!VRy3:Sy2 -1 *112 +y12 +322082; 1
!!VRy4:Sy3 +6; 2
!!VRy5:Sx1 *1352 +y12 +343336; 3
!!VRy6:Sy5 -56; 4
!!VRy7:Sy5 -72; 5
!!VRy8:Sx1 *16777216 +65535;
!!BMx1:B?y9;
!!BMx1:T?y10;
!!MA:Xy10/?y11;
!!UN:Cy3/4/y8;
!!UN:Cy4/4/0;
!!UN:Cy5/4/y11;
!!UN:Cy6/4/y9;
!!UN:Cy7/4/2;
[подправлен]*не тестировалось, так что извиняйте если что... приду домой, то в оочую гляну, что я тут накарябала*
Примечание: запустить действие нужно путём ПКМ на модельке героя в бою
Если у героя нету Мудрости вообще ,то ничего не запуститься

При наличии Магии Земли будет уменьшаться и стоимость "каста" (по умолчанию выставлена цена в 20 маны)
тестируйте, жалуйтесь, и всего хорошего...
Добавлено ([mergetime]1201788272[/mergetime]):
восстанавливает ТОЛЬКО мёртвый отряд!!!
hippocamus
31 Jan 2008, 20:59
А если он жив, просто не работает?
Кстати, проблему с тем, что отряд получает способность ходить можно решить в 4 действия.
1. Перед воскрешением считываем флаги отряда
2. Воскрешаем
3. Вычитаем флаг смерти
4. Устанавливаем отряду флаги которые он имел перед смертью.
Мурсинушка
20 Feb 2008, 17:26
А нельзя просто заставить стек скастовать воскрешение?
Или превратить кого-то в архангела, воскресить, а потом обратно вернуть в прежний вид?
<Fenix>
20 Feb 2008, 18:04
Цитата(Мурсинушка @ 20 Feb 2008, 17:26)
А нельзя просто заставить стек скастовать воскрешение?
Или превратить кого-то в архангела, воскресить, а потом обратно вернуть в прежний вид?
Кого-то это кого? Копейщика или монаха в архангела?Абилку можно дать по воскрешению критчу, только, зачем именно в бою дать(а потом отобрать) абилку,не совсем понятно.
hippocamus
20 Feb 2008, 18:37
Если стек скастует воскрешение будет то же, что и герой скастует воскрешение, т.е. смотри 1-й пост

Превратить существо? Не пробовал. Скрипт с Метаморфами вообще-то есть, но это же видно будет. А нужно чтобы без особых потрясений воскрешение произошло
У меня работает случайное воскрешение полностью убитого отряда как живых, так и андедов. Проверка идет для каждой клетки поля битвы. Вот функция проверки и воскрешения
Код
!?BG1&-998;
!!DO7178/0/186/1:P;
!?FU7178;
!!VRy-2:S0 R99; вероятность воскрешения
!!VRy-7:S0;
!!BG:N?v7009; номер текущего стека
!!BMv7009:T?y5 I?y6 N?y7; тип, сторона и кол-во текущего стека
!!BU:Ex16/?v7270 Dx16/?v7271; в клетке x16 живой или трупик?
!!BMv7271&v7270=-1/v7271>-1:F?y-6 T?v7278;
!!VRy-6&v7270=-1/v7271>-1:&1; доп. проверка для двуклеточных монстров
!!VRx16&v7270=-1/v7271>-1/y-6=1:+1; (не помню зачем)
!!BU&v7270=-1/v7271>-1/y-6=1:Dx16/?v7272;
!!FU&v7270=-1/v7271>-1/y-6=1/v7272<>v7271:E;
!!BMv7270&v7270>-1/v7271=-2:F?y-6;
!!VRy-6&v7270>-1/v7271=-2:&1; доп. проверка для двуклеточных монстров
!!VRx16&v7270>-1/v7271=-2/y-6=1:+1; с левой стороны
!!BU&v7270>-1/v7271=-2/y-6=1:Ex16/?v7272;
!!VRx16&v7270>-1/v7271=-2/y-6=1:-1; с правой стороны
!!BU&v7270>-1/v7271=-2/y-6=1:Ex16/?v7272;
!!FU&v7270>-1/v7271=-2/y-6=1/v7270=v7272:E;
!!BMv7271&v7270=-1/v7271>-1:I?y-5 F?y-6 P?v7003 T?v7008 H?y-8;
!!BMv7270&v7270>-1/v7271=-2:I?y-5 P?v7003 T?v7008;
!!VRy-6&v7270=-1/v7271>-1:&16; для живчиков
!!VRy-7&v7270=-1/v7271>-1/y-6<>16:S1;
!!BMv7271&v7270=-1/v7271>-1/y-6<>16:I?y-5 F?y-6 P?v7003 H?y-8;
!!VRy-6&v7270=-1/v7271>-1/y-7=1:&262144; для андедов
!!VRy-9&v7270=-1/v7271>-1/y-6=16:Sy7 *50 +80; сила воскрешения андедов
!!VRy-9&v7270=-1/v7271>-1/y-6=262144:Sy7 *50 +60; сила воскрешения живых
15% шанс воскресить для ангелов + проверка условий
!!VRz1&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=16/y-9>=y-8/v7008<>27/v7008<>83/v7008<>121/v7008<>151/v7008<>155:S^Ангелы используют воскрешение.^;
!!VRz1&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=16/y-9<y-8/v7008<>27/v7008<>83/v7008<>121/v7008<>151/v7008<>155:S^Ангелы попытались использовать воскрешение, но им не хватило силы.^;
!!MM&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=16/v7008<>27/v7008<>83/v7008<>121/v7008<>151/v7008<>155:Sz1; вывести сообщение
!!BMv7009&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=16/y-9>=y-8/v7008<>27/v7008<>83/v7008<>121/v7008<>151/v7008<>155:C38/v7003/2/y7/0; скастовать воскрешение
!!VRz1&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=262144/y-9>=y-8:S^Ангелы используют оживление мертвецов.^;
!!VRz1&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=262144/y-9<y-8:S^Ангелы попытались использовать оживление мертвецов, но им не хватило силы.^;
!!MM&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=262144:Sz1; вывести сообщение
!!BMv7009&y-2<15/y5=12/y6=y-5/v7270=-1/v7271>-1/y-6=262144/y-9>=y-8:C39/v7003/2/y7/0; скастовать оживление мертвецов
Может код можно сократить, не пробовал. В принципе можно воскрешать наверно и не полностью убитых.
FakerNeo
02 Jul 2008, 14:07
Так это ангелы воскрешают?
Добавлено ([mergetime]1214996832[/mergetime]):
или просто воскрешение?
В данном примере воскрешают ангелы, вместо них можно поставить кого угодно.
FakerNeo
08 Jul 2008, 12:43
А если нужно просто воскрешение? без ангелов
Без ангелов? Т.е. чтоб герой воскрешал? Просто больше некому. А если отряд сам должен воскреснуть, так использовать возрождение.
hippocamus
08 Jul 2008, 15:34
Ну сделай чтобы воскреншал гоблин. Тогда это действительно будет видно и понятно.
"Использовать возрождение" - как? У тебя очень просто всё получается...
Так проще некуда. Возрождение можно поставить через опыт существ к примеру. А чтоб воскрешал гоблин, так в том коде, что я писал ранее вместо y5=12 поставить y5=84.
FakerNeo
08 Jul 2008, 19:02
Вобщем нужно воскрешение без каста, чтоб это смотрелось в игре.
hippocamus
08 Jul 2008, 22:49
Ну тогда можно через !!SS поставить пустую анимацию.
Почитал тему - нифига не понял... когда воскрешение работает а когда не работает? Если монстру приказать через BM:C скастовать воскрешение, оно же вроде будет работать или нет?
hippocamus
05 Jan 2009, 00:44
Нет конечно.
Там особый скрипт воскрешения есть через UN:C
Не знаю, как с ангелами, а с монахами !!BM#:c38///; не работает
При попытке воскресить монахами алебардистов (этой инструкцией) игра вылетает
подразумевается случай, когда стек "савсэм мьортвый лэжит"
1) Как всё-таки воскресить? Призывать клон ангелов и уничтожать потом? больше идей нет.
2) А точно с ангелами работает?
В общем, ни один из приведённых здесь скриптов у меня не сработал.
Один из скриптов воскресил неполноценно - стек встал, рядом с ним появилась циферка "0", но на него не работает правая кнопка мыши (чтобы посмотреть число) и на него может "наступить" другой воин

В остальных случаях просто выводит ошибку, а после вылетает из героев.
Как я понял, тут дело в том, то для воскрешения нужна особая анимация (как архангелы делают), замена монков архангелами через !!BM:T толку не даёт, так как стек остаётся на вид как монки, а внутри ангелы (но умирает, вроде, тоже как монки). Соответственно анимация на нём тоже монковская
hippocamus
26 Mar 2009, 14:56
Особая анимация - это любой каст.
Например, Грейженные элементалы, василиски, минотавры, гарпии имеют эту анимацию.
А то, что скрипт нерабочий - это да... Максимум, чего удавалось добиться - это стек вставал и воевал, но после боя игра вылетала.
Я сейчас свой скрипт отсюда скопировал, воткнул на почти что чистый ВОГ и запустил без всех скриптов ВОГа - работает отлично. Раньше у меня он был включен вместе более чем с половиной скриптов ВОГ.
Как вариант, могу предположить, что есть конфликт с каким-то скриптом ВОГ.
Цитата(major @ 26 Mar 2009, 18:40)
Я сейчас свой скрипт отсюда скопировал, воткнул на почти что чистый ВОГ и запустил без всех скриптов ВОГа - работает отлично. Раньше у меня он был включен вместе более чем с половиной скриптов ВОГ.
Как вариант, могу предположить, что есть конфликт с каким-то скриптом ВОГ.
Я пишу свой скрипт и в целях безопасности у меня вог отключен. К тому же, из-за малого числа z переменных, большинство вог скриптов с моим будут несовместимы.
Если у тебя чистый вог, сообщи версию. у меня просто 3.58f, без всяких TE.
З.Ы. Твой скрипт я не пробовал, но пробовал инструкцию !!BM:C38///;
работает и на 3.58f и на ТЕ
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.