Теорія
У ТЧ є єдиний момент, коли в результаті діалогу з НПС ГГ переміщається. Це діалог із "Про-Свідомістю". Після відмови від вступу, РР переміщається на АЕС2. Якщо використовувати цю функцію, можна створити у ТЧ провідника.
Примітка: Провідник не переміщатиметься разом з вами, як у ЗП. Ви будете переміщатися поодинці, як у ЧН.
Практика
І тому:
1). Для цього в gamedata\scripts знаходимо файл dialogs_aes.script . У ньому є така функція:
function osoznanie_decline ( npc, actor ) db.actor:disable_info_portion ( " oso_init_dialog " ) npc : stop_talk ( ) actor : stop_talk ( ) xr_effects.enable_ui ( db.actor , nil ) ( "mon_jump_aes2_look" ) db.actor:set_actor_position ( point:point ( 0 ) ) local dir = look:point ( 0 ) : sub ( point:point ( 0 ) ) db.actor:set_actor_direction ( -dir:getH ( ) ) end
2). Копіюємо цю функцію, скажімо, в escape_dialog з директорії gamedata\scripts
3). Зверніть увагу на цей фрагмент з функції: db.actor:disable_info_portion("oso_init_dialog") . Тут функція посилається на інфопоршень, але на Кордоні цей інфопоршень не прописано.
4). Тоді перейменовуємо цей інфопоршень так, як вам зручно, наприклад, db.actor:disable_info_portion("esc_init_dialog") . Примітка: Назва інфопоршня це "esc_init_dialog" (що за дужками перейменовувати не треба) . Потім додаємо інфопоршень у файл info_l01escape.xml з директорії gamedata\config\gameplay . У цьому файлі додаємо: <info_portion id="esc_init_dialog"></info_portion>
5). Отже, функція є, інфопоршень також є. Тепер потрібні координати. Зверніть увагу на наступний фрагмент функції:
local point = patrol ( "mon_jump_aes2_walk" ) local look = patrol ( "mon_jump_aes2_look" )
Тут функція посилається певні координати на АЭС2. Але нам потрібні координати на Кордоні. Для цього відкриваємо way_101_escape.ltx і там дописуємо шляхи. Наприклад, ось так:
[ mon_jump_esc8_look ] points = p0 p0:name = wp00 p0:position = -239.110947 , -19.788391 , -134.999161 p0:game_vertex_id = 8 p0:level_vertex_id = 16191 [ mon_jump_esc8_walk ] points = p0 p0:name = wp00 p0:position = -238.017761 , -19.888292 , -140.161987 p0:game_vertex_id = 47 p0:level_vertex_id = 17468
Усі шляхи є. Тільки тепер у функції перейменуйте фрагмент:
local point = patrol ( "mon_jump_aes2_walk" ) local look = patrol ( "mon_jump_aes2_look" )
На фрагмент:
local point = patrol ( "mon_jump_esc8_walk" ) local look = patrol ( "mon_jump_esc8_look" )
Тепер залишилося лише прив'язати все це до діалогу. Я взяв діалог із Кузнєцовим.
Відкриваємо файл dialogs_escape.xml та знаходимо наступні рядки:
<dialog id= "esc_bridge_soldiers_start" > <precondition>dialogs.is_not_wounded</precondition> <phrase_list> <phrase id= "12" > <text>esc_bridge_soldiers_start_12</text> <next> 13 </next> </phrase>
Це фраза "Мені треба далі". Сюди вставляємо активізацію нашої функції. Вийде таке:
<dialog id= "esc_bridge_soldiers_start" > <precondition>dialogs.is_not_wounded</precondition> <phrase_list> <phrase id= "12" > <text>esc_bridge_soldiers_start_12</text> <action>escape_dialog.osoznanie_decline</action> Тут наступна структура: <action>Назва_скрипта. Назва_функції</action> <next> 13 </next> </phrase>
Ось, власне, і все. Тепер після фрази "Мені треба далі" ви переміститеся до бункера Сидоровича.
Я робив також але трохи виправив:
function osoznanie_decline ( npc, actor ) --Поршень не потрібен, він все одно видаляється npc : stop_talk ( ) actor :stop_talk ( ) xr_effects.enable_ui ( db.actor, nil ) local point = patrol ( " - вказати можна лише один шлях db.actor:set_actor_position ( point:point ( 0 ) ) local dir = look:point ( 0 ) : sub ( point:point ( 0 ) ) db.actor:set_actor_direction ( -dir:getH ( ) ) end
А я робив ще легше – ось так
function osoznanie_decline ( npc, actor ) npc:stop_talk ( ) actor:stop_talk ( ) db.actor:set_actor_position ( vector ( ) :set ( позиція X,позиція Y,позиція Z ) ) -- Замість написів пишемо координати end
Власне перенесення на нову локацію відсутнє, але місця займе менше.