------------------------------------------------ --作者:xihan --日期:2019-05-28 --文件:ArenaShouXiSystem.lua --模块:ArenaShouXiSystem --描述:首席竞技场系统 ------------------------------------------------ local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition; local ArenaShouXiSystem = { --购买次数 BuyCount = 0, IsWaiteSecKill = false, IsMiaoSha = false, WaiteTime = 3, WaiteTick = 0, LeftTime = 0, } local L_Sort = table.sort local L_Tonumber = tonumber; local L_SplitStr = Utils.SplitStr; local L_Send = GameCenter.Network.Send; --积分 local L_Score = nil; --排名 local L_Rank = nil; --剩余次数 local L_RemainCount = nil; --剩余CD时间 local L_RemainCD = nil; --挑战玩家 local L_FightPlayers = nil; --记录保持者 local L_TopPlayers = nil; --战斗记录 local L_Reports = nil; --昨日排名 local L_YesterdayRank = nil; --是否离开竞技场地图 local L_IsLevelArenaMap = nil; --当前目标ID local L_TargetID = nil; --战斗结果 local L_BattleReport = nil; --重置每日排名的剩余时间 local L_RemainTimeByResetRank = nil; --首次排名奖励 local L_FistRankAward = nil; --首次排名需要展示的数据 local L_ShowData = nil; --系统初始化 function ArenaShouXiSystem:Initialize() L_Score = 0; L_Rank = 0; L_RemainCount = 0; L_RemainCD = 0; end --系统卸载 function ArenaShouXiSystem:UnInitialize() L_Score = 0; L_Rank = 0; L_RemainCount = 0; L_RemainCD = 0; L_FightPlayers = nil; L_TopPlayers = nil; L_Reports = nil; L_YesterdayRank = nil; L_IsLevelArenaMap = false; L_TargetID = 0; L_BattleReport = nil; end --刷新小红点 function ArenaShouXiSystem:RefreshRedPoint() GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.ArenaShouXi, 0) local _haveAward = false; if L_FistRankAward then local _curRank = L_FistRankAward.rank; local _awardList = L_FistRankAward.rewardList or {}; DataConfig.DataJJCRank:Foreach(function(k, v) if k ~= 1 then if v.PosMax >= _curRank and _curRank ~= nil and _curRank ~= 0 and v.FirstRewardItem ~= "" then local isEqual = false for i=1,#_awardList do if v.Id == _awardList[i] then isEqual = true end end if not isEqual then _haveAward = true end end end end) end if _haveAward then GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.ArenaShouXi, 0, RedPointCustomCondition(true)); end end --刷新次数小红点 function ArenaShouXiSystem:RefreshCountRedPoint() GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.ArenaShouXi, 1) if L_RemainCount > 0 then GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.ArenaShouXi, 1, RedPointCustomCondition(true)); end end --刷新购买小红点 function ArenaShouXiSystem:RefreshBuyRedPoint() GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.ArenaShouXi, 2) local totalBuyCount = GameCenter.VipSystem:GetCurVipPowerParam(23) if totalBuyCount > self.BuyCount then GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.ArenaShouXi, 2, RedPointCustomCondition(true)); end end --获取积分 function ArenaShouXiSystem:GetScore() return L_Score; end --获取排名 function ArenaShouXiSystem:GetRank() return L_Rank; end --剩余次数 function ArenaShouXiSystem:GetRemainCount() return L_RemainCount; end --剩余时间 function ArenaShouXiSystem:GetRemainCD() return L_RemainCD; end --挑战玩家 function ArenaShouXiSystem:GetFightPlayers() return L_FightPlayers; end --记录保持者 function ArenaShouXiSystem:GetTopPlayers() return L_TopPlayers; end --战斗记录 function ArenaShouXiSystem:GetReports() return L_Reports; end --昨日排名 function ArenaShouXiSystem:GetYesterdayRank() return L_YesterdayRank; end --是否离开竞技场地图 function ArenaShouXiSystem:IsLevelArenaMap() return L_IsLevelArenaMap; end --当前目标ID function ArenaShouXiSystem:GetTargetID() return L_TargetID; end --获取挑战玩家的战斗力 function ArenaShouXiSystem:GetFightPowerByTarget(targetId) if L_FightPlayers ~= nil then for i = 1, #L_FightPlayers do if L_FightPlayers[i].roleID == targetId then return L_FightPlayers[i].fightPower end end end end --战斗结果 function ArenaShouXiSystem:GetBattleReport() return L_BattleReport; end --首次排名奖励信息 function ArenaShouXiSystem:GetFistRankAward() return L_FistRankAward end --获取首次奖励展示数据 function ArenaShouXiSystem:GetShowData() if not L_ShowData then L_ShowData = List:New(); DataConfig.DataJJCRank:Foreach(function(_, v) if v.FirstRewardItem and v.FirstRewardItem ~= "" and v.Id ~= 1 then local _item = {}; _item.Config = v; _item.Id = v.Id _item.RewardState = self:GetAwardState(v.Id) _item.Awards = List:New(); local _t = L_SplitStr(v.FirstRewardItem, ";_"); for i=1,#_t, 2 do _item.Awards:Add({tonumber(_t[i]),tonumber(_t[i+1])}); end L_ShowData:Add(_item); end end) else for i = 1,#L_ShowData do L_ShowData[i].RewardState = self:GetAwardState(L_ShowData[i].Config.Id) end end --对数据排序 L_ShowData:Sort(function(a,b) return a.Config.PosMax > b.Config.PosMax end ) for i = 1, #L_ShowData do for j = 1, #L_ShowData - i do if L_ShowData[j].RewardState > L_ShowData[j + 1].RewardState then local temp = L_ShowData[j + 1]; L_ShowData[j + 1] = L_ShowData[j]; L_ShowData[j] = temp; end end end return L_ShowData; end --获取是否已领取奖励 function ArenaShouXiSystem:GetAwardState(id) if L_FistRankAward.rank == 0 then return ArenaSXFirstAwardEnum.None end if L_FistRankAward then local _cfg = DataConfig.DataJJCRank[id]; local _curRank = L_FistRankAward.rank; if _cfg.PosMax < _curRank then return ArenaSXFirstAwardEnum.None; else local _awardList = L_FistRankAward.rewardList or {}; for i=1,#_awardList do if _cfg.Id == _awardList[i] then return ArenaSXFirstAwardEnum.Finish; end end return ArenaSXFirstAwardEnum.CanGet; end end return ArenaSXFirstAwardEnum.None; end function ArenaShouXiSystem:Update(dt) if self.IsWaiteSecKill then if self.WaiteTickb.rank end); L_TopPlayers:Sort(function(a,b) return a.rank>b.rank end); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATEPLAYERS); end --更新挑战次数、排名 function ArenaShouXiSystem:ResUpdateChance(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_Rank = msg.rank; L_RemainCount = msg.count; L_RemainCD = msg.cd; self:RefreshCountRedPoint() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATECOUNT); end --更换挑战对象 function ArenaShouXiSystem:ResUpdatePlayers(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_FightPlayers = List:New(msg.players); L_TopPlayers = List:New(msg.rank123); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATEPLAYERS); end --返回昨日排名 function ArenaShouXiSystem:ResYesterdayRank(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_YesterdayRank = msg.rank; L_RemainTimeByResetRank = msg.time; GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATEYESTERDAY_RANK,msg.rank); end --返回战报数据 function ArenaShouXiSystem:ResReports(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_Reports = List:New(msg.reports); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_RECORDUPDATE); end --竞技场通知 function ArenaShouXiSystem:ResJJCTargetID(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_TargetID = msg.targetID; end --结算界面 function ArenaShouXiSystem:ResJJCBattleReport(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_BattleReport = msg; L_Score = L_Score + msg.score; L_Rank = msg.curRank; --关闭倒计时界面 GameCenter.PushFixEvent(UIEventDefine.UIArenaSXCountdownForm_Close) if self.IsMiaoSha then self.IsMiaoSha = false GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_MIAOSHA_RESULT) else GameCenter.PushFixEvent(UIEventDefine.UIArenaSXResultForm_OPEN) end end --上线发送jjc提示信息 function ArenaShouXiSystem:ResOnlineJJCInfo(msg) L_RemainCount = msg.r_count; self:RefreshCountRedPoint() end --挑战开始返回 function ArenaShouXiSystem:ResStartBattleRes(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); --关闭界面 GameCenter.PushFixEvent(UIEventDefine.UIArenaForm_Close); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_FIGHTSTART) end --首次达到排名奖励 function ArenaShouXiSystem:ResGetFirstReward(msg) GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE); L_FistRankAward = msg; ArenaShouXiSystem:RefreshRedPoint(); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATECOUNT); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_FIRSTAWARD); end function ArenaShouXiSystem:ResBuyJJCTimes(msg) self.BuyCount = msg.buyTimes self:RefreshBuyRedPoint() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATECOUNT) end return ArenaShouXiSystem;