Привет, парни! Нужна помощь!
1. Как реализовать следующее:
- есть кнопка
- нажимаете на кнопку и стол появляется (из ничего!) перед вами
- нажимаете на кнопку и стол сразу пропадает (без следа)
2. и это:
- есть кнопка и робот
- нажимаете на кнопку и робот начинает атаковать вас
- нажимаете на кнопку и робот перестает атаковать и становится дружественным
Спасибо!
Dminister, приветствую.
1. Из ничего - по-моему, такого невозможно. Можно телепортировать стол из какой-либо "подсобки" (комнаты, к которой не имеешь доступа с уровня) в нужную точку. Для этого соединяешь кнопку, стол и TeleportTrap (точку, в центр которой переместится центр стола - в иерархии объектов fnord\TeleportTrap) таким образом:
Кнопка -> (ControlDevice) -> TeleportTrap (нажатие кнопки - телепортация)
TeleportTrap -> (ControlDevice) -> table (в эту точку телепортируется стол).
С уничтожением всё по аналогии, только вместо TeleportTrap ставишь DestroyTrap.
2. Тут так же просто не сделаешь, можно либо создать двух роботов (враждебного и нет - для невраждебности в свойствах добавь MetaPropety -> M-AlertCapZero) и при нажатии кнопки телепортацией меняй их местами (так же, как со столом). Хотя тут, конечно, минус - если робот сдвинулся с места, "фальшь" будет заметна.
Либо создать "беседу" (хотя никто ничего говорить не будет, лучше всего свойства чего-либо в течение игры меняются именно "беседой"). Но тут расписывать больше придётся.
Dront, спасибо!
Хммм... Я создаю stimuliom "create object" и уничтожаю "destroy object" но проблема в том что и для моего и для твоего метода нужен номер объекта, а при его создании номер не известен :((
Что скажешь?
Стимулом? Я сам через Act/React почти не работал :)
При его создании номер не известен - да, это так. Но повторюсь, насколько я знаю, создать просто так, из ничего, объект нельзя (вроде бы есть и CreateTrap, и номер объекта в иерархии тоже есть, но при попытке соединить CreateTrap контролдевайсом с этим самым отрицательным номером у меня ничего не работало). Так что вместо создания, видимо, нужно всё-таки делать телепортацию. Внешне-то одно от другого ничем не отличается.
Добавлено позже
Соответственно вместо create object придётся выбирать teleport object, а номером тут будет номер стола, что телепортируешь (ессно, его нужно создать и поместить куда-либо, чтоб не видно было).
Да, согласен с тобой.... с отрицательным номером действительно некоторые комманды не работают (в том числе и уничтожение..).
___________________________________________
Еще вопрос: можно ли задать, чтобы клавиатуры (при нажатии на цифру) этот стол телепортировался (или совершал еще действия)?
Не знаю. Наверное можно, но довольно сложно. Клавиши ж ведь отвечают в большинстве за действия игрока, а не какого-либо объекта.
То есть в принципе можно повозиться с .cfg-файлом, где описаны команды и клавиши к ним, попробовать создать новую команду... но тогда, получается, столу нужно написать скрипт. В смысле - вручную написать. На Си++ или на чём там их пишут.
Ну это я так думаю, может кто более опытный (если он сюда заглянет) подскажет ещё что.
Еще не поздно ответить?
В общем, я не вижу проблемы. Телепортация стола из "подсобки" проходит на ура. После использования стол вместо уничтожения можно телепортировать обратно. Единственное, что вызывает сомнение - это слово "кнопка". Если использовать выключатель, проблемы нет, но кнопка изначально работает только на "включение" (второе нажатие идентично первому), и чтобы перенастроить ее, придется хорошо повозиться. По-моему, разумнее просто использовать двухпозиционный выключатель.
Враждебность робота поменять ничуть не сложнее, делается так же через стимул - Set Property; Target - номер робота; Source - номер любого AI или вообще неодушевленного объекта, которому назначено свойство AI > Core > Team (название команды - по желанию: Neutral - не будет атаковать никого, Bad1 - в одной команде со стражниками и т.д.); название свойства - AI_Team.
Спасибо, большое, Zontik! Только "номер робота " смущает.... ведь они сами создаются иногда в локациях, соответственно мы не знаем их номер :(
Сами создаются? Это как? Речь ведь идет о твоей собственной миссии, правильно? Значит, все под твоим контролем. Захочешь - будут создаваться "сами" (только ты один будешь знать, когда, где и при каких условиях), не захочешь - не будут.
Если речь идет о роботах, которые не изначально находятся на местах, а появляются после определенных событий - традиционный метод состоит в том, чтобы все-таки создать их всех заранее, только в "подсобке", и в нужный момент телепортировать их на места.
Если же ты чужую миссию правишь, тогда сложнее, но все-таки чаще всего роботы создаются заранее, остается только их найти. Обычно такие "подсобные" элементы размещают в обособленной прямоугольной области где-нибудь на окраине карты, хотя некоторые эстеты предпочитают прятать их прямо в "твердом теле" неподалеку от места предполагаемого использования.
Хммм... Ладно, будем пробовать :)
Надеюсь кто-нибудь отзовется... Собственно пытаюсь добиться той же цели. Есть переключатель, необходимо чтобы в одном положении переключателя объект появлялся, в другом - исчезал. Я сделал рычаг, связал его 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
Однако такая схема не работает, объект появляется, но не исчезает.
Подскажите плиз?
Chelsun, добро пожаловать на форум.
Насколько я знаю, любой сигнал телепортации активируется только при посыле сигнала "вкл." на TeleportTrap. Значит, нужно обратить "выкл." рычага во "вкл.", "развязав" при этом его с "вкл." обычным.
Первым на ум приходит следующее: поставить второй невидимый рычаг, связанный с первым связью ControlDevice или FrobProxy, но при этом изначально находящийся в противоположном положении. От первого рычага даём ControlDevice на первый TeleportTrap (на которой объект появляется), второму даём TeleportTrap в подсобке (куда объект "исчезает"). Тогда должно получиться, что они по очереди будут подавать сигнал "вкл.".
На практике это не пробовал, получено исключительно соображениями головы. Не будет работать - давайте знать, обмозгуем.
Спасибо! Все работает как часы. Только связь первого переключателя со вторым для нормальной синхронизации пришлось сделать через Inverter и поставить на втором рычаге параметр JoinState -on. Немножко детали доработаю и покажу что получилось.
Можно еще проще: к единственному переключателю подключаются две Teleport Trap, только вторая, находящаяся в подсобке - через инвертер.
Zontik
Я подумал об этом в первую очередь, но отмёл версию.
Сейчас хотел объяснить, почему отмёл, и нашёл ошибку в своих рассуждениях :) Действительно, так проще всего.
Уже два варианта, отлично! А вот такая еще головоломка: есть дверь, даем ей скрипт trigopendoor, чтобы использовать её вместо рычага. Триггер срабатывает в момент начала открытия двери когда её открываешь, и после окончательного закрытия соответственно когда её закрываешь. Можно ли сделать так, чтобы при закрытии двери триггер срабатывал не в конце анимации закрытия двери, а в начале. Что то я не накопал такую возможность... править скрипт?
Вариант - заменить TrigDoorOpen на TrigWorldFrob. Но тогда дверь при закрытии тоже будет давать сигнал "вкл.". Надо именно, чтобы "выкл." при закрытии?
Да, при закрытии нужен выкл. для правильной работы подконтрольного animlight. Сейчас испробую TrigWorldFrob.
Тогда можно поставить на дверь скрипт StdLever. Но она при этом (в принципе) может улететь в космос при открытии.
Увы не получается. TrigWorldFrob не могу заставить поочередно посылать сигналы вкл и выкл; StdLever максимум что смог сделать, это заставить переключаться при повороте ручки, дверь при этом перестала открываться.
Тогда вот список всех скриптов, имеющихся по умолчанию в ConVict и Gen.
http://www.thiefmissions.com/telliamed/scripts.html
Вижу один компромиссный вариант - запереть дверь и использовать скрипт TrigUnlock. Тогда будет тоже вкл./выкл., но срабатывает в момент отпирания/запирания замка.
Кажется заработало со скриптом StdLever, нужно было просто добавить и правильно настроить Joints и в скриптах установить галочку Don't Inherit. Уря! Пасиб!