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 то один из "добрых людей" бросивших Главного героя в контейнер вернётся и нападёт. Но об этот в следующем мини уроке. Пока. Да! Чуть не забыл. Делайте и всё у вас получится!
|
|
| |