Исправление вылета при стрельбе в бармена
Материал из S.T.A.L.K.E.R. Inside Wiki
Содержание
Предыстория
При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь.
Причина вылета
Вылет происходит при переключении Бармена из режима ведения боя в обычный, точнее не в сам момент, а в момент окончания анимации когда он прячет оружие за спину.
Решение
Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл
gamegata\config\scripts\bar_barman.ltx
и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием ;добавляем строку.
<source lang="ini"> [logic]
active = walker@at_hole
combat_ignore = combat_ignore
trade = misc\trade_barman.ltx
inv_max_weight = 10000
[walker@at_hole]
path_walk = bar_barman_hole_walk
path_look = bar_barman_hole_look
def_state_standing = barman_wait_free
def_state_moving1 = barman_walk_free
def_state_moving2 = barman_walk_free
def_state_moving3 = barman_walk_free
combat_ignore_cond = always ; добавляем строку
meet = meet@at_hole
danger = danger_condition@barman
on_info = {=actor_in_zone(bar_barman_meet_zone_1)} walker@zone_1, {=actor_in_zone(bar_barman_meet_zone_2)} walker@zone_2,
{=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole
[walker@zone_1]
path_walk = barman_zone_1_walk
path_look = barman_zone_1_look
def_state_standing = barman_wait_free
def_state_moving1 = barman_walk_free
def_state_moving2 = barman_walk_free
def_state_moving3 = barman_walk_free
combat_ignore_cond = always ; добавляем строку
meet = meet@at_hole
danger = danger_condition@barman
on_info = {=actor_in_zone(bar_barman_meet_zone_1)} walker@zone_1, {=actor_in_zone(bar_barman_meet_zone_2)} walker@zone_2,
{=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole
[walker@zone_2]
path_walk = barman_zone_2_walk
path_look = barman_zone_2_look
def_state_standing = barman_wait_free
def_state_moving1 = barman_walk_free
def_state_moving2 = barman_walk_free
def_state_moving3 = barman_walk_free
combat_ignore_cond = always ; добавляем строку
meet = meet@at_hole
danger = danger_condition@barman
on_info = {=actor_in_zone(bar_barman_meet_zone_1)} walker@zone_1, {=actor_in_zone(bar_barman_meet_zone_2)} walker@zone_2,
{=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole
[walker@zone_3]
path_walk = barman_zone_3_walk
path_look = barman_zone_3_look
def_state_standing = barman_wait_free
def_state_moving1 = barman_walk_free
def_state_moving2 = barman_walk_free
def_state_moving3 = barman_walk_free
combat_ignore_cond = always ; добавляем строку
meet = meet@at_hole
danger = danger_condition@barman
on_info = {=actor_in_zone(bar_barman_meet_zone_1)} walker@zone_1, {=actor_in_zone(bar_barman_meet_zone_2)} walker@zone_2,
{=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole
[meet@at_hole]
meet_state = 2|barman_talk_free@bar_bar_barmen_hello
meet_state_wpn = 2|barman_talk_free@bar_bar_barmen_hello
danger = danger_condition@barman
victim = 2|actor
victim_wpn = 2|actor
use = true
use_wpn = true
meet_dialog = bar_bar_barmen_start
combat_ignore_cond = always ; добавляем строку
[danger_condition@barman]
ignore_distance = 0
[combat_ignore]
combat_ignore_cond = always
</source>
Авторы
Статья создана: Cjayho
P.S. Статью такую не нашел, но это весьма не плохая статья, поэтому перенёс с другой Wiki