Исправление вылета при стрельбе в бармена — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Исправление вылета при стрельбе в бармена — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(оформление)
 
Строка 1: Строка 1:
 
==Предыстория==
 
==Предыстория==
 
 
При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь.
 
При создании своего мода я обнаружил что если в Бармена стрелять, либо если монстр тронет его, то через некоторое время происходит вылет без лога. Проверено на патче 1.004, который является весьма популярным у модостроителей. Довольно долгое гугление результатов не дало, потому пришлось проблему решать самому. Сами понимаете, что вылеты без лога - вещь вообще трудноисправимая, и на решение у меня ушло довольно много времени. Посему, чтобы остальным мододелам, если они столкнутся с этой проблемой, не изобретать велосипед заново, я и хочу описать решение здесь.
 +
  
 
==Причина вылета==
 
==Причина вылета==
 +
Вылет происходит при переключении Бармена из режима ведения боя в обычный, точнее не в сам момент, а в момент окончания анимации, когда он прячет оружие за спину.
  
Вылет происходит при переключении Бармена из режима ведения боя в обычный, точнее не в сам момент, а в момент окончания анимации когда он прячет оружие за спину.
 
  
 
==Решение==
 
==Решение==
 
+
Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл '''gamegata\config\scripts\bar_barman.ltx''' и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием '';добавляем строку''.
Наиболее простым решением было отключить вообще любую реакцию на боевые раздражители. В принципе, также как и Сидоровичу, ему эта реакция ни к чему - он все равно бессмертный. Поэтому открываем файл  
+
<ini>[logic]
 
+
gamegata\config\scripts\[[bar_barman.ltx]]
+
 
+
и в его содержимое добавляем строки, которые в листинге ниже отмечены комментарием <u>;добавляем строку</u>.
+
 
+
 
+
<code>
+
[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 = bar_bar_barmen_start
+
 
+
 
combat_ignore_cond = always ; добавляем строку
 
combat_ignore_cond = always ; добавляем строку
 
  
 
[danger_condition@barman]
 
[danger_condition@barman]
 +
ignore_distance = 0
  
ignore_distance      = 0
+
[combat_ignore]
 +
combat_ignore_cond = always</ini>
  
  
 +
==Дополнение==
 +
При убийстве Бармена вылет может происходить также и по другой причине. Секция торговцев [trader] не прописана в менеджере спавна предметов на трупах NPC.
  
[combat_ignore]
+
Для устраниения этого нам понадобятся файлы:
 +
* '''gamedata\scripts\death_manager.script'''
 +
* '''gamedata\config\misc\death_items_by_communities.ltx'''
  
combat_ignore_cond = always
+
В первом в функцию ''init_drop_settings()'', в таблицу ''local community_list'' добавляем секцию ''"trader"''.
  
</code>
 
 
UPD:
 
 
При убийстве Бармена вылет может происходить так же и по другой причине. Секция торговцев [trader] не прописана в менеджере спавна предметов на трупах НПС.<br>
 
Устранить это можно следующим образом.<br>
 
Для этого нам понадобятся файлы:<br>
 
1. gamedata\scripts\'''death_manager.script'''<br>
 
2. gamedata\config\misc\'''death_items_by_communities.ltx'''<br>
 
'''
 
В первом, в функцию '''init_drop_settings()'''<br>
 
в строку '''local community_list = {'''<br>
 
добавляем секцию <br>'''"trader"'''<br>
 
 
Выглядит это примерно так :
 
Выглядит это примерно так :
<code>function init_drop_settings()
+
<lua>function init_drop_settings()
local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }</code>
+
local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military",
Во втором файле, в самом конце добавляем секцию <br>
+
"zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }</lua>
'''[trader]:stalker'''<br>
+
здесь, после неё, можно не писать ничего, а можно вписать какие-нибудь секции итемов, если надо чтобы в трупе Бармена что-то появилось после смерти.<br>
+
 
+
=Авторы=
+
  
Статья создана: Cjayho
+
Во втором файле, в самом конце добавляем секцию ''[trader]:stalker''. Здесь, после неё, можно не писать ничего, а можно вписать какие-нибудь секции item'ов, если надо, чтобы в трупе Бармена что-то появилось после смерти.
  
<br>
+
==Авторы==
P.S. Статью такую не нашел, но это весьма не плохая статья, поэтому перенёс с другой Wiki
+
Статья создана '''Cjayho''' <br />
 +
Дополнение от '''Piter'''
  
UPD: by 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

Другие места
LANGUAGE