Исправление вылета при стрельбе в бармена — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
RedPython (обсуждение | вклад) (оформление) |
|||
Строка 1: | Строка 1: | ||
==Предыстория== | ==Предыстория== | ||
− | |||
При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь. | При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь. | ||
+ | |||
==Причина вылета== | ==Причина вылета== | ||
+ | Вылет происходит при переключении Бармена из режима ведения боя в обычный, точнее не в сам момент, а в момент окончания анимации, когда он прячет оружие за спину. | ||
− | |||
==Решение== | ==Решение== | ||
− | + | Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл '''gamegata\config\scripts\bar_barman.ltx''' и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием '';добавляем строку''. | |
− | Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл | + | <ini>[logic] |
− | + | ||
− | gamegata\config\scripts\ | + | |
− | + | ||
− | и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием | + | |
− | + | ||
− | + | ||
− | < | + | |
− | [logic] | + | |
− | + | ||
active = walker@at_hole | active = walker@at_hole | ||
− | |||
combat_ignore = combat_ignore | combat_ignore = combat_ignore | ||
− | |||
trade = misc\trade_barman.ltx | trade = misc\trade_barman.ltx | ||
− | |||
inv_max_weight = 10000 | inv_max_weight = 10000 | ||
− | |||
− | |||
[walker@at_hole] | [walker@at_hole] | ||
− | |||
path_walk = bar_barman_hole_walk | path_walk = bar_barman_hole_walk | ||
− | |||
path_look = bar_barman_hole_look | path_look = bar_barman_hole_look | ||
− | |||
def_state_standing = barman_wait_free | def_state_standing = barman_wait_free | ||
− | |||
def_state_moving1 = barman_walk_free | def_state_moving1 = barman_walk_free | ||
− | |||
def_state_moving2 = barman_walk_free | def_state_moving2 = barman_walk_free | ||
− | |||
def_state_moving3 = barman_walk_free | def_state_moving3 = barman_walk_free | ||
− | |||
combat_ignore_cond = always ; добавляем строку | combat_ignore_cond = always ; добавляем строку | ||
− | |||
meet = meet@at_hole | meet = meet@at_hole | ||
− | |||
danger = danger_condition@barman | 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, | 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 | {=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole | ||
− | |||
− | |||
[walker@zone_1] | [walker@zone_1] | ||
− | |||
path_walk = barman_zone_1_walk | path_walk = barman_zone_1_walk | ||
− | |||
path_look = barman_zone_1_look | path_look = barman_zone_1_look | ||
− | |||
def_state_standing = barman_wait_free | def_state_standing = barman_wait_free | ||
− | |||
def_state_moving1 = barman_walk_free | def_state_moving1 = barman_walk_free | ||
− | |||
def_state_moving2 = barman_walk_free | def_state_moving2 = barman_walk_free | ||
− | |||
def_state_moving3 = barman_walk_free | def_state_moving3 = barman_walk_free | ||
− | |||
combat_ignore_cond = always ; добавляем строку | combat_ignore_cond = always ; добавляем строку | ||
− | |||
meet = meet@at_hole | meet = meet@at_hole | ||
− | |||
danger = danger_condition@barman | 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, | 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 | {=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole | ||
− | |||
− | |||
[walker@zone_2] | [walker@zone_2] | ||
− | |||
path_walk = barman_zone_2_walk | path_walk = barman_zone_2_walk | ||
− | |||
path_look = barman_zone_2_look | path_look = barman_zone_2_look | ||
− | |||
def_state_standing = barman_wait_free | def_state_standing = barman_wait_free | ||
− | |||
def_state_moving1 = barman_walk_free | def_state_moving1 = barman_walk_free | ||
− | |||
def_state_moving2 = barman_walk_free | def_state_moving2 = barman_walk_free | ||
− | |||
def_state_moving3 = barman_walk_free | def_state_moving3 = barman_walk_free | ||
− | |||
combat_ignore_cond = always ; добавляем строку | combat_ignore_cond = always ; добавляем строку | ||
− | |||
meet = meet@at_hole | meet = meet@at_hole | ||
− | |||
danger = danger_condition@barman | 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, | 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 | {=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole | ||
− | |||
− | |||
[walker@zone_3] | [walker@zone_3] | ||
− | |||
path_walk = barman_zone_3_walk | path_walk = barman_zone_3_walk | ||
− | |||
path_look = barman_zone_3_look | path_look = barman_zone_3_look | ||
− | |||
def_state_standing = barman_wait_free | def_state_standing = barman_wait_free | ||
− | |||
def_state_moving1 = barman_walk_free | def_state_moving1 = barman_walk_free | ||
− | |||
def_state_moving2 = barman_walk_free | def_state_moving2 = barman_walk_free | ||
− | |||
def_state_moving3 = barman_walk_free | def_state_moving3 = barman_walk_free | ||
− | |||
combat_ignore_cond = always ; добавляем строку | combat_ignore_cond = always ; добавляем строку | ||
− | |||
meet = meet@at_hole | meet = meet@at_hole | ||
− | |||
danger = danger_condition@barman | 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, | 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 | {=actor_in_zone(bar_barman_meet_zone_3)} walker@zone_3, walker@at_hole | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[meet@at_hole] | [meet@at_hole] | ||
− | |||
meet_state = 2|barman_talk_free@bar_bar_barmen_hello | meet_state = 2|barman_talk_free@bar_bar_barmen_hello | ||
− | |||
meet_state_wpn = 2|barman_talk_free@bar_bar_barmen_hello | meet_state_wpn = 2|barman_talk_free@bar_bar_barmen_hello | ||
− | |||
danger = danger_condition@barman | danger = danger_condition@barman | ||
− | |||
victim = 2|actor | victim = 2|actor | ||
− | |||
victim_wpn = 2|actor | victim_wpn = 2|actor | ||
− | |||
use = true | use = true | ||
− | |||
use_wpn = true | use_wpn = true | ||
− | + | meet_dialog = bar_bar_barmen_start | |
− | meet_dialog | + | |
− | + | ||
combat_ignore_cond = always ; добавляем строку | combat_ignore_cond = always ; добавляем строку | ||
− | |||
[danger_condition@barman] | [danger_condition@barman] | ||
+ | ignore_distance = 0 | ||
− | + | [combat_ignore] | |
+ | combat_ignore_cond = always</ini> | ||
+ | ==Дополнение== | ||
+ | При убийстве Бармена вылет может происходить также и по другой причине. Секция торговцев [trader] не прописана в менеджере спавна предметов на трупах NPC. | ||
− | + | Для устраниения этого нам понадобятся файлы: | |
+ | * '''gamedata\scripts\death_manager.script''' | ||
+ | * '''gamedata\config\misc\death_items_by_communities.ltx''' | ||
− | + | В первом в функцию ''init_drop_settings()'', в таблицу ''local community_list'' добавляем секцию ''"trader"''. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Выглядит это примерно так : | Выглядит это примерно так : | ||
− | < | + | <lua>function init_drop_settings() |
− | local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }</ | + | local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", |
− | + | "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }</lua> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Во втором файле, в самом конце добавляем секцию ''[trader]:stalker''. Здесь, после неё, можно не писать ничего, а можно вписать какие-нибудь секции item'ов, если надо, чтобы в трупе Бармена что-то появилось после смерти. | |
− | <br> | + | ==Авторы== |
− | + | Статья создана '''Cjayho''' <br /> | |
+ | Дополнение от '''Piter''' | ||
− | + | [[Категория:Конфигурационные файлы]] |
Текущая версия на 18:42, 23 февраля 2012
Содержание
Предыстория
При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь.
Причина вылета
Вылет происходит при переключении Бармена из режима ведения боя в обычный, точнее не в сам момент, а в момент окончания анимации, когда он прячет оружие за спину.
Решение
Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл gamegata\config\scripts\bar_barman.ltx и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием ;добавляем строку.
[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
Дополнение
При убийстве Бармена вылет может происходить также и по другой причине. Секция торговцев [trader] не прописана в менеджере спавна предметов на трупах NPC.
Для устраниения этого нам понадобятся файлы:
- gamedata\scripts\death_manager.script
- gamedata\config\misc\death_items_by_communities.ltx
В первом в функцию init_drop_settings(), в таблицу local community_list добавляем секцию "trader".
Выглядит это примерно так :
function init_drop_settings() local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }
Во втором файле, в самом конце добавляем секцию [trader]:stalker. Здесь, после неё, можно не писать ничего, а можно вписать какие-нибудь секции item'ов, если надо, чтобы в трупе Бармена что-то появилось после смерти.
Авторы
Статья создана Cjayho
Дополнение от Piter