add game&rawdata

This commit is contained in:
Vasily Petrov 2026-06-17 23:06:51 +03:00
parent 0133cd976c
commit 49b34b5546
45731 changed files with 709831 additions and 0 deletions

View file

@ -0,0 +1,196 @@
--'******************************************************
--'* Ìåíåäæåð äëÿ âûáîðà êàâåðîâ â òåêóùåì ñìàðòå.
--'******************************************************
class "CCover_manager"
function CCover_manager:__init(smart)
self.squads = {}
self.cover_table = {}
self.board = sim_board.get_sim_board()
self.is_valid = false
-- self.name = smart:name()
-- self.sid = math.random(1,100000)
end
function CCover_manager:register_squad(squad)
-- printf("CCover_manager:register_squad() name[%s] sid[%s]", tostring(self.name), tostring(self.sid))
if squad.player_id ~= "monster" then
self.squads[squad.id] = true
self.is_valid = false
end
end
function CCover_manager:unregister_squad(squad)
-- printf("CCover_manager:unregister_squad() name[%s] sid[%s]", tostring(self.name), tostring(self.sid))
if self.squads[squad.id] == nil then
return
end
self.squads[squad.id] = nil
self.is_valid = false
end
function CCover_manager:calculate_covers(position)
--printf("CCover_manager:calculate_covers() valid[%s]", tostring(self.is_valid))
--callstack()
if self.is_valid == true then
return
end
self.is_valid = true
local npc_table = {}
for k,v in pairs(self.squads) do
local squad = alife():object(k)
for kk in squad:squad_members() do
if db.storage[kk.id] ~= nil then
local npc_object = db.storage[kk.id].object
table.insert(npc_table, npc_object)
end
end
end
for k,v in pairs(npc_table) do
v:register_in_combat()
end
self.cover_table = {}
for k,v in pairs(npc_table) do
v:find_best_cover(position)
end
for k,v in pairs(npc_table) do
local cover = v:find_best_cover(position)
if cover ~= nil then
--printf("!!! %s: %s [%s]", v:name(), cover:level_vertex_id(), tostring(cover:is_smart_cover()))
self.cover_table[v:id()] = {cover_vertex_id = cover:level_vertex_id(), cover_position = cover:position(),
look_pos = position, is_smart_cover = cover:is_smart_cover()}
--else
--printf("!!! nil")
end
end
for k,v in pairs(npc_table) do
v:unregister_in_combat()
end
end
function CCover_manager:save(packet)
set_save_marker(packet, "save", false, "CCover_manager")
packet:w_bool(self.is_valid)
-- ñîõðàíÿòü ðåãèñòðåííûå ñêâàäû
local n = 0
for k,v in pairs(self.cover_table) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs(self.cover_table) do
packet:w_u16(k)
packet:w_u32(v.cover_vertex_id)
packet:w_float(v.cover_position.x)
packet:w_float(v.cover_position.y)
packet:w_float(v.cover_position.z)
packet:w_float(v.look_pos.x)
packet:w_float(v.look_pos.y)
packet:w_float(v.look_pos.z)
packet:w_bool(v.is_smart_cover)
end
set_save_marker(packet, "save", true, "CCover_manager")
end
function CCover_manager:load(packet)
set_save_marker(packet, "load", false, "CCover_manager")
self.is_valid = packet:r_bool()
local n = packet:r_u8()
for i = 1,n do
local npc_id = packet:r_u16()
local cover_vertex_id = packet:r_u32()
local cover_position = vector():set(0,0,0)
cover_position.x = packet:r_float()
cover_position.y = packet:r_float()
cover_position.z = packet:r_float()
local look_pos = vector():set(0,0,0)
look_pos.x = packet:r_float()
look_pos.y = packet:r_float()
look_pos.z = packet:r_float()
local is_smart_cover = packet:r_bool()
self.cover_table[npc_id] = {cover_vertex_id = cover_vertex_id, cover_position = cover_position,
look_pos = look_pos, is_smart_cover = is_smart_cover}
end
set_save_marker(packet, "load", true, "CCover_manager")
end
-- Åñòü ëè ó îáúåêòà âûáðàííûé ñìàðò êàâåð
function has_smart_cover(se_obj, smrttrn)
local cmanager = smrttrn.combat_manager.cover_manager
local npc_id = se_obj.id
local cover = cmanager.cover_table[npc_id]
if cover == nil then
return false
end
if cover.is_smart_cover ~= true then
return false
end
local npc_storage = db.storage[npc_id]
if npc_storage == nil then
return false
end
local npc_obj = npc_storage.object
local level_id = game_graph():vertex(smrttrn.m_game_vertex_id):level_id()
local smrt_cover = se_smart_cover.registered_smartcovers_by_lv_id[level_id][cover.cover_vertex_id]
if smrt_cover == nil then
return false
end
local smrt_cover_object = bind_smart_cover.registered_smartcovers[smrt_cover:name()]
if npc_obj:suitable_smart_cover(smrt_cover_object) then
return true
end
return false
end
-- Åñòü ëè ó îáúåêòà âûáðàííûé êàâåð
function has_cover(se_obj, smrttrn)
local cmanager = smrttrn.combat_manager.cover_manager
local cover = cmanager.cover_table[se_obj.id]
if cover == nil then
return false
end
if cover.is_smart_cover then
local npc_storage = db.storage[npc_id]
if npc_storage == nil then
return true
end
local npc_obj = npc_storage.object
local level_id = game_graph():vertex(smrttrn.m_game_vertex_id):level_id()
local smrt_cover = se_smart_cover.registered_smartcovers_by_lv_id[level_id][cover.cover_vertex_id]
if smrt_cover == nil then
return true
end
local smrt_cover_object = bind_smart_cover.registered_smartcovers[smrt_cover:name()]
if npc_obj:suitable_smart_cover(smrt_cover_object) then
return false
end
end
return true
end
-- Ïîëó÷èòü âûáðàííûé êàâåð îáúåêòà
function get_cover(obj, smrttrn)
local cmanager = smrttrn.combat_manager.cover_manager
return cmanager.cover_table[obj:id()]
end