Вселенная Аллодов
 
: Главная :: Форум :: Файлы :: Галерея :: Аллоды Онлайн :: ЗвА :: ЛА :: ПЗ :: А2 :: А1 :
Главное меню
Игры Nival'а
Друзья и партнеры
Создание квестов :: Проклятые Земли

Здравствуйте уважаемые будущие или теперешнее :) МодМейкеры . Этот туториал был задуман мною для того чтобы вы , как я в свое время , недоставал вопросами :) знающих людей, хотя меня можете доставать я люблю когда меня спрашивают :) . Туториал рассчитан на людей которые хотят чего-то делать ,но не умеют . В общем для того чтобы читать туториал вам вообще не требуются никакие знания в области програмирования.


Итак для начала обьясню из чего состоит квест.

Файлы квестов

Для квеста требуется 2 файла. Эти файлы *.mq и *.mob - где * название файла , .mob и .mq расширение файла . Название файлов одинаковое , допустим если .mob файл называется z3q1.mob то и .mq будет называться z3q1.mq вот такие пироги :) . Название файла составляется из двух частей zXqY - где X номер квестовой зоны на которой выполняется квест ,а Y номер квеста на зоне , допустим в квесте z3q1 номер зоны 3 , а номер квеста на зоне 1 . Теперь о содержимом этих файлов . В файле .mq находятся диалоги персонажей при взятии квеста , отказе от квеста , выполнении квеста , само описание подмиссий квеста и информация о мини-карте координатах входя выхода , ну я тут много нагрузил если вы это не понимаете это нестрашно , вам с этим почти не придется сталкиваться так как мы будем использовать шаблоны .mq и вам придется переписать самую малость . Далее .mob - в .mob файлах хранятся записи положения объектов на карте ( юниты , сундуки , монстры и тп. ) и квестовый скрипт . Квестовый скрипт - это последовательность специальных команд , которая в результате управляет действиями игры . Допустим когда вы открываете сундук в мульти-плеерном квесте "Сокровища разбойников" выполняется скриптовая команда , проверяющая состояние сундука ( открыт или закрыт ) и в случае если сундук открыт она заканчивает квест. Хранятся эти файлы в папке "../Проклятые Земли/Maps/" .



Теперь разберемся с программами, которые нам требуются


Значит так, нам требуются 2 программы (для более сложных квестов может потребуется еще Дата База ПЗ , но мы ее пока затрагивать не будем. Первая программа которая нам нужна это ResBuild.exe (посмотрите в раздел моего сайта "Файлы”), также если вы неумеете обращяться с командной строкой скачайте оболочку для него (в разделе "Файлы" ). Вторая программа которая нам потребуется это Mob Reversing Tool, это редактор файлов с расширением .mob. Теперь о программах подробнее. Resbuild - это функциональная программа :) она распаковывает и запаковывает практически все ресурсы ПЗ , она понадобится нам для распаковки и запаковки .mq файлов. Существуют специалные файлы которые могут хранить в себе другие файлы. Вот .mq является таким файлом он хранит в себе несколько других файлов. Распаковать значит вытащить из специального файла простые файлы , а запаковать значит засунуть файлы обратно в специальный файл :), надеюсь я вас еще сильно не запутал :). Теперь о Mob Reversing Tool эта программа открывает мобы ( то есть эта программа открывает моб файлы, также как блокнот открывает текстовые файлы ) через эту программу мы будем редактировать скрипт квеста и немного подправлять положение объектов нужных нам для квеста. С этим вопросом закончили.


Основы программирования(скриптига)

Итак основные составляющие программирования это : ПЕРЕМЕННАЯ ФУНКЦИЯ , ВЕТВЛЕНИЯ ... для скрипта ПЗ нам хватит этого .


Теперь о синтаксисе(правописании) скриптов ПЗ

Синтаксис


Начнем с того о чем мы говорили в предыдущей части о ВЕТВЛЕНИЯХ и ФУНКЦИЯХ . Сначала о функциях , кстати имейте ввиду что такой синтаксис который здесь описан характерен только для скриптов ПЗ в другиз играх и языках програмирования синтаксис может отличаться ! . Итак синтаксис записи функции в ПЗ такой :

Script имя_функции

(

скрипт_функции

)

имя_функции - любое какое в голову взбредет( НО ТОЛЬКО ИСПОЛЬЗОВАТЬ РАЗРЕШЕНО ТОЛЬКО ЛАТИНСКИЕ(АНГЛИЙСКИЕ) БУКВЫ И ЦИФРЫ И ЗНАК # , НЕРАЗРЕШЕНО ИСПОЛЬЗОВАТЬ ПРОБЕЛЫ !!!) , скрипт_функции -тут пишется скрипт этой функции . А Скобки обозначают границы функции все что находится в скобка принадлежит этой функции . Далее -> каждую функции необходимо объявить прежде чем ее использовать объявляются функции так :

DeclareScript имя_функции ( аргументы )

что такое имя_функции мы уже рассмотрели , аргументы функции это данные передаваемые функции ( понимать это пока необязательно ) , чаще всего вы вас не будет это беспокоить , подавляющему число функций в скрипте ПЗ аргументы ненужных , но все равно но есть один аргумент который надо использовать всегда , в подавляющем большинстве случаев функция объявляется так :

DeclareScript имя_функции ( this : object )

this : object это и есть тот самый аргумент о котором я вам говорил , вам не надо задумываться что он означает просто пишите его и все. В общем если наша функция будет называться Armageddon то ее объявление и сама она будет выглядеть так :

DeclareScript Armageddon( this : object )


Script Armageddon

(


)

вот так , я надеюсь что вы все поняли , неправда ли легко ? Теперь о ветвлениях . Что такое ветвление мы рассмотрели в предыдущих статьях , теперь о синтаксисе его записи в ПЗ скриптах . В ПЗ скриптах ветвление обозначается командой if . Синтаксис написания ветвления :

if

(

условие

)

then

(

действие(скрипт)

)

Теперь как это все работает :). В общем работает это так - проверяется условие если оно правдиво выполняется действие если нет. Итак команда if это служебная команда мы ее так и пишем и команда then тоже служебная . С английского эти команды переводятся как if(если) then(то) , получается ЕСЛИ-ТО.

Теперь об общем синтаксисе написания скриптов ПЗ . Скрипт пз имеет такой синтаксис :


GlobalVars (

NULL : object,

VSS#i#val : object,

i : object

)


Тут объявляем функции


Тут записываем все функции


WorldScript

(

Sleep(2)

Тут вызываем те функции , которые хотим чтоб работали все время .

)


вот и все для начала сложно но ничего просто переписываем все к себе и заменяем "Тут объявляем функции" на объявление своих функций , "Тут записываем все функции" заменяем на скрипт своих функций ,а "Тут вызываем те функции , которые хотим чтоб работали все время ." на вызовы своих функций . сейчас это может показаться вам сложным но в дальнейшем вы поймете , конечно я сейчас приведу пример все про туже функцию Armageddon :


GlobalVars (

NULL : object,

VSS#i#val : object,

i : object

)


DeclareScript Armageddon ( this : object )


Script Armageddon

(

if

(


)

then

(


)

)


WorldScript

(

Sleep(2)

Armageddon ( NULL )

)


вот правильный скрипт правда он нечего существенного не делает :) объясню поподробнее в блоке GlobalVars создаются переменные , мы договорились их пока не трогать . далее объявляем функцию Armageddon в ней у нас ветвление , затем WorldScript в этом блоке вызываются нужные функции и в подавляющем большинстве случаев мы передаем им аргумент NULL то есть этого вам тоже не надо понимать как говориться NULL есть NULL , просто передавайте его и все :) - теперь объясню для чего это надо , если функцию не вызывать то она не сработает то есть вы напишете ее а она останется неиспользованной , в блоке WorldScript вызов происходит периодически то есть через определенный период времени функция вызывается заново и заново .Такс теперь о встроенных функциях - в ПЗ имеются встроенные функции то есть уже объявленные . Вы их можете вызывать , это надо для того чтобы управлять игрой ,допустим функция Attack( Unit1 : object , Unit2 : object ) заставляет атаковать Unit1 -> Unit2 а object обозначает тип аргумента об этом чуть позже . Справочник по встроенным функциям вы можете найти на моем сайте . Также функции могут возвращать значение , что это такое ? Сейчас объясню . Возвращать значение значит отдавать результат скрипта .


Теперь о типах аргументов (да и данных вообще ) в ПЗ.

Типы данных



В ПЗ имеется 4 типа данных - они называются Float(число) , String(строка, проще говоря Текст ) , Object (игровой обьект) , Group ( группа данных типа Object ) . Теперь поподробнее о каждом типе .Float - это просто число , что еще можно сказать :) пример : 5 , 100 , 12.4 . String - строка или проще говоря текст это текст любого вида, обратите внимание что данные типа строка всегда заключаются в кавычки . Object - объект , это любой игровой объект - персонаж , дерево , сундук , враг и тд. . Group - это группа объектов типа Object то есть это Ваша команда или группа монстров .


Итак! Первая миссия!!!


Для начала мы сделаем моб файл. Идем в папку Maps берем моб файл который называется z3q2.mob и копируем его и называем z3q6.mob , открываем его с помощью Mob Reversing Tool, смотрим перед нами выпадающий список открываем его нажимая на + еще раз открываем + теперь перед нами списочек в нем выбираем ID_SS_TEXT этот пункт содержит скрипт квеста сейчас у нас там скрипт миссии "жаба-людоед" , мы собираемся переделать эту миссию в миссию "Бешеная свинья", пока нечего неизменяем ! Закрываем Mob Reversing Tool . И начнем работать с текстами . Открываем Resbuild выбираем в первой строке нажатием на "..." файл z3q2.mq из папки Maps и распаковываем его ( создайте себе специально для этого папку ) в свою папку , заходим в свою папку , смотрим у нас там находится четыре файла и одна папка ( briefing z3q2_1 , briefing z3q2_2 , briefing z3q2_3 , quest z3q2 и папка z3q2 в папке z3q2 находится еще 2 файла map.txt и quest.reg ) видим в названиях используется номер зоны и номер квеста на зоне ( я это уже объяснял ) меняем их на свои то есть z3q2 меняем на z3q6 и название папки тоже меняем на z3q6 .Теперь нам надо поменять тексты миссии - это делается так : в файле briefing z3q2_1 находится текст взятия миссии , в файле briefing z3q2_2 находится текст отказа от миссии , в файле briefing z3q2_3 находится текст выполненой миссии а в файле quest z3q2 находится текст подзаданий . Для того чтобы поменять текст нужно открыть файл ( с помощью блокнота ) и поменять текст смотрите меняйте только текст ! Служебные команды начинающиеся с #НЕ ТРОГАЙТЕ! Теперь разберемся что там в папке z3q2 :) там два файла map.txt и quest.reg теперь нам надо их исправить в файле map.txt правим только вот эту строку #zone z3q2 gipat game на #zone z3q6 gipat game и вообще запомните надо изменять визде где встретите номер старого квеста на номер своего ! далее надо исправить quest.reg но его просто так неотредактируеш :( надо программку скачать из раздела моего сайта "СКАЧАТЬ" называется REGxINI , эта програмка переделает наш quest.reg в quest.ini который можно редактировать блокнотом . Распаковываем программку и нажимаем правой кнопкой на quest.reg выбираем открыть с помощью выезжает окно выбора программы для открытия , выбираем кнопочку в низу окна "Обзор..." и выбираем программку REGxINI теперь у нас в папке появился наш quest.ini открываем его и изменяем все z3q2 на z3q6 а также можно изменить “exp=” “money=” “give items=” они определяют сколько денег опыта и какие предметы нам дадут после выполенния квеста ( exp= money= give items= кторые в низу документа ) . Все исправили ? теперь надо обратно quest.ini переделать в quest.reg берем и качаем из раздела моего сайта "СКАЧАТЬ" программку INIxREG и проделываем теже действия для превращения quest.ini в quest.reg но с программкой INIxREG . Теперь удаляем quest.ini ибо больше не нужен :) . Открываем ResBuild открываем несуществующий файл .mq ,это надо для того чтобы ResBuild сделала новый. Делается это так в строке выбора файла пишем "C:/z3q6.mq " теперь выбираем папку в которой у нас лежат все 4 файла и папка z3q6 , потом меняем в строке маска файла *_* на * ,выбираем запаковать и запаковываем , у нас на диске C:/ создался файл z3q6.mq, все .mq мы создали ! теперь дела за малым сделаем скрипт. Открывам наш z3q6.mob с помощью Mob Reversing Tool находим там наш скрипт , итак мы хоти сделать так чтобы вместо жабы людоеда надо было убить кабана который возле входа стоит . Начнем-с . для начала разберем скрипт, как он работает :


GlobalVars ( // задаем глобальные переменные ( нас неволнует )

NULL : object,

VSS#i#val : object,

i : object

)


DeclareScript KillCaban ( this : object ) // обьявляем функцию KillCaban

Script KillCaban // начинаем описывать функию KillCaban

(

if // ЕСЛИ

( // если условия нет значит оно значит оно всегда правдиво

)

then // ТО

(

KillScript( ) // неважно для нас просто всегда пишите его и все :)

QStart( "z3q6" ) // Тут стартуем наш квест

QObjSeeUnit( "GetObject(1000324)" ) // это подзадание "Увидеть юнита" в нашем случае подзадание увидеть кабана

QObjKillUnit( "GetObject(1000324)" ) // Это подзадание "убить юнит" в нашем случае убить кабана .

QFinish( ) // Завершить квест

)

)


WorldScript

// основная функция

(

Sleep( 2 ) // просто пишем незадумываемся :)

KillCaban( NULL ) // это мы вызываем нашу функцию

)

Я ЗЫБАЛ СКАЗАТЬ ЧТО КАЖДЫЙ РАЗ ПОСЛЕ СОВЕРШЕНИЯ КАКОГО ЛИБО ДЕЙСТВИЯ НАДО НАЖИМАТЬ НА КНОПУ "APPLY CHANGE" ИНАЧЕ НИЧЕГО НЕ СОХРАНИТСЯ , ИЗМЕНИЛИ НАЗВАНИЕ ТЕКСТУРЫ БУДЬТЕ ДОБРЫ НАЖМИТЕ , ИЗМЕНИЛИ СКРИПТ ТОЖЕ НАЖМИТЕ !

Теперь почти все . Откроем Mob Reversing Tools( нажмем на + ) в пункте ID_OBJECTSECTION . Тут у нас появится много пунктов типа UNIT нам надо изменить жабу на кабана и поменять ее местоположение , выберем UNIT шестой с низу эта и есть наша жаба нажмем на + чтобы открыть ее свойства , тут выехал большей список но непугайтесь мы будем менять очень мало ! Выберем ID_UNIT_PROTOTYPE тут надо вписать прототип юнита из базы . Поменяем LMP Unique Toad Cannibal 5 на PigF0 теперь выберем ID_OBJTEMPLATE тут записан тип анимации поменяем unmoto на unanhopi , все это можно найти в базе . теперь выберем ID_OBJPRIMTXTR тут записано основная текстура поменяем на Pig00 , повторю что все это можно найти в базе :) . Теперь выберем ID_OBJSECTXTR и сотрем там все , тут пишется второстепенная текстура . Теперь сохраняем mob файл нажатием на SAVE и выходим если высе сделали правильно то у Ривара будет еще одна миссия называться будет как вы ее назвали


Чтобы объект подсвечивался на карте (объект который нужен миссии ) измените название миссии в закладке объекта ID_QBJ_QUEST_INFO , в нашем случае следует записать туда z3q6.

Галерея
Скриншот 134: Описания пока нет

Перейти в Галерею
Это интересно...

"Проклятые Земли", как и в свое время "Аллоды", стали прорывной игрой для российского рынка. Это была первая 3D-игра компании "Nival Interactive", по уровню графики, видеороликов и обилию возможностей для игрока не уступавшая мировым флагманам. Почти одновременно с "Проклятыми Землями" вышли "Diablo 2", "Baldur's Gate 2: Shadows of Amn", "Icewind Dale".

Статистика
Картинок: 400+
Статей: 140+
Игр серии: 6
Ссылок: 26
Файлов: 85+
Orphus с нами
Система Orphus
  MorgenS, 2007-2018
Census web-site engine 2.1 ©
Полный список авторов сайта