Как создать/уничтожить объект?

Автор Dminister, 28 июня 2009 00:30:41

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

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

Dminister

Привет, парни! Нужна помощь!
1. Как реализовать следующее:
- есть кнопка
- нажимаете на кнопку и стол появляется (из ничего!) перед вами
- нажимаете на кнопку и стол сразу пропадает (без следа)
2. и это:
- есть кнопка и робот
- нажимаете на кнопку и робот начинает атаковать вас
- нажимаете на кнопку и робот перестает атаковать и становится дружественным
Спасибо!

Dront

Dminister, приветствую.
1. Из ничего - по-моему, такого невозможно. Можно телепортировать стол из какой-либо "подсобки" (комнаты, к которой не имеешь доступа с уровня) в нужную точку. Для этого соединяешь кнопку, стол и TeleportTrap (точку, в центр которой переместится центр стола - в иерархии объектов fnord\TeleportTrap) таким образом:
Кнопка -> (ControlDevice) -> TeleportTrap (нажатие кнопки - телепортация)
TeleportTrap -> (ControlDevice) -> table (в эту точку телепортируется стол).
С уничтожением всё по аналогии, только вместо TeleportTrap ставишь DestroyTrap.
2. Тут так же просто не сделаешь, можно либо создать двух роботов (враждебного и нет - для невраждебности в свойствах добавь MetaPropety -> M-AlertCapZero) и при нажатии кнопки телепортацией меняй их местами (так же, как со столом). Хотя тут, конечно, минус - если робот сдвинулся с места, "фальшь" будет заметна.
Либо создать "беседу" (хотя никто ничего говорить не будет, лучше всего свойства чего-либо в течение игры меняются именно "беседой"). Но тут расписывать больше придётся.
"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."

Dminister

Dront, спасибо!
Хммм... Я создаю stimuliom "create object" и уничтожаю "destroy object" но проблема в том что и для моего и для твоего метода нужен номер объекта, а при его создании номер не известен :((
Что скажешь?

Dront

Стимулом? Я сам через Act/React почти не работал :)
При его создании номер не известен - да, это так. Но повторюсь, насколько я знаю, создать просто так, из ничего, объект нельзя (вроде бы есть и CreateTrap, и номер объекта в иерархии тоже есть, но при попытке соединить CreateTrap контролдевайсом с этим самым отрицательным номером у меня ничего не работало). Так что вместо создания, видимо, нужно всё-таки делать телепортацию. Внешне-то одно от другого ничем не отличается.
Добавлено позже
Соответственно вместо create object придётся выбирать teleport object, а номером тут будет номер стола, что телепортируешь (ессно, его нужно создать и поместить куда-либо, чтоб не видно было).
"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."

Dminister

Да, согласен с тобой.... с отрицательным номером действительно некоторые комманды не работают (в том числе и уничтожение..).
___________________________________________
Еще вопрос: можно ли задать, чтобы клавиатуры (при нажатии на цифру) этот стол телепортировался (или совершал еще действия)?

Dront

Не знаю. Наверное можно, но довольно сложно. Клавиши ж ведь отвечают в большинстве за действия игрока, а не какого-либо объекта.
То есть в принципе можно повозиться с .cfg-файлом, где описаны команды и клавиши к ним, попробовать создать новую команду... но тогда, получается, столу нужно написать скрипт. В смысле - вручную написать. На Си++ или на чём там их пишут.
Ну это я так думаю, может кто более опытный (если он сюда заглянет) подскажет ещё что.
"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

Еще не поздно ответить?
В общем, я не вижу проблемы. Телепортация стола из "подсобки" проходит на ура. После использования стол вместо уничтожения можно телепортировать обратно. Единственное, что вызывает сомнение - это слово "кнопка". Если использовать выключатель, проблемы нет, но кнопка изначально работает только на "включение" (второе нажатие идентично первому), и чтобы перенастроить ее, придется хорошо повозиться. По-моему, разумнее просто использовать двухпозиционный выключатель.
Враждебность робота поменять ничуть не сложнее, делается так же через стимул - Set Property; Target - номер робота; Source - номер любого AI или вообще неодушевленного объекта, которому назначено свойство AI > Core > Team (название команды - по желанию: Neutral - не будет атаковать никого, Bad1 - в одной команде со стражниками и т.д.); название свойства - AI_Team.
Дайте глазам отдохнуть! Тёмное место

Dminister

Спасибо, большое, Zontik! Только "номер робота " смущает.... ведь они сами создаются иногда в локациях, соответственно мы не знаем их номер :(

Zontik

Сами создаются? Это как? Речь ведь идет о твоей собственной миссии, правильно? Значит, все под твоим контролем. Захочешь - будут создаваться "сами" (только ты один будешь знать, когда, где и при каких условиях), не захочешь - не будут.
Если речь идет о роботах, которые не изначально находятся на местах, а появляются после определенных событий - традиционный метод состоит в том, чтобы все-таки создать их всех заранее, только в "подсобке", и в нужный момент телепортировать их на места.
Если же ты чужую миссию правишь, тогда сложнее, но все-таки чаще всего роботы создаются заранее, остается только их найти. Обычно такие "подсобные" элементы размещают в обособленной прямоугольной области где-нибудь на окраине карты, хотя некоторые эстеты предпочитают прятать их прямо в "твердом теле" неподалеку от места предполагаемого использования.
Дайте глазам отдохнуть! Тёмное место

Dminister

Хммм... Ладно, будем пробовать :)

Chelsun

Надеюсь кто-нибудь отзовется... Собственно пытаюсь добиться той же цели. Есть переключатель, необходимо чтобы в одном положении переключателя объект появлялся, в другом - исчезал. Я сделал рычаг, связал его DeviceControl-ом с TeleportTrap, TeleportTrap связал с объектом, в игре при повороте рычага объект появляется, но как заставить при последующем переключении рычага объект исчезнуть, но чтоб не навсегда, а при последующем переключении рычага он снова появился. Я пробовал еще такую схему: рычаг-->(devicecontrol)RelayTrap с добавлением в свойствах script - trap control flags - no off (который как я понял должен отслеживать положения рычага вкл.)-->(devicecontrol)TeleportTrap_№1 (телепортирует в нужную точку)-->(devicecontrol)Object
и тот же рычаг-->(devicecontrol)RelayTrap с добавлением в свойствах script - trap control flags - no on (который должен отсеивать положения рычага выкл.)-->(devicecontrol)TeleportTrap_№2 (телепортирует в исходное положение)-->(devicecontrol)тот же Object
Однако такая схема не работает, объект появляется, но не исчезает.
Подскажите плиз?

Dront

Chelsun, добро пожаловать на форум.
Насколько я знаю, любой сигнал телепортации активируется только при посыле сигнала "вкл." на TeleportTrap. Значит, нужно обратить "выкл." рычага во "вкл.", "развязав" при этом его с "вкл." обычным.
Первым на ум приходит следующее: поставить второй невидимый рычаг, связанный с первым связью ControlDevice или FrobProxy, но при этом изначально находящийся в противоположном положении. От первого рычага даём ControlDevice на первый TeleportTrap (на которой объект появляется), второму даём TeleportTrap в подсобке (куда объект "исчезает"). Тогда должно получиться, что они по очереди будут подавать сигнал "вкл.".
На практике это не пробовал, получено исключительно соображениями головы. Не будет работать - давайте знать, обмозгуем.
"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."

Chelsun

Спасибо! Все работает как часы. Только связь первого переключателя со вторым для нормальной синхронизации пришлось сделать через Inverter и поставить на втором рычаге параметр JoinState -on. Немножко детали доработаю и покажу что получилось.

Zontik

Можно еще проще: к единственному переключателю подключаются две Teleport Trap, только вторая, находящаяся в подсобке - через инвертер.
Дайте глазам отдохнуть! Тёмное место

Dront

Zontik
Я подумал об этом в первую очередь, но отмёл версию.
Сейчас хотел объяснить, почему отмёл, и нашёл ошибку в своих рассуждениях :) Действительно, так проще всего.
"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."