МИНИ УРОК - "ПОВЕЛИТЕЛЬ НЕПРИЯТНОСТЕЙ".
ВВЕДЕНИЕ
В данном уроке на примерах скриптов взрыва и телепортации рассказывается, как доставить игроку немного неприятностей. Скрипты взяты из темы форума "Лаборатории ModTec" Помощь по скриптам Fallot 3 и Fallout New Vegas.
КАК СДЕЛАТЬ ТАК...
Вопрос: Как сделать так, что бы при включении выключателя (активатора) произошёл взрыв в нужном месте?
Ответ: Написать скрипт "Подрыва" использовав функцию "PlaceAtMe" и разместив в нужном месте объект "ХMarker", на который переместить эффект MediumExplosion.
Затем "вешаем" нижеследующий скрипт на ваш активатор (или добавляем в скрипт нужные строки):
Данный скрипт сработает один только один раз из-за условия "if (DoOnce == 0)".
В этом примере скрипт совсем простой, поэтому даже и говорить неудобно традиционное:
- "И тут вы понимаете, что ничего не понимаете". Ну а вдруг!
Давайте разбираться.
РАЗБИРАЕМСЯ.
Для начала давайте рассмотрим сам скрипт и прочитаем его на "человеческом" языке.
В скрипте мы имеем такое.
short DoOnce - непереводимая игра слов! А если серьёзно то short это переменная, в которой будет сохранятся и устанавливаться условие сработал скрипт - 1, или ещё нет - 0. DoOnce это имя этой переменной (можно писать любое, но лучше информативное и понятное для вас).
Дальше командой Begin начинается блок скрипта, а командой End заканчивается.
OnActivate Player - это один из более, чем 30 типов блоков для различных ситуаций.
Например, используемый в этом скрипте тип блока OnActivate - запускается один раз, когда активируется заскриптованный объект (то есть тот объект на котором "висит" скрипт - включается, выключается, обыскивается, берётся и тп.)
if - (если) эта команда позволяет вам исполнять (или не исполнять) группу скриптовых команд в зависимости от того, истинно ли сравнение, которые вы указываете или нет.
Activate - это команда на активацию объекта
aaaModTecAwesomeExplosionREF - это Ref имя XMarkera (вызывающий объект)
PlaceAtMe - это функция которая помещает указанный объект рядом с вызывающим объектом
MediumExplosion 1 - это указанный объект.
Ну а теперь читаем то что находится в блоке скрипта по русски.
if (DoOnce == 0) ; если переменная DoOnce равна 0 (проверка)
Activate ; активировать объект
aaaModTecAwesomeExplosionREF.PlaceAtMe MediumExplosion 1 ; на маркер переместить эффект, в количестве 1
set DoOnce to 1 ; установить переменную DoOnce в 1
endif ; конец если (проверки).
Как вы видите переменная DoOnce в конце скрипта установлена в 1 и сохранена - следовательно при следующем прочтении скрипта, вот эта проверка if (DoOnce == 0) не будет пройдена и команды Activate и PlaceAtMe выполнены не будут.
Вот таким способом мы ограничили действие скрипта до одного раза.
Прочитали!
Теперь давайте выполним все условия прописанные в скрипте. Их немного - всего три.
Первое - нужен активатор (выключатель.....)
Второе - нужен маркер, точка (место) на которое будет помещён эффект взрыва
Третье - и сам эффект взрыва.
Давайте начнём с места для "неприятностей"! Оно может быть любым и находится, хоть во внешней, хоть во внутренней локации.
Я для ловушки выбрал крыльцо дома, вы можете сделать или выбрать по своему желанию, или исходя из ваших задач в моде.

И ещё я решил предупредить игрока о том, что пытаясь открыть эту дверь он сильно рискует - повесив плакат "Не влезай - убьёт"
Нам лишней крови не надо! Нам бы только имущество сохранить в целости и сохранности.
Если вы до этого не вносили свои объекты в игру, можете проделать это вместе со мной нажав сейчас на ссылку к дополнению (вставить ссылку, после вставки материала)
"ДЕЛАЕМ ПЛАКАТ".
А если уже умеете, или для вашей ситуации в моде этого не нужно идём дальше!
Для активатора используем тот же самый выключатель из мини урока "Повелитель света" ElectricalSwitch, найдите его используя фильтр окна Object Window и установите в нужном вам месте, а затем измените ID имя на своё.

Маркер находим вписав в Filter слово marker и выбрав внизу писка дерева папок All,

а затем в списке всех объектов игры со словом marker, выберем xmarker и перенесём в рабочее окно редактора.
Установим где нужно, а затем сделав двойной клик по нему открываем окно Preference

В котором в поле Reference Editor ID вписываем Ref имя для маркера AAAModTecAwesomeExplosionREF, имя может быть любым, но лучше если оно будет информативным, как в этом примере например
AAA - для удобства поиска
ModTec - кто сделал
AwesomeExplosion - название
ВНИМАНИЕ: В отличие от других объектов менять ID имя у маркера не нужно, просто стандартному маркеру дайте новое Ref имя, так как после смены ID маркера, он перестаёт быть скрытым объектом и становится видимым в игре.
А взрыв нам можно не искать, но для информации - все они расположены в ветке Special Effects -Explosion.
А если всё же вам захочется сделать взрыв посильнее, или изменить сам эффект (свет,звук и тп.) откройте стандартный взрыв, смените ID имя на своё и нажав OK согласитесь на создание нового объекта.

А уже потом смело меняйте под свои цели.
Ну вот с объектами разобрались, давайте создадим новый скрипт и добавим на активатор. Как это делать через Reference- Edit Base вы знаете из пред идущих мини уроков.
Давайте разберём альтернативный способ через главное меню редактора - тут всё просто Gameplay - Edit Scripts

Дальше в меню File редактора скриптов выбрать New и вписать, или вставить, предварительно скопированный текст скрипта.
А затем нажать Save.

После этого в рабочем окне сделав двойной клик по активатору (выключателю) в Preference - нажать кнопку Edit Base и в открывшемся окне Activator

В поле прокрутки Script выбрать созданный вами скрипт.
Дело сделано - пришло время проверить вашу работу в игре. Запускаем игру и идёт на место ловушки.
Видим дом выключатель и плакат

"Нажми на кнопку - получишь результат, И твоя мечта осуществится". …(цитата из старинной песни группы Технология). Видимо то же ребята моды делали!

Получили это.

И такой результат - "Вас покалечило, используйте стимулятор, или найдите врача..."
Ну вот и опять все рады и все смеются, или почти все, а урок закончен!
Но...Неприятности какие уж очень маленькие, у нас получились, может всё таки добавим немного!
Добавим!
Добавляем - сначала это

Парочку контейнеров, немножко разного мусора, разбитую машину, дохлого бранимана. и на "сладкое" парочку трупов.
А затем вот это красное...

Ещё один маркер, но только на этот раз XMarkerHeading (отличается от XMarker тем, что задаёт направление расположения NPC) найти можно там же, где и первый.
Нашли, не меняя имя ID вписали имя REF (в моём примере AAAKainXMarkerHeadingRef) поставили на место.
А теперь в скрипт выключателя добавим немного "неприятностей" в виде потери сознания Главным героем и прихода в себя уже на новом, с любовью и заботой, приготовленном нами выше месте. Вот так стал выглядеть скрипт после изменения.
Вписываем, или копируем Ctrl C и вставляем Ctrl D вместо старого.
Сохраняем и снова идём в игру смотреть, что вышло.
А вышло отлично - Главный герой после взрыва теряет сознание, а какие то "добрые" люди переносят его с крыльца дома в мусорный ящик за домом. Видимо, что бы не продуло на сквознячке!
Принимайте очередные поздравления - теперь вы "Повелитель неприяностей"!
Что и этого мало! Ну как знаете, но дальше вы без меня, я человек добрый и уже давно сижу и пишу сквозь слёзы. Главного героя жалко!
Если вы после команды Player.RemoveScriptPackage
Вставите команду Player.RemoveItem caps001 99999, то ограбите игрока забрав все крышки.
А если ещё добавите Player.RemoveAllItems, то заберёте всё, что есть в инвентаре.
Ну а если там же добавить команду [ActorID.]StartCombat TargetActorID то один из "добрых людей" укрывший от непогоды Главного героя в контейнер, вернётся и постарается накрыть его тёплым одеялом. Шутка! StartCombat - даже знающим английский только по фильмам, говорит о том, что хорошего ждать просто глупо.
Но об этот в следующем мини уроке.
Пока.
Да! Чуть не забыл. Делайте и всё у вас получится!
Отредактировано K.A.I.N.48 (01.10.11 02:48:34)