Случайная подборка модов
Зона поражения 2: Ответный удар
4.1
Тайные Тропы 2
4.2
Autumn Aurora 2
4.1
Боевая подготовка 2
3.6
Белый отряд
3.7
Секрет Дианы
2.2
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
[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
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: