Вопросы по созданию миссий

Форум Модификации для игр серии Ex Machina Вопросы по пакету SDK
Сообщений: 35 • Страница 2 из 2 12
Аватара

kto писал(а):

Тут тебе прийдёться трудиться самому, подробных мануалов нет.


+1, мы с ktoже расковыряли сами как-то, хоть и вместе, вот и ты пробуй всковырнуть) Глядишь через полгодика ещё один квестер появиться)


Сайт моего друга:

Аватара
Да уж FenikS...Это "расковырять" не так-то просто сделать,поверь мне.
Аватара
Как я понял мало кто знает как делать квесты?(Почти риторический=) )
Ну если таковые все таки имеются было бы не плохо что бы они научили общественность, Я например карты могу а в квестах ваще не знаю как и че и хотел бы разобраться=) Может кто нито поднапряжеться над мануальчиками?=)
Аватара
Rock, я квесты на средне-низком уровне знаю (2-3 сложных квеста сделать могу)
Но уроков по ним точно не будет.


Сайт моего друга:

Аватара
Жаль...еще кто нито знает?
Аватара
[list]Кратко о заданиях (они же квесты, они же миссии)[/list:u]

В игре задания включают в себя три большие группы:
[list][*]формальное описания заданий;[/*:m]
[*]диалоги между персонажами и игроком;[/*:m]
[*]сценарии реакций на игровые события, описываемые с помощью триггеров.[/*:m][/list:u]В качестве вспомогательных средств, повышающих качество заданий, используются видеоролики.
Все они хранятся в xml-файлах.

Формальные описания:
[list][*]data\gamedata\quests.xml - основные параметры заданий;[/*:m]
[*]data\if\diz\questinfoglobal.xml - дополнительные параметры как одиночных, так и динамических заданий.[/*:m][/list:u]Для их написания и редактирования используется программа ConversationEditor.exe из пакета SDK.

Диалоги:
[list][*]data\if\diz\dynamicdialogsglobal.xml - диалоги, используемые при получении динамических заданий;[/*:m]
[*]data\if\diz\dialogsglobal.xml - остальные диалоги.[/*:m][/list:u]Для их написания и редактирования используется программа ConversationEditor.exe из пакета SDK.

Триггеры:
[list][*]data\maps\<Имя_карты>\triggers.xml - основные триггеры;[/*:m]
[*]data\maps\<Имя_карты>\cinematriggers.xml - триггеры для проигрывания роликов.[/*:m][/list:u]
Для их редактирования хорошо использовать программу SciTE.exe из пакета SDK.

Поведение триггеров аналогично поведению пистолетного курка (в переводе с английского trigger - это курок).
Как и курок, игровой триггер может быть в двух состояниях - активном (взведённом) и неактивном (невзведённом).

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

В неактивном состоянии триггер игнорирует события, указанные в его описании.

[hr][/hr]
[list]Общие замечания[/list:u]

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

Игровое задание начинается с момента получения и заканчивается его выполнением или провалом.

Задания могут быть разной степени сложности от простых «сходи-принеси» до многоуровневых заданий,
состоящих из связанных друг с другом более простых заданий.

[hr][/hr]
Вообще, среднее руководство по заданиям может занять страниц пятнадцать в "офисе". И это без учёта описания функций для триггеров (страниц 50-70).
:D
Аватара
-> Семимахов: спасибо за краткое описание
оно пойдет на пользу

Аватара
Плиз помогите я скачал SDK пакет прочитал инструкцию но не могу понять как делать квесты плиз кому не сложно помогите!!!
Аватара
Семимахов мне иногда кажется что вы разработчик из Таргем :good:
kto буду ковырять твои квесты, отпишусь о результатах.

Жизнь одна, и не даётся дважды
Аватара
deus, что разработчик, это я сомневаюсь, человек, судя по всему, очень долго ковырял игру и во всем разобрался. А вообще, не стоит смотреть на квесты, созданные другими пользователями, они состоят из кусочков прочих квестов, поэтому лучше глядеть на уже существующие и разбираться по ходу, там ничего сложного нет. Если будет время и возможность, то напишу краткий мануал по созданию самого простого квеста.
Аватара
Вот и я сюда добрался. :)

Значит так. Делаю задание. Игроку надо просто отогнать машину из одного города в другой, через три локации.
С точками разобрался, машину доставить можно:
Спойлер


Далее проблема. На добавленной карте, при появлении на ней, вокруг машины место на карте не "очищается".
(на втором скрине видно)
Кто знает как это решить?

Ну а теперь, что требуется.
1. Как выдать другую машину игроку. Хочу "заставить" игрока гнать именно определённую машину (например Урал).
2. Как, после диалога, открыть закрытый въезд на следующую локацию (сейчас они открыты через PassageActive="1")

Вот то, что у меня сейчас.
data\if\diz\dialogsglobal.xml
Спойлер
Код: Ctrl+A, Ctrl+C
      <!--Root/r1m1/Сюжетные/bat13-->

<Reply
name="bat13_01"
text="Здорово мужик! Ты кто, откуда?"
role="NPC"
scriptCondition="GetCurNpc():GetSpokenCount() == 0"
nextReplies="bat13_02" />

<Reply
name="bat13_02"
text="Меня зовут ????, я сын Петра из Глухого!"
role="PLAYER"
nextReplies="bat13_03" />

<Reply
name="bat13_03"
text="А, теперь понял откуда мне твоё лицо знакомо. Я хорошо знал твоего отца. Если ты такой же как и Айвен, то есть Пётр, то у меня есть для тебя работа. Нужно отогнать тачку на Техницию. Возьмёшся?"
role="NPC"
nextReplies="bat13_04 bat13_05" />

<Reply
name="bat13_04"
text="Извини, но я сейчас немного занят."
role="PLAYER"
scriptResult=" EndConversation()" />

<Reply
name="bat13_05"
text="Да, конечно."
role="PLAYER"
nextReplies="bat13_06" />

<Reply
name="bat13_06"
text="Ну и отлично, тачка во дворе. Твоя останется здесь. Так как ты сын моего старого друга Айвена... извини, Петра, то, так и быть, выделю тебе авансом пять сотен на дорожку. Счастливого пути и удачи."
role="NPC"
nextReplies="bat13_06 bat13_07" />

<Reply
name="bat13_07"
text="Уже выезжаю."
role="PLAYER"
scriptResult="GetCurNpc():SetSpokenCount( 1 ); TakeQuest('Bat1301_Quest'); AddPlayerMoney( 500 ); EndConversation()" />
data\if\diz\questinfoglobal.xml
Спойлер
Код: Ctrl+A, Ctrl+C
       <QuestInfo
questName="Bat1301_Quest"
briefDiz="Отогнать машину на Техницию."
fullDiz="Бэт Тринадцатый попросил отогнать машину на Техницию. По прибытии заплатят 10 штук."
isMainQuest="0">
<Map
name="r1m1"
targetObjName="ToR1M2" />
<Map
name="r1m2"
targetObjName="ToR1M5" />

<Map
name="r1m5"
targetObjName="minintown" />
</QuestInfo>
data\gamedata\quests.xml
Спойлер
Код: Ctrl+A, Ctrl+C
      <!--Root/r1m1/Опциональные/Bat13_1-->
<quest
Name="Bat1301_Quest"
Automatic="0"
SubQuestsCondition="and"
CheckAll="0"
ConditionToGive="all complete"
OnComplete="AddPlayerMoney(10000)"
OnTake='ShowCircleOnMinimapByName("minintown")' />

data\maps\r1m1\dynamicscene.xml
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Flags="21"
Name="FromR1M2"
Belong="1100"
Prototype="genericLocation"
Pos="527.000 284.387 377.000"
Radius="10.000"
LookingTimeOut="10.000"
ExitLocation="ToR1M2" />

<Object
Flags="21"
Name="ToR1M2"
Belong="1100"
Prototype="genericLocation"
Pos="505.037 292.178 257.063"
Radius="100.000"
LookingTimeOut="100.000"
PassageAddress="r1m2 FromR1M1"
PassageActive="1" />

data\maps\r1m2\dynamicscene.xml
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Flags="21"
Name="ToR1M5"
Belong="1100"
Prototype="genericLocation"
Pos="6551.054 70.770 434.103"
Radius="50.000"
LookingTimeOut="100.000"
PassageAddress="r1m5 FromR1M2"
PassageActive="1" />

<Object
Flags="21"
Name="FromR1M5"
Belong="1100"
Prototype="genericLocation"
Pos="6513.266 69.089 487.323"
Radius="10.000"
LookingTimeOut="10.000"
ExitLocation="ToR1M5" />

data\maps\r1m5\dynamicscene.xml
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Flags="21"
Name="ToR1M2"
Belong="1100"
Prototype="genericLocation"
Pos="103.927 261.967 1375.683"
Radius="50.000"
LookingTimeOut="100.000"
PassageAddress="r1m2 FromR1M5"
PassageActive="1" />

<Object
Flags="21"
Name="FromR1M2"
Belong="1100"
Prototype="genericLocation"
Pos="168.278 261.967 1379.675"
Radius="10.000"
LookingTimeOut="10.000"
ExitLocation="ToR1M2" />



Подскажите, где, и как, и скаким бубном надо плясать :D , чтоб (при PassageActive="0") карты ("переезды") открывались, и как выдать игроку другую машину.

Третий Закон: Любая достаточно развитая технология неотличима от магии. (Кларк)
Аватара

"bat13" писал(а):

Далее проблема. На добавленной карте, при появлении на ней, вокруг машины место на карте не "очищается".
Кто знает как это решить?


Есть два случая:

1. Неверно указана ориентация карты в data/if/diz/levelinfo.xml.
Параметр "north" внутри тега <LevelInfo /> должен быть, как у всех прочих карт:
Код: Ctrl+A, Ctrl+C
      north="0 0 1"

2. Если глянуть dds-файл, то XnView выдаёт такую о нём информацию, как "Местположение". Правильно - "Верх-Слева".

"bat13" писал(а):

1. Как выдать другую машину игроку. Хочу "заставить" игрока гнать именно определённую машину (например Урал).


Самое простое - создать свой прототип(модель) в data/gamedata/gameobjects/vehicles.xml и накидать в него какое надо оружие и товары. Эту модель и выдавать.

В data/scripts/debug.lua есть функция AddPlayerVehicle(). Меняет машину игроку на указанную модель. Можно попробовать её использовать. Правда, выдаёт она машину в точке расположения камеры.

А вообще, алгоритм такой:
1. Создаётся команда, в которую передаётся машина у игрока.
Без проверки корректности создания команды: CreateTeam("TempTeam", "1100"):AddChild(GetPlayerVehicle()).
Если машина больше не нужна, то команда ликвидируется.

2. Создаётся команда с одной нужной машиной. Функция CreateVehicle() в data/scripts/server.lua.

3. Эта машина отдаётся игроку. Команда g_Player:AddChild(<созданная машина>).
Если кратенько, без проверки была ли создана машина, то команда такая:
g_Player:AddChild( CreateVehicle(<имя прототипа в кавычках>):GetVehicle(0) ).
К примеру, для "Урала":
Код: Ctrl+A, Ctrl+C
      g_Player:AddChild( CreateVehicle("Ural01"):GetVehicle(0) )

Команда, у которой забирается машина, ликвидируется автоматически. Для информации можно посмотреть в AddPlayerVehicle().

"bat13" писал(а):

2. Как, после диалога, открыть закрытый въезд на следующую локацию (сейчас они открыты через PassageActive="1")


С помощью метода SetProperty().
Локация может быть в двух состояниях: активном и неактивном. Переход будет только в случае активной локации. Поэтому если изначально сделать локацию неактивной (значение "0"), то после диалога её можно активировать.
К примеру, активация локации ToR1M5:
Код: Ctrl+A, Ctrl+C
      GetEntityByName("ToR1M5"):SetProperty("Active",1)

Дополнение от 02.06:
Можно обойтись без изменения активности локации, а менять только параметр PassageActive:
Код: Ctrl+A, Ctrl+C
      GetEntityByName("ToR1M5"):SetProperty("PassageActive",1)
Аватара
Ребят, я в миссиях не бум бум, но хочется разобраться, например каким образом при исследовании знаков в восточном игрок подписывается на то что бы отвести их в мидрагд?

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

__________!///_ _____
_________( @@ )_____
_______ooO-(_)-o o____
Пришёл, увидел, забанил. Ещё вопросы?


Если у Вас нет бана - это не Ваша заслуга - это наше упущение.
Уровень профиля от John
Аватара
Получается именно триггер подписывает принуждённо после выпонения миссии "осмотреть поле" на миссию "рассказать об этом в мидрагде" так да? А триггер находится в папке maps/r1m2 да?

Добавлено:
А где указывается содержание кузова например у двух клопов которые в начале после сценки с первым клопом нападают?

Будь весел)), всех ждёт один конец)), но как он придёт решай сам)
Сообщений: 35 • Страница 2 из 2 12