Для цього ми створимо нового NPC і зробимо квест щоб взяти у нього флеш-карту.) Для цього нам знадобиться:
Папка 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.911727 3 -// позиція 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 - / up = 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 ; 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 ; 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\ukr\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>
Перекладаємо наші doodle у файлі 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
Ну. Наче все. Що ж якщо якісь вильоти перевірте ще раз всі пункти