Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Функции для расширенной настройки стрельбы
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
Страницы: 1, 2
Чёртос-2 (Chortos-2)
Обе функции рассчитаны на чистый h3wog.exe. При открытии новой карты сделанные ими изменения не сбрасываются — только при перезапуске h3wog.exe.



Функция для работы с типом снаряда при стрельбе

Функция позволяет задавать и получать тип изображения снаряда, отображаемого при стрельбе, для любого существа от лучника (№ 2) до существа № 197 включительно.

Изначально (при старте чистого h3wog.exe) для всех существ, которые обычно не стреляют, тип изображения снаряда задан в 16. Для всех существ, не входящих в модифицируемый диапазон, он тоже всегда равен 16 (на чистом h3wog.exe, разумеется).

Синтаксис для задания типа снаряда:
Код
!!FU#:P0/<номер существа>/<тип снаряда>;
(Если существо не входит в модифицируемый диапазон, функция просто не сделает ничего.)

Синтаксис для получения текущего типа снаряда:
Код
!!FU#:P1/<номер существа>/?<тип снаряда>;

Типы снаряда соответствуют стандартным изображениям снарядов для следующих существ:
  • 0 — лучник (исключение: для существа № 196 — драколич);
  • 1 — монах;
  • 2 — эльф;
  • 3 — мастер‐гремлин;
  • 4 — маг;
  • 5 — титан;
  • 6 — гог;
  • 7 — лич;
  • 8 — медуза;
  • 9 — орк;
  • 10 — циклоп;
  • 11 — ящер;
  • 12 — ледяной элементаль;
  • 13 — полурослик;
  • 14 — катапульта;
  • 15 — баллиста.
Тип снаряда 16 использует DEF с пустым именем (даже без расширения .def), если такой есть в h3sprite.lod — если его нет, игра вылетает. smile.gif Я выкладывал wog‐файл, который добавляет в h3sprite.lod этот самый DEF с пустым именем, являющийся копией изображения снаряда полурослика (т. е. камешка): см. сообщение со ссылкой на него и сообщение с описанием.

Установка функции заключается в копировании кода и замене знака решетки (#) на некое число:
Код
!?FU#;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S16;
!!VRx3&x1=1/x2>197:S16;
!!FU|x2<2/x2>197:E;

Get the correct address
!!VRx2:+7961526;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;



Функция для работы с цветом луча при стрельбе

Если у существа выставлен флаг 2048, при стрельбе в бою вместо обычного изображения снаряда, которым можно оперировать предыдущей функцией, будет нарисован непрерывный луч (стандартное поведение архимагов, созерцателей и злых глаз). Этот луч бывает трех разных цветов: зеленого, белого и черного. Например, у архимага он обычно зеленый, а у созерцателей и злых глаз — белый.

Функция позволяет задавать и получать цвет луча, отображаемого при стрельбе, для любого существа от архимага (№ 35) до магического элементаля (№ 121) включительно.

Изначально (при старте чистого h3wog.exe) для всех существ, которые обычно не используют луч, цвет луча задан в черный; исключение составляют психический и магический элементали, для которых изначально задан луч белого цвета. Для всех существ, не входящих в модифицируемый диапазон, луч тоже всегда черный (на чистом h3wog.exe, разумеется).

Синтаксис для задания цвета луча:
Код
!!FU#:P0/<номер существа>/<цвет луча>;
(Если существо не входит в модифицируемый диапазон, функция просто не сделает ничего.)

Синтаксис для получения текущего цвета луча:
Код
!!FU#:P1/<номер существа>/?<цвет луча>;

Цвет луча кодируется числом:
  • 0 — зеленый;
  • 1 — белый;
  • 2 — черный.
Установка функции заключается в копировании кода и замене знака решетки (#) на некое число:
Код
!?FU#;

Make sure the creature number is valid
!!VRx3&x1=1/x2<35:S2;
!!VRx3&x1=1/x2>121:S2;
!!FU|x2<35/x2>121:E;

Get the correct address
!!VRx2:+4453793;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;
gamecreator
а как же сильваны, драколичи, волшебницы...

Добавлено ([mergetime]1181745237[/mergetime]):
кстати у лучника, эльфа и медузы снаряды вроде одинаковые.
Чёртос-2 (Chortos-2)
Нет, они различаются цветом.

А сильваны, драколичи, волшебницы и иже с ними закопаны где‑то в славином коде, причем непонятно, где.
Рогатый Змий
Напишите на примере како-нибудь монстра а то непонятно unsure.gif sorry.gif
Чёртос-2 (Chortos-2)
Если вставить этот код в глобальное событие на карте, где функция № 6000 не используется, снайпер будет стрелять камнями циклопа, пока игрок не посетит объект с координатами 1/1/0 (при условии, что переменная v6000 нигде кроме этого куска кода не меняется — иначе при посещении события снайпер начнет стрелять неизвестно чем smile.gif):
Код
!?FU6000;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S-1;
!!VRx3&x1=1/x2>146:S-1;
!!FU|x2<2/x2>146:E;

Get the correct address
!!VRx2:+4447138;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;

!#FU6000:P1/137/?v6000;
!#FU6000:P0/137/10;

!?LE1/1/0;
!!FU6000:P0/137/v6000;
Рогатый Змий
Чертос сделай чтоб крестянин стрелял ящерскими стрелами
gamecreator
для той же ф-ции 6000:
!#MA139:X?i;
!#VRi:&4;
!#MA139:Xi;
!#FU6000:P0/139/11;
Рогатый Змий
Цитата(gamecreator @ 13 Jun 2007, 21:18)
для той же ф-ции 6000:
!#MA139:X?i;
!#VRi:&4;
!#MA139:Xi;
!#FU6000:P0/139/11;

И что если вставить этот скрипт в глобальное событие крестянин будет стрелять?
Ксати что такое глобальное событие?
Что вы под этим имеете ввиду? idontno.gif
gamecreator
это событие карты fool.gif
Demiurg
Цитата(gamecreator @ 13 Jun 2007, 22:18)
для той же ф-ции 6000:
!#MA139:X?i;
!#VRi:&4;
!#MA139:Xi;
!#FU6000:P0/139/11;

Только надо:
!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;

!?TM1&v2391=1/v2392=1;
!!FU6000:P0/139/11;
Bourn
пожалуй отпишу недостатки smile.gif
1)объект должен иметь анимацию стрелка
2)команда !!UN:C может не пахать на 3.58f(правда не проверял)
3)команда !!UN:C из недокументированных и ZVS обещал ее прикрыть, тк существует потенциальная опасность уязвимости

4)специально отделили пункт строчкой, тк навскидку, ф-я изменяет выстрелы только для уже стреляющих существ, хотя строение exe честно не помню...
Рогатый Змий
Код
ZVSE
!#MA:N139 /16;
!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;
!#FU29900:P139/3;

!?FU29900;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S-1;
!!VRx3&x1=1/x2>146:S-1;
!!FU|x2<2/x2>146:E;

Get the correct address
!!VRx2:+4447138;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;

Написал я этот код
Добавил кадры стрелка(слерил новый деф работоспособный)
крестьянину но Герои всеравно вылетают sorry.gif хоть у него ибыло 16 выстрелов и кадры стрелка имеются
Что же ДЕЛАТЬ??
ХЕЛП kap.gif kap.gif kap.gif sorry.gif
Demiurg
Попробуй так
Код
ZVSE
!#MA:N139 /16;
!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;

!?TM1&v2391=1/v2392=1;
!!FU29900:P0/139/3;

!?FU29900;
Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S-1;
!!VRx3&x1=1/x2>146:S-1;
!!FU|x2<2/x2>146:E;

Get the correct address
!!VRx2:+4447138;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;
Рогатый Змий
Это тоже не помогло banghead.gif banghead.gif bad.gif
gamecreator
Код
ZVSE
!#MA:N139 /16;
!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;
!#FU29900:P0/139/3;

!?FU29900;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S-1;
!!VRx3&x1=1/x2>146:S-1;
!!FU|x2<2/x2>146:E;

Get the correct address
!!VRx2:+4447138;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;
Рогатый Змий
Попробывал и твой скрипт гейм НО НЕ РАБОТАЕТ!!!
при атаке лучника игра вылетаетcray.gif cray.gif cray.gif
но перед боем пишет:
lamo.gif lamo.gif lamo.gif sorry.gif banghead.gif banghead.gif
Чёртос-2 (Chortos-2)
Потому что инструкция вызывает функцию, которая в тот момент еще не определена — точнее, с точки зрения ERM, не содержит никакого кода. Поэтому реальная функция не вызывается и байт не меняется… Так, кажется, будет работать (если, конечно, моя функция вообще работает smile.gif)
Код
!?FU6000;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S-1;
!!VRx3&x1=1/x2>146:S-1;
!!FU|x2<2/x2>146:E;

Get the correct address
!!VRx2:+4447138;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;

!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;
!#MA:N139/16;
!#FU6000:P0/139/11;
Не забудь, что графику стрельбы надо добавить крестьянину (CPEAS.DEF в h3sprite.lod, кадры стрельбы — в DefPreview группы № 14, 15 и 16).

Цитата(Bourn @ 14 Jun 2007, 11:50)
1)объект должен иметь анимацию стрелка
Логично. smile.gif Только с функцией это не связано — она меняет лишь тип изображения снаряда, приписанный существу. Больше никаких гарантий я не давал… crazy.gif

Цитата(Bourn @ 14 Jun 2007, 11:50)
2)команда !!UN:C может не пахать на 3.58f(правда не проверял)
Пашет (см. тему про функцию изменения константных строк — там это обсуждали).

Цитата(Bourn @ 14 Jun 2007, 11:50)
3)команда !!UN:C из недокументированных и ZVS обещал ее прикрыть, тк существует потенциальная опасность уязвимости
Если и прикроет, то это будет потом. smile.gif

Цитата(Bourn @ 14 Jun 2007, 11:50)
4)специально отделили пункт строчкой, тк навскидку, ф-я изменяет выстрелы только для уже стреляющих существ, хотя строение exe честно не помню...
Я же написал — менять можно для любого существа с номером от 2 до 146 включительно. (В чистом h3wog.exe таблица находится по адресу 0043DBA4.)
Рогатый Змий
Не не не РАБОТАЕТ!!! mad.gif banghead.gif
Остается сделать вывод что заменить стреляюим юнетом нестреляющего НЕВОЗМОЖНО в 3.58f
cray.gif cray.gif cray.gif

Добавлено ([mergetime]1181838743[/mergetime]):

Сообщение не исчезло sorry.gif
gamecreator
возможно. у меня отродья стреляли ведь. может у тебя анимация корявая?
Рогатый Змий
Гейм сделай пожалуйста тест карту и выставь ее а то ничего всетки не получится чувствую sorry.gif

Добавлено ([mergetime]1181845298[/mergetime]):
кадры нормальные я проверял стрелка заменил там работало
gamecreator
а! я понял!! оно не может найти файл с пустым именем!!!
Чёртос-2 (Chortos-2)
Неужели я непонятно пишу? biggrin.gif Читаем в первом сообщении темы:
Цитата(Чёртос-2 (Chortos-2) @ 13 Jun 2007, 17:25)
Тип снаряда 16 использует DEF с пустым именем (даже без расширения .def), если такой есть в h3sprite.lod — если его нет, игра вылетает. smile.gif
Вывод: я пошел тестировать функцию и приведенный мной код. Теперь еще надо среди всех моих вариантов h3wog.exe откопать тот, в котором таблица не исковеркана… smile.gif
Рогатый Змий
Так у нас тип снаряда 11 ящера! bad.gif
Цитата
Тип снаряда 16 использует DEF с пустым именем (даже без расширения .def), если такой есть в h3sprite.lod — если его нет, игра вылетает.
gamecreator
у тебя стоит 3 - мастер-гремлин
Рогатый Змий
Цитата(Black_Dragon @ 14 Jun 2007, 21:21)
Гейм сделай пожалуйста тест карту и выставь ее а то ничего всетки не получится чувствую sorry.gif

Добавлено ([mergetime]1181845298[/mergetime]):
кадры нормальные я проверял стрелка заменил там работало

Не забывайте про мою просьбу!!! sorry.gif
gamecreator
причем тут карта?
Рогатый Змий
Цитата(gamecreator @ 15 Jun 2007, 15:28)
причем тут карта?

Как причем?
Гейм сделай скрипт залей в карту событий протесть и елси все будет работать
то выставь А как иначе??
У меня скрипт так не работает sorry.gif
Выставь пожалуйста карту с крестьянином и скриптом ну pray.gif pray.gif pray.gif pray.gif
Чёртос-2 (Chortos-2)
Меня кто‑нибудь слушает? Я же сказал: буду тестировать функцию. Когда разберусь, в чём дело, сам всё выложу. smile.gif А про тип 16 я упомянул к твоему сообщению об ошибке. Тип снаряда просто остался по умолчанию, то есть, функция или не отработала, или отработала неправильно.
Рогатый Змий
Жду с нетерпением yes.gif yes.gif yes.gif

Добавлено ([mergetime]1181913764[/mergetime]):
У Геймкреатора ведь отродья стреляли!!! dry.gif
Чёртос-2 (Chortos-2)
Отродья стрелять он заставил, насколько я понимаю, не функцией.
gamecreator
патчем борна. они стреляли этим самым пустым снарядом. вроде.
Чёртос-2 (Chortos-2)
Я и говорю. Если скачать и установить тот wog‐файл, что я выкладывал (см. сообщение со ссылкой на него и сообщение с описанием), этой ошибки не будет, но существа будут стрелять снарядом с таким же изображением, как у полуросликов (wog‐файл запишет его в h3sprite.lod с пустым именем).
Druin
Цитата(Чёртос-2 (Chortos-2) @ 14 Jun 2007, 19:22)
Потому что инструкция вызывает функцию, которая в тот момент еще не определена — точнее, с точки зрения ERM, не содержит никакого кода.

Имхо в ЕРМ такого нет... то есть это не ошибка...
Чёртос-2 (Chortos-2)
Интерпретатор ERM работает так: он идет по коду и обрабатывает всё, что встречает. Встретил инструкцию — выполнил инструкцию. Встретил определение функции — отметил у себя, что в этом месте стоит !?FU6000. Если инструкция раньше определения функции, в момент выполнения инструкции не выполнится вообще ничего — интерпретатор просто не будет знать, что выполнять. Если же определение и инструкцию поменять местами, он уже будет знать, что код функции дается в таком‑то месте, и выполнит его.

P. S. Если мне не изменяет память, то это мне объяснял кто‑то из команды WoG.
Druin
Хммм... ну впринципе может быть... видимо вызов из инструкции или из простого тригера отличается... в тригерах пофигу описывалась уже функция или нет...
sergroj
Просто к моменту вызова триггера все инструкции уже обработаны и все !? "насажены" на их события.
Чёртос-2 (Chortos-2)
Εὕρηκα! smile.gif WoG перехватывает существа со 2‑го до 197‑го (я так и не понял, почему не до 196‑го) включительно (первые два существа вообще никак не обрабатываются — они не обрабатывались и в оригинальных «Героях») и хранит типы их снарядов в таблице по адресу 00797BB8. Как следствие, можно менять тип снаряда для любого из них. Одно но: отдельно обрабатывается случай, когда у 196‑го существа стоит 0 — в такой ситуации используется изображение снаряда драколича.

Функцию исправил. Voila! smile.gif
Чёртос-2 (Chortos-2)
Итак, копируешь это в глобальное событие на карте, делаешь крестьянам анимацию и звук стрельбы (звуки хранятся в Heroes3.snd, открыть можно с помощью ResEdit, при стрельбе и сотворении заклинаний используются звуки XXXXshot.wav; копируешь понравившийся в папку Data и называешь его psntshot.82m — готово!), запускаешь игру и можешь стрелять. biggrin.gif
Код
ZVSE

!?FU6000;

Make sure the creature number is valid
!!VRx3&x1=1/x2<2:S16;
!!VRx3&x1=1/x2>197:S16;
!!FU|x2<2/x2>197:E;

Get the correct address
!!VRx2:+7961526;

Do what they ask us to do
!!UN&x1=0:Cx2/1/x3;
!!UN&x1=1:Cx2/1/?x3;

!#MA:X139/?i;
!#VRi:|4;
!#MA:X139/i;
!#MA:N139/16;
!#FU6000:P0/139/11;
Чёртос-2 (Chortos-2)
Обнаружил интересную вещь: некоторые существа обрабатываются отдельно, как минимум архимаги, созерцатели и злые глаза (что бы я им ни поставил, они всё равно стреляют специфичными лучами). Зато неулучшенный маг честно использует назначенное ему изображение.
Berserker
Молодец. Такая фишка пригодится всегда.
Irh
А лучи не флагом 2048 задаются, интересно, для !!MA:X... unsure.gif
Чёртос-2 (Chortos-2)
Вот и я о том же подумал… drinks_cheers.gif

[Добавлено:]

Это действительно он! Если у архимагов снять флаг 2048, они начинают стрелять как все нормальные существа. Сейчас посмотрю, что происходит, если, например, стреляющим кентаврам выставить этот флаг…

[Добавлено:]

Гы… crazy.gif Стреляют красивеньким таким черным лучом.
Чёртос-2 (Chortos-2)
Вот они, цвета наши. smile.gif В WoG они хранятся по адресу 0043F5C4, но только для существ с номерами от 35 (архимаг) до 121 (магический элементаль) включительно — при этом психическому и магическому элементалю зачем‑то выставлен белый цвет, правда, я так и не понял, зачем. (Архимагу выставлен зеленый, созерцателю и злому глазу — белый, всем остальным в таблице — черный; если существа нет в таблице, подразумевается черный.) Ноль соответствует зеленому лучу, один — белому, и два — черному. Ловим функцию… (Ловим в первом сообщении темы.)
gamecreator
а обычные маги как?
Чёртос-2 (Chortos-2)
Они стреляют без луча, картинкой PMAGEX.DEF.
gamecreator
а что на картинке? (я не помню каким снарядом они стреляют)
Чёртос-2 (Chortos-2)

На всякий случай словесное описание: зеленый эллипсоид с белым пятном (бликом? а как же при стрельбе справа налево?) спереди.
Druin
Чертос, а как же при стрельбе эльфов справа налево стрела выглядит?... wink.gif Наверное таки зеркальное отображение по горизонтали... smile.gif Так и тута...
Чёртос-2 (Chortos-2)
Это да, я про смысловую нагрузку — если белое пятно является бликом, то при повороте снаряда освещение вдруг станет каким‑то очень странным. wink.gif
Bes
Спасибо, Chortos-2, ф-ция действительно классная...
Жалко, что снаряд ещё и траекторию не повторяет sad.gif А то я было губу раскатал, что если поставить тип катапульты, то снаряд полетит по дуге... biggrin.gif

Небольшой казус конечно есть, а именно, после добавления "пустого снаряда" в лод, ResEdit2 больше не может читать содержимого этого самого лода... видать не может понять, что за файл "!" там лежит. sorry.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.