Новые квесты
#1
Вопрос к SnAIperkу и к знающим людям. Я пытался сделать новый квест на ингосе для своего варианта мульти в Пз из Зва. Так вот вся проблема стоит в том, что квест не отображается в диалоге, как ни мучайся. Поскажите пожалуйста, что делать?

Выкладываю квест и базу


Файлы вложений
.zip   Base.zip (Размер: 37.92 KB / Загрузок: 306)
.rar   Quest.rar (Размер: 329.58 KB / Загрузок: 346)
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#2
#zone z25q1 Suslanger game

Уже эта строчка должна вызывать подозрения Smile Ну, для Ингоса Smile
Счас может ещё гляну...

У тебя там какая зона-то вообще? Ты часом не под ЗвА делал этот мод?
Мап.txt было написано большими буквами, ну да ладно, это всё ещё ничего...


Ха! Ты где проверяешь этот квест? У тебя там везде квестодатель Геральдина, а на Ингосе в оригинале - Вальрас. Так что сам по себе квест выдаваться не будет, только скриптами. Wink

А для новой ЗвАшной карты надо:

1) Перетащить ещё и текстуры зоны и базу вместе с нею
2) Перетащить на зону неписяя-квестодателя с особым NID, прога для генерации открыта всем
3) Выдать диалог скриптами %) Вот собстно и всё %)


Файлы вложений Эскизы(ов)
   
Ответ
#3
Дело в том, что я добавляю игровые зоны из зва, то есть суслангер - новый город на ингосе. Стандартные квесты рабоетают, а новые не хотят.

Кстати, а какая программа?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#4
Всё, спасибо, разобрался. Просто я напсал зону в стартере не на тот аллод. В результате всё работает!


Только вот вопрос: как установить вызов магазина? Ато у меня получилось, что чтобы добавить магазин, нужно например, для нового торговца скопировать ид например Карансула. А как сделать вызов этого же магазина по-другому, или как сделать доступным второй магазин(тот который в оригинале в сингле у знахарки)?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#5
Внемли:

Код:
GsSetVar(0,"b.Human_Facker.constr_1",1)
Включит диалог "Купить пропить закусить" для первого магазина. Торопитесь! Количество магазинов ограничено. Пять или шесть, кажется.

Включать/выключать в магазине отдел заклинаний или предметов тоже переменными: "i.onitemconstr", "i.offitemconstr", "i.onspellconstr", "i.offspellconstr", "i.noconstr".


Kakaя-каkая... Которую Сагрер писал, она ещё где-то здесь на форуме валяется. Есть онлайн-версия: http://eijokes.narod.ru/xfiles/Replacer_Links.htm в разделе "сетевые утилиты".
Ответ
#6
SnAIperk, я теперь понял. Вот только непонято, как у продавцов она в ид прописана. Просто при замене ид нового продавца на ингосе(старом суслангере) на брата кузнеца, идёт замена имени при наведении мышью. Как это можно реализовать без ид?

Да и ещё: на форуме нивала есть тема созданная AzK(мной же) про создание мульти из ЗвА в ПЗ. Если кто хочет помочь со сценариями квестов (или готовыми квестами) обращаться туда. Скоро выложу квест на доставку панцирника Риндейлу(фактически осталось только расставить существ на карте).
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#7
Цитата:SnAIperk, я теперь понял. Вот только непонято, как у продавцов она в ид прописана. Просто при замене ид нового продавца на ингосе(старом суслангере) на брата кузнеца, идёт замена имени при наведении мышью. Как это можно реализовать без ид?
Эх-хе-хе... Ты смотрел по ссылке NID'gen? Вот лучше посмотри Wink У каждого NPC есть свой 10-значный ID. В этот ID закодировано одно слово - его имя в ресурсах("PERS Somefacker"). Например, введи имя карансула в генератор - получишь его ID. А уж в файле-то ты можешь его как угодно прописать...
Ответ
#8
При замене из нидгена просто пропадает табличка вызова магазина. Я уже пробовал.
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#9
Э... Честно говоря, долго всё объяснять... В общем и не надо Smile Просто советую вызывать магазины скриптами. Ну да ладно Smile
Ответ
#10
А собственно куда этот скрипт нужно добавлять? В моб? или в диалог?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#11
Начинается... Sad

Я серьёзно. Скрипты прописываются в мобах. Вот глянь в демке Весны, ИМХО по ней можно вполне прилично понять, как и для чего вообще служат скрипты... Wink

Ладно, хватит сотрясать воздух скорбными воплями(я про себя), пора объяснить нормально.

Открываешь моб, например диалоговой зоны. И пишешь какие надо скрипты там.
Ответ
#12
SnAIperk, это я понял.

Вопрос следующий.

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

Да и ещё: когда я пытался взять этот трюк из Весны, то игра при каждом запуске зоны стала вылетать. (имена персонажей на вызов магазина менял)

И последний вопрос: можно ли сделать, чтобы до мультиплеерных бриффинг зон (кроме первой), нужно было добираться по карте (ну типа тест на подготовку)?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#13
fa3,Воскресенье, 01 Октября 2006, 11:24 Написал:Может быть я чего-то не понял, но у меня не выходит назначить магазины спеллов и предметов на разных персонажей. То есть в одном продаются только спеллы, а в другом, кроме статистики ничего не остаётся.

Да и ещё: когда я пытался взять этот трюк из Весны, то игра при каждом запуске зоны стала вылетать. (имена персонажей на вызов магазина менял)

И последний вопрос: можно ли сделать, чтобы до мультиплеерных бриффинг зон (кроме первой), нужно было добираться по карте (ну типа тест на подготовку)?
[right][snapback]38008[/snapback][/right]
Ах да, забыл сказать. Переменные действуют на все магазины. Рекомендую в пределах одной зоны разделённые шопы не делать...

С какой ошибкой вылетает?

Я думал об этом, и даже пытался чего-то наваять... В общем, нельзя из-за движка. Из-за мультиплеерной составляющей движка...
Ответ
#14
Ничего не пишет, просто генерал гейм еррор.

Да и ещё: как в квесте правильно задать так, чтобы подзадание выполнялось по захождению перса в зону. Конкретно надо, чтобы выполнялость подзадание выйти из города в городе суслангере?
Я пытался командой вызова квеста:

Script VTriger#3#2
(
if
(
)
then
(
KillScript( )
AddRectToArea ( 1, 213 , 106 , 232 , 111)
AddRectToArea ( 2, 47 , 90 , 58 , 78)
AddRectToArea ( 3, 207 , 300 , 213 , 298)
AddRectToArea ( 4, 274, 75 , 281 , 66)
QStart( "z18q1" )
QObjArea(1)
QObjArea(2)
QObjUse( "GetObject(1000279)", 1 )
QObjArea(3)
QObjUse( "GetObject(1000287)", 1 )
QObjArea(4)
QFinish( )
)
)

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

И ещё: как сделать, чтобы до получения подзадания не работала подсветка на сундук. То есть до открытия первого второй не светится?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#15
1)Вообще, "квест в один скрипт" - это ИМХО неудобно. Я с этим знаком плохо. А так, пожалуйста, "QObjArea".

Вообще, надо юзать условие "Any(i,Heroes,IsInArea(1,GetX(i),GetY(i)))". И все вытекающие.

2)Ну давай моб, хотя не гарантирую что успею разобраться.
3)Пиши в подсветке имя переменной подзадания: например z3q5.2
Ответ
#16
Хорошо, выкладываю. Правда моб ещё совсем сырой, т.е. у всех монстров стоит текстура default0 и так далее.


А вообще для создания нормального мультиплеера надо бы распакованную базу юнитов. Просто очень неудобно делать всё почти наугад. А в готовой базе неудобно то, что нельзя переназначить выдаваемую экспу за юнитов, таких как рядовые воины, маги и так далее.


Файлы вложений
.rar   z18q1.rar (Размер: 6.52 KB / Загрузок: 286)
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#17
Да. Нич-чё не понял.

Сегодняшняя лекция будет посвящена квестосозданию.

Короче чтобы сделать новый квест, надо:

Ресурсы:
-databaselmp.res
-<map_name>.mpr
-<текстуры_для_mpr>
Квест:
-<брифинги>
-<map.txt и quest.reg>
Моб:
-Расстановка юнитов
-Правильный скрипт


На последнем остановлюсь подробнее. Я не слишком быстро говорю, "Камчатка" успевает записывать? Хорошо. Стоп, кто пустил самолётик? Слабак! Мои лучше летают :-) Это я-то лузер? Так, я убираю микрофон и говорю без него. Кому надо - услышат.


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


Всем спасибо, все свободны. Перерыв 5 минут.

-----------

Итак, перерыв окончен. Побыстрее, побыстрее рассаживаемся. Времени мало.

Чтобы "закодить квест" имея алгоритм, надо:
создать набор скриптов "условие-действие", каждый из который включает в себя N действий и 1 условие. То есть, приведу пример простейшего линейного квеста:

Квест "Жаба-людоед".
1. Найти жабу
2. Убить жабу
3. Облутать жабу
4. Выйти с зоны

(НАЧАЛО)->[Назначить AreaExit, Выдать квест и Выдать подзадание 1]-><Если игрок видит жабу>->[Выполнить подзадание 1 и выдать подзадание 2]-><Если жаба мертва>->[Выполнить подзадание 2 и выдать подзадание 3]-><Если жаба облутана>->[Выполнить подзадание 3 и выдать подзадание 4]-><Если игрок в зоне ExitArea>->[Выполнить подзадание 4 и выполнить квест]

Каждая пара <...>->[...] задаётся одним скриптом.

Код:
DeclareScript SName()

Script SName
(
 if
 (
   Uslovie
 )
 then
 (
   KillScript()
   Deistvie
 )
)

Для выполнения "пары" нужно вызвать скрипт так:
Код:
SName()
Он выполняется как обычный оператор. Чтобы после действия перейти к следующему блоку, нужно в конце действия вызвать этот скрипт.

Так, ребята, пожалуйста разговаривайте потише. Тех, кому всё понятно, я не держу. Экзамен покажет всё лучше моей жестикуляции.

Пример полностью рабочего скрипта:

Код:
GlobalVars
(
 NULL : object,
 i : object,
 Heroes : group,
 AreaExit : float
)

DeclareScript PreInit()
DeclareScript CheckSee()
DeclareScript CheckKill()
DeclareScript CheckLoot()
DeclareScript CheckExit()

Script PreInit
(
 if
 (
   //Пустое условие выполняется  всегда
 )
 then
 (
   KillScript()
   AddRectToArea(AreaExit,1,2,3,4)
   GsSetVarMax(0,"q.zone_name.quest_name",1)
   GsSetVarMax(0,"q.zone_name.quest_name.1",1)
   CheckSee()
 )
)

Script CheckSee
(
 if
 (
   //Хотя бы один из героев видит жабу
   Any(i,Heroes,GroupHas(UnitSee(i),GetObjectByName("EvilToad")))
 )
 then
 (
   KillScript()
   GsSetVarMax(0,"q.zone_name.quest_name.1",2)    
   GsSetVarMax(0,"q.zone_name.quest_name.2",1)
   CheckKill()
 )
)

Script CheckKill
(
 if
 (
   //Жаба мертва
   IsDead(GetObjectByName("EvilToad"))
 )
 then
 (
   KillScript()
   GsSetVarMax(0,"q.zone_name.quest_name.2",2)    
   GsSetVarMax(0,"q.zone_name.quest_name.3",1)
   CheckLoot()
 )
)

Script CheckLoot
(
 if
 (
   //Жаба подобрана/обворована. Ввиду предыдущего подзадания, она мертва => подобрана. Хотя теоретически, её можно "воскресить" разными способами, но об этом потом.
   WasLooted(GetObjectByName("EvilToad"))
 )
 then
 (
   KillScript()
   GsSetVarMax(0,"q.zone_name.quest_name.3",2)    
   GsSetVarMax(0,"q.zone_name.quest_name.4",1)
   CheckExit()
 )
)

Script CheckExit
(
 if
 (
   //Хотя бы один из героев находится в точке, принадлежащей зоне AreaExit
   Any(i,Heroes,IsInArea(AreaExit,GetX(i),GetY(i)))
 )
 then
 (
   KillScript()
   GsSetVarMax(0,"q.zone_name.quest_name.4",2)    
   GsSetVarMax(0,"q.zone_name.quest_name",2)
 )
)

WorldScript
(
 Sleep(5) //На всякий случай подождать 5/15 секунды перед след. строчкой
 PreInit()
)

Вот на этом примере можно увидеть и уловить идею правильного квестописания.

Ладно, на сегодня всё. Спасибо за внимание, встретимся на семинаре!

PS: Так, с третьего ряда - да, я вам - заберите пожалуйста свою банку из-под Кака-Калы. Здесь уборку делают два раза в неделю - сами понимаете, аудитории лучше не загрязнять... Спасибо, и вас туда же. Ничего, увидимся ещё Wink
Ответ
#18
Snaiperk, в моём квесте были задания:

Выйти из города суслангера
Дойти до разрушенного особняка к югу от казарм стражи
Положить деньги в сундук
Дойти до особняка, разрушенного магией
Забрать из него шкатулку с детёнышем панцирника
Добраться до зоны перехода(зона перехода у меня со стороны портала).

Если надо, то могу скинуть и mq файл, но все условия выполняются скриптовыми командами, а с сундуками и так, минуя все остальные подзадания. Я просто не могу правильно определить параметры территорий. При помощи комманды filter all 1 я получаю координаты точки, но даже при правильном выборе точек подзадание не хочет выполняться
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ
#19
Цитата:Ага, попался! (с)Борис Иванович Будак

Составляешь алгоритм:
Начало: Если вышел, то [...]-> если дошёл куда надо, то...->...->если добрался, то выполнить подзадание и завершить квест.

MQ не надо. Координаты - вида [x1,y1,x2,y2] - где точки (X1,Y1) и (X2,Y2) координаты его двух противоположных углов. (Левый - нижний и верхний - правый) (юго-западный и северо-восточный угол). Обрати на это внимание Wink

Попробуй реализовать квест без этих QStart...QObj*, а простыми движениями. Вот увидишь, так удобнее. Удачи!
Ответ
#20
Спасибо, у меня всё вышло.

З.Ы. Кажется зона за дальними горами - это зона главного меню. Я посмотрел квест на ней(который про людоеда) и определил, что это именно эта зона, т.к там даже река делает такую же петлю, как и на карте гипата
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 6 Гость(ей)