Вопрос к SnAIperkу и к знающим людям. Я пытался сделать новый квест на ингосе для своего варианта мульти в Пз из Зва. Так вот вся проблема стоит в том, что квест не отображается в диалоге, как ни мучайся. Поскажите пожалуйста, что делать?
Выкладываю квест и базу
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Уже эта строчка должна вызывать подозрения Ну, для Ингоса
Счас может ещё гляну...
У тебя там какая зона-то вообще? Ты часом не под ЗвА делал этот мод?
Мап.txt было написано большими буквами, ну да ладно, это всё ещё ничего...
Ха! Ты где проверяешь этот квест? У тебя там везде квестодатель Геральдина, а на Ингосе в оригинале - Вальрас. Так что сам по себе квест выдаваться не будет, только скриптами.
А для новой ЗвАшной карты надо:
1) Перетащить ещё и текстуры зоны и базу вместе с нею
2) Перетащить на зону неписяя-квестодателя с особым NID, прога для генерации открыта всем
3) Выдать диалог скриптами %) Вот собстно и всё %)
Всё, спасибо, разобрался. Просто я напсал зону в стартере не на тот аллод. В результате всё работает!
Только вот вопрос: как установить вызов магазина? Ато у меня получилось, что чтобы добавить магазин, нужно например, для нового торговца скопировать ид например Карансула. А как сделать вызов этого же магазина по-другому, или как сделать доступным второй магазин(тот который в оригинале в сингле у знахарки)?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Включит диалог "Купить пропить закусить" для первого магазина. Торопитесь! Количество магазинов ограничено. Пять или шесть, кажется.
Включать/выключать в магазине отдел заклинаний или предметов тоже переменными: "i.onitemconstr", "i.offitemconstr", "i.onspellconstr", "i.offspellconstr", "i.noconstr".
28.09.2006, 17:23 (Сообщение последний раз редактировалось: 28.09.2006, 17:27 fa3.)
SnAIperk, я теперь понял. Вот только непонято, как у продавцов она в ид прописана. Просто при замене ид нового продавца на ингосе(старом суслангере) на брата кузнеца, идёт замена имени при наведении мышью. Как это можно реализовать без ид?
Да и ещё: на форуме нивала есть тема созданная AzK(мной же) про создание мульти из ЗвА в ПЗ. Если кто хочет помочь со сценариями квестов (или готовыми квестами) обращаться туда. Скоро выложу квест на доставку панцирника Риндейлу(фактически осталось только расставить существ на карте).
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Цитата:SnAIperk, я теперь понял. Вот только непонято, как у продавцов она в ид прописана. Просто при замене ид нового продавца на ингосе(старом суслангере) на брата кузнеца, идёт замена имени при наведении мышью. Как это можно реализовать без ид?
Эх-хе-хе... Ты смотрел по ссылке NID'gen? Вот лучше посмотри У каждого NPC есть свой 10-значный ID. В этот ID закодировано одно слово - его имя в ресурсах("PERS Somefacker"). Например, введи имя карансула в генератор - получишь его ID. А уж в файле-то ты можешь его как угодно прописать...
01.10.2006, 13:24 (Сообщение последний раз редактировалось: 01.10.2006, 13:26 fa3.)
SnAIperk, это я понял.
Вопрос следующий.
Может быть я чего-то не понял, но у меня не выходит назначить магазины спеллов и предметов на разных персонажей. То есть в одном продаются только спеллы, а в другом, кроме статистики ничего не остаётся.
Да и ещё: когда я пытался взять этот трюк из Весны, то игра при каждом запуске зоны стала вылетать. (имена персонажей на вызов магазина менял)
И последний вопрос: можно ли сделать, чтобы до мультиплеерных бриффинг зон (кроме первой), нужно было добираться по карте (ну типа тест на подготовку)?
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
fa3,Воскресенье, 01 Октября 2006, 11:24 Написал:Может быть я чего-то не понял, но у меня не выходит назначить магазины спеллов и предметов на разных персонажей. То есть в одном продаются только спеллы, а в другом, кроме статистики ничего не остаётся.
Да и ещё: когда я пытался взять этот трюк из Весны, то игра при каждом запуске зоны стала вылетать. (имена персонажей на вызов магазина менял)
И последний вопрос: можно ли сделать, чтобы до мультиплеерных бриффинг зон (кроме первой), нужно было добираться по карте (ну типа тест на подготовку)?
[right][snapback]38008[/snapback][/right]
Ах да, забыл сказать. Переменные действуют на все магазины. Рекомендую в пределах одной зоны разделённые шопы не делать...
С какой ошибкой вылетает?
Я думал об этом, и даже пытался чего-то наваять... В общем, нельзя из-за движка. Из-за мультиплеерной составляющей движка...
Да и ещё: как в квесте правильно задать так, чтобы подзадание выполнялось по захождению перса в зону. Конкретно надо, чтобы выполнялость подзадание выйти из города в городе суслангере?
Я пытался командой вызова квеста:
Хорошо, выкладываю. Правда моб ещё совсем сырой, т.е. у всех монстров стоит текстура default0 и так далее.
А вообще для создания нормального мультиплеера надо бы распакованную базу юнитов. Просто очень неудобно делать всё почти наугад. А в готовой базе неудобно то, что нельзя переназначить выдаваемую экспу за юнитов, таких как рядовые воины, маги и так далее.
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
На последнем остановлюсь подробнее. Я не слишком быстро говорю, "Камчатка" успевает записывать? Хорошо. Стоп, кто пустил самолётик? Слабак! Мои лучше летают :-) Это я-то лузер? Так, я убираю микрофон и говорю без него. Кому надо - услышат.
Для скрипта нужен правильный алгоритм. Сначала нарисуй алгоритм квеста в виде знаменитых ромбиков и квадратиков, а потом я опишу процесс создания полноценного скрипта. Если ты знаешь язык программирования - тем лучше.
Всем спасибо, все свободны. Перерыв 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()
Он выполняется как обычный оператор. Чтобы после действия перейти к следующему блоку, нужно в конце действия вызвать этот скрипт.
Так, ребята, пожалуйста разговаривайте потише. Тех, кому всё понятно, я не держу. Экзамен покажет всё лучше моей жестикуляции.
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: Так, с третьего ряда - да, я вам - заберите пожалуйста свою банку из-под Кака-Калы. Здесь уборку делают два раза в неделю - сами понимаете, аудитории лучше не загрязнять... Спасибо, и вас туда же. Ничего, увидимся ещё
Выйти из города суслангера
Дойти до разрушенного особняка к югу от казарм стражи
Положить деньги в сундук
Дойти до особняка, разрушенного магией
Забрать из него шкатулку с детёнышем панцирника
Добраться до зоны перехода(зона перехода у меня со стороны портала).
Если надо, то могу скинуть и mq файл, но все условия выполняются скриптовыми командами, а с сундуками и так, минуя все остальные подзадания. Я просто не могу правильно определить параметры территорий. При помощи комманды filter all 1 я получаю координаты точки, но даже при правильном выборе точек подзадание не хочет выполняться
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.
Составляешь алгоритм:
Начало: Если вышел, то [...]-> если дошёл куда надо, то...->...->если добрался, то выполнить подзадание и завершить квест.
MQ не надо. Координаты - вида [x1,y1,x2,y2] - где точки (X1,Y1) и (X2,Y2) координаты его двух противоположных углов. (Левый - нижний и верхний - правый) (юго-западный и северо-восточный угол). Обрати на это внимание
Попробуй реализовать квест без этих QStart...QObj*, а простыми движениями. Вот увидишь, так удобнее. Удачи!
З.Ы. Кажется зона за дальними горами - это зона главного меню. Я посмотрел квест на ней(который про людоеда) и определил, что это именно эта зона, т.к там даже река делает такую же петлю, как и на карте гипата
Мальчик за сливами в садик полез,
Сторож Евсей достает свой обрез.
Выстрел раздался и сторож упал,
Мальчика сзади отец прикрывал.