Вход в систему
Информация по игре "The Elder Scrolls 4: Oblivion"
http://www.elderscrolls.com
Последние статьи
Самые комментируемые статьи
Мир скриптов TES 4: Oblivion, часть 3Автор: Эдуард Клишин
Полный текст
Представьте себе такую картину: в мрачных подземельях TES 4: Oblivion стройными рядами стоят неподвижные монстры. Входит игрок, недоуменно глядит на могучих страшилищ, тычет в них посохом, недовольно пинает ногой. Но зверюги даже носом не ведут, им все равно, что происходит вокруг. Рядом со входом в подземелье притаились в засаде твари поменьше. Они должны были нашинковать героя стрелами, когда он выйдет на свет, но отчего-то забыли, как натягивать лук и спускать тетиву. Городские обитатели — купцы, лавочники, старьевщики — не желают продавать персонажу ничего, а на просьбу дать хоть какое-то задание молчат, словно воды в рот набрали. Что случилось? Да ничего особенного, просто из игры удалили все скрипты. А без них Обливион мертв. Чтобы модостроители могли оживлять свои творения, разработчики встроили в TES Construction Set (набор утилит для создания модификаций на движке Oblivion) скриптовый язык. В сегодняшней статье мы рассмотрим базовые принципы его работы (как делать локации, мы уже рассказывали в прошлых номерах «Игромании»). Синтаксис редактораПервым делом изучим анатомию скриптового редактора. Запустите TES Construction Set (мы снова выкладываем его на наш DVD) и подгрузите в него мастер-файл Oblivion.esm. Щелкните мышью по кнопке с изображением карандаша на панели инструментов — на экране появится форма с заголовком Script Edit. Это и есть редактор скриптов.
Большую часть подпрограммы занимает текстовое поле (пока оно серого цвета), где мы и будем писать свои собственные и редактировать уже встроенные в игру скрипты. Обратите внимание на панель инструментов — на нее вынесены только самые необходимые функции; если вам понадобится что-то еще, придется путешествовать по менюшкам: перетащить на панель нужный инструмент, к сожалению, нельзя. Чтобы писать рабочие скрипты, необходимо разобраться в базовых принципах их построения. Изучим синтаксис на примере простейшего кода из четырех строк. Создайте новый документ, выбрав пункт меню Script/New, и напечатайте в текстовом окне следующий текст: ScriptName Igromania Begin OnAdd Message "Igromania — the computer magazine", 24 end Любой скрипт должен иметь свое уникальное название. В нашем случае это Igromania. Если название вашего скрипта будет состоять из нескольких слов, то писать их надо слитно, например, IgromaniaTest1. Следующий неотъемлемый элемент любого скрипта — последняя строка, содержащая всего одно слово end. Этот операнд завершит работу кода. Между первой и последней строками разместились два ряда команд (их может быть существенно больше). Команда Begin OnAdd сообщает игре, что весь нижеследующий код начнет работу сразу после того, как игрок возьмет какой-то объект. Команда Message "Igromania — the computer magazine", 24 выводит на экран сообщение (текст которого указан в кавычках). Цифра 24 задает время, в течение которого сообщение будет оставаться на экране. Запомните очень важное правило — каждая новая операция должна начинаться с новой строки! Если вы хотите сделать какую-либо пометку внутри скрипта, например, «Скрипт игростроевца», то вам необходимо вписать в нужном месте символ ; (точка с запятой), после чего поставить сам комментарий: ; Скрипт игростроевца «Ну и что нам теперь делать с этой кучей команд?» — спросите вы. Кликните по значку с изображением дискеты на инструментальной панели для сохранения скрипта. После этого перейдите на окно объектов в категорию Items и создайте новый элемент (или отредактируйте уже существующий). В окне свойств объектов отыщите метку Script и в списке напротив выберите созданный скрипт Igromania. Нажмите кнопку Ok, разместите новый элемент на карте и сохраните плагин. Можно тестировать разработку в игре. Если все сделано правильно, то когда вы найдете в игре новый объект и возьмете его, на экране появится сообщение «Igromania — the computer magazine».
СобытияОсновы синтаксиса мы изучили, теперь копнем чуть глубже. Вернемся к команде Begin, определяющей, при каком событии активируется скрипт. В первом скрипте значение этой команды было OnAdd, но есть и другие варианты.
begin OnMurder ActorID (optional) В данном случае скрипт начнет работу после того, как будет убит персонаж с идентификационным значением ActorID (его можно посмотреть в меню свойств NPC). begin OnStartCombat TargetActorRefID (optional) begin OnStartCombat player Первый скрипт активируется, когда заданный персонаж вступит в бой. Если вы хотите, чтобы блок работал, когда драться начинает главный герой, используйте второй вариант. begin OnLoad С помощью данной команды можно проверить, все ли области мира загружены. begin OnHit ActorID (optional) Блок стартует, когда персонаж с идентификатором ActorID нанесет герою повреждение. Вариант: begin OnHit BaurusRef Значений у команды Begin очень много, мы разобрали только наиболее используемые. Полный список значений вы можете взять с нашего DVD. Арифметика и условные переходыПерейдем к объявлению переменных. Они используются в игре для указания промежуточных значений, которые присваиваются конечной функции, определенной разработчиками игры. Чтобы было понятней, рассмотрим конкретный пример. Например, вы создали мод «Кто хочет стать миллионером». За первый тур игрок заработал сумму в 100 условных единиц. Во втором раунде он выиграл еще 5000 золотых, и далее по нарастающей. В конечном счете, все эти переменные (соответствующие деньгам, заработанным за каждый раунд) суммируются, и образуется одна общая переменная. И уже из нее информация о выигрыше передается функции добавления денег игроку. В TES 4 три вида переменных: short Variable Variable здесь и далее — имя переменной. Значение в данном случае малая величина, диапазон — от -32.768 до 32.767. long Variable Длинная переменная, диапазон — -2.147.483.648 до 2,147.483.647. float Variable Параметр с плавающей точкой. Радиус охвата — 1.18E-38 до 3.40E38. Переменные заданы, но как присвоить им определенные значения? Как сложить, вычесть? Разберемся по порядку. Чтобы присвоить той или иной переменной определенное значение, воспользуйтесь следующей командой: set Variable to 5 В данном случае 5 — значение переменной. Вы можете складывать, вычитать, делить и умножать переменные, которым присвоили некоторые значения. set var_proizvedenie to mnogitel_a*mnogitel_b var_proizvedenie — переменная, которой будет присвоено значение, равное произведению переменных mnogitel_a и mnogitel_b. Сложение, деление и вычитание проводятся так же — нужно всего лишь заменить знак умножения в описанной команде на +, — или /, соответственно. Для закрепления материала рассмотрим небольшой пример, демонстрирующий объявление переменных и действия над ними.
short Variable_1 short Variable_2 short Variable_3 set Variable1 to 5 set Variable2 to 10 set Variable3 to (Variable_1 + Variable_2)/5 Для вывода результата на экран воспользуемся следующей командой: message " Variable_3 =%.0f" Variable_3 В нашем случае будет выведен текст, информирующий о том, что Variable_3 = 3. Перейдем к постановке условий, необходимых для контроля действий игрока и изменения различных величин в игре. Рассмотрим пример самого сложного условия: if (Var1 == 50 && my Var == 50) || myVar2 == 1000 В данном условии два оператора — && и ||. Первый из них (логическое «и») отвечает за одновременное выполнение двух условий, в нашем случае — за то, что переменные Var1 и Var2 равны 50. Второй оператор — || (логическое «или») сообщает о том, что выход возможен, когда параметр Var2 равен 1000. Упрощенный вариант условия может выглядеть следующим образом: if (Var1 == 50) Рассмотрим остальные операторы. Оператор == (двойное равенство) позволяет проверить — равно ли значение той или иной переменной конкретному значению (if Var1 == 50). Если заменить символ двойного равенства на знак > (больше), то скрипт будет проверять, больше ли значение переменной указанного числа, например: if Var1 > 50 Мы составили таблицу операторов сравнения с кратким описанием, вы можете ознакомиться с ней на отдельном текстовом блоке. Условие поставлено, остается решить задачу — что делать, если оно выполняется или не выполняется? После того как мы задали само условие, следующей строкой необходимо прописать команду или ряд команд, которые будут исполнены, если условие выполняется. А затем (тоже отдельной строкой) добавить ключевое слово else и указать еще ряд команд, которые запустятся, если условие не выполняется, например: if (Var1 > 50) set Variable2 to 1 else set Variable2 to 2 В конце блока нужно вписать операнд endif, который завершит работу проверки. ФункцииВ завершение разговора о скриптах рассмотрим ряд полезных функций, которые понадобятся вам при создании больших квестов. Хотите отобрать у игрока золото, краденые вещи и поместить его в ближайшую темницу? Тогда вам пригодится команда GoToJail. Чтобы проверить, находится ли персонаж в какой-либо ячейке игрового мира, воспользуйтесь командой GetInCell CellName. CellName определит название любой локации, например, Chorrol. Если требуется проверить, ведет ли игрок сражение с кем-либо, пропишите функцию IsInCombat (во время боя функция вернет ответ 1).
Возможно, вы захотите сделать читерский плагинчик, который добавляет герою золото (если его не хватает). Это довольно просто: используете команду GetGold для получения информации о материальном положении игрока, организуете проверку — если значение параметра GetGold меньше указанного вами, то добавляете немного наличных. ScriptName Igrostroi_money_grab Begin Gamemode if (GetGold<= 1000) player.additem gold_001 5000 Message "Думаю, хватит?", 24 else Message "Много хочешь, но ничего не получишь", 12 Endif End Напоследок рассмотрим одну довольно интересную идею, реализовать которую вам придется самостоятельно. Мы лишь подскажем, как сделать все в общих чертах и какие команды использовать. Попробуйте обыграть такую ситуацию — игрок активирует тот или иной объект (для старта скрипта необходимо использовать разновидность команды Begin OnActivate, также не забудьте присвоить этот скрипт активируемому объекту и разместить элемент на карте). На экране появляется меню, в заголовке которого указан текст вашей загадки, а под ним располагается несколько возможных вариантов ответов. Если герой разгадал загадку, он получит немного денег, повышение скиллов, а если ошибется, то лишится всего золота и попадет в темницу. Меню выводится на экран посредством следующей команды: MessageBox "Текст загадки", "Вариант ответа1", "Вариант ответа 2", "Вариант ответа3", "Вариант ответа4" Для того чтобы определить, какой же элемент выбрал игрок, объявите переменную: Short Punkt_menu Set Punkt_menu to GetButtonPressed Проверку организуйте, используя команду: If ( Punkt_menu == 1 ) * * *Скриптовый язык The Elder Scrolls 4: Oblivion похож на C++, изучить его — все равно что пройти краткий курс программиста. Полученных знаний вам хватит для создания довольно сложных модификаций. Если у вас возникнут вопросы, шлите по адресу gamedev@igromania.ru, и мы ответим на них в рубрике «Горячая линия: Игрострой». Всего обоев: 6 Новостей: 7 Все новости по игре 18.06.2009 - Блиц-новости17.06.2009 - The Elder Scrolls завоевала Steam03.04.2009 - Блиц-новости24.01.2008 - "1С" порадует коллекционеров18.12.2007 - Игровые новинки21.11.2007 - Oblivion предстанет в золоте11.10.2007 - Bethesda раздает крепости Статей: 27 Все статьи по игре 05.07.2009 - Игрострой31.01.2009 - Пацан сказал — и ничего не сделал08.10.2008 - 5 шагов к локализации. Русификация модов для The Elder Scrolls 4: Oblivion09.04.2008 - The Elder Scrolls 4: Oblivion. Game of the Year Edition30.12.2007 - Коды по "The Elder Scrolls 4: Oblivion" (читательские хинты)08.10.2007 - Коды по "The Elder Scrolls 4: Oblivion" (читательские пасхалки)30.07.2007 - Игровое редактирование 01.03.2007 - Итоги 2006 года11.01.2007 - Коды по "The Elder Scrolls 4: Oblivion" (читательские пасхалки)05.01.2007 - Коды по "The Elder Scrolls 4: Oblivion" (читательские хинты)05.01.2007 - Коды по "The Elder Scrolls 4: Oblivion" (читательские пасхалки)22.12.2006 - Кодекс по "The Elder Scrolls 4: Oblivion" (читательские хинты)19.12.2006 - Игровое редактирование01.12.2006 - Коды по "The Elders Scrolls 4: Oblivion" (читательские хинты)23.11.2006 - Игровое редактирование15.11.2006 - Коды по "The Elder Scrolls IV: Oblivion"13.10.2006 - Руководство и прохождение по "The Elder Scrolls IV: Oblivion"29.08.2006 - Мир скриптов TES 4: Oblivion, часть 326.07.2006 - Игровое редактирование26.07.2006 - Миры Тамриэля. Модифицирование The Elder Scrolls IV: Oblivion, часть 204.07.2006 - Вступительное слово04.07.2006 - Миры Тамриэля. Модификация The Elder Scrolls IV: Oblivion, часть 131.05.2006 - The Elder Scrolls IV: Oblivion31.08.2005 - The Elder Scrolls IV: Oblivion02.08.2005 - Good Day L.A. Полный отчет о E3’200523.11.2004 - В центре внимания23.11.2004 - В центре внимания "The Elder Scrolls IV: Oblivion"
|