Перейти к контенту

[CS] Создание квеста


Pihan13

Рекомендуемые сообщения

(изменено)
ЧН: Квест "Найти и принести два предмета".

 

Сегодня постараюсь подробно расписать создание задания "Найти и принести". Квест

будет активироваться через диалог секцией <action></action>, и завершаться

выдачей инфопорции <give_info></give_info>, думаю вам стоит прочесть статью по

написанию диалогов.

 

Список необходимых файлов и папок в папке gamedata:

configs\gameplay\ character_desc_marsh.xml dialogs_marsh.xml

info_marsh.xml

 

configs\misc\

tm_marsh.ltx

 

configs\text\rus\st_quest_bring_vodka_medkit.xml ;--\ Создать файл.

 

scripts\quest_bring_vodka_medkit.script ;--\ Создать файл.

 

Прописываем диалоги в "Характер нужного нам НПС'а", пусть это будет Холод:

Файл: character_desc_marsh.xml

Секция: <specific_character id="mar_csky_barman" team_default = "1">

После строки: <actor_dialog>treasure_dialog</actor_dialog>

Пишем: <actor_dialog>quest_find_vodka_medkit</actor_dialog>         <actor_dialog>quest_bring_vodka_medkit</actor_dialog>

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью.

 

Теперь нам нужно создать два диалога, на поиск "quest_find_vodka_medkit" и на принесение предмета "quest_bring_vodka_medkit":

Файл: dialogs_marsh.xml

В самом низу перед строкой "</game_dialogs>" создаем диалоги: 

<dialog id="quest_find_vodka_medkit"> 
  <dont_has_info>quest_vodka_medkit_give</dont_has_info> <!-- При получение инфопорции "quest_vodka_medkit_give" блокировать диалог. --> 
 	<precondition>quest_bring_vodka_medkit.not_have_vodka_medkit</precondition> <!-- 
Прекондишин для проверки скриптом на отсутствие предметов у ГГ. Если нет необходимых предметов диалог будет активен. --> 
 	<phrase_list> 
 	<phrase id="0"> 
 	 	<text>Мне нужна работа, есть что на примете?</text> 
 	 	<next>1</next> 
 	</phrase> 
 	<phrase id="1"> 
 	 	<text>Есть, нужна бутылка водки и аптечка.</text> 
 	 	<next>2</next> 
 	 	<next>3</next> 
</phrase> 
 	<phrase id="2"> 
 	 	<text>Хорошо, принесу.</text> 
 	 	<next>4</next> 
 	</phrase> 
 	<phrase id="3"> 
 	 	<text>Я передумал.</text> 
 	 	<action>dialogs.break_dialog</action> <!-- Экшен на завершение диалога. --> 
 	</phrase> 
 	<phrase id="4"> 
 	 	<text>Вот и славненько.</text> 
 	 	<give_info>quest_vodka_medkit_give</give_info> <!-- Получение инфопорции. --> 
 <action>quest_bring_vodka_medkit.give_quest_bring_vodka_medkit</action> <!-- Экшен на выдачу квеста. --> 
 	</phrase> 
 	</phrase_list> 
</dialog> 
 
<dialog id="quest_bring_vodka_medkit"> 
 	 	<has_info>quest_vodka_medkit_give</has_info>  <!-- Проверка, есть ли у нас инфопорция, при получение инфопорции "quest_vodka_medkit_give" диалог будет активен. 
--> 
  <dont_has_info>quest_vodka_medkit_done</dont_has_info> <!-- При получение инфопорции "quest_vodka_medkit_done" блокировать диалог. --> 
 	 	<precondition>quest_bring_vodka_medkit.have_vodka_medkit</precondition> <!-- Прекондишин для проверки скриптом на наличие предметов у ГГ. Если есть необходимые предметы диалог будет активен. --> 
 	<phrase_list> 
 	<phrase id="0"> 
 	 	<text>Задание выполнено, держи предметы.</text> 
 	<action>quest_bring_vodka_medkit.quest_bring_vodka_medkit_bring_object</action> 
<!-- Экшен на передачу предметов НПС'у. --> 
 	 	<next>1</next> 
 	</phrase> 
 	<phrase id="1"> 
 	 	<text>Благодарю, держи награду.</text> 
 <action>quest_bring_vodka_medkit.quest_bring_vodka_medkit_get_money</action> <!- Экшен на получение награды. --> 
  <give_info>quest_vodka_medkit_done</give_info> <!-- Получение инфопорции, получили инфопорцию "quest_vodka_medkit_done" завершили квест. --> 
 	</phrase> 
 	</phrase_list> 
</dialog>

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью.

 

Создание инфопорции:

Файл: info_marsh.xml

В самом низу перед строкой "</game_information_portions>" создаем инфопорции:

<info_portion id="quest_vodka_medkit_give"></info_portion> 
<info_portion id="quest_vodka_medkit_done"></info_portion> 

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью.

 

 

Создание самого квеста:

Файл: tm_marsh.ltx

В секцию [list_tm_marsh] вписываем:

quest_bring_vodka_medkit_1
quest_bring_vodka_medkit_2

В самом низу пишем:

[quest_bring_vodka_medkit_1]
auto_name = false ;--\ Автоматическое имя, не совсем понятно зачем здесь эта строка. 
type = storyline ;--\ Тип задания, есть варианты "bring_item - Принести предмет", "recover_item - Вернуть предмет", "eliminate_smart - Уничтожение смарта", "defend_smart - Защита смарта", "capture_smart - Захват смарта", "take_reward - Получение награды", "storyline - Сюжетное задание".
task_type = additional ;--\ Тип задания, есть вырианты "storyline - Сюжетное задание", "additional - Второстепенное задание". 
name = quest_find_vodka_medkit_name ;--\ Название задания, из text\rus\st_*.xml документа.
text = quest_bring_vodka_medkit_text ;--\ Описание задания, из text\rus\st_*.xml документа.
target_cond = {=actor_on_level(marsh)} true  ;--\ Условие для маркера. 
target_story_ids = 302  ;--\ Установка маркера на объект по его story_id, список story_id'ов game_story_ids.ltx.
prior = 10  ;--\ Приоритет задания, чем выше это число, тем приоритетней задание.
condlist_0 = {=actor_has_item(vodka)=actor_has_item(medkit)} complete  ;--\ Условие выполнения квеста, в данном случаи проверка на нахождение двух предметов у ГГ.
on_complete = %=give_inited_task(storyline:quest_bring_vodka_medkit_2:csky)%  ;--\ По завершению поиска необходимых предметов вклучаеться следующий квест "quest_bring_vodka_medkit_2". 

[quest_bring_vodka_medkit_2]
auto_name = false
type = storyline
task_type = additional 
name = quest_bring_vodka_medkit_name
text = quest_bring_vodka_medkit_text
target_cond = {=actor_on_level(marsh)} true
target_story_ids = 302 prior = 10 
condlist_0 = {+quest_vodka_medkit_done} complete ;--\ Условие выполнения квеста, в данном случаи при получение инфопорции "quest_vodka_medkit_done" считается выполненным. 

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. 

 

Создание описания для квеста:

Файл: st_quest_bring_vodka_medkit.xml 

Пишем:

<?xml version="1.0" encoding="windows-1251" ?> 
<string_table> 
 
 	<string id="quest_find_vodka_medkit_name"> 
 	 	<text>Найти водку и аптечку для Холода.</text> 
 	</string> 
 	<string id="quest_bring_vodka_medkit_name"> 
	 	<text>Принести водку и аптечку Холоду.</text> 
 	</string> 
 	<string id="quest_bring_vodka_medkit_text"> 
 	 	<text>Найти и принести бутылку водки и аптечку.</text> 
 	</string> 
 
</string_table>

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью.

 

 

Создание скрипта на активацию квеста, проверку предметов и выдачу награды:

Файл: quest_bring_vodka_medkit.script

Пишем:

function give_quest_bring_vodka_medkit()
	xr_effects.give_inited_task(nil, nil, {"storyline", "quest_bring_vodka_medkit_1", "csky"})
end

-- возвращает false при проверке на наличие в инвентаре ГГ двух необходимых предметов
function not_have_vodka_medkit(first_speaker, second_speaker)
 	return ((db.actor:object("vodka") == nil) and (db.actor:object("medkit") == nil))
end

-- возвращает true при проверке на наличие в инвентаре ГГ двух необходимых предметов
function have_vodka_medkit(first_speaker, second_speaker)
 	return ((db.actor:object("vodka") ~= nil) and (db.actor:object("medkit") ~= nil))
end

-- передача предметов НПС'у
function quest_bring_vodka_medkit_bring_object(first_speaker, second_speaker)
	dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka")
	dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "medkit")
end

-- получение награды
function quest_bring_vodka_medkit_get_money(first_speaker, second_speaker)
	dialogs.relocate_money(first_speaker, 800, "in")
end

Все, с этим файлом закончили, сохраняем и закрываем за не надобностью.

 

Ну вот урок по квесту "Найти и принести" завершен.

 

Автор урока и примера: ThirteenDogs ThirteenDogs.spaces.ru

 

 

Скачать урок и пример можно тут: https://yadi.sk/d/5vra5UtC38e9ff

Изменено пользователем Stalker_Monolit
  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...