PGRData/Script/matrix/xentity/xawareness/XAwarenessTeam.lua
2024-09-01 22:49:41 +02:00

165 lines
No EOL
5.2 KiB
Lua

local XTeam = require("XEntity/XTeam/XTeam")
local XAwarenessTeam = XClass(XTeam, "XAwarenessTeam")
local MemberData = require("XEntity/XAssign/XAssignMember")
function XAwarenessTeam:Ctor(id)
self.Super.Ctor(self, id)
self.Id = id
self.MemberList = nil
self.LeaderIndex = nil
self.FirstFightIndex = nil
end
function XAwarenessTeam:GetCfg()
return XFubenAwarenessConfigs.GetAllConfigs(XFubenAwarenessConfigs.TableKey.AwarenessTeamInfo)[self.Id]
end
function XAwarenessTeam:GetId() return self.Id end
function XAwarenessTeam:GetBuffId() return self:GetCfg().BuffId end
function XAwarenessTeam:GetNeedCharacter() return self:GetCfg().NeedCharacter end
function XAwarenessTeam:GetRequireAbility() return self:GetCfg().RequireAbility end
function XAwarenessTeam:GetCondition() return self:GetCfg().Condition end
function XAwarenessTeam:GetDesc() return self:GetCfg().Desc end
function XAwarenessTeam:CheckTeamEmpty()
for k, member in pairs(self:GetMemberList()) do
if XTool.IsNumberValid(member:GetCharacterId()) then
return false
end
end
return true
end
function XAwarenessTeam:CheckIsInTeam(characterId)
for index, member in ipairs(self:GetMemberList() or {}) do
local id = member:GetCharacterId()
if id > 0 and id == characterId then
return true, member, index
end
end
return false
end
function XAwarenessTeam:GetMemberList()
if not self.MemberList then
self.MemberList = {}
local count = self:GetNeedCharacter()
for i = 1, count do
self.MemberList[i] = MemberData.New(i) -- 队伍位置
end
if count > 1 then -- 若是多人队伍则队长居中, 即队员索引为{2, 1, 3}
self.MemberList[1], self.MemberList[2] = self.MemberList[2], self.MemberList[1]
end
end
return self.MemberList
end
function XAwarenessTeam:ClearMemberList()
if not self.MemberList then return end
for _, memberData in pairs(self.MemberList) do
memberData:SetCharacterId(0)
end
end
function XAwarenessTeam:GetCharacterType()
if not self.MemberList then return end
for _, memberData in pairs(self.MemberList) do
if memberData:HasCharacter() then
return memberData:GetCharacterType()
end
end
end
function XAwarenessTeam:GetMember(index)
for _, member in ipairs(self:GetMemberList()) do
if member:GetIndex() == index then
return member
end
end
XLog.Error("XAwarenessTeam:GetMember函数无效参数index: " .. tostring(index))
return nil
end
function XAwarenessTeam:SetLeaderIndex(index)
self.LeaderIndex = index
end
function XAwarenessTeam:GetLeaderIndex()
return self.LeaderIndex or XDataCenter.FubenAssignManager.CAPTIAN_MEMBER_INDEX
end
function XAwarenessTeam:SetFirstFightIndex(index)
self.FirstFightIndex = index
end
---==========================================
--- 得到队伍首发位
--- 当首发位不为空时,直接返回首发位
--- 不然查看队长位是否为空,不为空则返回队长位
---(因为服务器在之前只有队长位,后面区分了队长位与首发位,存在有队长位数据,没有首发位数据的情况)
--- 如果队长位也为空,则返回默认首发位
---@return number
---==========================================
function XAwarenessTeam:GetFirstFightIndex()
return self.FirstFightIndex or self.LeaderIndex or XDataCenter.FubenAssignManager.FIRSTFIGHT_MEMBER_INDEX
end
function XAwarenessTeam:GetLeaderSkillDesc()
local memberData = self:GetMember(self:GetLeaderIndex())
if memberData then
local captianSkillInfo = memberData:GetCharacterSkillInfo()
if captianSkillInfo then
return captianSkillInfo.Level > 0 and captianSkillInfo.Intro or string.format("%s%s", captianSkillInfo.Intro, CS.XTextManager.GetText("CaptainSkillLock"))
end
end
return ""
end
function XAwarenessTeam:IsEnoughAbility()
local memberList = self:GetMemberList()
local need = self:GetRequireAbility()
for _, member in pairs(memberList) do
if member:GetCharacterAbility() > need then
return true
end
end
return false
end
function XAwarenessTeam:SetMember(order, characterId)
self:GetMemberList()[order]:SetCharacterId(characterId)
end
-- 获得角色在队伍中的排序
function XAwarenessTeam:GetCharacterOrder(characterId)
for order, v in pairs(self:GetMemberList()) do
if v:GetCharacterId() == characterId then
return order
end
end
return nil
end
function XAwarenessTeam:GetRealOrder(pos)
local order = XDataCenter.FubenAssignManager.GetMemberOrderByIndex(pos, #self:GetMemberList())
return order
end
-- server api
function XAwarenessTeam:SetMemberList(characterIdList)
if characterIdList then
local memberList = self:GetMemberList()
local memberCount = #memberList
for index, v in pairs(memberList) do
local order = XDataCenter.FubenAssignManager.GetMemberOrderByIndex(index, memberCount)
v:SetCharacterId(characterIdList[order])
end
else
for _, v in pairs(self:GetMemberList()) do
v:SetCharacterId(nil)
end
end
end
return XAwarenessTeam