[SoC] Создание квеста на убийство NPC.
|
|
|
Scouser
Среда, 21.11.2012, 19:32 | Сообщение # 1
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
Здравствуйте. В этом уроке я напишу о том, как создать несложный квест на убийство сталкера. Итак, начнём.
Потребуются следующие файлы: -character_desc_escape.xml -npc_profile.xml -all.spawn -tasks_escape.xml -game_story_ids.ltx -dialogs_escape.xml -stable_dialogs_escape.xml -info_l01escape.xml -stable_bio_name.xml 1. Создание персонажа.
На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл 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.xml из той же папки пишем в конце:
Код <character id="esc_danila"> <class>esc_danila</class> ; имя профиля <specific_character>esc_danila</specific_character> ;имя профиля </character>
2. Спавним персонажа на локации.
Распаковываем 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. Теперь наш персонаж будет стоять в вагоне, где лежал раненый Толик.
3. Создадим сам квест.
Открываем файл tasks_escape.xml из config/gameplay и добавляем секцию нашего квеста:
Код <game_task id="esc_kill_danila_quest"> ; ID-имя квеста <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>
4. Создание диалога.
Создадим диалог с Волком, после которого выдастся квест. Открываем dialogs_escape.xml из той же папки, пишем снизу:
Код <dialog id="esc_kill_danila_dialog"> ; ID-имя диалога <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>
5. Регистрация текста диалога.
Открываем файл 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>
Готово, теперь диалог полностью готов.
6. Создадим инфопорции.
Открываем файл info_l01_escape.xml и всё той же папки добавляем следующее:
Код <info_portion id="esc_kill_danila_quest_started"> ; инфопорция, отвечающая за выдачу квеста. <task>esc_kill_danila_quest</task> ; указываем ID-имя квеста. </info_portion>
<info_portion id="esc_danila_dead"></info_portion> ; инфопорция о смерти нашего НПС. <info_portion id="esc_kill_danila_quest_complete"></info_portion> ; инфопорция о выполнение квеста.
7. Создаём отметку нашего NPC на карте.
Открываем файл stable_bio_name.xml из папки config/text/rus, пишем там в конце:
Код <string id="esc_danila"> <text>Данила</text> </string>
Создадим Game Story ID. Для этого открываем файл game_story_ids.ltx из папки config и пишем в конце:
Итак, идём к Волку, разговариваем, получаем квест, убиваем персонажа - молодцы.
Ну вот собственно и всё. Вроде написал всё, что надо. Автор LaRento. Если заинтересованы в уроках других типов квестов - пишите мне. Не скучайте и удачного моддинга
Сообщение отредактировал LaRento - Вторник, 02.07.2013, 17:23
|
|
Среда, 21.11.2012, 19:32
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
wikreznow
Среда, 21.11.2012, 20:22 | Сообщение # 2
Статус: |
|
Новичок: |
|
Сообщений: |
210 |
Награды: |
1 |
Регистрация: |
16.04.2012 |
|
Quote [walker] path_walk = esc_danila_walk ; имя точки пути нашего персонажа path_look = esc_danila_look ; имя точки , куда наш персонаж будет смотреть
Quote [esc_dio_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_dio_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
Могу ошибатся, так и должно быть?
|
|
Среда, 21.11.2012, 20:22
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
16.04.2012 |
|
|
|
|
|
Scouser
Среда, 21.11.2012, 20:24 | Сообщение # 3
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
Исправил. Я создавал тутор по своему примеру квеста, а там у меня другой путь был, вот и пропустил поменять имя пути.
|
|
Среда, 21.11.2012, 20:24
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
RICK
Среда, 21.11.2012, 22:43 | Сообщение # 4
Статус: |
|
Опытный: |
|
Сообщений: |
1205 |
Награды: |
4 |
Регистрация: |
10.05.2011 |
|
небольшая поправка русский текст в скелете диалога лучше неписать если допустим текст рус длиный в скелете то в игре когда дойдет до этой фразы будет без логовый вылет потом будеш голову ломать все же правильно текст лучше писать в файле русский текст
|
|
Среда, 21.11.2012, 22:43
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
10.05.2011 |
|
|
|
|
|
Scouser
Среда, 21.11.2012, 23:44 | Сообщение # 5
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
Да, я сталкивался с такое проблемой, но думаю, люди поймут, ведь моя цель - показать принцип выполнения такого квеста.
|
|
Среда, 21.11.2012, 23:44
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
Статус: |
|
Неопытный: |
|
Сообщений: |
516 |
Награды: |
1 |
Регистрация: |
03.02.2013 |
|
Спасибо
|
|
Пятница, 28.06.2013, 02:56
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
03.02.2013 |
|
|
|
|
Суббота, 29.06.2013, 00:15
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
18.06.2013 |
|
|
|
|
|
Scouser
Суббота, 29.06.2013, 00:17 | Сообщение # 8
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
elect-team, А ты загляни сейчас в урок и убедись, что там такого не наблюдается -_- Естественно, что будет вылетать, более 200 с чем-то символов не разрешено прописывать прямо в конфиг диалога.
Сообщение отредактировал LaRento - Суббота, 29.06.2013, 00:19
|
|
Суббота, 29.06.2013, 00:17
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
Статус: |
|
Гость: |
|
Сообщений: |
36 |
Награды: |
0 |
Регистрация: |
18.06.2013 |
|
|
|
Суббота, 29.06.2013, 01:10
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
18.06.2013 |
|
|
|
|
|
Scouser
Суббота, 29.06.2013, 10:21 | Сообщение # 10
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
elect-team, А теперь слушай меня внимательно. 1. Персонаж появляется в самом начале игры, я не задавал ему условие спауна. Проблемы у тебя, возможно, ты не скомпилировал all.spawn. 2. Что за бред ты написал про диалог? 3. Советую учить русский язык, ошибок куча в пунктуации и орфографии.
|
|
Суббота, 29.06.2013, 10:21
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
Суббота, 29.06.2013, 12:48
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
18.06.2013 |
|
|
|
|
|
Scouser
Суббота, 29.06.2013, 12:50 | Сообщение # 12
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
elect-team, Кидай, только ты что-то там наделал, как видишь , в уроке русский текст.
|
|
Суббота, 29.06.2013, 12:50
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
Суббота, 29.06.2013, 15:32
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
18.06.2013 |
|
|
|
|
|
Scouser
Суббота, 29.06.2013, 16:03 | Сообщение # 14
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
elect-team, Не знаю, почему у тебя такое... И где у тебя текст диалога? Как видишь - в уроке всё верно.
|
|
Суббота, 29.06.2013, 16:03
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
Stronger
Пятница, 05.07.2013, 12:35 | Сообщение # 15
Статус: |
|
Новичок: |
|
Сообщений: |
274 |
Награды: |
1 |
Регистрация: |
24.12.2011 |
|
Проще вот так зделать: <dialog id="esc_kill_danila_dialog"> <dont_has_info>esc_kill_danila_quest_started</dont_has_info> <phrase_list> <phrase id="0"> <text>Есть дополнительная работа?</text> <next>1</next> </phrase> <phrase id="1"> <text>Да, предатель появился у нас, Данилой кличут. Убей его, координаты на него я тебе скину.</text> <next>2</next> </phrase> <phrase id="2"> <text>Хорошо</text> <give_info>esc_kill_danila_quest_started</give_info> </phrase> </phrase_list> </dialog>
|
|
Пятница, 05.07.2013, 12:35
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
24.12.2011 |
|
|
|
|