Здравствуйте уважаемые будущие или теперешнее МодМейкеры . Этот туториал был задуман мною для того чтобы вы , как я в свое время , недоставал вопросами знающих людей, хотя меня можете доставать я люблю когда меня спрашивают . Туториал рассчитан на людей которые хотят чего-то делать ,но не умеют . В общем для того чтобы читать туториал вам вообще не требуются никакие знания в области програмирования.
Итак для начала обьясню из чего состоит квест.
Файлы квестов
Для квеста требуется 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 ( // задаем глобальные переменные ( нас неволнует )
( // если условия нет значит оно значит оно всегда правдиво
)
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.
Добавлено (2011.07.29, 12:49) --------------------------------------------- редактор есть только для одиночной игры! Слишком большой баннер, удалил. Вступи в сообщество Steam
Огромные тексты всё же лучше прятать в спойлеры. Ну и авторов мануала указывать. Вместо MRT можно использовать MobSurgeon, он куда удобнее. Квесты естественно пишутся с помощью скриптов. Программы просто позволяют сохранять эти скрипты в нужном формате и облегчают работу.
Добавлено (2011.07.29, 20:27) --------------------------------------------- а да ещё!Я не могу никак найти плагин(апгрейд) с ЗвА где все прически и тд Кто знает где достать,пожалуйста киньте ссылочку!
а да ещё!Я не могу никак найти плагин(апгрейд) с ЗвА где все прически и тд Кто знает где достать,пожалуйста киньте ссылочку!
Оки.Я тебе могу выложить тут если надо редактор сценария? а вот с ЗвА не помогу.Я её не устанавливал.Не очень зрелещьная игра Слишком большой баннер, удалил. Вступи в сообщество Steam
Тьфу я имел ввиду другое не сценарий ,а квесты делать. Ну как я понял для квестов надо скачать либэ MobSurgeon либэ Mob Reversing Tool Спасибо пойду разбираться!)
Тьфу я имел ввиду другое не сценарий ,а квесты делать. Ну как я понял для квестов надо скачать либэ MobSurgeon либэ Mob Reversing Tool Спасибо пойду разбираться!)
Всегда готов помочь) Слишком большой баннер, удалил. Вступи в сообщество Steam
В обшем, история такая) поставил себе Проклятые Земли версии 1.6! Зашёл в онлайн! Там мне подсказали скачать HG mod 3.5 full. Значица, я нашёл ваш сайт. Скачал. Файлы влепил поверх старых. И собственно, такой эффект! Я подумал что что-то упустил. Тогда скачал Архив, файл "42_Jigran_Patch" так же заменил файлы папки с игрой на файлы из архива. Эффекта ни какова недало! И я забил тревогу! Может что то не так делаю?)
Мод установлен не правильно. Игра не может найти модель джигранской палатки. Следовательно мод 99% запихан в саму игру, а не в ПЗ(дополнения).(папка стартера) Тут надо переставлять игру. И ставить мод в положенную папку. Скрин перезалей на обменник, место на форуме не резиновое. Разделяй и Влесамаствуй.