autoImport("SocialData") autoImport("SocialRecallData") FriendProxy = class('FriendProxy', pm.Proxy) FriendProxy.Instance = nil; FriendProxy.NAME = "FriendProxy" FriendProxy.PresentMode= { Exchange=1, -- 交易所贈送 Lottery=2, -- 扭蛋盒贈送 } function FriendProxy:ctor(proxyName, data) self.proxyName = proxyName or FriendProxy.NAME if(FriendProxy.Instance == nil) then FriendProxy.Instance = self end if data ~= nil then self:setData(data) end self:Init() end function FriendProxy:Init() self.FriendData = {} self.ApplyData = {} self.SearchData = {} self.blacklistData = {} self.foreverBlacklistData = {} self.blacklist = {} self.recentTMember = {} self.contractData = {} self.recallList = {} end function FriendProxy:CallAddFriend(friendGuid) local count = #self.FriendData + #friendGuid if count > GameConfig.Social.maxfriend then MsgManager.ShowMsgByID(429) return end for i=1,#friendGuid do local guid = friendGuid[i] if Game.Myself.data.id == guid then MsgManager.ShowMsgByID(416) return end if self:IsFriend(guid) then MsgManager.ShowMsgByID(417) return end end ServiceSessionSocialityProxy.Instance:CallAddRelation(friendGuid, SocialManager.PbRelation.Friend) end function FriendProxy:_AddData(array, data) if not self:IsInTable(array, data.guid) then TableUtility.ArrayPushBack(array, data) end end function FriendProxy:_RemoveData(array, guid) for i=1, #array do if array[i].guid == guid then table.remove(array, i) return i end end return 0 end --好友名冊 function FriendProxy:AddFriend(socialData) self:_AddData(self.FriendData, socialData) local scenePlayer = NSceneUserProxy.Instance:Find(socialData.guid) if scenePlayer then scenePlayer:OnAvatarPriorityChanged() end end function FriendProxy:SetPresentMode(type) self.presentMode=type end function FriendProxy:GetPresentMode() if(not self.presentMode)then return FriendProxy.PresentMode.Exchange end return self.presentMode end function FriendProxy:RemoveFriend(guid) self:_RemoveData(self.FriendData, guid) end function FriendProxy:SortFriendData() self:SortData(self.FriendData, SocialManager.SocialRelation.Friend) end function FriendProxy:GetFriendData() ServiceSessionSocialityProxy.Instance:CallQuerySocialData() return self.FriendData end local onlineData = {} function FriendProxy:GetOnlineFriendData() local friendData = self:GetFriendData(); TableUtility.TableClear(onlineData) for i=1,#friendData do local data = friendData[i]; if(data:IsOnline())then table.insert(onlineData, data); end end return onlineData; end --搜索好友 function FriendProxy:SetSearchData(data) self.SearchData = {} for i=1,#data.datas do local friend = SocialData.CreateAsTable(data.datas[i]) TableUtility.ArrayPushBack(self.SearchData, friend) end end function FriendProxy:GetSearchData() return self.SearchData end function FriendProxy:ClearSearchData() for i = #self.SearchData, 1, -1 do self.SearchData[i]:Destroy() self.SearchData[i] = nil end end --申請資訊 function FriendProxy:AddApply(socialData) self:_AddData(self.ApplyData, socialData) end function FriendProxy:RemoveApply(guid) self:_RemoveData(self.ApplyData, guid) end function FriendProxy:SortApplyData() if #self.ApplyData > 1 then local relation = SocialManager.SocialRelation.Apply table.sort(self.ApplyData,function(l,r) return l:GetCreatetime(relation) > r:GetCreatetime(relation) end) end end function FriendProxy:GetApplyData() return self.ApplyData end function FriendProxy:IsFriend(guid) for i=1,#self.FriendData do if self.FriendData[i].guid == guid then return true end end return false end function FriendProxy:GetFriendById(guid) for i=1,#self.FriendData do local data = self.FriendData[i] if data.guid == guid then return data end end end function FriendProxy:SortData(data, relation) if #data > 1 then local lcreatetime,rcreatetime table.sort(data,function(l,r) if l:IsOnline() == r:IsOnline() then lcreatetime= l:GetCreatetime(relation) rcreatetime = r:GetCreatetime(relation) if lcreatetime and rcreatetime then return lcreatetime < rcreatetime end else if l.offlinetime and r.offlinetime then return l.offlinetime < r.offlinetime end end end) end end function FriendProxy:IsInTable(table,key) local data for i=1,#table do if table[i].guid == key then data = table[i] end end return data end -- 最近隊友 function FriendProxy:AddRecentTeam(socialData) self:_AddData(self.recentTMember, socialData) end function FriendProxy:RemoveRecentTeam(guid) self:_RemoveData(self.recentTMember, guid) end function FriendProxy:SortRecentTeamMember() if(#self.recentTMember>1)then table.sort(self.recentTMember, function (ta, tb) -- 稍後改掉 return ta.offlinetime