SoC. Добавляем проводника — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Monolith (обсуждение | вклад) м (метод set_actor_position принимает только вектор) |
|||
(не показаны 7 промежуточные версии 6 участников) | |||
Строка 1: | Строка 1: | ||
− | В ТЧ есть единственный момент ,когда в результате диалога с НПС ,ГГ перемещается. Это диалог с О - | + | === Теория === |
− | Примечание: Проводник не будет перемещаться вместе с вами ,как в ЗП. Вы будете перемещаться в одиночку ,как в ЧН. | + | В ТЧ есть единственный момент, когда в результате диалога с НПС, ГГ перемещается. Это диалог с "О-Сознанием". После отказа от вступления, ГГ перемещается на АЭС2. Если использовать эту функцию, можно создать в ТЧ проводника.<br/> |
− | Для этого: | + | ''Примечание: Проводник не будет перемещаться вместе с вами, как в ЗП. Вы будете перемещаться в одиночку, как в ЧН.''<br/> |
− | 1)Для этого в '''gamedata\scripts''' находим файл '''dialogs_aes.script'''. В нём имеется следующая функция | + | === Практика === |
+ | Для этого:<br/> | ||
+ | 1). Для этого в '''gamedata\scripts''' находим файл '''dialogs_aes.script'''. В нём имеется следующая функция: | ||
<lua> | <lua> | ||
function osoznanie_decline(npc, actor) | function osoznanie_decline(npc, actor) | ||
Строка 18: | Строка 20: | ||
end | end | ||
</lua> | </lua> | ||
− | 2)Копируем эту функцию ,допустим ,в '''escape_dialog''' из директории '''gamedata\scripts''' | + | 2). Копируем эту функцию, допустим, в '''escape_dialog''' из директории '''gamedata\scripts'''<br/> |
− | 3)Обратите внимание на вот этот фрагмент из функции: '''db.actor:disable_info_portion("oso_init_dialog")'''. Здесь функция ссылается на инфопоршень ,но на Кордоне данный инфопоршень не прописан. | + | 3). Обратите внимание на вот этот фрагмент из функции: '''db.actor:disable_info_portion("oso_init_dialog")'''. Здесь функция ссылается на инфопоршень, но на Кордоне данный инфопоршень не прописан. <br/> |
− | 4) | + | 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>'''<br/> |
− | 5)Итак ,функция есть ,инфопоршень тоже есть. Теперь нужны координаты. Обратите внимание на следующий фрагмент функции: | + | 5). Итак, функция есть, инфопоршень тоже есть. Теперь нужны координаты. Обратите внимание на следующий фрагмент функции: |
<lua> | <lua> | ||
local point = patrol("mon_jump_aes2_walk") | local point = patrol("mon_jump_aes2_walk") | ||
Строка 27: | Строка 29: | ||
</lua> | </lua> | ||
Здесь функция ссылается на определённые координаты на АЭС2. Но нам нужны координаты на Кордоне. Для этого открываем '''way_101_escape.ltx''' и там дописываем пути. Например вот так: | Здесь функция ссылается на определённые координаты на АЭС2. Но нам нужны координаты на Кордоне. Для этого открываем '''way_101_escape.ltx''' и там дописываем пути. Например вот так: | ||
− | |||
<lua> | <lua> | ||
[mon_jump_esc8_look] | [mon_jump_esc8_look] | ||
Строка 44: | Строка 45: | ||
p0:level_vertex_id = 17468 | p0:level_vertex_id = 17468 | ||
</lua> | </lua> | ||
− | Всё пути есть. Только теперь в функции ,переименуйте фрагмент: | + | Всё пути есть. Только теперь в функции, переименуйте фрагмент: |
<lua> | <lua> | ||
local point = patrol("mon_jump_aes2_walk") | local point = patrol("mon_jump_aes2_walk") | ||
Строка 56: | Строка 57: | ||
</lua> | </lua> | ||
− | Теперь осталось только привязать всё это к диалогу. Я взял диалог с Кузнецовым. | + | Теперь осталось только привязать всё это к диалогу. Я взял диалог с Кузнецовым.<br/> |
Открываем файл dialogs_escape.xml и находим следующие строки: | Открываем файл dialogs_escape.xml и находим следующие строки: | ||
Строка 82: | Строка 83: | ||
</lua> | </lua> | ||
− | Вот ,собственно и всё. Теперь после фразы "Мне надо дальше" вы переместитесь к бункеру Сидоровича. | + | Вот, собственно и всё. Теперь после фразы "Мне надо дальше" вы переместитесь к бункеру Сидоровича.<br/><br/> <br/> |
− | Автор: '''mma''' | + | Я делал также но чуток исправил: |
+ | <lua> | ||
+ | function osoznanie_decline(npc, actor) | ||
+ | --Поршень не нужен, он всёравно удаляется | ||
+ | npc:stop_talk() | ||
+ | actor:stop_talk() | ||
+ | xr_effects.enable_ui(db.actor, nil) | ||
+ | local point = patrol("mon_jump_aes2_walk") | ||
+ | local look = point -- указать можно только один путь | ||
+ | |||
+ | 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 | ||
+ | </lua><br/> | ||
+ | |||
+ | А я делал еще легче - вот так | ||
+ | <lua> | ||
+ | function osoznanie_decline(npc, actor) | ||
+ | npc:stop_talk() | ||
+ | actor:stop_talk() | ||
+ | db.actor:set_actor_position(vector():set(позиция X,позиция Y,позиция Z)) -- Вместо надписей пишем координаты | ||
+ | end | ||
+ | </lua> | ||
+ | |||
+ | Собственно перенос на новую локацию отсутствует но места займет меньше. AntdiabloN | ||
+ | |||
+ | Автор: '''mma'''<br/> | ||
+ | Дооформил: '''DarkST'''<br/> | ||
+ | Подправил: '''Бродяга''' | ||
+ | Представил свой вариант '''AntdiabloN''' | ||
+ | |||
+ | [[Категория:Скрипты]] |
Текущая версия на 11:30, 13 декабря 2015
Теория
В ТЧ есть единственный момент, когда в результате диалога с НПС, ГГ перемещается. Это диалог с "О-Сознанием". После отказа от вступления, ГГ перемещается на АЭС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) local point = patrol("mon_jump_aes2_walk") local look = patrol("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("mon_jump_aes2_walk") local look = point -- указать можно только один путь 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
Собственно перенос на новую локацию отсутствует но места займет меньше. AntdiabloN
Автор: mma
Дооформил: DarkST
Подправил: Бродяга
Представил свой вариант AntdiabloN