ro-table/Asstes/Resources/Script/Com/Data/Team/MyselfTeamData.txt
2025-06-04 05:02:57 +08:00

263 lines
7.3 KiB
Plaintext

autoImport("TeamData");
MyselfTeamData = class("TeamData", TeamData)
MyselfTeamData.EMPTY_STATE = 1;
function MyselfTeamData:ctor(teamData)
MyselfTeamData.super.ctor(self, teamData);
self.memberListExpMe = {};
self.memberListWithAdd = {};
self.hireMemberMap = {};
self.hireMemberList = {};
self.playerMemberList = {};
end
function MyselfTeamData:SetMember(data)
local member = self:GetMemberByGuid(data.guid);
if(not member)then
member = self:AddMember(data);
self:RefreshCatMasterInfo(member);
else
local isMyMemberData = data.guid == member.id;
local cachemapid = member.mapid;
local cacheJob = member.job;
local cacheOffline = member:IsOffline();
local cacheCat = member.cat;
member:SetData(data);
if(cacheOffline ~= member:IsOffline())then
if(member:IsOffline())then
self:NotifyMemberOffline(member);
else
self:NotifyMemberOnline(member);
end
end
if(cachemapid~=member.mapid)then
self:NotifyMemberChangeMap(member);
end
if(isMyMemberData and cacheJob~=member.job)then
self:NotifyMyTeamJobChange(member.job);
end
if(cacheCat ~= member.cat)then
self:RefreshCatMasterInfo(member);
end
end
return member;
end
-- 玩家上線
function MyselfTeamData:NotifyMemberOnline(memberData)
EventManager.Me():DispatchEvent(TeamEvent.MemberOnline, memberData);
GameFacade.Instance:sendNotification(TeamEvent.MemberOnline, memberData);
end
-- 玩家離線
function MyselfTeamData:NotifyMemberOffline(memberData)
EventManager.Me():DispatchEvent(TeamEvent.MemberOffline, memberData);
GameFacade.Instance:sendNotification(TeamEvent.MemberOffline, memberData);
end
function MyselfTeamData:NotifyMemberChangeMap(memberData)
GameFacade.Instance:sendNotification(TeamEvent.MemberChangeMap, memberData);
end
function MyselfTeamData:NotifyMyTeamJobChange(nowJob)
FunctionTeam.Me():MyTeamJobChange(nowJob);
end
function MyselfTeamData:RefreshCatMasterInfo(memberData)
local masterid = memberData.masterid;
local master = self:GetMemberByGuid(masterid);
if(master)then
memberData:SetMasterName(master.name);
elseif(masterid == Game.Myself.data.id)then
memberData:SetMasterName(Game.Myself.data.name);
end
end
function MyselfTeamData:AddMember(member)
local addMember = MyselfTeamData.super.AddMember(self, member);
if(addMember)then
if(addMember.id == Game.Myself.data.id)then
self.myMemberInfo = addMember;
addMember.offline = 0;
else
local scenePlayer = NSceneUserProxy.Instance:Find(addMember.id);
if(scenePlayer)then
scenePlayer:OnAvatarPriorityChanged()
scenePlayer.data:Camp_SetIsInMyTeam(true);
scenePlayer.data:SetTeamID(self.id);
end
end
GameFacade.Instance:sendNotification(TeamEvent.MemberEnterTeam, addMember);
EventManager.Me():DispatchEvent(TeamEvent.MemberEnterTeam, addMember);
return addMember;
end
end
function MyselfTeamData:RemoveMember(guid, catid)
local removeMember = MyselfTeamData.super.RemoveMember(self, guid, catid);
if(removeMember)then
if(removeMember.id ~= Game.Myself.data.id)then
local scenePlayer = NSceneUserProxy.Instance:Find(removeMember.id);
if(scenePlayer)then
scenePlayer:OnAvatarPriorityChanged()
scenePlayer.data:Camp_SetIsInMyTeam(false);
scenePlayer.data:SetTeamID(scenePlayer.data.id);
end
end
GameFacade.Instance:sendNotification(TeamEvent.MemberExitTeam, removeMember);
EventManager.Me():DispatchEvent(TeamEvent.MemberExitTeam, removeMember);
return removeMember;
end
end
function MyselfTeamData:GetMembersListExceptMe()
local memberList = self:GetMembersList();
TableUtility.ArrayClear(self.memberListExpMe);
for i = 1,#memberList do
if(memberList[i].id ~= Game.Myself.data.id)then
table.insert(self.memberListExpMe, memberList[i]);
end
end
return self.memberListExpMe;
end
function MyselfTeamData:GetMemberListWithAdd()
local memberList = self:GetMembersListExceptMe();
TableUtility.ArrayClear(self.memberListWithAdd);
for i=1,#memberList do
table.insert(self.memberListWithAdd, memberList[i]);
end
if(#self.memberListWithAdd < GameConfig.Team.maxmember - 1)then
table.insert(self.memberListWithAdd, MyselfTeamData.EMPTY_STATE);
end
return self.memberListWithAdd;
end
function MyselfTeamData:GetPlayerMemberList(includeMe, exceptCat)
TableUtility.ArrayClear(self.playerMemberList);
local list = self:GetMembersList();
for i=1,#list do
if(list[i].id == Game.Myself.data.id)then
if(includeMe)then
table.insert(self.playerMemberList, list[i]);
end
else
if(exceptCat ~= true)then
table.insert(self.playerMemberList, list[i]);
else
if(list[i].cat == nil or list[i].cat == 0)then
table.insert(self.playerMemberList, list[i]);
end
end
end
end
return self.playerMemberList;
end
function MyselfTeamData:GetMemberCreatureArrayInRange(range, creatureArray, filter, filterArgs)
local FindCreature = SceneCreatureProxy.FindCreature
local myPosition = Game.Myself:GetPosition()
for _,v in pairs(self.membersMap)do
local creature = FindCreature(v.id)
if nil ~= creature and (filter == nil or filter(creature, filterArgs)) then
if 0 < range then
local dist = VectorUtility.DistanceXZ(creature:GetPosition(), myPosition)
if dist < range then
TableUtility.ArrayPushBack(creatureArray, creature)
end
else
TableUtility.ArrayPushBack(creatureArray, creature)
end
end
end
end
function MyselfTeamData:GetApplyList()
local memData = self:GetMemberByGuid(Game.Myself.data.id);
if(memData and
(memData.job == SessionTeam_pb.ETEAMJOB_LEADER or memData.job == SessionTeam_pb.ETEAMJOB_TEMPLEADER) )then
return MyselfTeamData.super.GetApplyList(self);
end
return {};
end
function MyselfTeamData:Server_SetHireTeamMembers(cats)
self.hireMemberList_dirty = true;
for i=1,#cats do
local serverCat = cats[i];
local guid = serverCat.id;
local memberData = self.hireMemberMap[guid];
if(not memberData)then
memberData = TeamMemberData.new();
memberData.id = guid;
self.hireMemberMap[guid] = memberData;
end
memberData.cat = serverCat.catid;
memberData:SetRestTime(serverCat.relivetime);
memberData.baselv = serverCat.lv;
memberData.expiretime = serverCat.expiretime;
memberData.masterid = serverCat.ownerid;
memberData:UpdateHireMemberInfo();
self:RefreshCatMasterInfo(memberData);
end
end
function MyselfTeamData:Server_RemoveHireTeamMembers(cats)
for i=1, #cats do
self:Server_RemoveHireTeamMember(cats[i]);
end
end
function MyselfTeamData:ClearHireTeamMembers()
for key,catMember in pairs(self.hireMemberMap)do
self.hireMemberList_dirty = true;
catMember:Exit();
self.hireMemberMap[key] = nil;
end
end
function MyselfTeamData:Server_RemoveHireTeamMember(serverCat)
local memberData = self.hireMemberMap[serverCat.id];
if(memberData)then
self.hireMemberList_dirty = true;
memberData:Exit();
end
self.hireMemberMap[serverCat.id] = nil;
end
function MyselfTeamData:GetHireTeamMembers()
if(self.hireMemberList_dirty)then
self.hireMemberList_dirty = false;
TableUtility.ArrayClear(self.hireMemberList);
for _, member in pairs(self.hireMemberMap)do
table.insert(self.hireMemberList, member);
end
table.sort(self.hireMemberList, TeamData.SortTeamMember);
end
return self.hireMemberList;
end
function MyselfTeamData:Exit()
for _,v in pairs(self.membersMap)do
self:RemoveMember(v.id);
end
EventManager.Me():DispatchEvent(TeamEvent.ExitTeam);
end