Делаем свечку интерактивной

Автор LongShad, 22 февраля 2010 14:35:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

LongShad

Данная работа уже выходит за рамки нескольких постов, поэтому решил создать отдельную тему.
ЦЕЛИ:
- Тушить и поджигать свечу как факел
- Тоже самое, по рукой при воздействии
- Брать свечу в руки, тушить и поджигать, ставить на место
Добавлено позже
Тушим свечу водяными стрелами и зажигаем огненными
1. Скрипты
Итак, мы знаем что скрипт Extinguishable отвечает за потухание / загорание свечи. Этому скрипту нужно выполнение нескольких условий:
- После водяного воздействия должно быть выполнено действие SendScript, чтобы сообщить скрипту Extinguishable о водяном воздействии. Создайте св-во Act/React и добавьте воздействие WaterStim а в качестве вып. действия - SendScript.
- Чтобы потухало пламя, оно должно быть присоединено к свечи. Для этого пламени надо добавить ссылку типа ParticleAttachment. В качестве From указать себя (пламя свечи), а To - номер свечи. Я надеюсь, что вы это уже сделали (в том числе, так, чтобы пламя не уезжало в центр). Чтобы изначально объект-пламя оказалось в центре свечи, поставьте св-во Tweq > ModelState = On.
- Скрипт действует только на динамическое AnimLight-освещение. Если поставить просто Light, то потушив свечу, статическое освещение останется. Поэтому добавьте:
Renderer > Anim Light
и поставьте требуемые параметры.
Также добавьте скрипт AnimLight. Иначе после водяного воздействия пламя исчезнет, а свет останется.
2. Легким движением руки брюки превращаются... в факел!
У скрипта есть один недостаток. Когда писали Dark Engine, то думали, что тушить будут только факелы. Поэтому скрипт Extinguishable после потухания превращает объект в... факел! Чтобы этого не произошло, мы должны добавить еще одно действие, чтобы при водяном воздействии свеча превращалась в свечу. Сначала опишем внешний вид.
Добавьте св-во Tweq > Models и поставьте след. значения:
ЦитироватьHalt = Continue (при каком событии должна появиться новая модель)
AnimC = NoLimit
MiscC = Anchor, Random
Curve = [None]// не обязательно
Rate = 125// не обязательно
Все Model = candle1 (то, что написано в Shape > Model)
Теперь добавим реакцию на водяное воздействие, чтобы менять модель объекта после потухания.
Заходим в Act/React, добавляем еще одну реакцию на WaterStim. В качестве эффекта указываем TweqControl и:
ЦитироватьTarget Object = Себя, т. е. "Me" или номер свечи
Type = TweqModels (послать св-ву Tweq > Models)
Action = DoContinue (сигнал "Continue", получив к-й свеча поменяет внешний вид на candle1)
Обратите внимание, что реакция TweqControl должна стоять ПОСЛЕ реакции SendScript. Потому что сначала скрипт Extinguishable должен изменить внешний вид на факел, а потом вторая реакция - вернет его на свечу.
Св-во Tweq > ModelState добавлять не обязательно.
Впрочем, Dront говорит, что у него в Thief Gold свеча нормально тушится и без Tweq > Models (то есть она не превращается в факел).
3. Последовательность действий
Итак, теперь просуммируем и перечислим все действия:
Создаем объекты:
- свечу Candle1.
- пламя TorchFlameYellow, делаем его поменьше и прикрепляем его к свечи, добавляя ссылку:
ЦитироватьFlavor = ParticleAttachment
From = Пламя
To = Свеча
Data = Vhot, 3 (см. у факела)
Свойства свечи:
ЦитироватьTweg > Models:
Halt = Continue
AnimC = NoLimit
MiscC = Anchor, Random
Все Model = candle1
Scripts:
ЦитироватьExtinguishable
AnimLight
Render > Anim Light
ЦитироватьAct/React > Receptions:
WaterStim:
 Target Object = Me
 Effect = SendScript
WaterStim:
 Target Object = Me
 Effect = TweqControl
 Type = TweqModels
 Action = DoContinue
Перейдите в игру и потушите свечу. Убедитесь - чтобы зажечь свечу, не обязательно добавлять FireStim. Единственная проблема - после поджигания свечи она горит пульсирующе. Но это не страшно - так со всеми факелами.
Зато один глюк точно есть. Если выстрелить газовой стрелой (да, да, газовой, она тоже умеет тушить пламя!), свеча превратится факел. Чтобы и с газом все работало, следует продублировать эти реакции, но с газом (KOGas).

[Исправлено: LongShad, 22 фев. 2010 14:22]
Добавлено позже

Теперь попробуем тушить свечу руками.
Для этого сначала надо переместить свет AnimLight на пламя. Кроме того, добавьте в смещение света 1 по оси Z, так как пламя отображается на 1 по Z выше (на фитиле свечи).
Корректируем свечу, так чтобы она работала как раньше (тухла и загоралась от водяной и огненной стрелы).
Свеча должна работать как рычаг (Lever). Поэтому добавляем ей скрипт StdLever, ссылку ControlDevice направляем на пламя. Добавляем свойство
ЦитироватьEngine Features > FrobInfo
World Action: Script
Чтобы при нажатии на свечу активизировались скрипты. Но свеча только выключается. Непонятно. Почему рычаг и включает и выключает свечу, а сама свеча - только выключает пламя? Ладно, заменим скрипты на:
Цитировать1: StdButton
2: StdLever
Именно в таком порядке. Если поставить наоборот, работать будет неправильно. Теперь свеча и включается и выключается. Как и хотели!
Осталась проблема с Extinguishable.
Если поставить его пламени, то в момент его потухания она превращается в факел. А если поставить его к свечи, то она работает, но изначально в выключенном состоянии. А без этого скрипта - никак - без него не будут работать водяные и огненные стрелы!
Скрипт у пламени:
http://exfile.ru/85184
Скрипт у свечи:
http://exfile.ru/85185
Это - текущая проблема, с которой я сражаюсь.

Dront

Если найду время на неделе, попробую тоже вникнуть.
Тушение свечи рукой - идея хорошая. Не видел такого в ФМ... а, может, есть такие, где рукой можно?
"You cannot run from life as you did from us, Garrett! Life has a way of finding you..."
"Beware the dawn of the Metal Age."

Zontik

ЦитироватьНе видел такого в ФМ...
???
Чуть ли не в каждой четвертой попадаются.
Дайте глазам отдохнуть! Тёмное место

Dront

Значит, слишком мало в них играл. :)
"You cannot run from life as you did from us, Garrett! Life has a way of finding you..."
"Beware the dawn of the Metal Age."

Zontik

Наверное, предпочитаешь для T1? Там это действительно редкость.
Дайте глазам отдохнуть! Тёмное место

Dront

Наверное, такие свечи встречаются в основном в миссиях типа "особняк" или "город". А их я, как правило, не сильно предпочитаю.
"You cannot run from life as you did from us, Garrett! Life has a way of finding you..."
"Beware the dawn of the Metal Age."

LongShad

Сегодня, наконец, получилось. Дело было с тем же Extinguishable у свечи, только надо еще кое-что добавить. В общем, по порядку:
Как потушить свечу рукой?
Итак, теперь свечку можно тушить водой. А почему бы не тушить свечку рукой, как в третьем воре? Для этого надо сделать возможность использовать предмет (чтобы он выделялся из комнаты) и связать его использование с потуханием / зажиганием.
Предполагается, что у вас уже есть правильная зажженая свеча (у которой пламя правильно передвигается вместе со свечкой и свет смещен так, что он исходит не из центра свечи, а также действуют водяные и огненные стрелы).
Чтобы объект можно было взять, надо добавить св-во:
Engine Features > FrobInfo
И первому полю World Action поставить значение Move.
Но нам брать свечу с собой не надо. Надо только щелкнуть на нее, чтобы она осталась стоять на месте. Поэтому у поле 'World Action' значение Move заменяем на Script.
Теперь позвольте рассказать небольшую прелюдию. Если свечке добавить AnimLight, скрипты StdButton, Extinguishable, AnimLight и добавить ссылку типа ControlDevice на саму себя, то игра зависнет. Но не мгновенно, а постепенно, и если быстро нажать Alt+E, мы вернемся в DromEd и, возможно, нам не придется перезагружаться :) . Причина зависания - рычаг и источник света является одним объектом.
Короче, оставлять свет в свечи - нельзя, его нужно перенести на пламя. Займемся этим.
Переносим свойство и скрипт AnimLight от свечи на пламя. Теперь займемся тушением свечи. Добавляем ссылку ControlDevice от свечи на пламя и даем свечи скрипты:
1: StdButton
2: StdLever
Именно в таком порядке. Если поставить наоборот, работать будет неправильно (свеча зажгется и сразу потухнет). Не забудьте добавить пустое Tweq > Joints - без него StdLever работать не будет.
В результате - при запуске игры свеча работает как надо, но находится в выключенном состоянии. Из-за этого придется сначала потратить огненную стрелу.
Если перенести скрипт Extinguishable в пламя, свеча будет включена, но перед потуханием пламя превращается в черный треугольник, не очень красиво. Причина - пламя превращается в факел.
Выбираем первый вариант, когда Extinguishable остается у свечи, но при этом она в выключенном состоянии. Сейчас из-за скрипта StdLever свеча считается рычагом, а все рычаги изначально в выключенном состоянии. Поэтому надо заставить свечу-рычаг изначально быть во включенном состоянии.
Для этого в JointsState напротив AnimS ставим On и Reverse.
ВСЕ! Свеча работает!
Смотрите candle_tuff.mis:
http://exfile.ru/85798
Просьба потестировать на разных версиях TDP и TG.

LongShad

ЦитироватьПросьба потестировать на разных версиях TDP и TG.
Интересно, за 17 дней кто-нибудь скачал этот файл? А то ведь непонятно - качали и все работает или не качали совсем. Работать должно следующее:
- Тушение/зажигание выстрелом водяной или газовой / огненной стрелой
- Включение / выключение при использовании свечки


Shadowhide

Я сделал это сам до того как ты написал этот туториал :(
Только для Т2

LongShad

ЦитироватьТолько для Т2
Распиши пжалуста :).

Shadowhide

создал подсвечник.Добавил есу параметры :TWEQ->JointState->AnimS ему параметры on,reverse.Joint 2 anim-On
--------
Другой параметр: TWEQ->Joint->DEstroy object
--------
Другой параметр: Frob info->World->Script
--------
Другой параметр: Scripts->StdLever в первое и второе поле
--------
Создал огонек факела,уменьшил его до размера огонька свечи
--------
Добавил свечи ещё параметр:Act React:Receptrons ->add ->В поле Object - номер свечи,
Stimulus->Water Stim в поле effect :Set Property в поле Target object номер огонька
Добавляем ещи тоже самое только вмcто Water stim-Fire stim
Ещё при желании можно добавить KOgas
Потом огоньку добавляем скрипт Anim Light
Добавляем огоньку параметр :Renderer->AnimLight:
milisecs to br:1024
milisecl to dim 256
maximum bright:40
radius: 15 (можете сколько хотите)
Inner radius-3
corrent countdown 1024
потом свяжите свечу и огонёк связью Particle attachment
а потом связью Control device(их же )
и такую свечу можно тушить и поджигать руками :cool:
[Исправлено: Shadowhide, 16 марта 2010 18:33]