Зомби апокалипсис квест: Квест «Зомби-апокалипсис» в Москве от «Funlock»

Квесты про зомби в Москве

Любой жанр18+Виртуальная реальностьДля большой компанииДля влюбленныхДля начинающихИсторическиеКвесты для детейМистикаНестрашныеПерформансыПо кинофильмамПодросткамПриключениеС актерамиСемейныеСложныеСредняя сложностьСтрашныеСтрашные для начинающихФантастикаХоррорыЭкшн-игры

Игроков1 человек2 человека3 человека4 человека5 человек6 человек7 человек8 человек9 человек10 человек11 человек12 человек13 человек14 человек15 человек16 человек17 человек18 человек19 человек20 человек

МетроАвиамоторная (калининская)Авиамоторная (некрасовская)АвтозаводскаяАкадемическаяАлександровский садАлексеевскаяАлтуфьевоАндроновкаАнниноАрбатская (арбатско-покровская)Арбатская (филёвская)АэропортБагратионовскаяБалтийскаяБаррикаднаяБауманскаяБеговаяБелорусская (замоскворецкая)Белорусская (кольцевая)Библиотека имени ленинаБитцевский паркБоровицкаяБотанический садБотанический сад (мцк)БутырскаяВаршавскаяВднхВерхние котлы (мцк)ВладыкиноВодный стадионВойковскаяВолгоградский проспектВолжскаяВоробьевы горыВыставочнаяВыхиноДинамоДмитровскаяДомодедовскаяДостоевскаяДубровкаЗоргеИзмайловоИзмайловскаяКантемировскаяКаширскаяКитай-город (калужско-рижская)Китай-город (таганско-краснопресненская)КожуховскаяКоломенскаяКомсомольская (кольцевая)Комсомольская (сокольническая)КоньковоКраснопресненскаяКрасносельскаяКрасные воротаКрестьянская заставаКропоткинскаяКузнецкий мостКузьминкиКурская (арбатско-покровская)Курская (кольцевая)Ленинский проспектЛомоносовский проспектЛубянкаЛужникиЛюблиноМарьиноМаяковскаяМедведковоМенделеевскаяМитиноНагатинскаяНагорнаяНижегородскаяНижегородская (мцк)НовогиреевоНовокосиноНовослободскаяНовохохловскаяНовоясеневскаяОзернаяОкружнаяОктябрьская (калужско-рижская)Октябрьская (кольцевая)ОреховоОтрадноеОхотный рядПавелецкая (замоскворецкая)Павелецкая (кольцевая)Парк культуры (кольцевая)Парк культуры (сокольническая)Парк победы (арбатско-покровская)Парк победы (солнцевская)ПартизанскаяПервомайскаяПеровоПетровский паркПетровско-разумовская (люблинско-дмитровская)Петровско-разумовская (серпуховско-тимирязевская)ПечатникиПланернаяПлощадь гагаринаПлощадь ильичаПлощадь революцииПолянкаПреображенская площадьПролетарскаяПроспект вернадскогоПроспект мира (калужско-рижская)Проспект мира (кольцевая)ПрофсоюзнаяПушкинскаяРечной вокзалРижскаяРимскаяРостокиноСавеловскаяСвибловоСевастопольскаяСеменовскаяСерпуховскаяСмоленская (арбатско-покровская)Смоленская (филёвская)СоколСоколиная гораСокольникиСпортивнаяСтахановскаяСухаревскаяСходненскаяТаганская (кольцевая)Таганская (таганско-краснопресненская)ТверскаяТеатральнаяТекстильщикиТелецентрТеплый станТимирязевскаяТретьяковская (калининская)Третьяковская (калужско-рижская)ТрубнаяТульскаяТургеневскаяТушинскаяУгрешскаяУлица 1905 годаУлица академика королёваУлица академика янгеляУлица дмитриевскогоУниверситетФилевский паркФилиФонвизинскаяФрунзенскаяЦарицыноЦветной бульварЦскаЧеркизовскаяЧертановскаяЧеховскаяЧистые прудыЧкаловскаяШаболовскаяШоссе энтузиастовШоссе энтузиастов (мцк)ЩелковскаяЩукинскаяЭлектрозаводскаяЮго-западнаяЮжнаяЯсенево

Возраст6+8+10+12+14+16+18+

ДатаЧт, 27 октябряПт, 28 октябряСб, 29 октябряВс, 30 октябряПн, 31 октябряВт, 1 ноябряСр, 2 ноябряЧт, 3 ноябряПт, 4 ноябряСб, 5 ноябряВс, 6 ноябряПн, 7 ноябряВт, 8 ноябряСр, 9 ноября

Времяс 00:00 до 06:59с 07:00 до 11:59с 12:00 до 16:59с 17:00 до 19:59с 20:00 до 23:59

По сертификату

Сценарный Лазертаг Квест ” Зомби – Апокалипсис “

перейти к содержанию

” Зомби – Апокалипсис “

8+

Что такое ” Сценарный Лазертаг Квест ” ?

Сценарный Лазертаг Квест [ 8+] — это интерактивная игра, сочетающая в себе элементы популярного игрового формата «квесты в реальности» и театрализованного перформанса, где игроки становятся главными героями разыгрываемой истории и влияют на развитие сюжета.

Главной особенностью Сценарного Лазертага является наличие в игре нескольких актёров положительного и отрицательного типа, которые направляют игровой процесс и входят в контакт с игроками путём диалога либо телесного контакта

Есть легкая и изощрённая версия квеста, для детей и взрослых!

Что ВАС ждёт на ” Зомби – Апокалипсисе ” ?

 

Вас ждёт:

  • огромная площадь – 800 м2
  • штурм лаборатории
  • встреча с зомби обладающими индивидуальными способностями
  • иногда придётся быть тише воды
  • поиски боеприпасов
  • поиски подсказок
  • поиски антидота
  • генеральное сражение
  • спецэффекты во время игры [звук, свет, дым, тех.часть]
  • у Вас будет Герой, который поможет в трудную минуту

 

СТОИМОСТЬ

До 8 игроков

8000Ք+1000 р/доп.игрок

Заказать

ВИДЫ МИССИЙ

Миссия №1

Охрана не дремлет

  • Профессор ФАУСТ вышел из под контроля корпорации RnDELLA.
  • Главная Цель – Вернуть контроль над лабораторией.
  • Второстепенная Цель – Уничтожить охрану лаборатории.

Миссия №2

Западня профессора ФАУСТА

  • Что то пошло не так, кто то распространил Т-вирус, повсюду ZOMBI, они могут заразить!
  • Основная Цель – Выжить!
  • Второстепенная цель – Найти антидот, вылечить зараженных.

Миссия №3

Зомби повсюду – часть 1

  • Чёрт, нам придётся разобраться с этими тварями!
  • Зомби обладают индивидуальными способностями.
  • Цель – добыть информацию о штамме вируса, проникнуть в лабораторию.

Миссия №4

Зомби повсюду – часть 2

  • Чёрт, нам придётся разобраться с этими тварями!
  • Зомби обладают индивидуальными способностями.
  • Цель – найти в лаборатории антидот.

Миссия №5

Ну, ФАУСТ! Ну, погоди!

  • До нас дошла информация что профессор может заразить человечество сделав выброс вируса через канализацию, тем самым заразив воду, Наша база аппаратно сдерживает открытие люка для слива, но это не надолго.
  • Главная Цель – уничтожить штамм вируса, спасти планету.
  • Второстепенная Цель – уничтожить профессора ФАУСТА.

Зомби-апокалипсис (часть 1)

Если вы хотите создать технически сложную игру — а любая игра, включающая бой, будет сложной — вам следует использовать настольную версию редактора, если можете. Иногда, однако, это не вариант. Итак, вот как создать зомби-апокалипсис в веб-версии.

Это не обязательно должен быть зомби-апокалипсис, но ограничения веб-версии поддаются игре с ограниченным разнообразием монстров. В зомби-апокалипсисе вы ожидаете много зомби и ничего больше.

Я предполагаю, что вы, по крайней мере, знаете, как копировать и вставлять код, и что вы знаете, что такое сценарий запуска игры. Если вы этого не сделаете, я бы с уважением посоветовал вам начать с чего-то более простого и вернуться к этому, когда у вас будет больше опыта.

Зомби

Зомби будет много, все примерно одинаковые, и создавать каждого по отдельности очень не хочется. Также все время может появляться больше зомби, поэтому у нас будет функция создания зомби по мере необходимости. Назовите это SpawnZombie , без возвращаемого значения, с одним параметром «комната». Вставьте этот код:

 if (HasInt(game, "crittercount")) {
  game.crittercount = game.crittercount + 1
}
еще {
  game.crittercount = 1
}
создать ("critter" + game.crittercount)
obj = GetObject("critter" + game.crittercount)
obj.parent = комната
obj.displayverbs = Split("Смотрите;Атакуйте;Стреляйте", ";")
obj.dead = ложь
obj.changedhitpoints =>
{ если (this.hitpoints < 1) { msg ("Он мертв!") это.мертвый = правда } } name = Split("деципт;разлагающийся;шатающийся;отвратительный;грязный;разваливается на части", ";") obj. alias = StringListItem(имена, game.crittercount % ListCount(имена)) + "зомби" obj.listalias = CapFirst(obj.alias) obj.look = ProcessText("A " + obj.alias + ", {случайный:покрытый личинками:отсутствует рука:один глаз свисает}.") obj.hitpoints = 10 объект.урон = 3 объект.атака = 0 obj.defence = 0 объект.броня = 0

Код

Так что же на самом деле делает этот код? Давайте сломаем это.

 if (HasInt(game, "critercount")) {
  game.crittercount = game.crittercount + 1
}
еще {
  game.crittercount = 1
}
создать ("critter" + game.crittercount)
obj = GetObject("critter" + game.crittercount)
 

Это процесс создания. Это создает новый объект с заданным именем. Это имя должно быть уникальным, поэтому первые шесть строк отслеживают, сколько зомби уже создано, и если это первое, нам также нужно добавить счетчик к игровому объекту. Итак, во-первых, атрибут «crittercount» уже существует? Если это так, увеличьте его на единицу, в противном случае создайте его и установите для него значение 1. Теперь мы можем создать зомби с его уникальным именем, critter1, critter2 и т. д. Затем мы можем получить этот объект и присвоить его локальной переменной 9.0011 obj (я держу это в общих чертах, так как вы, возможно, не занимаетесь зомби).

 obj.parent = комната
obj.displayverbs = Разделить("Посмотреть;Атака", ";")
obj.dead = ложь
 

Эти линии несложные хозяйственные. Первый помещает зомби в заданную комнату, второй устанавливает для него глаголы. Третий отслеживает состояние зомби.

 obj.changedhitpoints => {
  если (this.hitpoints < 1) {
    msg ("Он мертв!")
    это.мертвый = правда
    this.listalias = this.listalias + "(мертвый)"
  }
}
 

Этот атрибут, changehitpoints, представляет собой сценарий изменения, он будет срабатывать при изменении хитпойнтов. Это заметит, когда зомби будет мертв.

 name = Split("decipit;разлагающийся;шаркающий;отвратительный;грязный;разваливающийся на части", ";")
obj.alias = StringListItem(имена, game. crittercount % ListCount(имена)) + "зомби"
obj.listalias = CapFirst(obj.alias)
obj.look = ProcessText("A " + obj.alias + ", {случайный:покрытый личинками:отсутствует рука:один глаз свисает}.")
 

Нам нужно дать зомби псевдоним, иначе игрок увидит его как critter1, и ему придется ввести ATTACK CRITTER1. Мы также хотим, чтобы у зомби были разные имена, чтобы игрок мог различать их.

Первая строка устанавливает различные имена, и вы должны изменить и расширить ее. Каждый дескриптор должен быть разделен точкой с запятой, и вам нужно несколько больше, чем наибольшее количество зомби, которое игрок увидит одновременно.

Псевдоним создается путем выбора одного дескриптора из списка с использованием арифметики по модулю. Псевдоним списка — это то, как он отображается на игровых панелях; то же самое, но с большой буквы.

Атрибут взгляда — это то, что увидит игрок, если она ПОСМОТРЕЕТ НА ЗОМБИ. Мы хотим разнообразия, чтобы не все зомби были одинаковыми. Используя ProcessText , он не будет меняться каждый раз, когда игрок смотрит на определенного зомби.

Чем больше вариантов, тем лучше; Вы должны проявить творческий подход, так что в вашем запасе зомби есть много различий.

 obj.hitpoints = 10
объект.урон = 3
объект.атака = 0
obj.defence = 0
объект.броня = 0
 

Устанавливает боевые характеристики зомби.

Добавление зомби в игру

Чтобы добавить зомби в комнату, перейдите на вкладку Скрипты комнаты, и найдите раздел «Перед входом в комнату в первый раз». Добавьте эти две строки (для двух зомби).

 SpawnZombie(этот)
SpawnZombie(это)
 

Когда вы заходите в игру, там должны быть два зомби. Попробуйте посмотреть на них - они пока мало что могут сделать.

Таким образом, вы можете добавить любое количество зомби в любое количество комнат. Вы также можете создавать новых зомби, когда что-то происходит, например, игрок входит в новый регион или включает автомобильную сигнализацию.

Не только зомби

Вы можете сделать то же самое для любых монстров в вашей игре, просто создайте для каждого функцию с соответствующим названием и измените слово «зомби» в коде.

Если вы хотите гулей, у вас есть функция, SpawnGhoul , используйте тот же код, что и раньше, отредактировав последние девять строк по мере необходимости, например:

 name = Split("грязный;отвратительный;ужасный", ";")
obj.alias = StringListItem(имена, game.crittercount % ListCount(имена)) + "упырь"
obj.listalias = CapFirst(obj.alias)
obj.look = ProcessText("A " + obj.alias + ", {random:с длинными когтями:светлые глаза смотрят на вас}.")
obj.hitpoints = 20
объект урона = 1d8
объект.атака = 1
obj.defence = 0
обж.броня = 20
 

Плеер

Игроку нужны те же атрибуты для боя, что и зомби. Если бы вы использовали настольную версию, вы бы установили атрибуты на вкладке Атрибуты объекта проигрывателя, но в веб-версии у нас этого нет. До Quest 5.7 вам приходилось делать это в стартовом скрипте игрового объекта, что поначалу было нормально, но по мере того, как ваша игра усложнялась, скрипт разрастался, и поддерживать его было все труднее. Поэтому вместо этого будут установлены атрибуты для объекта в его сценарии инициализации.

На вкладке объекта проигрывателя установите флажок «Выполнить скрипт инициализации для этого объекта». Затем перейдите на вкладку Сценарий инициализации и введите этот код, который установит его атрибуты.

 player.alias = "вы"
player.hitpoints = 25
игрок.урон = 3
игрок.атака = 0
игрок.защита = 0
игрок.броня = 0
player.changedhitpoints => {
  если (player.hitpoints > 0) {
    msg ("Hit points now" + player.hitpoints)
  }
  еще {
    msg ("Ты мертв!")
    финиш
  }
}
 

Атака

Мы приближаемся к тому, чтобы убить этих зомби (вы убиваете зомби, если они уже мертвы?). Создайте команду и введите этот шаблон:

атака #объект#

Вставьте этот код:

 if (not HasBoolean(object, "dead")) {
  msg («Это не то, что вы можете атаковать».)
}
иначе если (object.dead) {
  msg («Этот уже мертв».)
}
еще {
  если (player.equipped = ноль) {
    DoAttack (игрок, игрок, объект)
  }
  еще {
    DoAttack (игрок, player. equipped, объект)
  }
}
 

Если объект, который игрок хочет атаковать, не имеет мертвого атрибута, его нельзя атаковать. Если мертвый атрибут истинен, он уже мертв. В противном случае делаем атаку, с функцией DoAttack , либо текущим оружием, которое будем хранить в атрибуте снаряжения, либо голыми руками.

Это стандартный формат команд; серия тестов if/else для выявления ситуаций, когда команда не может быть выполнена (с соответствующим сообщением), и последний раздел, где действие выполняется, как только мы знаем, что оно может быть выполнено.

Теперь нам нужна функция DoAttack . Кстати, зомби будут использовать это позже. Он не имеет возвращаемого типа, но имеет три параметра; «атакующий», «оружие» и «цель» (именно в таком порядке!). Вот код:

 roll = GetRandomInt(1, 20) + weapon.attack - target.defence
урон = DiceRoll(оружие.урон) * (100 - цель.броня) / 100
если (урон < 1) {
  урон = 1
}
если (бросок > 15) {
  урон = урон * 3
  msg (CapFirst(attacker. alias) + " атаки " + target.alias + " и получает критический (" + урон + " хиты)!")
  target.hitpoints = target.hitpoints - урон
}
иначе если (бросок > 10) {
  msg (CapFirst(attacker.alias) + " Attacks " + target.alias + " and hit (" + damage + " hits).")
  target.hitpoints = target.hitpoints - урон
}
еще {
  msg (CapFirst(attacker.alias) + "атакует" + target.alias + "и промахивается...")
}
 

Код

Так что же на самом деле делает этот код? Разобьем еще раз.

 roll = GetRandomInt(1, 20) + weapon.attack - target.defence
урон = DiceRoll(оружие.урон) * (100 - цель.броня) / 100
если (урон < 1) {
  урон = 1
}
 

Первая строка делает бросок атаки, который мы будем использовать, чтобы увидеть, попал он или нет. Потом отрабатываем урон (проще сделать сейчас, готов на потом, хоть может и не попал). Обратите внимание, что вы можете установить урон для оружия или зомби как число, которое используется «как есть», или строку в виде «2d4», которая будет определяться случайным образом, как DiceRoll справится с этим в любом случае. Урон изменен для брони, который предполагается в процентах, поэтому будет варьироваться от 0 (без защиты) до 100 (полная защита). Однако это будет минимум 1.

 if (roll > 15) {
  урон = урон * 3
  msg (CapFirst(attacker.alias) + " атаки " + target.alias + " и получает критический (" + урон + " хиты)!")
  target.hitpoints = target.hitpoints - урон
}
иначе если (бросок > 10) {
  msg (CapFirst(attacker.alias) + " Attacks " + target.alias + " and hit (" + damage + " hits).")
  target.hitpoints = target.hitpoints - урон
}
еще {
  msg (CapFirst(attacker.alias) + "атакует" + target.alias + "и промахивается...")
}
 

Теперь определяем результат. Если бросок был больше 15, это было критическое, и наносит трехкратный урон, больше 10 это было попадание.

Вы можете изменить эти числа или иметь совершенно другой способ разрешения боя; надеюсь, это дает представление о том, как это сделать. Мы изменим эту функцию позже, и вы, возможно, захотите закончить это руководство, прежде чем вносить какие-либо существенные изменения.

Большим преимуществом использования этой функции для всех атак является то, что изменения необходимо вносить только один раз. Если вы решите, что критические удары будут наносить только двойной урон, одно изменение этой функции повлияет на все в вашей игре.

Оружие

Нам нужно оружие, чтобы атаковать зомби. Сейчас мы сделаем только один, но вы можете захотеть использовать несколько в своей игре. Если бы вы использовали настольную версию, вы бы установили атрибуты на вкладке Атрибуты и использовали глаголы для взаимодействия, настроенные на тип оружия. В веб-версии нам нужно установить атрибуты в скрипте инициализации для предмета, как мы сделали с объектом игрока, и лучше использовать команды, так как у вас может быть одна команда для управления всем оружием.

Добавим лопату; дайте ему описание, например «Хорошо для уничтожения зомби», и отметьте, что его можно подобрать на вкладке Инвентарь . На вкладке Object присвойте ему «Псевдоним для отображения…» — «Лопата» (чтобы мы могли пометить его как экипированный позже; если вы не используете игровые панели, это не требуется). Внизу в глаголах инвентаря убираем "Использовать" и добавляем "Экипировать".

Нам также нужно дать ему некоторые характеристики. На вкладке Spade Features отметьте «Запустить скрипт инициализации для этого объекта». Тогда иди на Сценарий инициализации вкладка и введите этот код:

 this.damage = "1d6"
это.атака = 3
 

Кстати, это относится к объекту, которому принадлежит скрипт. Я использую его здесь, потому что позже вы можете захотеть создать больше оружия, и самый простой способ — скопировать объект лопаты (используйте кнопку копирования в верхней части экрана). Если бы мы использовали имя элемента в сценарии, нам пришлось бы менять его в каждой копии.

Игрок будет экипировать и снимать оружие, чтобы использовать его, и лучший способ сделать это — с помощью команд, так как мы можем установить две команды для управления всем оружием. Создайте новую команду с шаблоном:

оборудовать #объект#

Вставьте этот код:

 if (HasBoolean(object, "dead")) {
  msg («Это не то, чем вы можете владеть». )
}
иначе если (не имеет атрибут (объект, "ущерб")) {
  msg («Это не то, чем вы можете владеть».)
}
иначе если (не object.parent = player) {
  msg ("Вы не носите его.")
}
иначе если (объект = player.equipped) {
  msg («У вас уже есть.»)
}
еще {
  если (player.equipped = ноль) {
    msg ("Вы экипируете свой " + GetDisplayAlias(object) + ".")
  }
  еще {
    msg ("Вы убираете свой " + GetDisplayAlias(player.equipped) + " и экипируете свой " + GetDisplayAlias(object) + ".")
    добавить в список (player.equipped.inventoryverbs, «Оборудовать»)
    список удалить (player.equipped.inventoryverbs, "Unequip")
    player.equipped.listalias = Заменить(player.equipped.listalias, " (оборудованный)", "")
  }
  player.equipped = объект
  добавить в список (object.inventoryverbs, «Снять»)
  список удалить (object.inventoryverbs, "Оборудовать")
  object.listalias = object.listalias + "(оборудовано)"
}
 

Опять же, это соответствует стандартному формату команд; серия тестов, чтобы поймать, когда это невозможно сделать, и последний раздел, в котором выполняется действие.

Как узнать, является ли объект оружием? Мы могли бы иметь флаг, который мы установили бы на каждом оружии, но в этом нет необходимости; если у него есть атрибут урона, это либо оружие, либо зомби, а если у него нет атрибута смерти, это должно быть оружие.

Итак, игрок может экипировать только оружие, и мы проверяем, что это так, а затем проверяем, что игрок несет предмет, и он еще не экипирован. Если все в порядке, объект экипирован, что может потребовать снятия чего-то еще.

Создайте вторую команду с шаблоном:

снять #объект#

Вставьте этот код:

 if (not object = player.equipped) {
  msg («Вы им не владеете».)
}
еще {
  msg («Вы убрали свою лопату.»)
  player.equipped = ноль
  добавить в список (object.inventoryverbs, «Оборудовать»)
  список удалить (object.inventoryverbs, "Unequip")
  object.listalias = Заменить (object.listalias, " (оснащено)", "")
}
 

Теперь заходи в игру, хватай лопату и шлепай ею зомби!

Атака зомби!

Пока наша игра довольно проста - зомби просто стоят и позволяют вам их бить. Нам нужно, чтобы они атаковали в ответ. Для этого нам нужен скрипт хода, поэтому перейдите на вкладку Scripts игрового объекта и в разделе «скрипты хода» нажмите «Добавить». Дайте ему какое-нибудь имя, например, «attackturnscript», и отметьте его, чтобы он был включен в начале. Вставьте этот код:

 foreach (obj, GetDirectChildren(player.parent)) {
  если (HasBoolean(obj, "мертвый")) {
    если (не obj.dead) {
      DoAttack(объект, объект, игрок)
    }
  }
}
 

Это довольно просто. GetDirectChildren(player.parent) получает все вещи в текущей комнате, и мы просматриваем их одну за другой. Сначала он проверяет, является ли объект зомби (или чем-то еще; если вы позже добавите других монстров, если вы установили для dead значение false, это будет работать), затем проверяет, что он все еще жив. Если это так, вызовите функцию DoAttack , которую мы создали ранее.

Теперь заходите в игру, и эти зомби дадут отпор!

…Но не за опечатку

Когда зомби сопротивлялись, вы могли обнаружить, что они это делают, даже если вы что-то опечатали. Кажется, это дает зомби несправедливое преимущество, поэтому давайте изменим его, чтобы они атаковали только в том случае, если Квест понял команду (даже если Квест затем скажет «нет»).

Перейти к игровому объекту и на вкладке Возможности поставить галочку «Показать дополнительные скрипты…». Затем на вкладке Дополнительные сценарии для «Неразрешенный командный сценарий» добавьте следующий код:

 msg("Э-э, что..?")
game.notarealturn = истина
 

Затем для сценария хода измените его на это:

 if (not GetBoolean(game, "notarealturn")) {
  player.attackers = НовыйСписокОбъектов()
  foreach (obj, GetDirectChildren (player.parent)) {
    если (HasBoolean(obj, "мертвый")) {
      если (не obj.dead) {
        DoAttack (объект, объект, игрок)
      }
    }
  }
}
game.notarealturn = ложь
 

Зомби, следующие за

Вы также заметили, что зомби остаются на одном месте. Давайте заставим их двигаться.

Что мы сделаем, так это сохраним список зомби, которые атакуют игрока, а затем на следующий ход все зомби из этого списка, но не атакующие (и не мертвые), будут перемещены в текущую комнату.

Сначала, затем в скрипт запуска игры (вкладка Scripts игрового объекта) добавить строку:

 // Список нападавших
player.attackers = НовыйСписокОбъектов()
 

Теперь вернемся к сценарию хода и изменим код на этот:

 if (not GetBoolean(game, "notarealturn")) {
  список = НовыйСписокОбъектов()
  foreach (obj, GetDirectChildren (player.parent)) {
    если (HasBoolean(obj, "мертвый")) {
      если (не obj.dead) {
        DoAttack (объект, объект, игрок)
        список добавить (список, объект)
      }
    }
  }
  foreach (obj, ListExclude (player.attackers, список)) {
    если (не obj.dead и RandomChance(80)) {
      obj.parent = игрок.родитель
      msg (CapFirst(obj.alias) + " ковыляет в область.")
      список добавить (список, объект)
    }
  }
  player.attackers = список
}
game.notarealturn = ложь
 

Зомби будет следовать за вами в 80% случаев, вы можете настроить его по своему усмотрению.

Безопасная комната

Если вы хотите остановить зомби, следующих за игроком через определенный выход, подойдите к выходу и поставьте галочку «Запустить скрипт». Вставьте этот код (при необходимости отредактируйте текст):

 player.attackers = NewObjectList()
msg ("Хлопни дверью, наконец-то ты в безопасности!")
player.parent = это.to
 

Огнестрельное оружие

Теперь мы добавим второе оружие, пистолет. У пистолета будут патроны, и его нужно будет перезарядить. Первое, что нужно сделать, это создать пистолет, а проще всего скопировать лопату. Нажмите кнопку «Копировать», выберите место назначения и нажмите «Вставить» (если вы используете настольную версию, найдите их на 9-й странице).0053 Редактировать меню ). На вкладке «Настройка » дайте ему имя «пистолет», и это будет описанием, чтобы он отображал боеприпасы:

.

Подходит для стрельбы по зомби. Боеприпасы: {pistol.ammo}/{pistol.ammomax}

После этого перейдите на вкладку Сценарий инициализации . У вас уже должно быть это:

 this.damage = "1d6"
это.атака = 3
 

Мы дадим огнестрельному оружию два набора характеристик, чтобы игрок мог попытаться разбить зомби из оружия, когда закончатся патроны. Как оружие ближнего боя пистолет отстой по сравнению с нашей лопатой, поэтому настроим его так:

 this.damage = "2"
это.атака = 0
this.firearmdamage = "2d8"
this.firearmattack = 3
это.боеприпасы = 3
это.ammomax = 6
 

Теперь нам нужна команда стрелять. Это будет похоже на команду атаки с таким шаблоном:

.

стрелять #объект#

И этот код:

 if (not HasBoolean(object, "dead")) {
  msg («Это не то, чем вам нужно стрелять».)
}
иначе если (object.dead) {
  msg («Этот уже мертв».)
}
иначе если (player.equipped = null) {
  msg («У вас нет огнестрельного оружия».)
}
else if (not HasInt(player.equipped, "боеприпасы")) {
  msg ("Вы не можете стрелять в " + GetDisplayAlias(player.equipped) + ".")
}
иначе если (не player.equipped.ammo > 0) {
  msg ("Вы наводите " + GetDisplayAlias(player.equipped) + " и нажимаете на курок. Щелчок. Боеприпасы не загружены.")
}
еще {
  DoAttack (player, player.equipped, object, true)
}
 

Как видите, нам нужно проверить еще кое-что; огнестрельное ли это оружие (т. е. имеет ли оно атрибут «боеприпасы»), есть ли в нем пули? Если все хорошо, мы вызываем тот же DoAttack , но с новым параметром, который помечает это как атаку с применением огнестрельного оружия. Это означает, что мы должны обновить DoAttack , присвоив ему новый параметр «огнестрельное оружие» и этот новый код (первые 9 строк новые, следующие шесть отредактированы, остальные такие же):

 if (огнестрельное оружие) {
  Damageatt = "урон от огнестрельного оружия"
  атаката = "огнестрельное оружие"
  оружие.боеприпасы = оружие.боеприпасы - 1
}
еще {
  Damageatt = "урон"
  атакатт = "атака"
}
roll = GetRandomInt(1, 20) + оружие.атака - цель.защита
урон = DiceRoll(оружие.урон) * (100 - цель.броня) / 100
если (урон < 1) {
  урон = 1
}
если (бросок > 15) {
  урон = урон * 3
  msg (CapFirst(attacker.alias) + " атаки " + target.alias + " и получает критический (" + урон + " хиты)!")
  target.hitpoints = target.hitpoints - урон
}
иначе если (бросок > 10) {
  msg (CapFirst(attacker. alias) + " Attacks " + target.alias + " and hit (" + damage + " hits).")
  target.hitpoints = target.hitpoints - урон
}
еще {
  msg (CapFirst(attacker.alias) + "атакует" + target.alias + "и промахивается...")
}
 

Наконец, нам нужно изменить другие места, где мы использовали DoAttack, чтобы у них был новый параметр (который должен быть false ). В команде атаки теперь должна быть предпоследняя строка:

 DoAttack (player, player.equipped, object, false)
 

В сценарии хода шестая строка должна быть такой:

 DoAttack (obj, obj, player, false)
 

Наконец, десятая строка SpawnZombie (и любых других функций появления) должна быть изменена на:

 obj.displayverbs = Split("Смотрите;Атакуйте;Стреляйте", ";")
 

Если вы войдете в игру, вы сможете стрелять в зомби, а когда в пистолете закончатся патроны, ударить их. Однако мы хотим перезарядить ружье. В скрипте запуска игры добавьте строку:

 player.ammo = 35
 

Это даст игроку 35 запасных патронов на старте. Если она покупает больше, вам нужно добавить дополнительную сумму к этой сумме. Перейдите на вкладку Inventory пистолета и добавьте «Перезарядить» в качестве глагола инвентаря.

Теперь нам нужна команда перезагрузки. Это шаблон:

перезагрузить #объект#

Вот код:

 if (not HasInt(object, "боеприпасы")) {
  msg ("Вы не можете перезагрузить " + GetDisplayAlias(player.equipped) + ".")
}
иначе если (player.ammo < 1) {
  msg («У вас нет боеприпасов.»)
}
еще {
  пули = object.ammomax - object.ammo
  если (пули > player.ammo) {
    пули = player.ammo
  }
  player.ammo = player.ammo - патроны
  object.ammo = object.ammo + пули
  msg ("Вы поместили в него " + пули + " пули.")
}
 

Рабочая игра!

Итак, теперь у нас есть работающая игра с двумя видами оружия и кучей зомби. Это может быть все, что вам нужно, но если вы хотите реализовать некоторые более продвинутые функции, такие как поиск трупов и различные атаки зомби, вы можете перейти ко второй части.

Зомби-апокалипсис распространяется на Oculus Quest! Спросите разработчиков Arizona Sunshine ВСЕ О ЧЕМ и выиграйте ключи! : OculusQuest

ОБНОВЛЕНИЕ ИНФОРМАЦИИ О DLC : Мы рады подтвердить, что весь контент после запуска появится в Quest до весны 2020 года, и если у вас уже есть DLC Dead Man или DLC The Damned в магазине Oculus, они будут доступны вам бесплатно, когда они упадут!

Нажмите здесь, чтобы узнать больше о плане содержания

-----------------------------

ОБЪЯВЛЕНИЕ ПОБЕДИТЕЛЯ ОБНОВЛЕНИЕ

Еще раз привет! Победители трех ключей для Arizona Sunshine on Quest:

u/Crimleigh

u/elnarvideo

u/Mattecko99

Поздравляю победителей, я отправлю вам ключи через DM вскоре. Еще раз спасибо за участие в этом AMA и счастливого дня запуска!

ОБНОВЛЕНИЕ: С победителями связались, ключи уже в пути! Наслаждайтесь запуском трейлера!

Воспроизведение

0:00

0:00

Настройки

Полноэкранный режим

------------ ------------------

Обновление от 12 мая, 12:00 по центральноевропейскому времени: ААД завершена! Большое спасибо за участие и огромный интерес к Arizona Sunshine on Quest! Мы надеемся, что смогли поделиться некоторыми мыслями и решить некоторые проблемы, если позволит время, мы перейдем к последним открытым вопросам, но сегодня у нас большой запуск.

Победители розыгрыша будут объявлены сегодня перед игрой, запланированной на 10:00 по тихоокеанскому стандартному времени / 13:00 по восточному поясному времени / 19:00 по центральноевропейскому времени в этом же сообщении!

-----------------------------

Обновление от 12 мая, 1:30 по центральноевропейскому времени: Хорошо, Тревор и Пол уже отправились в спать и мне тоже пора укладываться на ночь. Мы возобновим AMA утром, чтобы задать еще несколько вопросов перед закрытием, и объявим победителей перед запуском игры. Спасибо за участие! - ТамТу

--------------------------------------------

Обновление от 12 апреля 21:00 по центральноевропейскому времени: мы начинаем AMA! Мы будем идти вниз по списку, поскольку ночь продолжается. Спасибо за все ваши вопросы, надеюсь, мы сможем дать больше информации о том, как мы создали Quest-версию Arizona Sunshine!

-----------------------------

ДОРОЖНАЯ КАРТА СОДЕРЖАНИЯ

Мы понимаем, что вы очень ждали этих подробностей , но нам пришлось ждать официального зеленого света из-за некоторых технических проблем, связанных с тем, как мы развернули Oculus Rift. Спасибо за понимание!

У нас все еще есть команда, которая усердно работает над воссозданием ресурсов из DLC и восстановлением дополнительного контента. Теперь, когда у нас есть оптимальная сборка, которую мы искали, мы можем приступить к выпуску DLC Dead Man и The Damned для игроков Quest весной 2020 года. И вы можете видеть, если у вас уже есть DLC через Oculus Store для Rift, он будет доступен для вас в Quest, когда он выпадет в соответствии с дорожной картой! (Вы знаете, что большинство людей называют Cross Buy 😉

---------------

Здравствуйте, r/OculusQuest! Это команда Vertigo Games! В преддверии запуска версии Arizona Sunshine Quest мы приглашаем вас принять участие в AMA с разработчиками 4 декабря (завтра!)

Отвечать на ваши вопросы будут мои коллеги, которые усердно работали над тем, чтобы привнести в Quest опыт стрельбы по зомби, который вы полюбили. Мы будем рады ответить на ваши вопросы и дать вам представление о том, что вас ждет, когда Arizona Sunshine выйдет на Oculus Quest 5 декабря!

Мы уже хотим поделиться с вами следующим;

Игровой трейлер: https://www. youtube.com/watch?v=YJsiKyTbcQI&feature=youtu.be уже, но вот взгляните на квестовую версию игры! Когда мы впервые начали процесс сборки версии Quest; мы на самом деле пытались портировать модели Playstation, менять некоторые настройки и нажимать экспорт ;). Увы, это было слишком хорошо, чтобы быть правдой, мы получили полный беспорядок и пустую трату времени на оптимизацию, поэтому мы наняли более талантливых людей, чтобы они продвигали правильную сборку для мобильной платформы Android и следили за тем, чтобы опыт оставался прежним. то же самое в Quest, что и в PCVR и Playstation VR. Из наших игровых тестов мы чувствуем, что отвязанный опыт стал еще более раскрепощающим, чем раньше!

THE DEVS

Now for the Vertigo Games team members who will be taking part in this AMA:

  • u/PaulVertigo - Producer

  • u/TrevorVertigo - Tech Lead

  • and myself ( чтобы следить за вещами здесь!): u/Vertigo_TT - менеджер сообщества

ДОКАЗАТЕЛЬСТВО: https://imgur.

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*