PGRData/Script/matrix/xentity/xmonstercombat/XMonsterTeam.lua

93 lines
2.2 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
local XTeam = require("XEntity/XTeam/XTeam")
---@class XMonsterTeam : XTeam
local XMonsterTeam = XClass(XTeam, "XMonsterTeam")
function XMonsterTeam:Ctor()
-- 怪物信息 XTeam的Ctor有加载本地信息处理这里不能直接初始化
self.MonsterIds = self.MonsterIds or { 0, 0 }
end
function XMonsterTeam:GetSaveKey()
return string.format("MonsterTeam_%s_%s", XPlayer.Id, self:GetId())
end
function XMonsterTeam:_Save()
if self.LocalSave then
XSaveTool.SaveData(self:GetSaveKey(), {
Id = self.Id,
EntitiyIds = self.EntitiyIds,
FirstFightPos = self.FirstFightPos,
CaptainPos = self.CaptainPos,
MonsterIds = self.MonsterIds
})
end
if self.SaveCallback then
self.SaveCallback(self)
end
end
function XMonsterTeam:GetMonsterIdByPos(pos)
return self.MonsterIds[pos] or 0
end
function XMonsterTeam:GetMonsterIds()
return self.MonsterIds
end
function XMonsterTeam:UpdateMonsterPos(monsterId, pos, isJoin)
if isJoin then
self.MonsterIds[pos] = monsterId or 0
else
for i, id in pairs(self.MonsterIds) do
if id == monsterId then
self.MonsterIds[i] = 0
break
end
end
end
self:Save()
end
function XMonsterTeam:UpdateMonsterIds(monsters)
for pos, monsterId in pairs(monsters) do
self.MonsterIds[pos] = monsterId
end
self:Save()
end
function XMonsterTeam:GetMonsterIsEmpty()
for _, v in ipairs(self.MonsterIds) do
if v ~= 0 then
return false
end
end
return true
end
function XMonsterTeam:GetMonsterIdIsInTeam(monsterId)
return table.contains(self.MonsterIds, monsterId)
end
-- 排序规则不等于0的优先
function XMonsterTeam:MonsterSort()
table.sort(self.MonsterIds, function(a, b)
local weightA = a > 0 and 10 or 0
local weightB = b > 0 and 10 or 0
return weightA > weightB
end)
end
function XMonsterTeam:Clear()
self.EntitiyIds = { 0, 0, 0 }
self.FirstFightPos = 1
self.CaptainPos = 1
self.MonsterIds = { 0, 0 }
self:Save()
end
function XMonsterTeam:ClearMonsterIds()
self.MonsterIds = { 0, 0 }
self:Save()
end
return XMonsterTeam