Убиваем NPC попавших в зону рестриктора
[logic]
active = sr_idle@1
[sr_idle@1]
on_npc_in_zone = название_этого_рестриктора | sr_idle@2 %=kill_npc%
[sr_idle@2]
on_npc_in_zone = название_этого_рестриктора | sr_idle@1 %=kill_npc%
S.T.A.L.K.E.R|Модостроение |
В общем, какие-то проблемы с загрузкой сайта. |
Добавь в закладки |
Будем постепенно решать... |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » S.T.A.L.K.E.R|Модостроение » Уроки по модостроению [ЗП] » По мелочам [Cпавн [Spawn]]
Убиваем NPC попавших в зону рестриктора
[logic]
active = sr_idle@1
[sr_idle@1]
on_npc_in_zone = название_этого_рестриктора | sr_idle@2 %=kill_npc%
[sr_idle@2]
on_npc_in_zone = название_этого_рестриктора | sr_idle@1 %=kill_npc%
Заставляем NPC бежать в укрытие от выброса
Стоит чуть-чуть подправить логику, например:
[logic@bazmar_kamp1]
active = animpoint@bazmar_kamp1
[animpoint@bazmar_kamp1]
cover_name = kamp1
on_info = {=surge_started} walker@bazmar_kamp1_surge ;если выброс начался, то идем в укрытие, на точку [walker@bazmar_kamp1_surge].
use_camp = true
meet = meet@bazmar
[walker@bazmar_kamp1_surge]
path_walk = bazmar_surge1_walk
path_look = bazmar_surge1_look
meet = meet@bazmar
def_state_moving = run
use_camp = true
def_state_standing = sit_knee
on_info = {=surge_complete} animpoint@bazmar_kamp1 ;если выброс закончился, то идем обратно в анимпоинт.
[meet@bazmar]
close_anim = nil
close_victim = nil
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
use = {=actor_enemy} false, {=dist_to_actor_le(3)} true, false
snd_on_use = {!dist_to_actor_le(3)} nil
meet_on_talking = false
Получаем названия графпоинтов с координатами
Для работы нужен: ACDC COP with split
Конвертируем наш all.spawn батником:
perl acdccop.pl -d all.spawn -split_spawns -graph
pause
Далее, конвертируем получившийся level.spawn батником:
perl acdccop.pl -d level.spawn -w -l -ls
pause
И у нас выведуться все графпоинты. Пример:
[1]
section_name = graph_point
name = start_actor_01
position = -384.276184082031,1.29132080078125,91.8708267211914
direction = 0,0,0
[2]
section_name = graph_point
name = l09_deadcity_graph_point_1
position = -333.990936279297,-1.19963073730469,159.972640991211
direction = 0,0,0
[3]
section_name = graph_point
name = l09_deadcity_graph_point_2
position = -326.427185058594,-4.72068786621094,-4.02680969238281
direction = 0,0,0
[4]
section_name = graph_point
name = l09_deadcity_graph_point_3
position = -321.962768554688,7.70576477050781,67.442985534668
direction = 0,0,0
[5]
section_name = graph_point
name = l09_deadcity_graph_point_4
position = -300.007446289063,-7.8902587890625,222.426391601563
direction = 0,0,0
Переход схемы логики по прибытию на последнюю точку пути
Прежде всего нужно поставить сигнал на последнюю точку пути:
p12:name = wp012|sig=end_way
p12:position = -156.36016845703,7.499502658844,-206.67156982422
p12:game_vertex_id = 1263
p12:level_vertex_id = 39802
Затем в логике проверять наличие сигнала при получении которого будет произведен переход:
[walker@stalker]
...
on_signal = end_way | remark@stalker
[remark@stalker]
Алгоритм поиска логики персонажа
Для того чтобы найти индивидуальную логику НПС нужно:
1. По имени НПС определить его идентификатор. Например для Бороды (подробнее урок 002 в КМБ) zat_a2_stalker_barmen
2. Найти его файл логики, он должен содержать строку типа suitable = {=check_npc_name(zat_a2_stalker_barmen), то есть проверку на то, что НПС и есть тот самый Борода.
3. Находим файл zat_a2_stalker_barmen.ltx в папке configs\scripts\zaton
Файлов логики может быть несколько, по числу смартов на которых данный НПС может находиться.
Отключить блокировку дверей на базах
Например двери на Cкадовск configs\scripts\zaton\zat_a2_ph_ship_door.ltx
в секциях заменить locked = true на locked = false
Как заставить NPC заговорить первым?
[meet]
use={Условие}self, true
Источник света
[2584]
; cse_abstract properties
section_name = lights_hanging_lamp
name = lights_white_12m_glass
position = -349.036407470703,6.66451787948608,393.330322265625
direction = 0,0,-1.57079601287842
; cse_alife_object properties
game_vertex_id = 317
distance = 0
level_vertex_id = 1231404
object_flags = 0xffffff3a
custom_data = <<END
[collide]
ignore_static
END
; cse_visual properties
visual_name = dynamics\light\light_white_glass
; cse_ph_skeleton properties
; cse_alife_object_hanging_lamp properties
main_color = 0xffffe3b5
main_brightness = 0.800000011920929
main_range = 12
light_flags = 0xa
lamp_fixed_bones = link
health = 100
main_virtual_size = 0.100000001490116
ambient_radius = 2.5
ambient_power = 0.600000023841858
main_bone = bone_lamp
main_cone_angle = 2.09439492225647
glow_radius = 0.699999988079071
ambient_bone = bone_omni
cse_alife_object_hanging_lamp__unk1_f32 = 1
cse_alife_object_hanging_lamp__unk2_f32 = 1
cse_alife_object_hanging_lamp__unk3_f32 = 1
NPC в лагере смотрят не в его центр
Нужно указать параметр direction в секции:
direction = a,b,c
Нужно устанавливать значение B - угол в радианах между направлением взгляда и направлением оси координат. Использовать db.actor:direction() - для снятия направления взгляда не корректно, нужно использовать направление камеры: device().cam_dir
Все значения могут находиться в интервале от -3.14 до +3.14
Секции инструментов в all.spawn
toolkit_1, toolkit_2, toolkit_3
Вы здесь » S.T.A.L.K.E.R|Модостроение » Уроки по модостроению [ЗП] » По мелочам [Cпавн [Spawn]]