Здравствуйте!
В travel_manager.script нашел подобную функцию:
function squad_action_description(actor, npc, dialog_id, phrase_id)
local npc_squad = get_object_squad(npc)
if npc_squad.current_action == nil or npc_squad.current_action.name == "stay_point" then
return "dm_" .. "stalker" .."_doing_nothing_"..tostring(math.random(1,3)) --npc:character_community()
end
local target_id = npc_squad.assigned_target_id
-- if target_id == nil then
-- return "dm_" .. npc:character_community() .."_doing_nothing"
-- end
local target_obj = alife():object(target_id)
if target_obj == nil then
abort("SIM TARGET NOT EXIST %s, action_name %s", tostring(target_id), tostring(npc_squad.current_action.name))
end
local target_clsid = target_obj:clsid()
if target_clsid == clsid.script_actor then
abort("Actor talking with squad, which chasing actor")
elseif target_clsid == clsid.online_offline_group_s then
return "dm_" .. "stalker" .."_chasing_squad_"..alife_character_community(target_obj) --npc:character_community()
elseif target_clsid == clsid.smart_terrain then
local smart_name = target_obj:name()
local travel_class = get_travel_class()
local desc = travel_class.smart_to_stringtables[smart_name]
if desc == nil then
abort("wrong smart name [%s] in travel_manager.ltx", tostring(smart_name))
end
return desc
end
abort("wrong target clsid [%s]", tostring(target_clsid))
end
Собстено меня заинтересовала строка:
return "dm_" .. "stalker" .."_chasing_squad_"..alife_character_community(target_obj) --npc:character_community()
Выдает нам ее НПС когда охотится з отрядом, например за бандитами. Игра обращается к функции "alife_character_community()" (_g.script) и должна вернуть значение "bandit" и выдать "dm_stalker_chasing_squad_bandit", однако игра не правильно определяет группировку отряда и возвращает всегда значение "monster" и на выходе всегда получается "dm_stalker_chasing_squad_monster"
function alife_character_community (obj)
if IsStalker(obj, obj:clsid()) then
return obj:community()
end
return "monster"
end
Находил в _g.script подобное:
function start_game_callback()
aa = alife()
squad_community_by_behaviour = {
["stalker"] = "stalker",
["bandit"] = "bandit",
["dolg"] = "dolg",
["freedom"] = "freedom",
["army"] = "army",
["ecolog"] = "ecolog",
["killer"] = "killer",
["zombied"] = "zombied",
["monolith"] = "monolith",
["monster"] = "monster",
["monster_predatory_day"] = "monster",
["monster_predatory_night"] = "monster",
["monster_vegetarian"] = "monster",
["monster_zombied_day"] = "monster",
["monster_zombied_night"] = "monster",
["monster_special"] = "monster"
}
...
Вот как раз эти группировки отряда должна определять игра. Так вот вопрос: как заставить игру определить группировку преследуемого отряда? Пробовал вместо "alife_character_community(target_obj)" вставить это: "npc_squad:get_squad_community(target_obj)", и игра в таком случае определяет группировку НПС, с которым говорит игрок, а не группировку преследуемого отряда.