438 lines
13 KiB
Lua
438 lines
13 KiB
Lua
|
------------------------------------------------
|
|||
|
--作者: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.WaiteTick<self.WaiteTime then
|
|||
|
self.WaiteTick = self.WaiteTick + dt
|
|||
|
else
|
|||
|
self.IsWaiteSecKill = false
|
|||
|
self.WaiteTick = 0
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====[msg]====
|
|||
|
|
|||
|
--================[Req]================[Req]================[Req]================[Req]================[Req]================
|
|||
|
--打开jjc
|
|||
|
function ArenaShouXiSystem:ReqOpenJJC()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN, DataConfig.DataMessageString.Get("ArenaLoadingTips"));
|
|||
|
L_Send("MSG_JJC.ReqOpenJJC");
|
|||
|
end
|
|||
|
|
|||
|
--更换对手
|
|||
|
function ArenaShouXiSystem:ReqChangeTarget()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN, DataConfig.DataMessageString.Get("ArenaLoadingTips"));
|
|||
|
L_Send("MSG_JJC.ReqChangeTarget");
|
|||
|
end
|
|||
|
|
|||
|
--挑战
|
|||
|
function ArenaShouXiSystem:ReqChallenge(targetID, isSecKill)
|
|||
|
if L_RemainCount <= 0 then
|
|||
|
Utils.ShowPromptByEnum("CountNotEnough")
|
|||
|
else
|
|||
|
--uint64 targetID
|
|||
|
if isSecKill then
|
|||
|
self.IsWaiteSecKill = true
|
|||
|
self.WaiteTick = 0
|
|||
|
end
|
|||
|
L_Send("MSG_JJC.ReqChallenge",{targetID = targetID, seckill = isSecKill});
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--领奖
|
|||
|
function ArenaShouXiSystem:ReqGetAward()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqGetAward");
|
|||
|
end
|
|||
|
|
|||
|
--添加挑战次数
|
|||
|
function ArenaShouXiSystem:ReqAddChance()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqAddChance");
|
|||
|
end
|
|||
|
|
|||
|
--获取昨天排名
|
|||
|
function ArenaShouXiSystem:ReqGetYesterdayRank()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqGetYesterdayRank");
|
|||
|
end
|
|||
|
|
|||
|
--获取战报
|
|||
|
function ArenaShouXiSystem:ReqGetReport()
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqGetReport");
|
|||
|
end
|
|||
|
|
|||
|
--退出jjc
|
|||
|
function ArenaShouXiSystem:ReqJJCexit()
|
|||
|
if GameCenter.GameSceneSystem.ActivedScene.MapId == 8000 then
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqJJCexit");
|
|||
|
else
|
|||
|
--GameCenter.PushFixEvent(UIEventDefine.UIArenaShouXiForm_Close);
|
|||
|
end;
|
|||
|
end
|
|||
|
|
|||
|
--请求一键扫荡
|
|||
|
function ArenaShouXiSystem:ReqOneKeySweep()
|
|||
|
L_Send("MSG_JJC.ReqOneKeySweep");
|
|||
|
end
|
|||
|
|
|||
|
--获取首次排名奖励
|
|||
|
function ArenaShouXiSystem:ReqGetFirstReward(excelId)
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_OPEN);
|
|||
|
L_Send("MSG_JJC.ReqGetFirstReward",{excelId = excelId})
|
|||
|
end
|
|||
|
|
|||
|
--================[Res]================[Res]================[Res]================[Res]================[Res]================
|
|||
|
--打开竞技场UI界面获取的信息
|
|||
|
function ArenaShouXiSystem:ResOpenJJCresult(msg)
|
|||
|
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE);
|
|||
|
L_Rank = msg.rank;
|
|||
|
L_RemainCount = msg.count;
|
|||
|
L_RemainCD = msg.cd;
|
|||
|
L_Score = msg.score;
|
|||
|
self:RefreshCountRedPoint()
|
|||
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_JJC_UPDATECOUNT);
|
|||
|
|
|||
|
L_FightPlayers = List:New(msg.players);
|
|||
|
L_TopPlayers = List:New(msg.rank123);
|
|||
|
--排序
|
|||
|
L_FightPlayers:Sort(function(a,b)
|
|||
|
return a.rank>b.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;
|