Создание квеста(полный разбор) — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(слишком путаное описание) |
|||
Строка 351: | Строка 351: | ||
<action>escape_dialog.give_kpk_to_actor</action> <!--вызов функции из скрипта--> | <action>escape_dialog.give_kpk_to_actor</action> <!--вызов функции из скрипта--> | ||
<next>2</next> | <next>2</next> | ||
+ | </phrase> | ||
<phrase id="2"> | <phrase id="2"> | ||
<text>test_kvest_dialog_npc_2</text> | <text>test_kvest_dialog_npc_2</text> | ||
<action>dialogs.break_dialog</action> <!--вызов функции из скрипта--> | <action>dialogs.break_dialog</action> <!--вызов функции из скрипта--> | ||
− | + | </phrase> | |
− | + | ||
</phrase_list> | </phrase_list> | ||
</dialog></ini> | </dialog></ini> |
Версия 08:47, 4 мая 2011
Итак, я VIKman и хочу вас научить делать квесты. Для этого мы создадим нового НПС и сделаем квест чтобы взять у него флеш-карту.) Для всего этого нам понадобится:
Папка config gameplay\character_desc_escape.xml gameplay\dialogs_escape.xml gameplay\info_l01escape.xml gameplay\npc_profile.xml gameplay\tasks_escape.xml game_story_ids.ltx misc\quest_items.ltx scripts\tester_logic.ltx -- его мы создадим text\rus\stable_dialogs_escape.xml text\rus\string_table_items.xml Папка scripts escape_dialog.script И естественно all.spawn
BEGIN
Первым делом снимем координаты где будет находится наш флешко-датель.)
У меня вот такие координаты: position = -172.21215820313,-19.941787719727,-161.09272766113, game_vertex_id = 52, level_vertex_id = 76655
Распаковываем с ACDC all.spawn открываем alife_l01_escape.ltx и пишем в самый конец:
[870] ; cse_abstract properties section_name = stalker -//это для игры тут пишется к примеру если ето у тебя сталкера или бандюки то должно быть section_name = stalker name = tester -//пишем что хотим position = -172.21215820313,-19.941787719727,-161.09272766113 -//позиция direction = 0,0,0 -// направление взгляда(можно писать всегда нули) ; cse_alife_trader_abstract properties money = 5000 -//его бабло character_profile = tester -//ссылка на профиль в character_desc_локация(раз создаем в алайф эскейп значит и профиль будет искатсья в чарактер_деск_ескейп) ; cse_alife_object properties game_vertex_id = 52 -// гейм вертекс distance = 0 level_vertex_id = 76655 -//левел вертекс object_flags = 0xffffffbf custom_data = <<END [logic] cfg = scripts\tester_logic.ltx -// ссылка на логику ; cse[smart_terrains] none = true END story_id = 6001 -//его стори айди ; cse_visual properties visual_name = actors\soldier\soldier_beret_1 -// его визуал upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -172.21215820313,-19.941787719727,-161.09272766113 -//опять пишем позицию upd:o_model = 0 upd:o_torso = 0.028013030067086,0,0.9996075630188 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 2 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 = 1,2,2,1,2 predicate4 = 0,1,1,1 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties
Дальше опишем в character_desc_escape.xml нашего НПС-а:
<!---------------------------------------tester-------------------> <specific_character id="tester" team_default = "1"> <name>Факер Марезфакер</name> <icon>ui_npc_u_green_stalker_3</icon> <!--его иконка--> <bio>Сталкер.</bio> <class>tester</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <!--этого лучше не знать--> <rank>150</rank> <reputation>5</reputation> <money min="500" max="1000" infinitive="0"/> <snd_config>characters_voice\human_01\stalker\</snd_config> <!--его голос--> <crouch_type>-1</crouch_type> <visual>actors\novice\green_stalker_3</visual> <!--его визуал--> <supplies> [spawn] \n <!--его инвентарь,что в нем есть--> wpn_ak74u \n ammo_5.45x39_fmj = 10 \n </supplies> <start_dialog>hello_dialog</start_dialog> <!--его диалоги--> <actor_dialog>test_kvest_dialog_npc</actor_dialog> </specific_character>
В файле npc_profile.xml прописываем класс непися:
<character id="escape_trader"> <class>Trader</class> <specific_character>escape_trader</specific_character> </character> <!---------------------------------------------------------------TEST----------------------------------------------------> <character id="tester"> <class>tester</class> <specific_character>tester</specific_character> </character>
В файле game_story_ids.ltx прописываем его SID который должен совпадать с его id из all.spawn:
; Escape (0-99) 6001 = "tester"
Дадим неписю логику, создадим файл: scripts\tester_logic.ltx , мне понравилась чтобы он сидел на пятой точке, пишем:
[logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] anim = sit_ass no_move = true
Фуххх, вроде непся создали переходим к долгожданному квесту))))
Нам нужно создать инфопоршены для этого в файле с адресом: gameplay\info_l01escape.xml после <game_information_portions> пишем:
<info_portion id="test_kvest_start"> <task>test_kvest</task> <!--обращение к таску--> </info_portion> <info_portion id="test_kvest_have"></info_portion> <info_portion id="test_kvest_done"></info_portion>
Итак мы создали направление на задание <task>test_kvest</task>, что ж пропишем его. Для этого открываем файл по адресу gameplay\tasks_escape.xml и пишем в самом начале:
<!------------------------------------------------------------test----------> <game_task id="test_kvest"> <!--название таска из gameplay\info_l01escape.xml--> <title>Принести КПК Сидору</title> <!--название которое будет писатся в кпк--> <objective> <text>Бежать к сталкеру</text> <!--название части таска в кпк--> <icon>ui_iconsTotal_lost_thing</icon> <!--иконка таска--> <infoportion_complete>test_kvest_done</infoportion_complete> <!--инфопоршень из info_l01escape.xml при его получении, часть таска выполняется--> </objective> <objective> <text>Бежать к сталкеру</text> <!--название части таска в кпк--> <map_location_type hint="Факер Мазерфакер">green_location</map_location_type> <!--обозначение на карте--> <object_story_id>tester</object_story_id> <!--сюда пишем наш sid из game_story_ids.ltx, который в свою очередь определяется по story_id из all.spawn--> <infoportion_complete>test_kvest_have</infoportion_complete> <!--инфопоршень из info_l01escape.xml при его получении, часть таска выполняется--> </objective> <objective> <text>Вернуться к Сидору</text> <!--название части таска в кпк--> <map_location_type hint="Сидорович">blue_location</map_location_type> <!--обозначение на карте--> <object_story_id>Escape_Trader</object_story_id> <!--сюда пишем наш sid из game_story_ids.ltx, который в свою очередь определяется по story_id из all.spawn--> <infoportion_complete>test_kvest_done</infoportion_complete> <!--инфопоршень из info_l01escape.xml при его получении, часть таска выполняется--> </objective> </game_task> <!------------------------------------------------------------test---------->
Таск готов! После всего этого я уже устал писать это всё, ну да ладно, продолжим)))
Создадим наш новый КПК который нам даст наш многоуважаемый Факер Мазерфакер)))
Для этого откроем файл misc\quest_items.ltx и пропише секцию нашего кпк:
[moy_kpk]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\quest_items\moy_kpk" ;$prefetch = 32 class= II_ATTCH cform= skeleton visual= equipments\item_pda.ogf radius= 1 ;script_binding= stalker.object_init quest_item = true description = item_moy_kpk_desc inv_name = item_moy_kpk_name inv_name_short= item_moy_kpk_name inv_weight = 0.2 inv_grid_width= 2 inv_grid_height= 1 inv_grid_x = 6 inv_grid_y = 13 cost= 0
И русифицируем его в файле text\rus\string_table_items.xml
<string id="item_moy_kpk_desc"> <text>КПК с информацие. Доступ без пароля не возможен</text> </string> <string id="item_moy_kpk_name"> <text>КПК с информацией</text> </string>
КПК готов, блин теперь создадим замудреный диалог:
1.Говарим с Сидором о задании
2.Факер Мазерфакер нам дает КПК
3.Отдаем сидору КПК
BEGIN!!! (ВПЕРЕД(кто не в курсе дела))
Пропишем путь к диалогу, открываем файл gameplay\character_desc_escape.xml и tradery дописываем 2 диалога:
Ищем Сидора аха вот он
<specific_character id="escape_trader" no_random = "1"> <name>escape_trader_name</name> <icon>ui_npc_u_trader</icon> <bio>escape_trader_bio</bio> <class>trader</class> <community>trader</community> <visual>actors\trader\trader</visual> <rank>330</rank> <reputation>23</reputation> <money min="100000" max="100000" infinitive="1"/> <supplies> [spawn] \n wpn_knife \n </supplies> <start_dialog>escape_trader_start_dialog</start_dialog> <actor_dialog>escape_trader_talk_info</actor_dialog> <actor_dialog>escape_trader_jobs</actor_dialog> <actor_dialog>tm_trader_dialog</actor_dialog> <actor_dialog>tm_trader_reward</actor_dialog> <actor_dialog>escape_trader_done_blockpost_box</actor_dialog> </specific_character>
Значит пишем:
<specific_character id="escape_trader" no_random = "1"> <name>escape_trader_name</name> <icon>ui_npc_u_trader</icon> <bio>escape_trader_bio</bio> <class>trader</class> <community>trader</community> <visual>actors\trader\trader</visual> <rank>330</rank> <reputation>23</reputation> <money min="100000" max="100000" infinitive="1"/> <supplies> [spawn] \n wpn_knife \n </supplies> <start_dialog>escape_trader_start_dialog</start_dialog> <actor_dialog>escape_trader_talk_info</actor_dialog> <actor_dialog>escape_trader_jobs</actor_dialog> <actor_dialog>tm_trader_dialog</actor_dialog> <actor_dialog>tm_trader_reward</actor_dialog> <actor_dialog>escape_trader_done_blockpost_box</actor_dialog> <actor_dialog>test_kvest_dialog</actor_dialog> <!--наш диалог--> <actor_dialog>test_kvest_dialog_done</actor_dialog> <!--наш диалог--> </specific_character>
А путь к диалогу у Факера Мазерфакера уже прописан:
<actor_dialog>test_kvest_dialog_npc</actor_dialog>
Переходим непосредственно к самому диалогу. Открываем gameplay\dialogs_escape.xml и в самом начале после строки <game_dialogs> пишем:
<dialog id="test_kvest_dialog"> <dont_has_info>test_kvest_start</dont_has_info> <!--проверка, не получил ли ГГ инфопоршень раньше, если получил то диалог не срабатывает--> <phrase_list> <phrase id="0"> <text>test_kvest_dialog_0</text> <next>11</next> </phrase> <phrase id="1"> <text>test_kvest_dialog_1</text> <give_info>test_kvest_start</give_info> <!--даем инфопоршень--> </phrase> <phrase id="11"> <text>test_kvest_dialog_11</text> <next>1</next> <next>2</next> </phrase> <phrase id="2"> <text>test_kvest_dialog_2</text> </phrase> </phrase_list> </dialog> <dialog id="test_kvest_dialog_done"> <dont_has_info>test_kvest_done</dont_has_info> <!--проверка, не получил ли ГГ инфопоршень раньше, если получил то диалог не срабатывает--> <has_info>test_kvest_have</has_info> <!--проверка,есть ли у ГГ инфопоршень, если получил то диалог срабатывает--> <precondition>escape_dialog.have_kpk</precondition> <!--проверка из скрипта--> <phrase_list> <phrase id="0"> <text>test_kvest_dialog_done_0</text> <next>1</next> </phrase> <phrase id="1"> <text>test_kvest_dialog_done_1</text> <action>escape_dialog.money_give_test</action> <!--вызов функции из скрипта--> <give_info>test_kvest_done</give_info> <!--даем инфопоршень--> <action>escape_dialog.give_kpk_to_sidor</action> <!--вызов функции из скрипта--> </phrase> </phrase_list> </dialog> <dialog id="test_kvest_dialog_npc"> <dont_has_info>test_kvest_have</dont_has_info> <!--проверка, не получил ли ГГ инфопоршень раньше, если получил то диалог не срабатывает--> <has_info>test_kvest_start</has_info> <!--проверка,есть ли у ГГ инфопоршень, если получил то диалог срабатывает--> <phrase_list> <phrase id="0"> <text>test_kvest_dialog_npc_0</text> <next>1</next> </phrase> <phrase id="1"> <text>test_kvest_dialog_npc_1</text> <give_info>test_kvest_have</give_info> <!--даем инфопоршень--> <action>escape_dialog.give_kpk_to_actor</action> <!--вызов функции из скрипта--> <next>2</next> </phrase> <phrase id="2"> <text>test_kvest_dialog_npc_2</text> <action>dialogs.break_dialog</action> <!--вызов функции из скрипта--> </phrase> </phrase_list> </dialog>
Переводим наши каракули в файле text\rus\stable_dialogs_escape.xml
<!-------------------------------------------test------------------------> <string id="test_kvest_dialog_0"> <text>Даров, радиоктивное мясо.</text> </string> <string id="test_kvest_dialog_11"> <text>Слушай Меченный тебе я смотрю денег нужно подзаработать? Сходи к сталкеру одному он мне инфу должен.</text> </string> <string id="test_kvest_dialog_1"> <text>Да, давай схожу.</text> </string> <string id="test_kvest_dialog_2"> <text>Не, мне влом.</text> </string> <string id="test_kvest_dialog_done_0"> <text>Вот я принес.</text> </string> <string id="test_kvest_dialog_done_1"> <text>Молодец! Держи награду.</text> </string> <string id="test_kvest_dialog_npc_0"> <text>Эй, сталкер. Да ты мне Сидор сказал то что ты ему инфу должен принести.</text> </string> <string id="test_kvest_dialog_npc_1"> <text>Ой да, чувак на возьми.Спасибо, что напомнил, ато мне Сидор задницу надрал бы.</text> </string> <string id="test_kvest_dialog_npc_2"> <text>Давай. Я погнал.</text> </string> <!-------------------------------------------test------------------------>
Прописываем спавн кпк в инвертарь эктора при разговоре с Сами-Знаете_Кем)))
Открываем escape_dialog.script и рисуем внутри вне всяких функций!!!
-- это наши функции вызываемые из диалога function money_give_test(first_speaker, second_speaker) --ГГ получает деньги dialogs.relocate_money(first_speaker, 1000, "in") end function have_kpk(first_speaker, second_speaker) -- проверка есть ли у ГГ наш КПК return first_speaker:object("moy_kpk") ~= nil end function give_kpk_to_sidor(first_speaker, second_speaker) -- ГГ отдает КПК dialogs.relocate_item_section(first_speaker, "moy_kpk", "out") end function give_kpk_to_actor(first_speaker, second_speaker) -- ГГ принимает КПК dialogs.relocate_item_section(first_speaker, "moy_kpk", "in") end
Ну. Вроде все. Что ж если какие-то вылеты перепроверьте все пункты, если уж что-то не так пишите по почте: vikman_david@mail.ru, с темой "Создание квестов".
Всем спасибо все свободны.)))
Автор:VIKman
Выход:22.11.2010