scn GrupGECKScript
Begin WorkModMode
    if E==ASA
     G.E.C.K. Enable
    endif
end
перевод со "скриптового"
Начало блока
Если E равно ASA
группа GECK активна
конец проверки
конец блока

CASPER


Живу на даче.
Солнце, речка,
 лес,цветы,
клубника и вишня.
И никакого Интернета
Красота!
Galko

         G                         E                         C                        K                                                                                                                  

Главная | Мой профиль | Выход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Graf  
Форум » ИНФОРМАЦИОННЫЙ СЕКТОР » СТАТЬИ, УРОКИ, ИНСТРУКЦИИ И ТП. » "ПОВЕЛИТЕЛЬ НЕПРИЯТНОСТЕЙ!" (мини урок по скриптам в Fallout 3, NV)
"ПОВЕЛИТЕЛЬ НЕПРИЯТНОСТЕЙ!"
KAINДата: Воскресенье, 25.09.2011, 01:34 | Сообщение # 1
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
МИНИ УРОК - "ПОВЕЛИТЕЛЬ НЕПРИЯТНОСТЕЙ".

ВВЕДЕНИЕ
В данном уроке на примерах скриптов взрыва и телепортации рассказывается, как доставить игроку немного неприятностей. Скрипты взяты из темы форума "Лаборатории ModTec" Вопросы по скриптам в Fallout 3 и FalloutNV
Написано доступно и детально, с картинками для начинающих.
КАК СДЕЛАТЬ ТАК...
Вопрос: Как сделать так, что бы при включении выключателя (активатора) произошёл взрыв в нужном месте?
Ответ: Написать скрипт "Подрыва" использовав функцию "PlaceAtMe" и разместив в нужном месте объект "ХMarker", на который переместить эффект MediumExplosion.
Затем "вешаем" нижеследующий скрипт на ваш активатор (или добавляем в скрипт нужные строки):
Код:
scn aaaModTecAwesomeExplosionSCRIPT

short DoOnce

Begin OnActivate Player
if (DoOnce == 0)
Activate
aaaModTecAwesomeExplosionREF.PlaceAtMe MediumExplosion 1
set DoOnce to 1
endif
End

Данный скрипт сработает один только один раз из-за условия "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) поставили на место.
А теперь в скрипт выключателя добавим немного "неприятностей" в виде потери сознания Главным героем и прихода в себя уже на новом, с любовью и заботой, приготовленном нами выше месте. Вот так стал выглядеть скрипт после изменения.

scn aaaModTecAwesomeExplosionSCRIPT
Short SEnd
short DoOnce
short Stage
float Timer

Begin OnActivate Player
set Stage to 1
if (DoOnce == 0)
Activate
aaaModTecAwesomeExplosionREF.PlaceAtMe MediumExplosion 1
set DoOnce to 1
endif
End

Begin GameMode
if (Stage == 1) && (SEnd == 0)
DisablePlayerControls 1 1 1 1 0 1 1
set Timer to 3
set Stage to 2
elseif (Stage >= 2)
if (Timer > 0)
set Timer to Timer - GetSecondsPassed
else
if (Stage == 2)
Player.AddScriptPackage GSPlayerPassesOut
imod FadeToBlack5sISFX
set Timer to 4
set Stage to 3
else
set Stage to 0
Set Send to 1
Player.RemoveScriptPackage
Player.MoveTo AAAKainXMarkerHeadingRef
EnablePlayerControls
endif
endif
endif
End

Вписываем, или копируем Ctrl C и вставляем Ctrl D вместо старого.
Сохраняем и снова идём в игру смотреть, что вышло.
А вышло отлично - Главный герой после взрыва теряет сознание, а какие то "добрые" люди переносят его с крыльца дома в мусорный ящик за домом.
Принимайте очередные поздравления - теперь вы "Повелитель неприяностей"!
Что и этого мало! Ну как знаете, но дальше вы без меня.
Если вы после команды Player.RemoveScriptPackage
Вставите команду Player.RemoveItem caps001 99999, то ограбите игрока забрав все крышки.
А если ещё добавите Player.RemoveAllItems, то заберёте всё, что есть в инвентаре.
Ну а если там же добавить команду [ActorID.]StartCombat TargetActorID то один из "добрых людей" бросивших Главного героя в контейнер вернётся и нападёт.
Но об этот в следующем мини уроке.
Пока.
Да! Чуть не забыл. Делайте и всё у вас получится!
 
Форум » ИНФОРМАЦИОННЫЙ СЕКТОР » СТАТЬИ, УРОКИ, ИНСТРУКЦИИ И ТП. » "ПОВЕЛИТЕЛЬ НЕПРИЯТНОСТЕЙ!" (мини урок по скриптам в Fallout 3, NV)
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024
Бесплатный хостинг uCoz