SoC. Создание квеста на убийство NPC — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Создадим функцию, которая совершит выполнение квеста после убийства нашего NPC) |
(→Регистрация текста) |
||
(не показаны 36 промежуточные версии 11 участников) | |||
Строка 1: | Строка 1: | ||
− | [[Категория:Скрипты]]Здравствуйте. В | + | [[Категория:Скрипты]]Здравствуйте. В этом уроке я напишу о том, как создать несложный квест на убийство сталкера. <b>ВО ВСЕХ СЕКЦИЯХ, КОТОРЫЕ ВЫ ВСТАВЛЯЛИ В ФАЙЛЫ, УДАЛЯЙТЕ ПОЯСНЕНИЯ С ТОЧКОЙ-ЗАПЯТОЙ.</b> Итак, начнём. |
<br><br>Потребуются следующие файлы: | <br><br>Потребуются следующие файлы: | ||
<br> | <br> | ||
Строка 9: | Строка 9: | ||
<li><b>dialogs_escape.xml</b> | <li><b>dialogs_escape.xml</b> | ||
<li><b>info_l01escape.xml</b> | <li><b>info_l01escape.xml</b> | ||
− | |||
<li><b>stable_bio_name.xml</b> | <li><b>stable_bio_name.xml</b> | ||
+ | <li><b>stable_dialogs_escape.xml</b> | ||
+ | |||
<br><br><br> | <br><br><br> | ||
Строка 16: | Строка 17: | ||
<br>На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл <b>character_desc_escape.xml</b> из папки <i>config/gameplay</i>. | <br>На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл <b>character_desc_escape.xml</b> из папки <i>config/gameplay</i>. | ||
<br>Создаём там секцию нашего персонажа, написав это: | <br>Создаём там секцию нашего персонажа, написав это: | ||
− | <br>< | + | <br><xml><specific_character id="esc_danila" team_default = "1"> ; имя профиля нашего НПС |
<name>Данила</name> ; само имя персонажа | <name>Данила</name> ; само имя персонажа | ||
<icon>ui_npc_u_green_stalker_2</icon> | <icon>ui_npc_u_green_stalker_2</icon> | ||
Строка 41: | Строка 42: | ||
#include "gameplay\character_dialogs.xml" | #include "gameplay\character_dialogs.xml" | ||
<start_dialog>hello_dialog</start_dialog> | <start_dialog>hello_dialog</start_dialog> | ||
− | </specific_character></ | + | </specific_character></xml> |
<br>Думаю тут всё ясно. | <br>Думаю тут всё ясно. | ||
<br>Так же после строчки <i><actor_dialog>tm_wolf_reward</actor_dialog></i> в секции профиля Волка снизу пишем <i><actor_dialog>esc_kill_danila_dialog</actor_dialog></i>. Этим мы добавили Волку диалог, после которого выдастся квест. | <br>Так же после строчки <i><actor_dialog>tm_wolf_reward</actor_dialog></i> в секции профиля Волка снизу пишем <i><actor_dialog>esc_kill_danila_dialog</actor_dialog></i>. Этим мы добавили Волку диалог, после которого выдастся квест. | ||
<br><br>Открываем <b>npc_profile</b> из той же папки пишем в конце: | <br><br>Открываем <b>npc_profile</b> из той же папки пишем в конце: | ||
− | <br>< | + | <br><xml><character id="esc_danila"> |
<class>esc_danila</class> ; имя профиля | <class>esc_danila</class> ; имя профиля | ||
<specific_character>esc_danila</specific_character> ;имя профиля | <specific_character>esc_danila</specific_character> ;имя профиля | ||
− | </character></ | + | </character></xml> |
== Спавним персонажа на локации == | == Спавним персонажа на локации == | ||
− | <br><br>Распаковываем <b>all.spawn</b> из папки <i>spawns</i>. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля | + | <br><br>Распаковываем <b>all.spawn</b> из папки <i>spawns</i>. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля. Кидаем файлы, которые скачали в папку <i>spawns</i>. Декомпилируем <b>all.spawn</b>. Надеюсь, вы поймёте. После этого у вас появятся множество файлов. В нашем случае открываем файл <b>alife_l01_escape.ltx</b> и вставляем следующее: |
− | <br>< | + | <br><ini>[20000] ; уникальный номер секции. |
; cse_abstract properties | ; cse_abstract properties | ||
section_name = stalker | section_name = stalker | ||
Строка 69: | Строка 70: | ||
object_flags = 0xffffffbb | object_flags = 0xffffffbb | ||
custom_data = <<END | custom_data = <<END | ||
+ | [spawner] | ||
+ | cond = {+esc_kill_danila_quest_started} ; условие спавна НПС. Должна выдастся эта инфопорция. | ||
+ | |||
[logic] | [logic] | ||
active = walker | active = walker | ||
− | on_death = death ; позволяет установить | + | on_death = death ; позволяет установить схему настройки смерти НПС. |
[death] | [death] | ||
− | on_info = %+esc_danila_dead% ; | + | on_info = %+esc_danila_dead% ; при смерти НПС выдаём инфопорцию. |
[walker] | [walker] | ||
path_walk = esc_danila_walk ; имя точки пути нашего персонажа | path_walk = esc_danila_walk ; имя точки пути нашего персонажа | ||
Строка 117: | Строка 121: | ||
upd:start_dialog = | upd:start_dialog = | ||
− | ; se_stalker properties</ | + | ; se_stalker properties</ini> |
<br>Осталось прописать путь нашему персонажу. Дадим ему одну точку, чтобы он не уходил далеко, и вы не искали его на локации. Для этого в этой же папке открываем файл <b>way_l01_escape.ltx</b>. Пишем туда в конец: | <br>Осталось прописать путь нашему персонажу. Дадим ему одну точку, чтобы он не уходил далеко, и вы не искали его на локации. Для этого в этой же папке открываем файл <b>way_l01_escape.ltx</b>. Пишем туда в конец: | ||
− | <br>< | + | <br><ini>[esc_danila_walk] |
points = p0 | points = p0 | ||
p0:name = wp00 | p0:name = wp00 | ||
Строка 134: | Строка 138: | ||
p0:position = -79.6699981689453,-5.05999994277954,-72.8099975585938 | p0:position = -79.6699981689453,-5.05999994277954,-72.8099975585938 | ||
p0:game_vertex_id = 76 | p0:game_vertex_id = 76 | ||
− | p0:level_vertex_id = 188614</ | + | p0:level_vertex_id = 188614</ini> |
<br>Готово, только обязательно компилируем новый <b>all.spawn</b>. Теперь наш персонаж будет стоять в вагоне, где лежал раненый Толик. | <br>Готово, только обязательно компилируем новый <b>all.spawn</b>. Теперь наш персонаж будет стоять в вагоне, где лежал раненый Толик. | ||
== Создание квеста == | == Создание квеста == | ||
<br>Открываем файл <b>tasks_escape.xml</b> из <i>config/gameplay</i> и добавляем секцию нашего квеста: | <br>Открываем файл <b>tasks_escape.xml</b> из <i>config/gameplay</i> и добавляем секцию нашего квеста: | ||
− | <br>< | + | <br><xml> <game_task id="esc_kill_danila_quest"> ; имя квеста |
<title>Убить предателя</title> | <title>Убить предателя</title> | ||
<objective> | <objective> | ||
<text>Убить предателя</text> | <text>Убить предателя</text> | ||
<icon>ui_iconsTotal_esc_dinamit_to_volk</icon> | <icon>ui_iconsTotal_esc_dinamit_to_volk</icon> | ||
− | <infoportion_complete> | + | <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. |
</objective> | </objective> | ||
<objective> | <objective> | ||
Строка 150: | Строка 154: | ||
<map_location_type hint="esc_danila">blue_location</map_location_type> ; имя отметки нашего НПС на карте | <map_location_type hint="esc_danila">blue_location</map_location_type> ; имя отметки нашего НПС на карте | ||
<object_story_id>esc_danila</object_story_id> ; отметка нашего НПС на карте | <object_story_id>esc_danila</object_story_id> ; отметка нашего НПС на карте | ||
− | < | + | <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. |
− | + | ||
</objective> | </objective> | ||
− | </game_task></ | + | </game_task></xml> |
== Создание диалога == | == Создание диалога == | ||
<br>Создадим диалог с Волком, после которого выдастся квест. Открываем <b>dialogs_escape.xml</b> из той же папки, пишем снизу: | <br>Создадим диалог с Волком, после которого выдастся квест. Открываем <b>dialogs_escape.xml</b> из той же папки, пишем снизу: | ||
− | <br>< | + | <br><xml><dialog id="esc_kill_danila_dialog"> ; имя диалога |
− | <dont_has_info> | + | <dont_has_info>esc_kill_danila_quest_started</dont_has_info> ; прописываем инфопорцию, при выдачи которой, диалог больше не появится. |
<phrase_list> | <phrase_list> | ||
<phrase id="0"> | <phrase id="0"> | ||
− | <text> | + | <text>esc_danila_dialog_1</text> |
<next>1</next> | <next>1</next> | ||
</phrase> | </phrase> | ||
<phrase id="1"> | <phrase id="1"> | ||
− | <text> | + | <text>esc_danila_dialog_2</text> |
<next>2</next> | <next>2</next> | ||
</phrase> | </phrase> | ||
<phrase id="2"> | <phrase id="2"> | ||
− | <text> | + | <text>esc_danila_dialog_3</text> |
− | <give_info>esc_kill_danila_quest_started</give_info> ; выдача квеста после диалога | + | <give_info>esc_kill_danila_quest_started</give_info> ; выдача квеста после диалога, а так же играет роль, что диалог больше не появится. |
− | + | ||
</phrase> | </phrase> | ||
</phrase_list> | </phrase_list> | ||
− | </dialog></ | + | </dialog></xml> |
+ | |||
+ | == Регистрация текста == | ||
+ | |||
+ | Открываем файл <b>stable_dialogs_escape.xml</b> и пишем следующее: | ||
+ | |||
+ | <br><xml><string id="esc_danila_dialog_1"> | ||
+ | <text>Есть дополнительная работа?</text> | ||
+ | </string> | ||
+ | <string id="esc_danila_dialog_2"> | ||
+ | <text>Да, предатель появился у нас, Данилой кличут. Убей его, координаты на него я тебе скину.</text> | ||
+ | </string> | ||
+ | <string id="esc_danila_dialog_3"> | ||
+ | <text>Хорошо</text> | ||
+ | </string></br></xml> | ||
+ | |||
+ | Затем необходимо прописать этот диалог Волку. | ||
+ | Открываем <b>character_desc_escape.xml</b>, находим там профиль Волка, <b>esc_wolf</b> и вставляем диалог, например сюда: | ||
+ | <br><xml><start_dialog>escape_lager_volk_talk</start_dialog> | ||
+ | <start_dialog>dm_hello_dialog</start_dialog> | ||
+ | <actor_dialog>esc_kill_danila_dialog</actor_dialog> <!--диалог на убийство Данилы---> | ||
+ | <actor_dialog>dm_cool_info_dialog</actor_dialog> | ||
+ | <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> | ||
+ | <actor_dialog>tm_wolf_dialog</actor_dialog> | ||
+ | <actor_dialog>tm_wolf_reward</actor_dialog></br></xml> | ||
+ | |||
+ | Готово, теперь диалог полностью готов. Квест станет доступным после разговора Волка по рации с Петрухой. | ||
== Создадим инфопоршни == | == Создадим инфопоршни == | ||
− | <br>Открываем файл <b>info_l01_escape.xml</b> | + | <br>Открываем файл <b>info_l01_escape.xml</b> из всё той же папки добавляем следующее: |
− | <br>< | + | <br><xml> <info_portion id="esc_kill_danila_quest_started"> ; инфопорция, дающая начало квеста |
− | <task>esc_kill_danila_quest</task> ; название квеста | + | <task>esc_kill_danila_quest</task> ; название квеста |
</info_portion> | </info_portion> | ||
− | <info_portion id="esc_danila_dead"></info_portion> ; | + | <info_portion id="esc_danila_dead"></info_portion> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.</xml> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == Создаём | + | == Создаём отметку нашего NPC на карте. == |
<br>Открываем файл <b>stable_bio_name.xml</b> из папки <i>config/text/rus</i>, пишем там в конце: | <br>Открываем файл <b>stable_bio_name.xml</b> из папки <i>config/text/rus</i>, пишем там в конце: | ||
− | <br>< | + | <br><xml><string id="esc_danila"> |
<text>Данила</text> | <text>Данила</text> | ||
− | </string></ | + | </string></xml> |
− | + | <br>Создадим Game Story Id, чтобы НПС наш отображался на карте. Для этого открываем файл <b>game_story_ids</b> из папки <i>config</i> и пишем в конце: | |
− | <br>Создадим | + | |
<br><pre>20000 = "esc_danila"</pre> | <br><pre>20000 = "esc_danila"</pre> | ||
<br>Ну вот собственно и всё. Вроде написал всё, что надо. Автор <b>LaRento</b>. Буду постепенно заливать туторы по созданию разных типов квестов. Всем пока, удачи) | <br>Ну вот собственно и всё. Вроде написал всё, что надо. Автор <b>LaRento</b>. Буду постепенно заливать туторы по созданию разных типов квестов. Всем пока, удачи) |
Текущая версия на 13:52, 15 июля 2016
Здравствуйте. В этом уроке я напишу о том, как создать несложный квест на убийство сталкера. ВО ВСЕХ СЕКЦИЯХ, КОТОРЫЕ ВЫ ВСТАВЛЯЛИ В ФАЙЛЫ, УДАЛЯЙТЕ ПОЯСНЕНИЯ С ТОЧКОЙ-ЗАПЯТОЙ. Итак, начнём.
Потребуются следующие файлы:
Содержание
Создание персонажа
На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл character_desc_escape.xml из папки config/gameplay.
Создаём там секцию нашего персонажа, написав это:
<specific_character id="esc_danila" team_default = "1"> ; имя профиля нашего НПС <name>Данила</name> ; само имя персонажа <icon>ui_npc_u_green_stalker_2</icon> <bio>esc_captain_bio</bio> <class>esc_danila</class> ; класс должен быть всегда тот же, как и имя профиля <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>906</rank> <reputation>20</reputation> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>0</crouch_type> <visual>actors\novice\green_stalker_1</visual> <supplies> [spawn] \n wpn_mp5 \n ammo_9x19_fmj = 1 \n #include "gameplay\character_food.xml" </supplies> #include "gameplay\character_criticals_5.xml" #include "gameplay\character_dialogs.xml" <start_dialog>hello_dialog</start_dialog> </specific_character>
Думаю тут всё ясно.
Так же после строчки <actor_dialog>tm_wolf_reward</actor_dialog> в секции профиля Волка снизу пишем <actor_dialog>esc_kill_danila_dialog</actor_dialog>. Этим мы добавили Волку диалог, после которого выдастся квест.
Открываем npc_profile из той же папки пишем в конце:
<character id="esc_danila"> <class>esc_danila</class> ; имя профиля <specific_character>esc_danila</specific_character> ;имя профиля </character>
Спавним персонажа на локации
Распаковываем all.spawn из папки spawns. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля. Кидаем файлы, которые скачали в папку spawns. Декомпилируем all.spawn. Надеюсь, вы поймёте. После этого у вас появятся множество файлов. В нашем случае открываем файл alife_l01_escape.ltx и вставляем следующее:
[20000] ; уникальный номер секции. ; cse_abstract properties section_name = stalker name = esc_danila ; имя нашего персонажа position = -81.8000030517578,-4.98000001907349,-72.7399978637695 ; координаты спавна нашего персонажа direction = 0.00115116173401475,-5.07207296323031e-005,0.0440320037305355 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_danila ; профиль нашего персонажа, созданного в character_desc_escape ; cse_alife_object properties game_vertex_id = 76 distance = 9.09999942779541 level_vertex_id = 186578 object_flags = 0xffffffbb custom_data = <<END [spawner] cond = {+esc_kill_danila_quest_started} ; условие спавна НПС. Должна выдастся эта инфопорция. [logic] active = walker on_death = death ; позволяет установить схему настройки смерти НПС. [death] on_info = %+esc_danila_dead% ; при смерти НПС выдаём инфопорцию. [walker] path_walk = esc_danila_walk ; имя точки пути нашего персонажа path_look = esc_danila_look ; имя точки , куда наш персонаж будет смотреть END story_id = 20000 ; стори ид, понадобится для квеста ; cse_visual properties visual_name = actors\soldier\soldier_beret_1 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 1 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x75646f6d upd:creature_flags = 0x6c upd:position = -81.8000030517578,-4.98000001907349,-72.7399978637695 ; тоже координаты, обязательно писать и тут их upd:o_model = 0 upd:o_torso = -5.07207296323031e-005,0.00115116173401475,0 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 1 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 0,1,1,1,2 predicate4 = 2,0,1,0 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties
Осталось прописать путь нашему персонажу. Дадим ему одну точку, чтобы он не уходил далеко, и вы не искали его на локации. Для этого в этой же папке открываем файл way_l01_escape.ltx. Пишем туда в конец:
[esc_danila_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -81.8000030517578,-4.98000001907349,-72.7399978637695 p0:game_vertex_id = 76 p0:level_vertex_id = 186578 [esc_danila_look] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -79.6699981689453,-5.05999994277954,-72.8099975585938 p0:game_vertex_id = 76 p0:level_vertex_id = 188614
Готово, только обязательно компилируем новый all.spawn. Теперь наш персонаж будет стоять в вагоне, где лежал раненый Толик.
Создание квеста
Открываем файл tasks_escape.xml из config/gameplay и добавляем секцию нашего квеста:
<game_task id="esc_kill_danila_quest"> ; имя квеста <title>Убить предателя</title> <objective> <text>Убить предателя</text> <icon>ui_iconsTotal_esc_dinamit_to_volk</icon> <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. </objective> <objective> <text>Убить Данилу</text> <map_location_type hint="esc_danila">blue_location</map_location_type> ; имя отметки нашего НПС на карте <object_story_id>esc_danila</object_story_id> ; отметка нашего НПС на карте <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. </objective> </game_task>
Создание диалога
Создадим диалог с Волком, после которого выдастся квест. Открываем dialogs_escape.xml из той же папки, пишем снизу:
<dialog id="esc_kill_danila_dialog"> ; имя диалога <dont_has_info>esc_kill_danila_quest_started</dont_has_info> ; прописываем инфопорцию, при выдачи которой, диалог больше не появится. <phrase_list> <phrase id="0"> <text>esc_danila_dialog_1</text> <next>1</next> </phrase> <phrase id="1"> <text>esc_danila_dialog_2</text> <next>2</next> </phrase> <phrase id="2"> <text>esc_danila_dialog_3</text> <give_info>esc_kill_danila_quest_started</give_info> ; выдача квеста после диалога, а так же играет роль, что диалог больше не появится. </phrase> </phrase_list> </dialog>
Регистрация текста
Открываем файл stable_dialogs_escape.xml и пишем следующее:
<string id="esc_danila_dialog_1"> <text>Есть дополнительная работа?</text> </string> <string id="esc_danila_dialog_2"> <text>Да, предатель появился у нас, Данилой кличут. Убей его, координаты на него я тебе скину.</text> </string> <string id="esc_danila_dialog_3"> <text>Хорошо</text> </string></br>
Затем необходимо прописать этот диалог Волку. Открываем character_desc_escape.xml, находим там профиль Волка, esc_wolf и вставляем диалог, например сюда:
<start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>esc_kill_danila_dialog</actor_dialog> <!--диалог на убийство Данилы---> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog></br>
Готово, теперь диалог полностью готов. Квест станет доступным после разговора Волка по рации с Петрухой.
Создадим инфопоршни
Открываем файл info_l01_escape.xml из всё той же папки добавляем следующее:
<info_portion id="esc_kill_danila_quest_started"> ; инфопорция, дающая начало квеста <task>esc_kill_danila_quest</task> ; название квеста </info_portion> <info_portion id="esc_danila_dead"></info_portion> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.
Создаём отметку нашего NPC на карте.
Открываем файл stable_bio_name.xml из папки config/text/rus, пишем там в конце:
<string id="esc_danila"> <text>Данила</text> </string>
Создадим Game Story Id, чтобы НПС наш отображался на карте. Для этого открываем файл game_story_ids из папки config и пишем в конце:
20000 = "esc_danila"
Ну вот собственно и всё. Вроде написал всё, что надо. Автор LaRento. Буду постепенно заливать туторы по созданию разных типов квестов. Всем пока, удачи)