Случайная подборка модов
Nature Winter v2.0 «Квантовый скачок»
4.0
Народная Солянка 2016
4.1
Контракт на хорошую жизнь
4.1
ReBorn 2.50 «Артефакты смерти»
3.5
Зимний Снайпер
3.8
Погоня за Праздником
3.8
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Квестостроение, сценарий » [SoC] Создание квеста на убийство NPC. (Пример создания квеста на убийство персонажа.)
[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 и пишем в конце:

Код
20000 = "esc_danila"


Итак, идём к Волку, разговариваем, получаем квест, убиваем персонажа - молодцы.

Ну вот собственно и всё. Вроде написал всё, что надо. Автор LaRento. Если заинтересованы в уроках других типов квестов - пишите мне. Не скучайте и удачного моддинга wink
Сообщение отредактировал 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
Российская Федерация  StalkerSmart
Пятница, 28.06.2013, 02:56 | Сообщение # 6
Статус:
Неопытный:
Сообщений: 516
Награды: 1
Регистрация: 03.02.2013

Спасибо
  Злобная реклама
Пятница, 28.06.2013, 02:56
Статус:
Сообщений: 666
Регистрация: 03.02.2013
Российская Федерация  elect-team
Суббота, 29.06.2013, 00:15 | Сообщение # 7
Статус:
Гость:
Сообщений: 36
Награды: 0
Регистрация: 18.06.2013

Не правильно написанная статья. Я как то делал квест на убийства по этой статье, и получил вылет, без лога. Там надо в rus писать диалог, а не в скелете диалога писать сам текст. dry dry
  Злобная реклама
Суббота, 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
Российская Федерация  elect-team
Суббота, 29.06.2013, 01:10 | Сообщение # 9
Статус:
Гость:
Сообщений: 36
Награды: 0
Регистрация: 18.06.2013

Да и впрям исправлена. Ща протестирув. Отпишу.

Добавлено (29.06.2013, 01:10)
---------------------------------------------
Вуууух доделал,
1-ых не срабатывывают инфопоршни, т.е задание получаеш а непись не спавнится.
2-ых диалог состаит не из слов (букв) как это положенно, а из цифр, и разных зноков.
Попросту время потратил dry dry sleep

  Злобная реклама
Суббота, 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
Российская Федерация  elect-team
Суббота, 29.06.2013, 12:48 | Сообщение # 11
Статус:
Гость:
Сообщений: 36
Награды: 0
Регистрация: 18.06.2013

Хочеш скрин скину,что там не диалог а какиета знаки dry . Ну да пунктуация, и орфография у меня страдают happy
  Злобная реклама
Суббота, 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
Российская Федерация  elect-team
Суббота, 29.06.2013, 15:32 | Сообщение # 13
Статус:
Гость:
Сообщений: 36
Награды: 0
Регистрация: 18.06.2013

ВОТ
Прикрепления: 9892901.jpg (175.4 Kb)
  Злобная реклама
Суббота, 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
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Квестостроение, сценарий » [SoC] Создание квеста на убийство NPC. (Пример создания квеста на убийство персонажа.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: