Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сотворите чудо!
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
nLc
kap.gif
такая просьба кто может сделать такой скрипт в битве:
1-получить значение морали(от -3 до +3) у каждого юнита и запомнить его
2-к скоростям юнитов добавить значение пункта 1 (но скорость юнита не должна быть меньше 1)
3-установить мораль юнитов в 0
4-по мере битвы когда настает ход юнита ему выставить ИСХОДНУЮ/РОДНУЮ скорость
ежели нажата W то вернуть скорость пункта 2.
вкратце идея в том чтобы сделать мораль как в 4х героях инициативой. существа с большей моралью будут ходить раньше существ с плохой.
КАРДИНАЛЬНО изменит игру!
плиз осильте кто нибудь!
good.gif
ShadowTheAge
Ничего это не изменит, т к за один игровой ход все существа сходят ровно по одному разу. Поменяется только порядок хода.

В четвертых героях пока какой-нибудь тормоз сходит, другие могут по 3 раза сходить.
Berserker
Тяжело это, но возможно. Если ты состряпаешь числовые значения инициативы для всех мостров (как отдельной характеристики), то я в новой версии Мода Феникс включу и Инициативу.
nLc
Цитата(Berserker @ 30 Dec 2006, 03:25)
Тяжело это, но возможно. Если ты состряпаешь числовые значения инициативы для всех мостров (как отдельной характеристики), то я в новой версии Мода Феникс включу и Инициативу.

в смысле? я ж предлагаю по алгоритму в 1ом посте а не по табличым значениям это делать.... unsure.gif
Berserker
По алгоритму ерунда получится. Скорость и так сильная. Я предлагаю разделить скорость и инициативу. Вдобавок на инициативу будет влиять мораль...
nLc
Цитата(Berserker @ 31 Dec 2006, 13:20)
По алгоритму ерунда получится. Скорость и так сильная. Я предлагаю разделить скорость и инициативу. Вдобавок на инициативу будет влиять мораль...

можешь максимально подробно обьяснить что ты иммеешь в виду, если надо сделать таблички сделаю только я должен понимать что делать? а то я чтото не совсем тебя понимаю....
Berserker
Могу, но не хочу. За дело это нудное никто не берётся, а если сделаешь благодарности не получишь. А идея такая: у каждого монстра новая хар-ка, независимая от Скорости - Инициатива. Мораль увеличивает или уменьшает инициативу на значение морали*2. Вот и всё. Скорость одно, Инициатива другое
nLc
Цитата(Berserker @ 06 Jan 2007, 14:57)
Могу, но не хочу. За дело это нудное никто не берётся, а если сделаешь благодарности не получишь. А идея такая: у каждого монстра новая хар-ка, независимая от Скорости - Инициатива. Мораль увеличивает или уменьшает инициативу на значение морали*2. Вот и всё. Скорость одно, Инициатива другое

гм а ты сможешь сделать чтобы очередность хода юнитов была по инициативе а не поскорости? без шаманства со скоростями? это вообще отлично!
nLc
Гм так сделать табличку то?
какой диапазон инициатив?
от нуля до скольки? и ноль это самый быстрый юнит, или наоборот самый медленный??? good.gif
Berserker
1) всё не могу
2) диапазон нелохо бы 1..15 +2*мораль будет баланс
3) и всё же с манипуляциями со скоростями. Только эта рутина не видна пользователю, он нормально будет просматривать скорость безо всяких проблем. Пока лишь теория, впрочем на простых битвах получалось.
nLc
Цитата(Berserker @ 07 Jan 2007, 12:21)
1) всё не могу
2) диапазон нелохо бы 1..15 +2*мораль будет баланс
3) и всё же с манипуляциями со скоростями. Только эта рутина не видна пользователю, он нормально будет просматривать скорость безо всяких проблем. Пока лишь теория, впрочем на простых битвах получалось.

отлично! spiteful.gif
табличку буду делать полагаясь на свою логику в тхт формате
номер существа пробел инициатива
1 5
2 6
3 9
4 8
....
типа того опираясь на свою логику crazy.gif
ну типа големы тормоза, эльфы шустряки ....
Berserker
Лучше номер существа=инициатива
У стрелков она высокая. У высших созданий ниже сделай.
nLc
http://www.lc-team.nm.ru/MORALE.txt
совсем забыл было про это н овсе таки вспомнил.... dry.gif
Bes
Не поможете... отцы-скриптописцы? smile.gif
Вот, я своял код, для удобства сделал с сообщениями...
Цитата(из моей карты)
!?BA0&1000/v33<>-1;
!!VRw8:S5;
!!IF&v33<>-1:M^(Юлина с войском)^;

!?BA1&1000/w8<>2;
!!HE1:O?v33;
!!IF&v33<>-1:M^Враг был повержен^;
!!FU&v33<>-1:E;
!!HE1:O0;
!!VRw8:S2;
!!IF:M^Ваши воины были убиты!^;
!!HE1:T998/999/1000/194/2;

!?BA0&1000/v33=-1/w8=2;
!!IF:M^Теперь Юлина осталась одна, но враг ещё жив!^;
!!HE1:C0/0/2/0; удаляю юнита, появляющегося после восстановления героя
!!BA:M0/2/185/1;

!?BA1&1000/w8=2;
!!HE1:O?v33;
!!VRw8&v33<>-1:S5;
!!IF&v33<>-1:M^Юлина отомстила за своих павших воинов!^;
!!IF&v33=-1:M^Юлина не смогла одолеть врага...^;

Всё работает как я и задумывал: "Если герой в битве проигрывает, то ещё можно оставить игру выигрышной - Героя то никто не убивал (номинально), вот он то теперь и держит удар в одиночку...
У меня по этому замыслу три вопроса... sad.gif
(1) - см. послед. строку... Почему-то эта строка выполняется два раза??? unsure.gif
(2) - см. предпослед. строку... Как сделалть, чтобы после повторного выигрыша (типа герой всё же выстоял в одиночку), игра забыла про первый проигрыш героя?? Может есть способ переписать уже запомненное состояние... Можно конечно сразу давать победу ( !!UN:Q1 ), но это не требуется (ведь впереди ещё много таких же битв)
(3) - Как реализовать запоминание оставшихся монстров (кол-во врага) после первой битвы и уже этих монстров (а ещё лучше с учтённым состоянием параметра "Оставшееся здоровье") перекинуть на второй бой, чтоб максимально возможно воплотить мою задумку?

Если кто чем-то может посоветовать, я буду просто премного благодарен!!! pray.gif
DracoLich
а откуда переменная w8?
Bes
А разве это на что-то влияет? unsure.gif
Я её просто взял, без всякой задней мысли... она же не используется?!

Если хотите, пусть w8=v88, это не принципиально, какую переменную использовать.
Deo
w - это переменная героя.
У каждого героя есть 200 своих w переменных.
Они используются так:

!!IF:W(Номер героя);
!!VRw(Номер):....

Где w(номер) - номер нужной переменной того героя который был задан до этого в строке !!IF:W(Номер героя);.
Bes
как показала практика, строка !!IF:W(Номер героя); оказалась не нужна... просто эта переменная стала работать как v...

Блин, хоть бы то что нового посоветовал sad.gif ... Приду домой, а исправлять и нечего будет sad.gif
Berserker
Бес, у вас неверная практика. Всёже придерживайтесь правила, которое ВСЕГДА выполняется и указывайте через !!IF:W какому герою переменные ставите или проверяете.

!?BA0&1000/v33<>-1;
!!VRw8:S5;
!!IF&v33<>-1:M^(Юлина с войском)^;

Условие v33<>-1 дублировать не нужно, оно ведь на всёи триггере стоит.

!?BA1&1000/w8<>2;
!!HE1:O?v33;
!!IF&v33<>-1:M^Враг был повержен^;
!!FU&v33<>-1:E;
!!HE1:O0;
!!VRw8:S2;
!!IF:M^Ваши воины были убиты!^;
!!HE1:T998/999/1000/194/2;

Вообще-то, Бес, это муть. Тут же нет контекста, посему смысл не совсем ясен. Кроме того, нейтральным героя делают через -1, а не 0 (красный).

Если хотите, чтобы дело касалось только одного героя, то делайте так:

!?BA1&1000;
!!BA:H0/?y1;Поместить номер героя нападающего в переемнную y1
!!FU&y1<>1:E;не наш герой
!!IF:V100/1;Постоянный флаг 100 определяет, происходит ли битва с нашим определённым героем (причём он атакует, иначе придётся смотреть ещё и защищающуюся сторону.

Это советы, а вообще лучше словами бы полный смысл сперва.
Bes
Спасибо, но вы явно не секёте моей задумки... щас изложу подробнее... А пока:
Цитата
(1) - см. послед. строку... Почему-то эта строка выполняется два раза???
(2) - см. предпослед. строку... Как сделалть, чтобы после повторного выигрыша (типа герой всё же выстоял в одиночку), игра забыла про первый проигрыш героя?? Может есть способ переписать уже запомненное состояние... Можно конечно сразу давать победу ( !!UN:Q1 ), но это не требуется (ведь впереди ещё много таких же битв)
(3) - Как реализовать запоминание оставшихся монстров (кол-во врага) после первой битвы и уже этих монстров (а ещё лучше с учтённым состоянием параметра "Оставшееся здоровье") перекинуть на второй бой, чтоб максимально возможно воплотить мою задумку?

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

А вот с остальными 2-мя вопросами (1 и 3) я так и не справился sad.gif
Хотя бы скажите, почему два раза диалог появляется?

Так, теперь что у меня щас с этим делом...
Код
!?BA0&1000/v33<>-1;
!!VRw8:S5;
!!CA3/0/0:O0; дать город, чтоб не проиграть сразу

!?BA1&1000/w8<>2;
!!HE1:O?v33;
!!CA3/0/0:O-1; !!OW:D-0/254; забрать город
!!FU&v33<>-1:E;
!!UN:Ov998/v999/v1000;
!!VRw8:S2;
!!HE1:O0 Tv998/v999/v1000/194/2;

!?BA0&1000/v33=-1/w8=2;
!!IF:M^Теперь Юлина осталась одна, но враг ещё жив!^;
!!HE1:C0/0/2/0;
!!BA:M0/2/185/1;

!?BA1&1000/w8=2;
!!HE1:O?v33;
!!VRw8&v33<>-1:S5;
!!IF&v33<>-1:M^Юлина отомстила за своих павших воинов!^;
!!HE1&v33<>-1:C0/2/185/0;
!!IF&v33=-1:M^Юлина не смогла одолеть врага...^;
Так, здесь пока остаётся w8, не обращайте на это внимание, я её потом на v-переменную заменю.

В общем, теперь про идею:
"Когда проходит обычная битва, и герой побеждает, то всё остаётся по обычному...
Но если в битве герой проигрывает, то игра на этом ещё не заканчивается... хоть он и ходит без замка... Тут же, битва начинается заново (точнее продолжается). В ней теперь участвуют типа сам герой (так сказать без посредников, для чего и ) и те монстры, с которыми проводилась только что битва (здесь пока использую Tv998/v999/v1000/194/2), причём надо, чтобы их кол-во и параметры сохранились от последнего раунда пред. битвы (я так думаю через !!BM:L$ N$ T$)... Если и в этот раз герой проигрывает, то GAME OVER, а если всё же остаётся победителем, то пусть живёт, при этом надо удалять модельку монстров с карты (ведь номинально, они ещё с первой битвы остаются, так что я беру !!UN:Ov998/v999/v1000;)
"

Ну вот вроде всё... Текст я сначала просто вставил, чтоб проверить работу шаблона, т.сказать видеть наглядно что когда выполняется.


Если с перекидыванием параметров монстров будет уж сильно напряжно, то оставьте только численное кол-во и состав, порядок по стэкам соблюдать не требуется.


Спасибо, что отозвались на мой крик души smile.gif , а то я своими идея уже сам себя достал, потому как уж больно они крутоваты, я такие задумки не потяну (хотя опыт растёт)
Berserker
Значит так:

1) Вопрос: только для нейтралов или также в битвах с противником?
2) Под какой ехешник?

Это последнее, что спрашиваю. Потом будут ответы.
Bes
2 Lord Of Rage Ж)

1) нейтралов
2) ТЕ (он же Phoenix.exe)
Примечание: это только для героя №1 (Валеска); роль героя пусть будеть играть 1 Стрелок (№3), т.е. !!BA:M0/2/3/1; и добавлять именно в средний слот
Berserker
Понял.

1) (из Феникс-Мода):

Код
!?BA0&1000;Standart Pre-Battle trigger
!!BA:O?v9707/?v9708 H0/?v9709 H1/?v9710;v9707,v9708 - owners
;v9709,v9710 - hero's numbers
!!OW:Iv9707/?v9705 Iv9708/?v9706;v9705,v9706 - state of players (AI or Human)
;v9711 - type of the battle=...
!!VRv9711&v9708=-1:S1;1 - HUMAN HERO vs NEUTRALS
!!VRv9711&v9710=-2/v9706=1:S2;2 - HUMAN HERO vs COMP CREATURES
!!VRv9711&v9710=-2/v9706=0/v9705=1:S3;3 - COMP HERO vs HUMAN CREATURES
!!VRv9711&v9708<>-1/v9710=-2/v9705=0/v9706=0:S4;4 - HUMAN HERO vs HUMAN CREATURES
!!VRv9711&v9710<>-2/v9706=1:S5;5 - HUMAN HERO vs COMP HERO
!!VRv9711&v9710<>-2/v9705=1:S6;6 - COMP HERO vs HUMAN HERO
!!VRv9711&v9710<>-2/v9705=v9706:S7;7 - HUMAN HERO vs HUMAN HERO
!!HEv9709&v9709<>-2:E?v9802;
!!HEv9710&v9710<>-2:E?v9803;
!!VRv9706&v9711=1:S1;


Что имеем? Это кусок загоните в самый верх скриптов, теперь вы можите в любых триггерах и условиях пользоваться следующими данными:

;v9705,v9706 - кто игроки? левый и правый. (0 - человек, 1 - ИИ)
причём если в Воге нейтралы определяются как человек, то тут как ИИ.

;v9707,v9708 - хозяины левого и правого героев. -1 если нет хозяина
;v9709,v9710 - номера героев (-2 если нет героя)
;v9711 - тип сражения:

1 - Герой-человек vs Нейтралы
2 - Герой-человек vs Существа Компа
3 - Герой-комп vs Человеческих существ
4 - Герой-человек vs Человеческих существ
5 - Герой-человек vs Герой-комп
6 - Герой-комп vs Герой-человек
7 - Герой-человек vs Герой-человек

Иногда этой инфы мало, тогда идёт следующий код:
(номер функции можно менять)

Код
!?FU22501;Battle Function
;*x1* - for whom: human(0) or AI(1)
;*x2* - what: side(0) owner(1) or hero_number(2)
;*x3* - index of v-var to store the result
!!VRy1:S9705+x1;
!!VRy2:S9707+x1;
!!VRy3:S9709+x1;y1,y2,y3 - indexes
!!VRvx3&x2=0:Svy1;
!!VRvx3&x2=1:Svy2;
!!VRvx3&x2=2:Svy3;


Возвращает некоторые боевые параметры.
Аргументы: (то, что передаём функции после P)
*x1* - для кого: (0 - человека/1 - компа)
*x2* - что хотим получить: 0 - сторону (0 -левая/1 - правая), 1 - хозяин, 2 - номер героя
*x3* - индекс v-переменной в которую будет закинут результат.

В принципе теперь любую битву можно корректно отследить и обработать для любого скрипта. Вернёмся к поставленой Вами задаче:

;flag100 - нам нужен флаг, который сообщит нам, что битву нужно переиграть

Код
!?BA1&1000/-100/v9711=1/v9707=1;
;Итак битва человека нужного героя с нейтралами (первая битва)
;Уже прошла. Кто же победил?


Можно проверить героя на хозяина, но я предпочитаю делать универсальные триггеры для всех случаев жизни. Потому после нашего предбитвенного кода ставьте следующее:

Код
!?BA1;Standart Post-battle trigger
!!HEv9709:O?y1;
!!VRv9804:S0;
!!VRv9804&y1=v9707:S1;


Теперь переменная v9804 всегда будет указывать проигравшую сторону. Следовательно, проверяем, проиграла ли левая сторона. А для пущей оптимизации кидаем это в условие триггера, так что исправляем верхний код на:

Код
!?BA1&1000/-100/v9711=1/v9707=1/v9804=0;
;Итак битва человека нужного героя с нейтралами (первая битва)
;Уже прошла. Проиграли мы :(


Теперь дело вторичное. Взять монстров используя !!BA:M и спровоцировать ещё одну битву с данным героем.

Код
;....продолжение
!!BA:M1/?v100/?v101 M1/?v102/?v103 M1/?v104?/v105 M1/?v106/?v107 M1/?v108/?v109 M1/?v110/?v111 M1/?v112/?v113;
!!HE1:Tv998/v999/v1000/0/1;

Итак мы сохранили армию нейтралов в v100-v113. Можно использовать другие переменные. А герою устраиваем сражение

Код
!?BA0&100;
;Другие проверки не нужны, наш флаг не врёт.
!!BA:M1/0/v100/v101 M1/0/v102/v103 M1/0/v104/v105 M1/0/v106/v107 M1/0/v108/v109 M1/0/v110/v111 M1/0/v112/v113;
!!BA:H0/1;
!!BA:M0/3/3/1;

Всё, нейтралов установили, героя тоже, лучника тоже. Осталось проследить, что произойдёт после.

Код
!?BA1&100/v9804=0;проиграл наш герой
!!OW:I-1/d/1;Смерть ему

Команда убивает текущего игрока.
Осталось лишь обработать действия при победе.

Код
!?BA1&100/v9804=1;
!!IF:V100/0;Обнуляем наш флаг до лучших времён
........

Теперь чуть сложнее, так как код надо проверять. Я не могу заранее предсказать реакцию ЕРМ. Можно попробовать удалить монстров, установить местоположение героя и установить ему хозяина.

Код
!!UN:Ov998/v999/v1000/1;
!!HE1:Pv998/v999/v1000/0;
!!HE1:O#;где # - это хозяин.


Вот и всё. В последнем отрывке поставьте цвет хозяина. Если красный, то 0.
Работу не обещаю, писал навскидку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.