CoP. Создание квеста — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

CoP. Создание квеста — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Разбираем конкретно параметры:)
 
(не показаны 24 промежуточных версий 8 участников)
Строка 1: Строка 1:
== Разбираем конкретно параметры: ==
+
=== Разбираем параметры ===
  
<br/>
 
 
'''icon''' — иконка квеста<br/>
 
'''icon''' — иконка квеста<br/>
 
''Пример использования:'' icon = ui_inGame2_Put_v_pripyat<br/>
 
''Пример использования:'' icon = ui_inGame2_Put_v_pripyat<br/>
<br/>
+
 
 
'''prior''' — приоритет квеста<br/>
 
'''prior''' — приоритет квеста<br/>
 
''Пример использования:'' prior = 112<br/>
 
''Пример использования:'' prior = 112<br/>
<br/>
+
 
 
'''storyline''' — флаг задания (true — сюжетное, false — несюжетное)<br/>
 
'''storyline''' — флаг задания (true — сюжетное, false — несюжетное)<br/>
 
''Пример использования:'' storyline = true<br/>
 
''Пример использования:'' storyline = true<br/>
<br/>
+
 
 
'''title '''— название задание (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов<br/>
 
'''title '''— название задание (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов<br/>
 
''Пример использования:'' title = zat_a9_way_gates_check_transport_workshop_name<br/>
 
''Пример использования:'' title = zat_a9_way_gates_check_transport_workshop_name<br/>
<br/>
+
 
 
'''descr''' — описание задания (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов<br/>
 
'''descr''' — описание задания (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов<br/>
 
''Пример использования:'' descr = zat_a9_way_gates_check_transport_workshop_text<br/>
 
''Пример использования:'' descr = zat_a9_way_gates_check_transport_workshop_text<br/>
<br/>
+
 
 
'''target''' — цель на карте (метка)<br/>
 
'''target''' — цель на карте (метка)<br/>
 
''Примеры использования:''<br/>
 
''Примеры использования:''<br/>
 
'''target''' =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка)<br/>
 
'''target''' =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка)<br/>
 
'''target''' = {+название_инфопоршня}zat_a2_stalker_barmen — проверка инфопоршня, после которого метка будет поставлена на нпц<br/>
 
'''target''' = {+название_инфопоршня}zat_a2_stalker_barmen — проверка инфопоршня, после которого метка будет поставлена на нпц<br/>
<br/>
+
 
 
'''condlist_x''' — блок условий. возможные значения complete, reversed, fail<br/>
 
'''condlist_x''' — блок условий. возможные значения complete, reversed, fail<br/>
 
''Примеры использования:''<br/>
 
''Примеры использования:''<br/>
 
'''condlist_0''' = {+название_инфопоршня} complete — если выполняется условие, задание выполнено.<br/>
 
'''condlist_0''' = {+название_инфопоршня} complete — если выполняется условие, задание выполнено.<br/>
'''condlist_1''' = {+название_инфопоршня} reversed — если выполняется условие, значит есть возможность повторить задание.<br/>
+
'''condlist_1''' = {+название_инфопоршня} reversed — если выполняется условие, значит задание отменено.<br/>
 
'''condlist_2''' = {+название_инфопоршня} fail — если выполняется условие, задание провалено.<br/>
 
'''condlist_2''' = {+название_инфопоршня} fail — если выполняется условие, задание провалено.<br/>
<br/>
+
 
 
'''on_init''' - действия, которые выполняются, при выдаче задания<br/>
 
'''on_init''' - действия, которые выполняются, при выдаче задания<br/>
 
'''on_complete''' — действия, которые выполняются, если задание выполнено<br/>
 
'''on_complete''' — действия, которые выполняются, если задание выполнено<br/>
'''on_reversed''' — действия, которые выполняются, если задание провалено<br/>
+
'''on_reversed''' — действия, которые выполняются, если задание отменено<br/>
 +
'''on_fail''' — действия, которые выполняются, если задание провалено<br/>
 
''Примеры использования:''<br/>
 
''Примеры использования:''<br/>
 
'''on_init''' = %+название_инфопоршня% -- выдаем опр.инфопоршень<br/>
 
'''on_init''' = %+название_инфопоршня% -- выдаем опр.инфопоршень<br/>
 
'''on_complete''' = %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров (функция юзаются из xr_effect)<br/>
 
'''on_complete''' = %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров (функция юзаются из xr_effect)<br/>
 
'''on_reversed''' = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров, только если есть опр.инфопоршень<br/>
 
'''on_reversed''' = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров, только если есть опр.инфопоршень<br/>
<br/>
+
 
 
'''reward_money''' - денежная награда<br/>
 
'''reward_money''' - денежная награда<br/>
 
'''reward_item''' - награда в виде предмета<br/>
 
'''reward_item''' - награда в виде предмета<br/>
<br/>
+
 
 
''Примеры использования:''<br/>
 
''Примеры использования:''<br/>
 
reward_money = 5000 -- даем актору 5000.<br/>
 
reward_money = 5000 -- даем актору 5000.<br/>
 
reward_item = wpn_ak74 -- даем актору АК-74.<br/>
 
reward_item = wpn_ak74 -- даем актору АК-74.<br/>
<br/>
 
'''''Примечание:''''' Награда выдается двумя методами: от НПЦ или просто свалиться с неба. Если не найден НПЦ, с которым мы в диалоге, то валится с неба.<br/>
 
<br/>
 
<br/>
 
<br/>
 
  
</game_dialogs>
+
'''''Примечание:''''' Награда выдается двумя методами: от NPC или просто свалится с неба. Если не найден NPC, с которым мы в диалоге, то валится с неба.<br/>
<code><dialog id="vodka_quest_dialog">
+
 
<dont_has_info>quest_vodka_done</dont_has_info>
+
=== Практика ===
 +
 
 +
'''Используемые файлы:'''
 +
 
 +
*'''configs\gameplay\dialogs_zaton.xml'''
 +
*'''configs\gameplay\info_zaton.xml'''
 +
*'''configs\gameplay\character_desc_zaton.xml'''
 +
*'''configs\text\rus\st_quests_zaton.xml'''
 +
*'''configs\misc\tm_zaton.ltx'''
 +
*'''scripts\dialogs_zaton.script'''
 +
 
 +
Открываем файл '''dialogs_zaton.xml''' и добавляем перед '''</game_dialogs>''':
 +
 
 +
<xml>
 +
<dialog id="vodka_quest_dialog">
 
<dont_has_info>quest_vodka_give</dont_has_info>
 
<dont_has_info>quest_vodka_give</dont_has_info>
 
<phrase_list>
 
<phrase_list>
Строка 67: Строка 76:
 
<dialog id="vodka_quest_prines">
 
<dialog id="vodka_quest_prines">
 
<has_info>quest_vodka_give</has_info>
 
<has_info>quest_vodka_give</has_info>
 +
<dont_has_info>quest_vodka_done</dont_has_info>
 
<precondition>dialogs_zaton.is_has_vodka_borode</precondition>
 
<precondition>dialogs_zaton.is_has_vodka_borode</precondition>
 
<phrase_list>
 
<phrase_list>
Строка 74: Строка 84:
 
     </phrase>
 
     </phrase>
 
     <phrase id="0">
 
     <phrase id="0">
        <has_info>quest_has_vodka</has_info>
 
 
         <text>Вот твоя водяра</text>
 
         <text>Вот твоя водяра</text>
 
         <action>dialogs_zaton.transfer_vodka_to_boroda</action>
 
         <action>dialogs_zaton.transfer_vodka_to_boroda</action>
Строка 80: Строка 89:
 
     </phrase>
 
     </phrase>
 
</phrase_list>
 
</phrase_list>
</dialog></code>
+
</dialog>
 +
</xml>
  
<br/>
 
 
Далее добавляем наши диалоги Бороде.<br/>
 
Далее добавляем наши диалоги Бороде.<br/>
 
Открываем файл '''character_desc_zaton.xml'''<br/>
 
Открываем файл '''character_desc_zaton.xml'''<br/>
Находим строчку '''<actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog>''' и под ней пишем<br/>
+
Находим строчку '''<actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog>''' и под ней пишем:
<code>
+
 
 +
<xml>
 
<actor_dialog>vodka_quest_dialog</actor_dialog>
 
<actor_dialog>vodka_quest_dialog</actor_dialog>
<actor_dialog>vodka_quest_prines</actor_dialog></code>
+
<actor_dialog>vodka_quest_prines</actor_dialog>
'''Сохраняем'''<br/>
+
</xml>
<br/>
+
 
Открываем файл '''info_zaton.xml''' и добавляем перед '''</game_information_portions>:'''<br/>
+
Сохраняем.
<code>
+
 
 +
Открываем файл '''info_zaton.xml''' и добавляем перед '''</game_information_portions>:'''
 +
 
 +
<xml>
 
     <info_portion id="quest_vodka_give"></info_portion>
 
     <info_portion id="quest_vodka_give"></info_portion>
 
     <info_portion id="quest_has_vodka"></info_portion>
 
     <info_portion id="quest_has_vodka"></info_portion>
 
     <info_portion id="quest_vodka_done"></info_portion>
 
     <info_portion id="quest_vodka_done"></info_portion>
</code>
+
</xml>
<br/>
+
 
 
Открываем файл '''dialogs_zaton.script''' и в начало записываем:
 
Открываем файл '''dialogs_zaton.script''' и в начало записываем:
<code>function give_vodka_quest()
+
 
 +
<lua>
 +
function give_vodka_quest()
 
   task_manager.get_task_manager():give_task("quest_vodka_give")
 
   task_manager.get_task_manager():give_task("quest_vodka_give")
 
end
 
end
Строка 110: Строка 125:
 
function transfer_vodka_to_boroda(first_speaker, second_speaker)
 
function transfer_vodka_to_boroda(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, "vodka")
end</code>
+
end
<br/>
+
</lua>
'''Сохраняем'''<br/>
+
 
<br/>
+
Сохраняем.
'''Открываем файл tm_zaton.ltx и в конец пишем:'''
+
 
<code>[quest_vodka_give]
+
Открываем файл '''tm_zaton.ltx''' и в конец пишем:
 +
 
 +
<ini>
 +
[quest_vodka_give]
 
icon = ui_inGame2_Put_v_pripyat
 
icon = ui_inGame2_Put_v_pripyat
 
prior = 2
 
prior = 2
Строка 122: Строка 140:
 
descr = vodka_barmen_descr
 
descr = vodka_barmen_descr
 
target = {=actor_has_item(vodka)}zat_a2_stalker_barmen
 
target = {=actor_has_item(vodka)}zat_a2_stalker_barmen
condlist_0 = {+quest_vodka_done} complete</code>
+
condlist_0 = {+quest_vodka_done} complete
 +
</ini>
  
Открываем файл '''st_quests_zaton.xml''' и добавляем после '''<string_table>'''
+
Открываем файл '''st_quests_zaton.xml''' и добавляем после '''<string_table>''':
  
<code><string id="vodka_barmen_naiti_name">
+
<xml>
 +
<string id="vodka_barmen_naiti_name">
 
     <text>Найти водку для бармена</text>
 
     <text>Найти водку для бармена</text>
 
</string>
 
</string>
Строка 134: Строка 154:
 
<string id="vodka_barmen_descr">
 
<string id="vodka_barmen_descr">
 
     <text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text>
 
     <text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text>
</string></code>
+
</string>
'''Сохраняем'''<br/>
+
</xml>
<br/>
+
Автор: '''XMK'''
+
Источник: [http://ars-team.ru/index.php?autocom=ibwiki&cmd=article&id=5]
+
--------------
+
Примечание №1
+
В варианте диалога от автора статьи есть ненужная строка: <has_info>quest_has_vodka</has_info> - эта функция по идее должна проверять наличие инфопорции quest_has_vodka которая ничем не выдаётся...
+
Наличие (или отсутствие) строчки <has_info>quest_has_vodka</has_info> в структуре диалога ничего не изменит, поэтому она просто не нужна... Тем более что она может стать причиной багов.
+
Примечание №2
+
Чтобы скрыть диалог выполнения квеста (vodka_quest_prines) - "Вот твоя водяра" - после выполнения квеста, ниже строчки <has_info>quest_vodka_give</has_info> нужно добавить строчку <dont_has_info>quest_vodka_done</dont_has_info> - тобишь условие -показывать диалог выполнения квеста (vodka_quest_prines) при наличии следующих условий:
+
<has_info>quest_vodka_give</has_info> - уже выдан квест "Принести водку бармену"
+
<dont_has_info>quest_vodka_done</dont_has_info> - квест ещё не выполнен
+
<precondition>dialogs_zaton.is_has_vodka_borode</precondition> - проверка наличия у ГГ нужного предмета (Водки)
+
Примечание №3
+
Наличие строчки <dont_has_info>quest_vodka_done</dont_has_info> в диалоге активации квеста (vodka_quest_dialog) - "Привет, тебе водки не принести?" тоже не нужно, ибо при активации квеста будет выдана инфопорция quest_vodka_give и функция <dont_has_info>quest_vodka_give</dont_has_info> скроет диалог активации квеста
+
Примечание №4
+
Вот так должен выглядеть диалог без ошибок:
+
<pre>
+
<dialog id="vodka_quest_dialog">
+
<dont_has_info>quest_vodka_give</dont_has_info>
+
<phrase_list>
+
    <phrase id="1">
+
        <text>Принеси бутылочку</text>
+
        <give_info>quest_vodka_give</give_info>
+
        <action>dialogs_zaton.give_vodka_quest</action>
+
    </phrase>
+
    <phrase id="0">
+
        <text>Привет, тебе водки не принести?</text>
+
        <next>1</next>
+
    </phrase>
+
</phrase_list>
+
</dialog>
+
  
<dialog id="vodka_quest_prines">
+
Сохраняем.
<has_info>quest_vodka_give</has_info>
+
 
<dont_has_info>quest_vodka_done</dont_has_info>
+
<span style="color: gray">P.S.: в CoP инфопорции можно и не регистрировать, работать будет и так.</span>
<precondition>dialogs_zaton.is_has_vodka_borode</precondition>
+
 
<phrase_list>
+
Автор: '''XMK''' [http://ars-team.ru/index.php?autocom=ibwiki&cmd=article&id=5 Источник] Корректирование: [[Участник:THE_ATLAS|THE_ATLAS]]
    <phrase id="1">
+
 
        <text>Спасибо, чувак. Выручил</text>
+
[[Категория:Конфигурационные файлы]]
        <give_info>quest_vodka_done</give_info>
+
    </phrase>
+
    <phrase id="0">
+
        <text>Вот твоя водяра</text>
+
        <action>dialogs_zaton.transfer_vodka_to_boroda</action>
+
        <next>1</next>
+
    </phrase>
+
</phrase_list>
+
</dialog>
+
</pre>
+
--------------
+
[[Категория:Скрипты]]
+

Текущая версия на 08:00, 23 августа 2017

Разбираем параметры

icon — иконка квеста
Пример использования: icon = ui_inGame2_Put_v_pripyat

prior — приоритет квеста
Пример использования: prior = 112

storyline — флаг задания (true — сюжетное, false — несюжетное)
Пример использования: storyline = true

title — название задание (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: title = zat_a9_way_gates_check_transport_workshop_name

descr — описание задания (id из xml) — если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: descr = zat_a9_way_gates_check_transport_workshop_text

target — цель на карте (метка)
Примеры использования:
target =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка)
target = {+название_инфопоршня}zat_a2_stalker_barmen — проверка инфопоршня, после которого метка будет поставлена на нпц

condlist_x — блок условий. возможные значения complete, reversed, fail
Примеры использования:
condlist_0 = {+название_инфопоршня} complete — если выполняется условие, задание выполнено.
condlist_1 = {+название_инфопоршня} reversed — если выполняется условие, значит задание отменено.
condlist_2 = {+название_инфопоршня} fail — если выполняется условие, задание провалено.

on_init - действия, которые выполняются, при выдаче задания
on_complete — действия, которые выполняются, если задание выполнено
on_reversed — действия, которые выполняются, если задание отменено
on_fail — действия, которые выполняются, если задание провалено
Примеры использования:
on_init = %+название_инфопоршня% -- выдаем опр.инфопоршень
on_complete = %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров (функция юзаются из xr_effect)
on_reversed = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% — повышаем репу у сталкеров, только если есть опр.инфопоршень

reward_money - денежная награда
reward_item - награда в виде предмета

Примеры использования:
reward_money = 5000 -- даем актору 5000.
reward_item = wpn_ak74 -- даем актору АК-74.

Примечание: Награда выдается двумя методами: от NPC или просто свалится с неба. Если не найден NPC, с которым мы в диалоге, то валится с неба.

Практика

Используемые файлы:

  • configs\gameplay\dialogs_zaton.xml
  • configs\gameplay\info_zaton.xml
  • configs\gameplay\character_desc_zaton.xml
  • configs\text\rus\st_quests_zaton.xml
  • configs\misc\tm_zaton.ltx
  • scripts\dialogs_zaton.script

Открываем файл dialogs_zaton.xml и добавляем перед </game_dialogs>:

 
<dialog id="vodka_quest_dialog">
<dont_has_info>quest_vodka_give</dont_has_info>
<phrase_list>
    <phrase id="1">
        <text>Принеси бутылочку</text>
        <give_info>quest_vodka_give</give_info>
        <action>dialogs_zaton.give_vodka_quest</action>
    </phrase>
    <phrase id="0">
        <text>Привет, тебе водки не принести?</text>
        <next>1</next>
    </phrase>
</phrase_list>
</dialog>
 
<dialog id="vodka_quest_prines">
<has_info>quest_vodka_give</has_info>
<dont_has_info>quest_vodka_done</dont_has_info>
<precondition>dialogs_zaton.is_has_vodka_borode</precondition>
<phrase_list>
    <phrase id="1">
        <text>Спасибо, чувак. Выручил</text>
        <give_info>quest_vodka_done</give_info>
    </phrase>
    <phrase id="0">
        <text>Вот твоя водяра</text>
        <action>dialogs_zaton.transfer_vodka_to_boroda</action>
        <next>1</next>
    </phrase>
</phrase_list>
</dialog>
 

Далее добавляем наши диалоги Бороде.
Открываем файл character_desc_zaton.xml
Находим строчку <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog> и под ней пишем:

 
<actor_dialog>vodka_quest_dialog</actor_dialog>
<actor_dialog>vodka_quest_prines</actor_dialog>
 

Сохраняем.

Открываем файл info_zaton.xml и добавляем перед </game_information_portions>:

 
    <info_portion id="quest_vodka_give"></info_portion>
    <info_portion id="quest_has_vodka"></info_portion>
    <info_portion id="quest_vodka_done"></info_portion>
 

Открываем файл dialogs_zaton.script и в начало записываем:

 
function give_vodka_quest()
   task_manager.get_task_manager():give_task("quest_vodka_give")
end
function is_has_vodka_borode()
    if db.actor:object("vodka") then
        return true
    end
    return false
end
function transfer_vodka_to_boroda(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka")
end
 

Сохраняем.

Открываем файл tm_zaton.ltx и в конец пишем:

 
[quest_vodka_give]
icon = ui_inGame2_Put_v_pripyat
prior = 2
storyline = false
title = {=actor_has_item(vodka)}vodka_barmen_prinesti_name, vodka_barmen_naiti_name
descr = vodka_barmen_descr
target = {=actor_has_item(vodka)}zat_a2_stalker_barmen
condlist_0 = {+quest_vodka_done} complete
 

Открываем файл st_quests_zaton.xml и добавляем после <string_table>:

 
<string id="vodka_barmen_naiti_name">
    <text>Найти водку для бармена</text>
</string>
<string id="vodka_barmen_prinesti_name">
    <text>Принести водку бармену</text>
</string>
<string id="vodka_barmen_descr">
    <text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text>
</string>
 

Сохраняем.

P.S.: в CoP инфопорции можно и не регистрировать, работать будет и так.

Автор: XMK Источник Корректирование: THE_ATLAS

Другие места
LANGUAGE