Форум » CКРИПТЫ FPI » Урок скриптования № 3 от Никиты. SETTARGETNAME лучше, чем GLOBALVAR's » Ответить

Урок скриптования № 3 от Никиты. SETTARGETNAME лучше, чем GLOBALVAR's

Никита: Какой вариант самый оптимальный и работоспособный? Конечно же SETTARGETNAME=X! В этом уроке я расскажу вам все "прелести" этой команды. Итак. SETTARGETNAME переводится как "установить цель с именем Х". Этой командой можно активировать что угодно, а главное когда угодно. Рассмотрим простой пример: персонаж доходит до конца вейпоинта и открывается дверь. Все сразу же вскрикнут: "Да как!?!? Как такое сделать?? Это не возможно разве, что через глобальные переменные". Однако, это возможно и намного лучше, чем глобальные переменные. Теперь рассмотрим сам скрипт: :state=0,waypointstate=0:waypointstart :state=0,waypointstate=3:waypointnext :state=0,waypointstate=5:waypointstop,state=1 :state=1:settargetname=doorremote,activatetarget=1 Обратим особое внимание на синюю строчку. В ней мы видим команду SETTARGETNAME=doorremote. После знака "=" написано имя двери, которая открывается после нажатия на кнопку, входа в триггер-зону неважно. После того как мы установили цель компоненту, нужно же с ней что-то дальше сделать, верно? А нужно её активировать. И вот еще один момент. Активировать можно любой цифрой 1, 2, 3, 5, 10. Главное, чтобы тот скрипт, который активируется должен: 1. Носить имя прописанное в SETTARGETNAME=X 2. Иметь такое же значение в условии ACTIVATED=Х, как и у ACTIVATETARGET=X Вернемся к скрипту. После ACTIVATETARGET=doorremote следует команда ACTIVATETARGET=1. Она как раз и активирует цель с именем doorremote. А что происходит с дверью? Глянем на стандартный скрипт двери dooremote.fpi: :state=0,activated=1:state=1,setframe=0,sound=$0 :state=1:incframe=0 :state=1,frameatend=0:state=2,coloff :state=2,activated=0:state=3,sound=$1,colon :state=3:decframe=0 :state=3,frameatstart=0:state=0,setframe=0 Выделенная синем цветом команда работает точно по такому же принципу, как и varequal=X с глобальными переменами. Если значения с activated=x и activatetarget=x совпадают, то наша дверь откроется. А можно ли после этого "как-то" закрыть дверь таким же способом? Можно! Для этого дополним наш первый скрипт для персонажа: :state=0,waypointstate=0:waypointstart :state=0,waypointstate=3:waypointnext :state=0,waypointstate=5:waypointstop,state=1 :state=1:settargetname=doorremote,activatetargetname=1,state=2 :state=2,plrdistwithin=100:settargetname=doorremote,activatetarget=0,state=3 Опять обращаем наше внимание на синюю строчку. Замете, что прежде чем активировать цель, нужно заново задать имя для цели. Итак, что мы добавили в этой строчке? А добавили мы одно условие plrdistwithin=100, которое звучит как "Если игрок ближе чем на 100 (см, мм не знаю в общем :) )" , то после него активируется цель. Так же обратите внимание на значение activatetarget=0, оно теперь равно не 1, а 0. А почему именно так, а не по-другому? Вернемся к скрипту двери: :state=0,activated=1:state=1,setframe=0,sound=$0 :state=1:incframe=0 :state=1,frameatend=0:state=2,coloff :state=2,activated=0:state=3,sound=$1,colon :state=3:decframe=0 :state=3,frameatstart=0:state=0,setframe=0 Теперь обращаем внимание на выделенное зеленным цветом условие, которое также равно нулю, как и activatetarget. Опять же здесь работает принцип глобальных переменных. На этом мой урок завершается, но прежде чем я напишу The end, отмечу ОСОБО ВАЖНЫЕ пункты: 1. Компоненты с такими командами может активировать только один компонент! Поясню: если вы на карте создали более одного компонента с одним и тем же именем, то они у вас не активируются! Для того, что бы они все активировались назовите их по-разному, например: entity1 и entity2 и соответственно пропишите в скрипте по очереди их активацию следующим образом (на примере из первого скрипта): :state=0,waypointstate=0:waypointstart :state=0,waypointstate=3:waypointnext :state=0,waypointstate=5:waypointstop,state=1 :state=1:settargetname=entity1,activatetarget=1,settargetname=entity2,activatetarget=1,state=2 2. Активировать другие компоненты этими командами можно любым компонентом т.е. триггер-зоной, перс-ом, источником света, деколью и т.д. 3. Этот метод работает абсолютно на любой версии FPS Creator'a X9 Автор: Никита The end.

Ответов - 0



полная версия страницы