Разработка квестов

Форум Модификации для игр серии Ex Machina Вопросы по пакету SDK
Сообщений: 37 • Страница 2 из 2 12
Аватара
Забавный баг. Проявляется только по отношению к оружию, которое было установлено, а потом снято в инвентарь. Пушка остаётся на месте, где была установлена на машине и просто висит, никак не мешая, сквозь неё спокойно можно проехать. Исчезает при сохранении-загрузке или переходе на другую карту. Можно удалить по ID, подсмотрев его в сохранке, когда пушка была установлена в слоте.
Аватара
И да, еще такое дело. Создал персонажа, посадил в бар. Все ок. НО теперь хочу что бы этот персонаж не в баре был а в своей собственной локации. То есть просто въезжаю в нужную локацию и появляется диалог. Локацию создал. Теперь надо его туда вписать через триггер. Смотрел как сделаны такие персонажи , например ботаник в Крае, там триггер активирует квест , но нет ни слова об открытии диалогового окна. А так как мой нпс не квестовый и разговор с ним никаких задач новых не ставит,я не знаю какой скрипт нужен что бы он реагировал на въезд в локацию.
Аватара
Столкнулся с очередной проблемой. Пытаюсь создать квест. Где то допускаю ошибку , так как не все работает.
И так сам квест. В неком баре сидит дядя и просит привезти ему табак( табак здесь не как товар , а как квестовый предмет).
Персонаж сидит в баре с несколькими репликами. Первая что выдает квест имеет такие скрипты.
Спойлер

TActivate('TABAKCREATE') - триггер что создает табак в нужном месте на карте
TakeQuest("r1m1_find_tabak") - сам квест
GetCurNpc():SetSpokenCount( 1 );
EndConversation()


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

Квестовый предмет не появляется в нужном месте. Уж не знаю это результат кривого триггера, или я неправильно создал сам пердмет.

Триггер создающий предмет выглядит так
Спойлер

<trigger Name="TABAKCREATE" active="0">
<event timeout="0" eventid="GE_TIME_PERIOD" />
<script>
CreateNewDummyObject( "tabak_quest_item", "tabak_quest_item", -1, -1, CVector(2454.126 320.620 1987.958), Quaternion(0.0000, 0.0000, 0.0000, 1.0000), 0)
trigger:Deactivate()
</script>
</trigger>


Сам квестовый предмет
Спойлер

Файл model_names.xml - <Item id="tabak_quest_item" locForm="0" value="Табак"/>
Файл modelicons.xml - <Item id="tabak_quest_item" file="data\if\ico\InventoryDlg\goods\tobacco.dds" file1="data\if\ico\InventoryDlg\goods\tobacco.dds"/>
Файл Servers.xml - <Item
id="tabak_quest_item"
file="data\models\AnimModels.xml"/> (здесь примечание, эту запись нужно добавить в servers всех карт или достаточно нужой мне области?)
Файл questitems.xml - <Prototype
Class = "QuestItem"
Name = "tabak_quest_item"
ModelFile = "tobacco"
ResourceType = "TABAK_QUEST" />
Файл resoursetypes.xml - <Type Name="TABAK_QUEST" />
Файл animomodels.xml - <model
id="tabak_quest_item"
shadow="0"
shadowVolume="0"
windwavy="0"
file="data\models\Goods\tobacco.gam" />
Вроде ничего не забыл , не считая файлов где описание предмета в игре . Краткое и полное , пока не делал. это вроде не критично. просто без описания будет .


Вот сам триггер на поднятие предмета
Спойлер

<trigger Name="TABAK" active="1">
<event eventid="GE_OBJECT_ENTERS_LOCATION" ObjName="Tabak_Loc" />
<script>
AddFadingMsgByStrIdFormatted( "fm_player_add_thing", "tabak_quest_item ")

local rtr = GetEntityByName ("tabak_quest_item ")
if rtr then rtr:Remove() end

CompleteQuestIfTaken( 'r1m1_find_tabak' )

AddQuestItem("tabak_quest_item")
TakeQuest('r1m1_give_tabak')
trigger:Deactivate()
</script>
</trigger>


Сначала грешил на локацию, думал что она не создается , так как создавал ее через файлы, а не в редакторе . Но на второй копии игры с СДК проделал тоже самое с созданием локации, и проверил появилась ли она , найдя ее на карте в СДК. Все появилось , значит локация создается, и Проблема в чем то другом.
Дальше идет квест на возвращение с табаком , но до него еще не дошел, из-за проблем с первой частью. Поэтому не знаю ждут ли меня там подводные камни или нет.
И кстати метка на карте не появляется, в нужном месте. Функция showcircleonminimap.... не срабатвает.

Может правда что то забыл ? Надеюсь на помощь.
Аватара
Ботаник привязан к локации "BotanicHouse" и диалог с ним запускается если игрок входит в локацию и при этом выполняются условия для показа реплик Botanik_hellodlg0 и Botanik_hellodlg1. Belong должен быть как у игрока 1100. Всё это задаётся в файле dynamicscene.xml:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Flags="21"
Name="BotanicHouse"
...
<Object
Name="Botanik"
...
SpokenCount="0" />
</Object>
Надо просто персонажа из бара пересадить в свою локацию.

Добавлять в animomodels.xml модель "tabak_quest_item" - лишнее, так как для tobacco.gam уже есть модель "tobacco". Поэтому добавлять в animomodels.xml и Servers.xml ничего не нужно, разве что собираешься добавить свой gam-файл.
В CVector координаты разделяются запятыми. Поэтому:
Спойлер
Код: Ctrl+A, Ctrl+C
      CreateNewDummyObject( "tobacco", "tabak_quest_item", -1, -1, CVector(2454.126, 320.620, 1987.958), Quaternion(0.0000, 0.0000, 0.0000, 1.0000), 0)

В триггере TABAK вместо rtr:Remove() лучше использовать RemoveObject(rtr), так как удаление более корректное.
Аватара
Да , предмет не спавнился из-за запятых которые я не поставил.

Но все равно не все гладко. В обоих квестах что пока сделал не появляется метка , показывающая куда ехать , хотя функция выставлена в обоих случаях.
Код: Ctrl+A, Ctrl+C
      
ShowCircleOnMinimapByName("...")


А с квестом на табак при подъезде к предмету триггер не срабатывает. Хотя вроде в нем ошибок не заметил
Спойлер

<trigger Name="TABAK" active="1">
<event eventid="GE_OBJECT_ENTERS_LOCATION" ObjName="Tabak_Loc" />
<script>
AddFadingMsgByStrIdFormatted( "fm_player_add_thing", "tabak_quest_item")

local rtr = GetEntityByName ("tabak_quest_item")
if rtr then RemoveObject(rtr) end

CompleteQuestIfTaken( 'r1m1_find_tabak' )

AddQuestItem("tabak_quest_item")
TakeQuest('r1m1_give_tabak')
trigger:Deactivate()
</script>
</trigger>

Были сомнения насчет кавычек и апострофов , но попробовал и с одними и с другими. Ничего не изменилось.


И да , насчет персонажа что в своей локации сидит ,по прежнему при въезде в локацию , персонаж не откликается , диалоги прописаны, белонг 1100 .

Спойлер

<Object
Flags="21"
Name="Krafter_location"
Belong="1100"
Prototype="genericLocation"
Pos="950.8252 72.000 4172.267"
Radius="15.000"
LookingTimeOut="20.000" />
<Object
Name="Krafter_Ridzin"
Belong="1100"
Prototype="NPC"
ModelName="r1_man"
skin="2"
cfg="78"
helloReplyNames="Dlg_krafter"
SpokenCount="0" />


И вообще с этими квестами проблем столько , сделать бы один без ошибок , остальные как по маслу пойдут. Но нет, подводные камни))
Аватара
Отметка карты ставится вручную в questinfoglobal.

Уровень профиля
Аватара
Я вообще не понимаю логику этой игры.
Полез ставить отметки "вручную", там само собой все понятно. Поставил. Проверяю. Нет отметок. Смотрю снова что может быть не так.Сравниваю записи моих квестов и оригинальных . Нахожу расхождение. Почему то Редактор квестов в questinfo нет отделяет одну запись от другой.

Вот как записан оригинальный квест.
Код: Ctrl+A, Ctrl+C
      
<QuestInfo
questName="r1m1_Hospital_Quest"
briefDiz="Обыскать заброшенную больницу"
fullDiz="Мне рассказали, что неподалеку есть заброшенная больница. Думаю, там можно найти что-нибудь интересное."
isMainQuest="0">
<Map
name="r1m1"
targetObjName="Hospital_Loc" />
</QuestInfo>

А вот так записаны квесты которые я делал через СДК
Код: Ctrl+A, Ctrl+C
      
<QuestInfo
questName="r1m1_find_tabak"
briefDiz="Найти табак для Бруто"
fullDiz="Бруто сказал искать в районе заброшеной больницы."
isMainQuest="0" />
<Map
name="r1m1"
targetObjName="Hospital_Loc" />


Отсюда видно что СДК не "закрывает" новые квесты с помощью "</Questinfo>"

Закрыл вручную. Думаете помогло? Ага,размечтался, называется. При проверке заметил что исчезли из игры вообще все отметки, будь то побочные квесты, будь то оригинальный сюжет. Исчез список заданий. Нет, их по прежнему можно выполнять, поговорить с Серго например. Выйдя из города на экране отобразиться что задание выполнено, что получен новый квест, но ничего во вкладке заданий , и никаких обозначений)
У меня уже мозг кипит от этого всего)
Аватара
Все, нащел проблему . Опять таки в синтаксисе.
Оффтоп:

На форуме уже не появится функции редактирования сообщений?
Аватара
Как понимаю, кроме срабатывания триггера всё работает как надо. Триггер TABAK активен с самого начала и если заехать в локацию до того, как появится предмет, то триггер деактивируется и больше не сработает.
Поэтому надо либо активировать его после получения задания, либо помещать квестовый предмет в нужное место в начале игры, как это сделано с "medicine_box".
Аватара
Да , все решил кроме этого триггера. Пока отказался от этой идеи . Но в будущем вернусь к нему. Делал как ты сказал, на примере medcine_box , создавал табак в начале игры. Но тогда триггеры вообще ломались , и игра шла без сюжета, без радара, в общем весь фаил с триггерами переставал работать. С другими функциями все нормально. Научился спавнить авто, команды авто , заставлять их двигаться куда нужно. В общем за помощь спасибо) Еще не раз сюда напишу с распросами, но пока вроде мне ясно)
Аватара
Ах да , совсем забыл. Можно ли как то сделать что бы с противников падали только товары? То есть убрать все оружие из дропа.
Аватара
В data\gamedata\globalproperties.xml есть параметр ProbabilityToDropGunsFromDeadVehicles - вероятность выпадения оружия из подбитых машин. Попробуй поставить ноль.
Аватара
Семимахов,

Цитата:

поскольку желающие предложить свой квест отсутствуют, начнём с малого и для начала оживим разбойника Жельванто из Рощи друидов.


Этот персонаж у меня вообще не появляется. Всё сделал точно по инструкции.
FlyApple,

Цитата:

Научился спавнить авто, команды авто , заставлять их двигаться куда нужно.


Как? Можете пожалуйста написать туториал, как это можно сделать?
Аватара
С Жельванто всё получилось.
Аватара
Как делать караваны я разобрался, не без посторонней помощи. Если кому интересно - расскажу как, я не жадный. Будет время - напишу туториал.
Аватара
Ы где туториал?))

Моя база знаний по МОДДИНГУ и СТРУКТУРЕ движка Ex Machine Meridian113.
База знаний, на шару, качать всем
Спасибо ScorpyX, Myx, Wooffallo, Kto и другим, кто помогал мне тогда.
Аватара
Некогда писать. Там принцип такой же как у революционеров в Крае, ничего сложного. Просто найдите в triggers.xml соответствующие строчки и делайте также.
Сообщений: 37 • Страница 2 из 2 12