2025-06-04 05:02:57 +08:00

261 lines
5.2 KiB
Plaintext

autoImport("TeamMemberData");
TeamData = class("TeamData")
TeamData.INVALID_TEAMID = 0
TeamGoalType = {
Around = 10010,
EndlessTower = 10100,
Laboratory = 10200,
Dojo = 10300,
RepairSeal = 10400,
}
TeamSummaryType = {
-- [SessionTeam_pb.ETEAMDATA_ID] = "id",
[SessionTeam_pb.ETEAMDATA_TYPE] = "type",
[SessionTeam_pb.ETEAMDATA_MINLV] = "minlv",
[SessionTeam_pb.ETEAMDATA_MAXLV] = "maxlv",
[SessionTeam_pb.ETEAMDATA_OVERTIME] = "overtime",
[SessionTeam_pb.ETEAMDATA_MEMBERCOUNT] = "membercount",
[SessionTeam_pb.ETEAMDATA_AUTOACCEPT] = "autoaccept",
[SessionTeam_pb.ETEAMDATA_PICKUP_MODE] = "pickupmode",
}
function TeamData:ctor(teamData)
self.name = "No TeamName";
self.membersMap = {};
self.memberList = {};
self.memberNum = 0;
self.applysMap = {};
self:SetData(teamData);
end
function TeamData:SetData(teamData)
if(teamData)then
self.id = teamData.guid;
if(teamData.items)then
self:SetSummary(teamData.items, teamData.name);
end
self:SetMembers(teamData.members);
self:SetApplys(teamData.applys);
end
end
function TeamData:SetSummary(summaryes, name)
if(name and name~="")then
self.name = name;
end
-- local updateStr = "TeamData: | name:";
-- updateStr = updateStr..self.name.." | ";
for i=1,#summaryes do
local item = summaryes[i];
if(item and item.type)then
local key = TeamSummaryType[item.type];
if(key)then
self[key] = item.value;
-- updateStr = updateStr..string.format("%s:%s | ", key, tostring(item.value));
end
end
end
-- helplog(updateStr);
end
function TeamData:SetSeal(teamSealData)
end
function TeamData:SetMembers(datas)
for i=1,#datas do
self:SetMember(datas[i]);
end
end
function TeamData:SetMember(data)
local member = self:GetMemberByGuid(data.guid);
if(not member)then
member = self:AddMember(data);
else
member:SetData(data);
end
return member;
end
function TeamData:AddMember(data)
if(data and data.guid)then
self.memberList_dirty = true;
local newMember = TeamMemberData.new(data);
self.membersMap[data.guid] = newMember;
self.memberNum = self.memberNum+1;
-- TeamData.SetTeamIdToPlayer(data.guid,self.id,self.name)
return newMember;
end
end
function TeamData:RemoveMembers(deletelst)
for i=1,#deletelst do
self:RemoveMember(deletelst[i]);
end
end
function TeamData:RemoveMember(guid)
local catchMember = self:GetMemberByGuid(guid);
if(catchMember)then
self.memberList_dirty = true;
self.membersMap[guid] = nil;
self.memberNum = self.memberNum-1;
-- TeamData.SetTeamIdToPlayer(guid,TeamData.INVALID_TEAMID,self.name)
end
return catchMember;
end
function TeamData:GetMemberByGuid(guid)
return self.membersMap[guid];
end
function TeamData:IsTeamFull()
local memberList = self:GetMembersList();
local memNum = 0;
for i=1,#memberList do
if(not memberList[i]:IsHireMember())then
memNum = memNum + 1;
end
end
return memNum >= GameConfig.Team.maxmember;
end
function TeamData:GetMembersList()
if(self.memberList_dirty)then
self.memberList_dirty = false;
TableUtility.ArrayClear(self.memberList);
for _,v in pairs(self.membersMap)do
table.insert(self.memberList, v);
end
table.sort(self.memberList, TeamData.SortTeamMember);
end
return self.memberList;
end
function TeamData.SortTeamMember(ma, mb)
if(ma.id ~= mb.id)then
return ma.id < mb.id;
end
if(ma.cat ~= nil and mb.cat ~= nil)then
return ma.cat < mb.cat;
end
return false;
end
function TeamData:GetMemberMap()
return self.membersMap;
end
function TeamData:SetApplys(applys)
for i=1,#applys do
self:SetApply(applys[i]);
end
end
function TeamData:SetApply(apply)
local catchApply = self:GetApplyByGuid(apply.guid);
if(not catchApply)then
catchApply = self:AddApply(apply);
else
catchApply:SetData(apply);
end
return catchApply;
end
function TeamData:AddApply(apply)
if(apply and apply.guid)then
local catchApply = TeamMemberData.new(apply);
self.applysMap[apply.guid] = catchApply;
return catchApply;
end
end
function TeamData:RemoveApplys(deletelst)
for i=1,#deletelst do
self:RemoveApply(deletelst[i]);
end
end
function TeamData:RemoveApply(guid)
local catchApply = self:GetApplyByGuid(guid);
if(catchApply)then
self.applysMap[guid] = nil;
end
return catchApply;
end
function TeamData:GetApplyByGuid(guid)
return self.applysMap[guid];
end
function TeamData:GetApplyList()
local result = {};
for k,v in pairs(self.applysMap) do
table.insert(result, v);
end
return result;
end
function TeamData:ClearApplyList()
TableUtility.TableClear(self.applysMap);
end
function TeamData:GetLeader()
for _,mdata in pairs(self.membersMap)do
if(mdata.job == SessionTeam_pb.ETEAMJOB_LEADER)then
return mdata;
end
end
end
function TeamData:GetTempLeader()
for _,mdata in pairs(self.membersMap)do
if(mdata.job == SessionTeam_pb.ETEAMJOB_TEMPLEADER)then
return mdata;
end
end
end
function TeamData:GetNowLeader()
local leader = self:GetLeader();
if(leader and leader.offline==0)then
return leader;
end
return self:GetTempLeader();
end
function TeamData:CheckInTeam(playerid)
return self.membersMap[playerid] ~= nil;
end
function TeamData:ClearTeamMembers()
for key,member in pairs(self.membersMap)do
member:Exit();
self.membersMap[key] = nil;
end
end
function TeamData:Exit()
self:ClearTeamMembers();
end