Так сходу я ошибок не увидел. Единственное, лучше не пользоваться функциями быстрого задания квестов (QObjKillUnit, QObjSeeObject и т.д.), т.к. они глючат и не всегда делают то, что подразумевалось. Из этих функций можно использовать только QStart и QFinish, т.к. дракончик у меня вылетал только про использовании QFinish. Остально лучше переписать. - Папа, а правда, что от форумов тупеют? - ГыыЫ... сынок...ЛоЛ...
Declare script #StartQuest ( this : object ) Declare script #SubObj01 ( this : object ) Declare script #SubObj02 ( this : object ) Declare script #SubObj03 ( this : object ) Declare script #SubObj04 ( this : object )
Script #SubObj01 ( if ( Any( i , Heroes , GroupHas ( UnitSee ( i ) , GetObject( 1000309 ) ) )//Увидеть юнит ) then ( KillScript( ) GSSetVar( 0, "q.z23q2.z23q2.1", 2 )// завершаем первое подзадание успехом GSSetVar( 0, "q.z23qXX.z23q2.2", 1 )// стартуем второе подзадание #SubObj02 ( NULL ) ) ) Script #SubObj02 ( if ( IsEqual( GSGetVar( 0, "q.z23q2.z23q2.2" ) , 1 ) //Условия для выполнения второго подзадания (стартует только после выполнения первого подзадания) Any( i , Heroes , GroupHas ( UnitSee ( i ) , GetObject(1973972) ) ) //Увидеть объект //не уверен что сработает если объект (1973972) не юнит... //тут лучше делать проверку не на видимость а на расстояние от объекта //например так: //Any( i , Heroes, IsLess( DistanceUnitUnit( i , GetObject(1973972) ) , 7 ) ) //если расстояние от любого игрока до объекта <7 ) then ( KillScript( ) GSSetVar( 0, "q.z23q2.z23q2.2", 2 )// завершаем второе подзадание успехом GSSetVar( 0, "q.z23q2.z23q2.3", 1 )// стартуем третье подзадание #SubObj03 ( NULL ) ) )
Script #SubObj03 ( if ( IsEqual( GSGetVar( 0, "q.z23q2.z23q2.3" ) , 1 ) //Условия для выполнения третьего подзадания (стартует только после выполнения второго подзадания) Any( i , Heroes , GroupHas ( UnitSee ( i ) , GetObject(973972) ) ) //Увидеть объект //аналогично Not(IsAlive(GetObject (1000340))) //Убить охрану объекта ( id=973972) ) then ( Killscript( ) GSSetVar( 0, "q.z23q2.z23q2.3", 2 )// завершаем третье подзадание успехом GSSetVar( 0, "q.z23q2.z23q2.4", 1 )// стартуем четвертое подзадание #SubObj04 ( NULL ) ) )
Script #SubObj04 ( if ( IsEqual( GSGetVar( 0, "q.z23q2.z23q2.4" ) , 1 )//Условия для выполнения четвертого подзадания (стартует только после выполнения третьего подзадания) Not(IsAlive(GetObject (1973973))) //Убить его, ну и заодно забрать ключ. ) then ( KillScript( ) //QObjSeeObject( "GetObject(1973973)" ) //Увидеть объект (по квесту это ключник, у него ключ) //Если юнит убит то полюбому его кто то уже увидел, так что, проверка на "увидить" - лишняя GSSetVar( 0, "q.z23q2.z23q2.4", 2 )// завершаем четвертое подзадание успехом GSSetVar( 0, "q.z23q2.z23q2.5", 1 )// стартуем пятое подзадание #SubObj05 ( NULL ) ) )
Script #SubObj05 ( if ( IsEqual( GSGetVar( 0, "q.z23q2.z23q2.5" ) , 1 )// если выполнено 4-е задание стартуется 5-е Not(IsAlive(GetObject (1000309))) //Убить мага ) then ( KillScript( ) QFinish( ) //Финиш (Ибо как сделать дверь закрывающеюся ключом не придумал) ) )
Script #StartQuest ( if ( ) then ( KillScript( ) QStart( "z23q2" ) #SubObj01 ( NULL ) ) )
QFinish( ) //Финиш (Ибо как сделать дверь закрывающеюся ключом не придумал)
Quote
Для того, что бы сундук (да и нет только сундук, а любой рычаг) открывался с помощью ловкости рук необходимо:
Если редактируешь моб с помощью MOBSurgeon, то на вкладке "Объекты" в разделе "Рычаги" -> "Имя твоего сундука (рычага)" в параметре "AsOpen" установить значение "5". А в параметре "Sleight" величину значения ловкости рук, при равной или больше которой, сундук будет открыт. Сохраняешь моб.
Если редактируешь моб с помощью MOB Reversing Tool, то заходи в ID_OBJECTDBFILE -> ID_OBJECTSECTION -> ID_LEVER -> ID_LEVER_SCIENCE_STATS_NEW. В этом разделе через запятую будет 3 цифры. Первую ставишь 5, вторую не трогаешь, а в третью ставишь величину навыка ловкости рук необходимую для открытия. Нажимаешь Apply Changes и сохраняешь моб.
Кстати вот остальные значения параметра "AsOpen": 0 - сундук можно открыть только с помощью скриптовой команды SwitchLeverState. 1 - открывается без условий. 5 - если я не ошибаюсь можно открыть не только с помощью ловкости рук, но и ключом. 8 - можно открыть исключительно ключом, ID которого прописан в параметре "KEY".
Инфа с gipat.ru
- Папа, а правда, что от форумов тупеют? - ГыыЫ... сынок...ЛоЛ...
Врыл, Спасибо В общем ошибки я нашел. Что бы по квесту отвлечь кого-нибудь (допустим фейерверком), и подзадание "отвлечь" было выполнено необходимо создать зону idArea и если юнит окажется в этой зоне то задание считается выполненным. Или есть другие способы? Мануал по созданию материала
Простите за глупый вопрос, но как назвать Кира и Кель вместо переменной objunit, пробовал делать getobjectbyname("hero"), но результата нет (нужно для @giveint.agi.str.).
Помогите скачал визуальный редактор MapED v1.29.7z И проблема в том ,что она не запускается. Пишет ,что нету файла MFC71.DLL. После этого я скачал этот файл , перезапустил пк и все равно одно и тоже пишет, то что нету
Добавлено (2012.06.20, 13:39) --------------------------------------------- И ещё один вопрос . Достаточно глупый. Как в MobSurgeon удалить юнита или объект?
И ещё один вопрос . Достаточно глупый. Как в MobSurgeon удалить юнита или объект?
Вопрос не глупый, т.к. официально такой функции нет. Но, все же, удалять/добавлять объекты можно. Используй массовые изменения. Просто присвой тем объектам которые хочешь удалить новый ID например "ToDelete" и через массовые изменения удаляешь все объекты с таким ID.
Добавлять тоже там. - Папа, а правда, что от форумов тупеют? - ГыыЫ... сынок...ЛоЛ...
Спасибо! Просто я хотел для начала удалить все объекты с карты, чтобы новые прикрепить.
Что насчет MapED разобрался ,но тут сразу же другая проблема ,когда я нажимаю Open Mpr пишет ,что папка видимо не та указана ,хотя я изменил реестр.
Добавлено (2012.06.26, 18:11) --------------------------------------------- Пожалуйста, можете кинуть ссылку (или написать) ,как делать квесты. Буду благодарен!
Вот честно, задолбали такие люди, которые постоянно задают вопросы, на которые уже миллион раз отвечали. Что сложного в том, чтобы поискать ответ самому? Источников же полно. Я лично не разу не отвечал на подобные вопросы и не собираюсь. Страдайте.
Я создал новую текстуру для персонажа.Как создать нового персонажа с этой текстурой в меню выбора перса?
Добавлено (2012.07.08, 09:55) --------------------------------------------- емае !У меня такой проблемы никогда не было.На ноуте какае-то хрень .РАспаковал все папки database texture и тд ,но они типа скрытны.Невидно их короче.Хотя они есть!
Дата: Воскресенье, 2012.07.08, 11:53 | Сообщение # 655
Ранг 7
Группа: Заблокированные
Сообщений: 2043
Статус: Временно отсутствует
Soj, Жми свойства, на папку с файлами и убери флажок возле надписи скрытый. Если его нет, то поставь, "примени" (не ок), вылезет окно с надписью для всех или для папки, выбирай для всех (только свойства папки не закрывай), теперь сними флажок и примени ко всем файлам в этой папке. Люблю водить автомобиль, но при встрече с дебилами на дороге, все чаще хочется пересесть на танк.
Для квеста требуется 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.
Добавлено (2012.07.08, 14:13) --------------------------------------------- Взято с сайта http://www.allods.gipat.ru/
http://eijokes.narod.ru/tutorials/Noone/Scripts.htm Все скрипты ПЗ на свете:)
Дата: Воскресенье, 2012.07.08, 14:35 | Сообщение # 660
Ранг 7
Группа: Заблокированные
Сообщений: 2043
Статус: Временно отсутствует
Попробуй так - Свойства Програм-фал, Расширенная настройка..., Открыть общий доступ к этой папки, Разрешения, Все - Полный доступ. Если не получится, то проделай тоже самое к каждой папке с ресами.
Люблю водить автомобиль, но при встрече с дебилами на дороге, все чаще хочется пересесть на танк.