diff --git a/lua/app/common/bi_report.lua b/lua/app/common/bi_report.lua index fafa56a1..2c572a4e 100644 --- a/lua/app/common/bi_report.lua +++ b/lua/app/common/bi_report.lua @@ -173,6 +173,9 @@ BIReport.ITEM_GET_TYPE = { TOURN_WAVE_BOUNTY_LEVEL = "TournWaveBountyLevel", TOURN_WAVE_RANK_REWARD = "TournWaveRankReward", TOURN_WAVE_GIFT = "TournWaveGift", + TOURN_ARENA_BOUNTY_REWARD = "TournArenaBountyReward", + TOURN_ARENA_BOUNTY_LEVEL = "TournArenaBountyLevel", + TOURN_ARENA_RANK_REWARD = "TournArenaRankReward", TOURN_ARENA_GIFT = "TournArenaGift", FULL_MOON_TASK = "FullMoonTask", FULL_MOON_TASK_PROG_REWARD = "FullMoonTaskProgReward", diff --git a/lua/app/common/data_manager.lua b/lua/app/common/data_manager.lua index 1e9732c4..b773b5a9 100644 --- a/lua/app/common/data_manager.lua +++ b/lua/app/common/data_manager.lua @@ -35,6 +35,7 @@ function DataManager:init() self:initManager("SummonData", "app/userdata/summon/summon_data") self:initManager("FullMoonData", "app/userdata/activity/full_moon/full_moon_data") self:initManager("TournWaveData", "app/userdata/activity/tourn_wave/tourn_wave_data") + self:initManager("TournArenaData", "app/userdata/activity/tourn_arena/tourn_arena_data") self:initManager("AIHelperData", "app/userdata/game_setting/ai_helper_data") self:initManager("HeroFundData", "app/userdata/activity/hero_fund/hero_fund_data") self:initManager("ActBossRushData", "app/userdata/activity/act_boss_rush/act_boss_rush_data") @@ -125,6 +126,7 @@ function DataManager:clear() self.SummonData:clear() self.FullMoonData:clear() self.TournWaveData:clear() + self.TournArenaData:clear() -- 任务数据最后清理 self.TaskData:clear() self.AIHelperData:clear() @@ -542,6 +544,11 @@ DataManager.activityOpenFunc = { ModuleManager.TournWaveManager:reqActData() ModuleManager.TournWaveManager:initTimer() end, + [6] = function(params) + DataManager.TournArenaData:setActStatus(params) + ModuleManager.TournArenaManager:reqActData() + ModuleManager.TournArenaManager:initTimer() + end, } DataManager.waitOpenActivity = { @@ -562,6 +569,10 @@ DataManager.waitOpenActivity = { DataManager.TournWaveData:setActStatus(params) ModuleManager.TournWaveManager:initTimer() end, + [6] = function(params) + DataManager.TournArenaData:setActStatus(params) + ModuleManager.TournArenaManager:initTimer() + end, } return DataManager \ No newline at end of file diff --git a/lua/app/common/event_manager.lua b/lua/app/common/event_manager.lua index e9165573..8317bab4 100644 --- a/lua/app/common/event_manager.lua +++ b/lua/app/common/event_manager.lua @@ -47,6 +47,7 @@ EventManager.CUSTOM_EVENT = { ARENA_RECORD_SUCCESS = "ARENA_RECORD_SUCCESS",-- 战报获取成功 ARENA_RANK_SUCCESS = "ARENA_RANK_SUCCESS",-- 排行榜获取成功 ARENA_AD_BOX_SUCCESS = "ARENA_AD_BOX_SUCCESS",-- ad宝箱获取成功 + ARENA_BATTLE_SETTLEMENT = "ARENA_BATTLE_SETTLEMENT",-- 竞技场战斗结算 -- 图鉴 COLLECTION_CLICK_GET_POINT = "COLLECTION_CLICK_GET_POINT", -- 装备 @@ -64,6 +65,7 @@ EventManager.CUSTOM_EVENT = { ACTIVITY_SUMMER_END = "ACTIVITY_SUMMER_END", ACTIVITY_FULL_MOON_END = "ACTIVITY_FULL_MOON_END", ACTIVITY_TOURN_WAVE_END = "ACTIVITY_TOURN_WAVE_END", + ACTIVITY_TOURN_ARENA_END = "ACTIVITY_TOURN_ARENA_END", MAIN_UI_CHECK_SIDE_BAR = "MAIN_UI_CHECK_SIDE_BAR", FORMATION_CHANGE = "FORMATION_CHANGE", BATTLE_REBIRTH = "BATTLE_REBIRTH", diff --git a/lua/app/common/module_manager.lua b/lua/app/common/module_manager.lua index 404ad486..4900ebd3 100644 --- a/lua/app/common/module_manager.lua +++ b/lua/app/common/module_manager.lua @@ -81,6 +81,8 @@ local MODULE_PATHS = { FullMoonManager = "app/module/activity/full_moon/full_moon_manager", -- 波次锦标赛活动 TournWaveManager = "app/module/activity/tourn_wave/tourn_wave_manager", + -- 竞技场锦标赛活动 + TournArenaManager = "app/module/activity/tourn_arena/tourn_arena_manager", -- 符文副本 DungeonRuneManager = "app/module/dungeon_rune/dungeon_rune_manager", -- 梦魇酒馆 @@ -141,6 +143,7 @@ function ModuleManager:init() ModuleManager.DailyChallengeManager:init() ModuleManager.PlayerManager:init() ModuleManager.SkinManager:init() + ModuleManager.TournArenaManager:init() end -- 功能是否开启 diff --git a/lua/app/global/global_const.lua b/lua/app/global/global_const.lua index 807f05f6..894e95fa 100644 --- a/lua/app/global/global_const.lua +++ b/lua/app/global/global_const.lua @@ -25,6 +25,7 @@ local CONST_PATHS = { DungeonRuneConst = "app/module/dungeon_rune/dungeon_rune_const", FullMoonConst = "app/module/activity/full_moon/full_moon_const", TournWaveConst = "app/module/activity/tourn_wave/tourn_wave_const", + TournArenaConst = "app/module/activity/tourn_arena/tourn_arena_const", } if EDITOR_MODE then diff --git a/lua/app/module/activity/tourn_arena.meta b/lua/app/module/activity/tourn_arena.meta new file mode 100644 index 00000000..e4564094 --- /dev/null +++ b/lua/app/module/activity/tourn_arena.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a51eb4f4ea887b4fb3681027bf8e553 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/module/activity/tourn_arena/tourn_arena_const.lua b/lua/app/module/activity/tourn_arena/tourn_arena_const.lua new file mode 100644 index 00000000..7f317d36 --- /dev/null +++ b/lua/app/module/activity/tourn_arena/tourn_arena_const.lua @@ -0,0 +1,30 @@ +local TournArenaConst = {} + +-- 界面 +TournArenaConst.PANEL_TYPE = { + BOUNTY = 1, + RANK = 2, + GIFT = 3, +} + +-- 战令档位 +TournArenaConst.BOUNTY_GRADE_TYPE = { + FREE = 0, + PAY1 = 1, + PAY2 = 2, +} + +-- 战令礼包id +TournArenaConst.BOUNTY_GIFT_ID_1 = 240102 +TournArenaConst.BOUNTY_GIFT_ID_2 = 240202 + +TournArenaConst.GIFT_IDS = { + 240302, + 240402, + 240502, + 240602, + 240702, + 240802, +} + +return TournArenaConst \ No newline at end of file diff --git a/lua/app/module/activity/tourn_arena/tourn_arena_const.lua.meta b/lua/app/module/activity/tourn_arena/tourn_arena_const.lua.meta new file mode 100644 index 00000000..0dfcb7b5 --- /dev/null +++ b/lua/app/module/activity/tourn_arena/tourn_arena_const.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fcf392b8e24fe79459d4bb5f8eb0c5d7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua b/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua new file mode 100644 index 00000000..8693c47f --- /dev/null +++ b/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua @@ -0,0 +1,133 @@ +local TournArenaManager = class("TournArenaManager", BaseModule) + +function TournArenaManager:init() + self:addEventListener(EventManager.CUSTOM_EVENT.ARENA_BATTLE_SETTLEMENT, function(isWin) + self:reqActData() + end) +end + +function TournArenaManager:showActMainUI() + UIManager:showUI("app/ui/activity/tourn_arena/tourn_arena_ui") +end + +-- 初始化计时器 +function TournArenaManager:initTimer() + self:unscheduleGlobal(self.actSid) + + if DataManager.TournArenaData:isActiveTime() then + Logger.logHighlight("竞技场锦标赛活动结束倒计时:"..DataManager.TournArenaData:getEndRemainTime()) + self.actSid = self:performWithDelayGlobal(function() + Logger.logHighlight("竞技场锦标赛活动结束") + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ACTIVITY_TOURN_ARENA_END) + end, DataManager.TournArenaData:getEndRemainTime()) + elseif DataManager.TournArenaData:getStartRemainTime() > 0 then + Logger.logHighlight("竞技场锦标赛活动开始倒计时:"..DataManager.TournArenaData:getStartRemainTime()) + self.actSid = self:performWithDelayGlobal(function() + Logger.logHighlight("竞技场锦标赛活动开始") + self:reqActData() + end, DataManager.TournArenaData:getStartRemainTime()) + end +end + +-- 购买活动战令 +function TournArenaManager:buyBounty(giftId) + PayManager:purchasePackage(giftId, PayManager.PURCHARSE_TYPE.ACT_GIFT) +end + +-- 请求活动数据 +function TournArenaManager:reqActData() + if not DataManager.TournArenaData:isOpen() then + return + end + if not DataManager.TournArenaData:isActiveTime() then + return + end + if self.isReqActData then + return + end + + self.isReqActData = true + self:sendMessage(ProtoMsgType.FromMsgEnum.TournArenaDataReq, {}, {}, self.rspActData, nil) +end + +function TournArenaManager:rspActData(result) + self.isReqActData = false + if result.err_code == GConst.ERROR_STR.SUCCESS then + DataManager.TournArenaData:onGetActData(result.tourn_arena) + end +end + +-- 请求战令奖励 +function TournArenaManager:reqBountyReward(id, grade) + self:sendMessage(ProtoMsgType.FromMsgEnum.TournArenaBountyClaimReq, {id = id, grade = grade}, {}, self.rspBountyReward, BIReport.ITEM_GET_TYPE.TOURN_ARENA_BOUNTY_REWARD) +end + +function TournArenaManager:rspBountyReward(result) + if result.err_code == GConst.ERROR_STR.SUCCESS then + DataManager.TournArenaData:onReceivedBountyReward(result.success_id_grade) + + GFunc.showRewardBox(result.rewards) + end +end + +-- 购买战令等级 +function TournArenaManager:reqBuyBountyLevel() + local cost = DataManager.TournArenaData:getBuyBountyLevelCost() + local costId = GFunc.getRewardId(cost) + local costNum = GFunc.getRewardNum(cost) + if not GFunc.checkCost(costId, costNum, true) then + return + end + local params ={ + titleTx = I18N:getGlobalText(I18N.GlobalConst.BOUNTY_BUY_LEVEL_TITLE), + content = I18N:getGlobalText(I18N.GlobalConst.BOUNTY_BUY_LEVEL_COUNTENT), + boxType = GConst.MESSAGE_BOX_TYPE.MB_OK_CANCEL, + showToday = GConst.MESSAGE_BOX_SHOW_TODAY.ACTIVITY_BUY_LEVEL, + costId = costId, + costNum = costNum, + okFunc = function() + local id = DataManager.TournArenaData:getBountyCfgByLevel(DataManager.TournArenaData:getBountyLevel() + 1).id + -- Logger.logHighlight("购买战令等级:"..id) + self:sendMessage(ProtoMsgType.FromMsgEnum.TournArenaBountyClaimByDiamondReq, {id = id}, {}, self.rspBuyBountyLevel, BIReport.ITEM_GET_TYPE.TOURN_ARENA_BOUNTY_LEVEL) + end, + } + GFunc.showMessageBox(params) +end + +function TournArenaManager:rspBuyBountyLevel(result) + if result.err_code == GConst.ERROR_STR.SUCCESS then + DataManager.TournArenaData:onBoughtBountyLevel() + end +end + +-- 获取排行榜数据 +function TournArenaManager:reqRankList(turn) + if turn == self.isReqRankList then + return + end + + self.isReqRankList = turn + self:sendMessage(ProtoMsgType.FromMsgEnum.TournArenaRankReq, {turn = turn}, {}, self.rspRankList, nil) +end + +function TournArenaManager:rspRankList(result) + self.isReqRankList = nil + DataManager.TournArenaData:setInReset(false) + if result.err_code == GConst.ERROR_STR.SUCCESS then + DataManager.TournArenaData:onGetRankData(result.reqData.turn, result.ranks, result.score, result.own_rank) + end +end + +-- 领取排行榜奖励 +function TournArenaManager:reqRankReward() + self:sendMessage(ProtoMsgType.FromMsgEnum.TournArenaRankClaimRewardReq, {}, {}, self.rspRankReward, BIReport.ITEM_GET_TYPE.TOURN_ARENA_RANK_REWARD) +end + +function TournArenaManager:rspRankReward(result) + if result.err_code == GConst.ERROR_STR.SUCCESS then + DataManager.TournArenaData:onReceivedRankReward() + GFunc.showRewardBox(result.rewards) + end +end + +return TournArenaManager \ No newline at end of file diff --git a/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua.meta b/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua.meta new file mode 100644 index 00000000..940f76ea --- /dev/null +++ b/lua/app/module/activity/tourn_arena/tourn_arena_manager.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c3b14de198ed03f42b62c82328c27519 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/module/arena/arena_manager.lua b/lua/app/module/arena/arena_manager.lua index 10047321..eec4643a 100644 --- a/lua/app/module/arena/arena_manager.lua +++ b/lua/app/module/arena/arena_manager.lua @@ -149,6 +149,7 @@ function ArenaManager:rspSettlement(result) end end ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_ARENA_CHALLENGE) + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_BATTLE_SETTLEMENT, result.settlement.win) --bi上报 local winRate = result.total_win_count / (result.total_win_count + result.total_lose_count) diff --git a/lua/app/module/maincity/maincity_const.lua b/lua/app/module/maincity/maincity_const.lua index 5e7b90cb..e4b05296 100644 --- a/lua/app/module/maincity/maincity_const.lua +++ b/lua/app/module/maincity/maincity_const.lua @@ -38,6 +38,7 @@ MainCityConst.LEFT_SIDE_BARS = { "app/ui/main_city/cell/side_bar_activity_cell", "app/ui/main_city/cell/side_bar_full_moon_cell", "app/ui/main_city/cell/side_bar_tourn_wave_cell", + "app/ui/main_city/cell/side_bar_tourn_arena_cell", -- gm放最后一个 "app/ui/main_city/cell/side_bar_gm_cell" } diff --git a/lua/app/ui/activity/tourn_arena.meta b/lua/app/ui/activity/tourn_arena.meta new file mode 100644 index 00000000..940dcb21 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0db3ebc134726304cb0a40fd23ab52b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/ui/activity/tourn_arena/cell.meta b/lua/app/ui/activity/tourn_arena/cell.meta new file mode 100644 index 00000000..7e6af678 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fdea40bf29965944b9ae4c5184361b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua new file mode 100644 index 00000000..100d63f2 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua @@ -0,0 +1,62 @@ +local TournArenaBountyCell = class("TournArenaBountyCell", BaseCell) + +function TournArenaBountyCell:init() + local uiMap = self:getUIMap() + self.txLevel = uiMap["tourn_arena_bounty_cell.level.tx_level"] + self.rewardCell1 = uiMap["tourn_arena_bounty_cell.reward_cell_1"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL) + self.rewardCell2 = uiMap["tourn_arena_bounty_cell.reward_cell_2"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL) + self.rewardCell3 = uiMap["tourn_arena_bounty_cell.reward_cell_3"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL) +end + +function TournArenaBountyCell:refresh(level, id) + self.id = id + self.txLevel:setText(DataManager.TournArenaData:getLevelTotalScore(level)) + + local isGet + + isGet = DataManager.TournArenaData:isReceivedBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE) + self.rewardCell1:refreshByConfig(DataManager.TournArenaData:getBountyGradeReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE), isGet, isGet) + self.rewardCell1:showLock(not DataManager.TournArenaData:isBountyGradeUnlock(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE)) + if DataManager.TournArenaData:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE) then + self.rewardCell1.baseObject:addRedPoint(50, 50, 0.6) + self.rewardCell1:addClickListener(function() + self:onClickReward(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE) + end) + else + self.rewardCell1.baseObject:removeRedPoint() + self.rewardCell1:addClickListener(nil) + end + + isGet = DataManager.TournArenaData:isReceivedBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1) + self.rewardCell2:refreshByConfig(DataManager.TournArenaData:getBountyGradeReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1), isGet, isGet) + self.rewardCell2:showLock(not DataManager.TournArenaData:isBountyGradeUnlock(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1)) + if DataManager.TournArenaData:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1) then + self.rewardCell2.baseObject:addRedPoint(50, 50, 0.6) + self.rewardCell2:addClickListener(function() + self:onClickReward(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1) + end) + else + self.rewardCell2.baseObject:removeRedPoint() + self.rewardCell2:addClickListener(nil) + end + + isGet = DataManager.TournArenaData:isReceivedBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2) + self.rewardCell3:refreshByConfig(DataManager.TournArenaData:getBountyGradeReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2), isGet, isGet) + self.rewardCell3:showLock(not DataManager.TournArenaData:isBountyGradeUnlock(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2)) + if DataManager.TournArenaData:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2) then + self.rewardCell3.baseObject:addRedPoint(50, 50, 0.6) + self.rewardCell3:addClickListener(function() + self:onClickReward(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2) + end) + else + self.rewardCell3.baseObject:removeRedPoint() + self.rewardCell3:addClickListener(nil) + end +end + +-- 领取奖励 +function TournArenaBountyCell:onClickReward(grade) + ModuleManager.TournArenaManager:reqBountyReward(self.id, grade) +end + +return TournArenaBountyCell \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua.meta b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua.meta new file mode 100644 index 00000000..d9f8c6aa --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ede94bb5b293fd84487866bda65bc97e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua new file mode 100644 index 00000000..d940d631 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua @@ -0,0 +1,56 @@ +local TournArenaGiftCell = class("TournArenaGiftCell", BaseCell) + +function TournArenaGiftCell:init() + local uiMap = self:getUIMap() + + self.txLimit = uiMap["tourn_arena_gift_cell.tx_limit"] + self.txBuy = uiMap["tourn_arena_gift_cell.tx_buy"] + self.imgOff = uiMap["tourn_arena_gift_cell.off_img"] + self.txOff = uiMap["tourn_arena_gift_cell.off_img.tx_off"] + self.rewards = {} + for i = 1, 3 do + table.insert(self.rewards, uiMap["tourn_arena_gift_cell.reward_cell_"..i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)) + end + + self:addClickListener(function() + if DataManager.TournArenaData:getGiftRemainTime(self.id) > 0 then + PayManager:purchasePackage(self.id, PayManager.PURCHARSE_TYPE.ACT_GIFT) + end + end) +end + +function TournArenaGiftCell:refresh(id) + self.id = id + local cfg = DataManager.ShopData:getActGiftConfig()[self.id] + local time = DataManager.TournArenaData:getGiftRemainTime(self.id) + + self.txLimit:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_18, time)) + + for idx, reward in ipairs(self.rewards) do + if cfg.reward[idx] then + reward:setVisible(true) + reward:refreshByConfig(cfg.reward[idx]) + else + reward:setVisible(false) + end + end + + local buyStr + if cfg.recharge_id then + self.baseObject:setSprite(GConst.ATLAS_PATH.ACT_COMMON, "act_common_bg_6") + self.imgOff:setActive(true) + self.txOff:setText(cfg.value .. "%") + buyStr = GFunc.getFormatPrice(cfg.recharge_id) + else + self.baseObject:setSprite(GConst.ATLAS_PATH.ACT_COMMON, "act_common_bg_5") + self.imgOff:setActive(false) + buyStr = I18N:getGlobalText(I18N.GlobalConst.STR_FREE) + end + + if time <= 0 then + buyStr = I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_20) + end + self.txBuy:setText(buyStr) +end + +return TournArenaGiftCell \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua.meta b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua.meta new file mode 100644 index 00000000..f39234fd --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88465b50d54bb764eaa2aa91a489e08d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua new file mode 100644 index 00000000..d1f7438b --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua @@ -0,0 +1,61 @@ +local TournArenaRankCell = class("TournArenaRankCell", BaseCell) + +local RANK_IMG = {"act_ranking_1", "act_ranking_2", "act_ranking_3"} +local BG = {"common_bg_8", "common_bg_9", "common_bg_10", "common_bg_11"} + +function TournArenaRankCell:init() + local uiMap = self:getUIMap() + + self.txRank = uiMap["tourn_arena_rank_cell.tx_rank"] + self.imgRank = uiMap["tourn_arena_rank_cell.img_rank"] + self.playerHeadCell = uiMap["tourn_arena_rank_cell.player_head_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL) + self.txName = uiMap["tourn_arena_rank_cell.tx_name"] + self.txScore = uiMap["tourn_arena_rank_cell.tx_score"] + self.rewards = uiMap["tourn_arena_rank_cell.rewards"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT) + self.rewardCells = {} + for i = 1, 3 do + table.insert(self.rewardCells, uiMap["tourn_arena_rank_cell.rewards.reward_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)) + end +end + +function TournArenaRankCell:refresh(rank, info) + self.playerHeadCell:refresh(info.avatar, info.avatar_frame) + local name = info.name + if name == nil or #name == 0 then + name = I18N:getGlobalText(I18N.GlobalConst.NEW_PLAYER) + end + self.txName:setText(name) + self.txScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_16)..":"..info.score) + + if BG[rank] then + self.baseObject:setSprite(GConst.ATLAS_PATH.COMMON, BG[rank]) + else + self.baseObject:setSprite(GConst.ATLAS_PATH.COMMON, BG[4]) + end + + if RANK_IMG[rank] then + self.imgRank:setActive(true) + self.imgRank:setSprite(GConst.ATLAS_PATH.ACT_COMMON, RANK_IMG[rank]) + self.txRank:setText(GConst.EMPTY_STRING) + else + self.imgRank:setActive(false) + if info.score > 0 then + self.txRank:setText(rank) + else + self.txRank:setText("--") + end + end + + local rewards = DataManager.TournArenaData:getRewardByRank(rank) + for index, cell in ipairs(self.rewardCells) do + if rewards[index] then + cell:setVisible(true) + cell:refreshByConfig(rewards[index]) + else + cell:setVisible(false) + end + end + self.rewards:RefreshLayout() +end + +return TournArenaRankCell \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua.meta b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua.meta new file mode 100644 index 00000000..57fc98b8 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0701b2f9d5a616241b15a566c048cbf5 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua new file mode 100644 index 00000000..6990a9d3 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua @@ -0,0 +1,61 @@ +local TournArenaRankRewardCell = class("TournArenaRankRewardCell", BaseCell) + +local RANK_IMG = {"act_ranking_1", "act_ranking_2", "act_ranking_3"} +local BG = {"common_bg_8", "common_bg_9", "common_bg_10", "common_bg_11"} + +function TournArenaRankRewardCell:init() + local uiMap = self:getUIMap() + + self.txRank = uiMap["tourn_arena_rank_reward_cell.tx_rank"] + self.imgRank = uiMap["tourn_arena_rank_reward_cell.img_rank"] + self.rewards = uiMap["tourn_arena_rank_reward_cell.rewards"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT) + self.rewardCells = {} + for i = 1, 3 do + table.insert(self.rewardCells, uiMap["tourn_arena_rank_reward_cell.rewards.reward_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)) + end +end + +function TournArenaRankRewardCell:refresh(index) + local info = DataManager.TournArenaData:getRankCfgByIndex(index) + local ranking1 = info.ranking[1] + local ranking2 = info.ranking[2] + + if BG[ranking1] then + self.baseObject:setSprite(GConst.ATLAS_PATH.COMMON, BG[ranking1]) + else + self.baseObject:setSprite(GConst.ATLAS_PATH.COMMON, BG[4]) + end + + if RANK_IMG[ranking1] then + self.imgRank:setActive(true) + self.imgRank:setSprite(GConst.ATLAS_PATH.ACT_COMMON, RANK_IMG[ranking1]) + self.txRank:setText(GConst.EMPTY_STRING) + else + self.imgRank:setActive(false) + local rankStr = ranking1 .. "-" + if ranking2 then + rankStr = rankStr .. ranking2 + else + rankStr = rankStr .. "-" + end + if ranking1 == ranking2 then + rankStr = ranking1 + end + if index == #DataManager.TournArenaData:getRankIdList() then + rankStr = ranking1 .. "+" + end + self.txRank:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_BOSS_RUSH_DESC_23, rankStr)) + end + + for index, cell in ipairs(self.rewardCells) do + if info.reward[index] then + cell:setVisible(true) + cell:refreshByConfig(info.reward[index]) + else + cell:setVisible(false) + end + end + self.rewards:RefreshLayout() +end + +return TournArenaRankRewardCell \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua.meta b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua.meta new file mode 100644 index 00000000..1b0d26b7 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 39da646b9dfd3154ea5eb18ea98c12d7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua b/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua new file mode 100644 index 00000000..21398357 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua @@ -0,0 +1,99 @@ +local TournArenaBountyComp = class("TournArenaBountyComp", LuaComponent) + +function TournArenaBountyComp:init() + local uiMap = self:getUIMap() + self.txDesc = uiMap["bounty_panel.tx_desc"] + self.txFree = uiMap["bounty_panel.title.free.tx_free"] + self.txCurScore = uiMap["bounty_panel.title.cur_level.tx_level"] + -- 档位1 + self.txBuyed1 = uiMap["bounty_panel.title.buy1.tx_buyed"] + self.btnBuy1 = uiMap["bounty_panel.title.buy1.btn_buy"] + self.txBuy1 = uiMap["bounty_panel.title.buy1.btn_buy.tx_buy"] + -- 档位2 + self.txBuyed2 = uiMap["bounty_panel.title.buy2.tx_buyed"] + self.btnBuy2 = uiMap["bounty_panel.title.buy2.btn_buy"] + self.txBuy2 = uiMap["bounty_panel.title.buy2.btn_buy.tx_buy"] + + self.scrollrectComp = uiMap["bounty_panel.list_bounty"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + self.progLevel = uiMap["bounty_panel.list_bounty.viewport.content.prog"] + self.imgProgLevel = uiMap["bounty_panel.list_bounty.viewport.content.prog.img_prog"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER) + self.maskLevel = uiMap["bounty_panel.list_bounty.viewport.content.mask_img"] + self.lineLevel = uiMap["bounty_panel.list_bounty.viewport.content.line"] + self.btnBuyLevel = uiMap["bounty_panel.list_bounty.viewport.content.line.btn_buy_level"] + self.txBuyLevelNum = uiMap["bounty_panel.list_bounty.viewport.content.line.btn_buy_level.tx_num"] + self.imgBuyLevelIcon = uiMap["bounty_panel.list_bounty.viewport.content.line.btn_buy_level.icon"] + + self.txDesc:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_ARENEA_DESC_1)) + self.txFree:setText(I18N:getGlobalText(I18N.GlobalConst.STR_FREE)) + self.txBuyed1:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_20)) + self.txBuyed2:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_20)) + + self.bountyIdList = DataManager.TournArenaData:getBountyIdList() + self.scrollrectComp:addInitCallback(function() + self.maskLevel:getTransform():SetAsLastSibling() + self.lineLevel:getTransform():SetAsLastSibling() + return "app/ui/activity/tourn_arena/cell/tourn_arena_bounty_cell" + end) + self.scrollrectComp:addRefreshCallback(function(index, cell) + cell:refresh(index, self.bountyIdList[index]) + end) + self.scrollrectComp:clearCells() + self.scrollrectComp:refillCells(DataManager.TournArenaData:getBountyMaxLevel()) + + self.btnBuy1:addClickListener(function() + ModuleManager.TournArenaManager:buyBounty(GConst.TournArenaConst.BOUNTY_GIFT_ID_1) + end) + self.btnBuy2:addClickListener(function() + ModuleManager.TournArenaManager:buyBounty(GConst.TournArenaConst.BOUNTY_GIFT_ID_2) + end) + self.btnBuyLevel:addClickListener(function() + ModuleManager.TournArenaManager:reqBuyBountyLevel() + end) + self:bind(DataManager.TournArenaData, "isDirty", function() + self:refresh(true) + end) + self:bind(DataManager.ShopData, "isDirty", function() + self:refresh(true) + end) +end + +function TournArenaBountyComp:refresh(notUpdatePos) + self.btnBuyLevel:setActive(DataManager.TournArenaData:canBuyBountyLevel()) + self.txCurScore:setText(DataManager.TournArenaData:getBountyTotalScore()) + + -- 档位展示 + self.btnBuy1:setActive(not DataManager.TournArenaData:isBountyGradeUnlock(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1)) + self.btnBuy2:setActive(not DataManager.TournArenaData:isBountyGradeUnlock(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2)) + + local gift1 = DataManager.TournArenaData:getBountyGradeGiftCfg(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1) + local gift2 = DataManager.TournArenaData:getBountyGradeGiftCfg(GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2) + self.txBuy1:setText(GFunc.getFormatPrice(gift1.recharge_id)) + self.txBuy2:setText(GFunc.getFormatPrice(gift2.recharge_id)) + self.txBuyLevelNum:setText(GFunc.getRewardNum(DataManager.TournArenaData:getBuyBountyLevelCost())) + GFunc.centerImgAndTx(self.imgBuyLevelIcon, self.txBuyLevelNum, 5) + + -- 等级列表 + local maxLevel = DataManager.TournArenaData:getBountyMaxLevel() + local curLevel = DataManager.TournArenaData:getBountyLevel() + local topRecoveryOffset = self.scrollrectComp:getTopRecoveryOffset() + local downRecoveryOffset = self.scrollrectComp:getDownRecoveryOffset() + local cellHeight = self.scrollrectComp:getCellHeight() + if curLevel >= maxLevel then + self.lineLevel:setVisible(false) + else + self.lineLevel:setVisible(true) + self.lineLevel:setAnchoredPositionY(-topRecoveryOffset - curLevel * cellHeight) + end + self.progLevel:setAnchoredPositionY((topRecoveryOffset + downRecoveryOffset) / 2 - cellHeight / 2 - 10) + self.progLevel:setSizeDeltaY(cellHeight * (maxLevel - 1)) + self.imgProgLevel.value = DataManager.TournArenaData:getBountyTotalScore() / DataManager.TournArenaData:getLevelTotalScore(#DataManager.TournArenaData:getBountyIdList()) + self.maskLevel:setAnchoredPositionY(-topRecoveryOffset - curLevel * cellHeight) + self.maskLevel:setSizeDeltaY(cellHeight * maxLevel + GConst.UI_SCREEN_HEIGHT) + self.scrollrectComp:updateAllCell() + if not notUpdatePos then + local rewardLevel = DataManager.TournArenaData:getFirstCanGetBountyRewardLevel() + self.scrollrectComp:moveToIndex(rewardLevel or curLevel) + end +end + +return TournArenaBountyComp \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua.meta b/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua.meta new file mode 100644 index 00000000..881da977 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_bounty_comp.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: add50f9a8e4e59c438d243609ebb1951 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua b/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua new file mode 100644 index 00000000..59cb482d --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua @@ -0,0 +1,28 @@ +local TournArenaGiftComp = class("TournArenaGiftComp", LuaComponent) + +function TournArenaGiftComp:init() + local uiMap = self:getUIMap() + self.scrollrectComp = uiMap["gift_panel.scrollrect"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + + self.scrollrectComp:addInitCallback(function() + return "app/ui/activity/tourn_arena/cell/tourn_arena_gift_cell" + end) + self.scrollrectComp:addRefreshCallback(function(index, cell) + cell:refresh(self.giftList[index].id) + end) + + self:bind(DataManager.TournArenaData, "isDirty", function() + self:refresh() + end) + self:bind(DataManager.ShopData, "isDirty", function() + self:refresh() + end) +end + +function TournArenaGiftComp:refresh() + self.giftList = DataManager.TournArenaData:getGiftIdsSort() + self.scrollrectComp:clearCells() + self.scrollrectComp:refillCells(#self.giftList) +end + +return TournArenaGiftComp \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua.meta b/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua.meta new file mode 100644 index 00000000..b14dc28f --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_gift_comp.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b6ea3f91f034273478a904f0ca403424 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua b/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua new file mode 100644 index 00000000..2f58403c --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua @@ -0,0 +1,204 @@ +local TournArenaRankComp = class("TournArenaRankComp", LuaComponent) + +local SHOW_TYPE = { + CUR_RANK = 1, + LAST_RANK = 2, + REWARD = 3, +} + +local RANK_IMG = {"act_ranking_1", "act_ranking_2", "act_ranking_3"} + +function TournArenaRankComp:onClose() + if self.countdownSid then + self.baseObject:unscheduleGlobal(self.countdownSid) + self.countdownSid = nil + end +end + +function TournArenaRankComp:init() + local uiMap = self:getUIMap() + + self.txEmpty = uiMap["rank_panel.tx_empty"] + self.btnHelp = uiMap["rank_panel.btn_help"] + self.btns = uiMap["rank_panel.btns"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT) + self.btnCur = uiMap["rank_panel.btns.btn_cur"] + self.txCur = uiMap["rank_panel.btns.btn_cur.tx_cur"] + self.btnLast = uiMap["rank_panel.btns.btn_last"] + self.txLast = uiMap["rank_panel.btns.btn_last.tx_last"] + self.btnReward = uiMap["rank_panel.btns.btn_reward"] + self.txReward = uiMap["rank_panel.btns.btn_reward.tx_reward"] + self.txCountdown = uiMap["rank_panel.tx_countdown"] + self.listRewardComp = uiMap["rank_panel.list_reward"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + self.listRankComp = uiMap["rank_panel.list_rank"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + -- 自己排名 + self.imgRank = uiMap["rank_panel.my_rank.img_rank"] + self.txRank = uiMap["rank_panel.my_rank.tx_rank"] + self.txName = uiMap["rank_panel.my_rank.tx_name"] + self.txScore = uiMap["rank_panel.my_rank.tx_score"] + self.playerHeadCell = uiMap["rank_panel.my_rank.player_head_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL) + self.rewards = uiMap["rank_panel.my_rank.rewards"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT) + self.rewardCells = {} + for i = 1, 3 do + table.insert(self.rewardCells, uiMap["rank_panel.my_rank.rewards.reward_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)) + end + + self.txEmpty:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_BOSS_RUSH_DESC_8)) + self.txCur:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_WAVE_BTN_1)) + self.txLast:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_WAVE_BTN_2)) + self.txReward:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_WAVE_BTN_3)) + self:refreshCountdown() + + self.listRankComp:addInitCallback(function() + return "app/ui/activity/tourn_arena/cell/tourn_arena_rank_cell" + end) + self.listRankComp:addRefreshCallback(function(index, cell) + cell:refresh(index, self.rankDataList[index]) + end) + self.listRewardComp:addInitCallback(function() + return "app/ui/activity/tourn_arena/cell/tourn_arena_rank_reward_cell" + end) + self.listRewardComp:addRefreshCallback(function(index, cell) + cell:refresh(index) + end) + + self.btnHelp:addClickListener(function() + local params = { + type = GConst.TipsConst.HELP_TIPS_TYPE.ARENA, + title = I18N:getGlobalText(I18N.GlobalConst.COLLECTION_DESC_11), + desc = I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_ARENEA_HELP), + } + ModuleManager.TipsManager:showHelpTips(params) + end) + self.btnCur:addClickListener(function() + ModuleManager.TournArenaManager:reqRankList(DataManager.TournArenaData:getCurRankStep()) + self:refresh(SHOW_TYPE.CUR_RANK) + end) + self.btnLast:addClickListener(function() + ModuleManager.TournArenaManager:reqRankList(DataManager.TournArenaData:getCurRankStep() - 1) + self:refresh(SHOW_TYPE.LAST_RANK) + end) + self.btnReward:addClickListener(function() + self:refresh(SHOW_TYPE.REWARD) + end) + self:bind(DataManager.TournArenaData, "isDirty", function() + self:refresh() + end) +end + +function TournArenaRankComp:refresh(showType) + self.showType = showType or self.showType or SHOW_TYPE.CUR_RANK + + self.btnCur:setSprite(GConst.ATLAS_PATH.COMMON, self.showType == SHOW_TYPE.CUR_RANK and "common_board_130" or "common_board_134") + self.btnLast:setSprite(GConst.ATLAS_PATH.COMMON, self.showType == SHOW_TYPE.LAST_RANK and "common_board_130" or "common_board_134") + self.btnReward:setSprite(GConst.ATLAS_PATH.COMMON, self.showType == SHOW_TYPE.REWARD and "common_board_130" or "common_board_134") + + local curStep = DataManager.TournArenaData:getCurRankStep() + + self.btnLast:setActive(curStep > 1) + self.btns:RefreshLayout() + + if self.showType == SHOW_TYPE.CUR_RANK then + self:showRankList(curStep) + self:showSelfRank(curStep) + elseif self.showType == SHOW_TYPE.LAST_RANK then + local lastStep = curStep - 1 + self:showRankList(lastStep) + self:showSelfRank(lastStep) + elseif self.showType == SHOW_TYPE.REWARD then + self:showRankReward() + self:showSelfRank(curStep) + end +end + +-- 展示自己排名 +function TournArenaRankComp:showSelfRank(step) + local rank = DataManager.TournArenaData:getSelfRank(step) + local score = DataManager.TournArenaData:getSelfScore(step) + + if score > 0 then + if RANK_IMG[rank] then + self.imgRank:setActive(true) + self.imgRank:setSprite(GConst.ATLAS_PATH.ACT_COMMON, RANK_IMG[rank]) + self.txRank:setText(GConst.EMPTY_STRING) + else + self.imgRank:setActive(false) + self.txRank:setText(rank) + end + else + self.imgRank:setActive(false) + self.txRank:setText("--") + end + self.playerHeadCell:refresh() + self.txName:setText(DataManager.PlayerData:getNickname()) + self.txScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_16)..":"..score) + + local rewards = DataManager.TournArenaData:getRewardByRank(rank) + for index, cell in ipairs(self.rewardCells) do + if score > 0 and rewards[index] then + cell:setVisible(true) + cell:refreshByConfig(rewards[index]) + if step ~= DataManager.TournArenaData:getCurRankStep() and DataManager.TournArenaData:isReachRankReward() then + cell.baseObject:addRedPoint(50, 50, 0.6) + cell:addClickListener(function() + ModuleManager.TournArenaManager:reqRankReward() + end) + else + cell.baseObject:removeRedPoint() + cell:addClickListener(nil) + end + else + cell:setVisible(false) + end + end + self.rewards:RefreshLayout() +end + +-- 展示榜单 +function TournArenaRankComp:showRankList(step) + self.listRankComp:getBaseObject():setActive(true) + self.listRewardComp:getBaseObject():setActive(false) + + self.rankDataList = DataManager.TournArenaData:getRankListData(step) + if self.rankDataList == nil then + self.rankDataList = {} + end + self.listRankComp:clearCells() + self.listRankComp:refillCells(#self.rankDataList) + self.txEmpty:setActive(#self.rankDataList <= 0) +end + +-- 展示排行榜奖励 +function TournArenaRankComp:showRankReward() + self.listRankComp:getBaseObject():setActive(false) + self.listRewardComp:getBaseObject():setActive(true) + self.txEmpty:setActive(false) + + self.rankIdList = DataManager.TournArenaData:getRankIdList() + self.listRewardComp:clearCells() + self.listRewardComp:refillCells(#self.rankIdList) +end + +-- 刷新倒计时 +function TournArenaRankComp:refreshCountdown() + if self.countdownSid then + self.baseObject:unscheduleGlobal(self.countdownSid) + end + + local str = DataManager.TournArenaData:isFinalDay() and I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_WAVE_DESC_3) or I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_WAVE_DESC_2) + + self.txCountdown:setText(str .. Time:formatNumTimeStr(DataManager.TournArenaData:getCurRankStepRemainTime())) + self.countdownSid = self.baseObject:scheduleGlobal(function() + local time = DataManager.TournArenaData:getCurRankStepRemainTime() + if time >= 0 then + self.txCountdown:setText(str .. Time:formatNumTimeStr(time)) + else + if self.showType == SHOW_TYPE.CUR_RANK then + ModuleManager.TournArenaManager:reqRankList(DataManager.TournArenaData:getCurRankStep()) + elseif self.showType == SHOW_TYPE.LAST_RANK then + ModuleManager.TournArenaManager:reqRankList(DataManager.TournArenaData:getCurRankStep() - 1) + end + end + end, 1) +end + +return TournArenaRankComp \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua.meta b/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua.meta new file mode 100644 index 00000000..bf19c44b --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_rank_comp.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 423848385560f3d49a0d5861ef04b564 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua b/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua new file mode 100644 index 00000000..e9c983b3 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua @@ -0,0 +1,210 @@ +local TournArenaUI = class("TournArenaUI", BaseUI) + +local COMP_BOUNTY = "app/ui/activity/tourn_arena/tourn_arena_bounty_comp" +local COMP_RANK = "app/ui/activity/tourn_arena/tourn_arena_rank_comp" +local COMP_GIFT = "app/ui/activity/tourn_arena/tourn_arena_gift_comp" + +function TournArenaUI:isFullScreen() + return false +end + +function TournArenaUI:getPrefabPath() + return "assets/prefabs/ui/activity/tourn_arena/tourn_arena_ui.prefab" +end + +function TournArenaUI:onPressBackspace() + self:closeUI() +end + +function TournArenaUI:onClose() + if self.compRank ~= nil then + self.compRank:refresh() + end + if self.countdownSid then + self.txCountdown:unscheduleGlobal(self.countdownSid) + end +end + +function TournArenaUI:ctor(param) + if param then + self.panelType = param + else + self.panelType = GConst.TournArenaConst.PANEL_TYPE.BOUNTY -- 默认进入任务页签 + end +end + +function TournArenaUI:onLoadRootComplete() + local uiMap = self.root:genAllChildren() + + -- 通用 + self.txTitle = uiMap["tourn_arena_ui.common.img_title.tx_title"] + self.btnClose = uiMap["tourn_arena_ui.common.btn_close"] + self.bg = uiMap["tourn_arena_ui.common.bg"] + self.countdown = uiMap["tourn_arena_ui.common.countdown"] + self.txCountdown = uiMap["tourn_arena_ui.common.countdown.tx_countdown"] + self.spineTitle = uiMap["tourn_arena_ui.common.spine_title"] + -- 子界面 + self.bountyPanel = uiMap["tourn_arena_ui.bounty_panel"] + self.rankPanel = uiMap["tourn_arena_ui.rank_panel"] + self.giftPanel = uiMap["tourn_arena_ui.gift_panel"] + -- 战令标签 + self.btnBounty = uiMap["tourn_arena_ui.common.btns.btn_bounty"] + self.txBounty1 = uiMap["tourn_arena_ui.common.btns.btn_bounty.tx_btn"] + self.txBounty2 = uiMap["tourn_arena_ui.common.btns.btn_bounty.select.tx_select"] + self.selectBounty = uiMap["tourn_arena_ui.common.btns.btn_bounty.select"] + -- 排行榜标签 + self.btnRank = uiMap["tourn_arena_ui.common.btns.btn_rank"] + self.txRank1 = uiMap["tourn_arena_ui.common.btns.btn_rank.tx_btn"] + self.txRank2 = uiMap["tourn_arena_ui.common.btns.btn_rank.select.tx_select"] + self.selectRank = uiMap["tourn_arena_ui.common.btns.btn_rank.select"] + -- 礼包标签 + self.btnGift = uiMap["tourn_arena_ui.common.btns.btn_gift"] + self.txGift1 = uiMap["tourn_arena_ui.common.btns.btn_gift.tx_btn"] + self.txGift2 = uiMap["tourn_arena_ui.common.btns.btn_gift.select.tx_select"] + self.selectGift = uiMap["tourn_arena_ui.common.btns.btn_gift.select"] + + self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_TOURN_ARENEA_TITLE)) + self.txBounty1:setText(I18N:getGlobalText(I18N.GlobalConst.REWARD_DESC)) + self.txBounty2:setText(I18N:getGlobalText(I18N.GlobalConst.REWARD_DESC)) + self.txRank1:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_5)) + self.txRank2:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_5)) + self.txGift1:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_DESC_4)) + self.txGift2:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_DESC_4)) + + self.spineTitle:getSkeletonGraphic().enabled = false + self.spineTitle:loadAssetAsync("ui_act_tourn_arena_title", function() + self.spineTitle:getSkeletonGraphic().enabled = true + self.spineTitle:playAnimComplete("animation", false, true, function() + self.spineTitle:playAnim("idle", true, true, true) + end, true) + end, false) + + self.btnBounty:addClickListener(function() + self.panelType = GConst.TournArenaConst.PANEL_TYPE.BOUNTY + self:onRefresh() + end) + self.btnRank:addClickListener(function() + self.panelType = GConst.TournArenaConst.PANEL_TYPE.RANK + self:onRefresh() + end) + self.btnGift:addClickListener(function() + self.panelType = GConst.TournArenaConst.PANEL_TYPE.GIFT + self:onRefresh() + end) + self.btnClose:addClickListener(function() + self:closeUI() + end) + self:addEventListener(EventManager.CUSTOM_EVENT.ACTIVITY_TOURN_ARENA_END, function() + self:closeUI() + end) + self:bind(DataManager.TournArenaData, "isDirty", function() + -- 检查更新数据 + if DataManager.TournArenaData:getIsInReset() and self.panelType == GConst.TournArenaConst.PANEL_TYPE.RANK then + self:onRefresh() + else + self:refreshRedPoint() + end + end) +end + +function TournArenaUI:onRefresh() + -- 倒计时 + if self.countdownSid then + self.txCountdown:unscheduleGlobal(self.countdownSid) + end + self.txCountdown:setText(Time:formatNumTimeStr(DataManager.TournArenaData:getEndRemainTime())) + self.countdownSid = self.txCountdown:scheduleGlobal(function() + local time = DataManager.TournArenaData:getEndRemainTime() + if time >= 0 then + self.txCountdown:setText(Time:formatNumTimeStr(time)) + end + end, 1) + + if self.panelType == GConst.TournArenaConst.PANEL_TYPE.BOUNTY then + self:showBountyInfo() + elseif self.panelType == GConst.TournArenaConst.PANEL_TYPE.RANK then + self:showRankInfo() + elseif self.panelType == GConst.TournArenaConst.PANEL_TYPE.GIFT then + self:showGiftInfo() + end + self:refreshRedPoint() +end + +-- 刷新标签红点 +function TournArenaUI:refreshRedPoint() + if DataManager.TournArenaData:hasBountyRedPoint() then + self.btnBounty:addRedPoint(75, 5, 0.6) + else + self.btnBounty:removeRedPoint() + end + if DataManager.TournArenaData:hasRankRedPoint() then + self.btnRank:addRedPoint(75, 5, 0.6) + else + self.btnRank:removeRedPoint() + end + if DataManager.TournArenaData:hasGiftRedPoint() then + self.btnGift:addRedPoint(75, 5, 0.6) + else + self.btnGift:removeRedPoint() + end +end + +function TournArenaUI:showBountyInfo() + self.bountyPanel:setActive(true) + self.selectBounty:setActive(true) + self.rankPanel:setActive(false) + self.selectRank:setActive(false) + self.giftPanel:setActive(false) + self.selectGift:setActive(false) + self.countdown:setActive(true) + self.bg:setActive(true) + + if not self.compBounty then + self.bountyPanel:initPrefabHelper() + self.bountyPanel:genAllChildren() + self.compBounty = self.bountyPanel:addLuaComponent(COMP_BOUNTY) + end + + self.compBounty:refresh() +end + +function TournArenaUI:showRankInfo() + self.bountyPanel:setActive(false) + self.selectBounty:setActive(false) + self.rankPanel:setActive(true) + self.selectRank:setActive(true) + self.giftPanel:setActive(false) + self.selectGift:setActive(false) + self.countdown:setActive(false) + self.bg:setActive(false) + + ModuleManager.TournArenaManager:reqRankList(DataManager.TournArenaData:getCurRankStep()) + if not self.compRank then + self.rankPanel:initPrefabHelper() + self.rankPanel:genAllChildren() + self.compRank = self.rankPanel:addLuaComponent(COMP_RANK) + end + + self.compRank:refresh() +end + +function TournArenaUI:showGiftInfo() + self.bountyPanel:setActive(false) + self.selectBounty:setActive(false) + self.rankPanel:setActive(false) + self.selectRank:setActive(false) + self.giftPanel:setActive(true) + self.selectGift:setActive(true) + self.countdown:setActive(true) + self.bg:setActive(false) + + if not self.compGift then + self.giftPanel:initPrefabHelper() + self.giftPanel:genAllChildren() + self.compGift = self.giftPanel:addLuaComponent(COMP_GIFT) + end + + self.compGift:refresh() +end + +return TournArenaUI \ No newline at end of file diff --git a/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua.meta b/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua.meta new file mode 100644 index 00000000..d5cc5ea5 --- /dev/null +++ b/lua/app/ui/activity/tourn_arena/tourn_arena_ui.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c29f7f21d2c22f74db078cffc8100e42 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua b/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua new file mode 100644 index 00000000..ece116e9 --- /dev/null +++ b/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua @@ -0,0 +1,46 @@ +local SideBarBaseCellComp = require "app/ui/main_city/cell/side_bar_base_cell" +local SideBarTournArenaCell = class("SideBarTournArenaCell", SideBarBaseCellComp) + +function SideBarTournArenaCell:getModuleKey() + return ModuleManager.MODULE_KEY.ACTIVITY +end + +function SideBarTournArenaCell:getIsOpen() + return DataManager.TournArenaData:isOpen() and DataManager.TournArenaData:isActiveTime() +end + +function SideBarTournArenaCell:getSpineName() + return "ui_main_btn_act_fullmoon" +end + +function SideBarTournArenaCell:onClick() + ModuleManager.TournArenaManager:showActMainUI() +end + +function SideBarTournArenaCell:getIsShowRedPoint() + return DataManager.TournArenaData:hasEntryRedPoint() +end + +function SideBarTournArenaCell:onRefresh() + self.timeBg:setVisible(true) + self:_refreshTime() +end + +function SideBarTournArenaCell:updateTime() + if self:getIsOpen() then + self:_refreshTime() + else + self:closeBtn() + end +end + +function SideBarTournArenaCell:_refreshTime() + local remainTime = DataManager.TournArenaData:getEndRemainTime() + if remainTime >= 0 then + self.timeTx:setText(GFunc.getTimeStr(remainTime)) + else + self.timeTx:setText("00:00:00") + end +end + +return SideBarTournArenaCell \ No newline at end of file diff --git a/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua.meta b/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua.meta new file mode 100644 index 00000000..32cc2986 --- /dev/null +++ b/lua/app/ui/main_city/cell/side_bar_tourn_arena_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fbea87ac611b43747bf41d2ca95b29cd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua b/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua new file mode 100644 index 00000000..ffa73f26 --- /dev/null +++ b/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua @@ -0,0 +1,540 @@ +local TournArenaData = class("TournArenaData", BaseData) + +function TournArenaData:ctor() + self.data.isDirty = false + + self.bountyLevel = 1 + self.bountyExp = 0 + self.bountyCollected = {} + self.rankStep = 1 + self.rankStepEndTime = 0 + self.rankCollected = {} +end + +function TournArenaData:clear() + DataManager:unregisterTryOpenFunc("TournArenaData") + DataManager:unregisterCrossDayFunc("TournArenaData") +end + +-- 设置活动数据 +function TournArenaData:setActStatus(data) + data = data or GConst.EMPTY_TABLE + + self.actId = data.id + self.startTime = GFunc.formatTimeStep(data.start_at) + self.endTime = GFunc.formatTimeStep(data.end_at) + + if EDITOR_MODE then + Logger.logHighlight("竞技场锦标赛活动开启时间:") + Logger.printTable(data) + end + + if not self:isOpen() then + -- 活动开启 + DataManager:registerTryOpenFunc("TournArenaData", function() + if not self:isOpen() then + return + end + if not self:isActiveTime() then + return + end + + DataManager:unregisterTryOpenFunc("TournArenaData") + ModuleManager.TournArenaManager:reqActData() + end) + end +end + +-- 获取活动数据成功 +function TournArenaData:onGetActData(data) + data = data or GConst.EMPTY_TABLE + if EDITOR_MODE then + Logger.logHighlight("竞技场锦标赛活动数据:") + Logger.printTable(data) + end + + -- 战令 + self.bountyLevel = data.level + self.bountyExp = data.exp + self.bountyCollected = data.collected + -- 排行榜 + self.rankStep = data.present_turn + self.rankStepEndTime = GFunc.formatTimeStep(data.turn_end_at) + self.rankCollected = data.rank_reward_claimed + + -- 跨天 + DataManager:registerCrossDayFunc("TournArenaData", function() + if not self:isOpen() then + return + end + if not self:isActiveTime() then + return + end + + self.ranks = nil + self:setInReset(true) + self:setDirty() + end) + + self:setDirty() +end + +function TournArenaData:setInReset(isInReset) + self.isInReset = isInReset +end + +function TournArenaData:getIsInReset() + return self.isInReset +end + +function TournArenaData:setDirty() + self.data.isDirty = not self.data.isDirty +end + +function TournArenaData:isOpen() + if GFunc.isShenhe() then + return false + end + if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACTIVITY, true) then + return false + end + return true +end + +-- 是否在活动配置时间内 +function TournArenaData:isActiveTime() + if self.startTime == nil or self.startTime <= 0 then + return false + end + if self.endTime == nil or self.endTime <= 0 then + return false + end + return Time:getServerTime() >= self.startTime and Time:getServerTime() <= self.endTime +end + +-- 获取活动开启剩余时间(秒) +function TournArenaData:getStartRemainTime() + if self.startTime == nil or self.startTime <= 0 then + return 0 + end + return self.startTime - Time:getServerTime() +end + +-- 获取活动结束剩余时间(秒) +function TournArenaData:getEndRemainTime() + if self.endTime == nil or self.endTime <= 0 then + return 0 + end + return self.endTime - Time:getServerTime() +end + +-- 当前为活动第几天 +function TournArenaData:getActDay() + local days = Time:getDistanceDays(self.startTime) + if days < 0 then + days = -days + end + return days + 1 +end + +-- 是否有入口红点 +function TournArenaData:hasEntryRedPoint() + return self:hasBountyRedPoint() or self:hasRankRedPoint() or self:hasGiftRedPoint() +end + +-- 战令-------------------------------------------------------------------------------------------------- + +-- 是否有战令红点 +function TournArenaData:hasBountyRedPoint() + if self:getFirstCanGetBountyRewardLevel() ~= nil then + return true + end + + return false +end + +-- 获取首个可领取奖励的战令等级 +function TournArenaData:getFirstCanGetBountyRewardLevel() + local curLevel = self:getBountyLevel() + + for level, data in ipairs(self:getBountyIdList()) do + if level > curLevel then + break + end + + if self:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE) then + return true + end + if self:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1) then + return true + end + if self:canGetBountyReward(level, GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2) then + return true + end + end + + return nil +end + +-- +function TournArenaData:getBountyIdList() + if not self.bountyIdList then + self.bountyIdList = GFunc.getTable(DataManager:getActivityBountyLevelByActId(self.actId) or {}) + table.sort(self.bountyIdList, function(a, b) + return a < b + end) + end + return self.bountyIdList +end + +-- 获取对应等级的配置 +function TournArenaData:getBountyCfgByLevel(level) + return ConfigManager:getConfig("activity_bounty_level")[self:getBountyIdList()[level]] +end + +-- 获取战令档位礼包配置 +function TournArenaData:getBountyGradeGiftCfg(gradeType) + if gradeType == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1 then + return DataManager.ShopData:getActGiftConfig()[GConst.TournArenaConst.BOUNTY_GIFT_ID_1] + elseif gradeType == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2 then + return DataManager.ShopData:getActGiftConfig()[GConst.TournArenaConst.BOUNTY_GIFT_ID_2] + end +end + +-- 战令档位是否已解锁 +function TournArenaData:isBountyGradeUnlock(grade) + if grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE then + return true + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1 then + return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.TournArenaConst.BOUNTY_GIFT_ID_1) > 0 + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2 then + return DataManager.ShopData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.TournArenaConst.BOUNTY_GIFT_ID_2) > 0 + end + return false +end + +-- 战令最大等级 +function TournArenaData:getBountyMaxLevel() + return #self:getBountyIdList() +end + +-- 获取当前战令等级 +function TournArenaData:getBountyLevel() + if self.bountyLevel <= self:getBountyMaxLevel() then + return self.bountyLevel + else + return self:getBountyMaxLevel() + end +end + +-- 获取当前等级战令积分 +function TournArenaData:getBountyLevelScore() + return self.bountyExp +end + +-- 获取当前总积分 +function TournArenaData:getBountyTotalScore() + local total = self:getBountyLevelScore() + + for l = 1, self:getBountyLevel() - 1 do + total = total + (self:getBountyCfgByLevel(l).exp or 0) + end + + return total +end + +-- 获取等级所需总积分 +function TournArenaData:getLevelTotalScore(level) + local total = 0 + + if level > 1 then + for l = 1, level - 1 do + total = total + (self:getBountyCfgByLevel(l).exp or 0) + end + end + + return total +end + +-- 获取当前升级所需总积分 +function TournArenaData:getBountyUpgradeScore() + return self:getBountyCfgByLevel(self:getBountyLevel()).exp or 0 +end + +-- 是否满足购买战令等级的条件 +function TournArenaData:canBuyBountyLevel() + if self:getBountyLevel() >= self:getBountyMaxLevel() then + return false + end + + local lastDay = Time:getDistanceDays(self.endTime) + if lastDay < 0 then + lastDay = -lastDay + end + return self:getActDay() >= lastDay +end + +-- 购买战令等级的消耗 +function TournArenaData:getBuyBountyLevelCost() + return GFunc.getConstReward("activity_bounty_cost") +end + +-- 获取战令档位奖励 +function TournArenaData:getBountyGradeReward(level, grade) + local cfg = self:getBountyCfgByLevel(level) + local result + if cfg then + if grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE then + result = cfg.reward + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1 then + result = cfg.reward_pro + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2 then + result = cfg.reward_pro_max + end + end + return result +end + +-- 战令奖励可领取 +function TournArenaData:canGetBountyReward(level, grade) + return self:isReachBountyReward(level, grade) and not self:isReceivedBountyReward(level, grade) +end + +-- 战令奖励是否满足领取条件 +function TournArenaData:isReachBountyReward(level, grade) + local curLevel = self:getBountyLevel() + if curLevel >= level then + return self:isBountyGradeUnlock(grade) + else + return false + end +end + +-- 战令奖励是否已领取 +function TournArenaData:isReceivedBountyReward(level, grade) + local id = self:getBountyIdList()[level] + if self.bountyCollected[id] == nil then + return false + end + + if grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE then + return self.bountyCollected[id].normal + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1 then + return self.bountyCollected[id].superior + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2 then + return self.bountyCollected[id].superior_max + end +end + +-- 战令奖励领取成功 +function TournArenaData:onReceivedBountyReward(successMap) + for id, grade in pairs(successMap) do + if self.bountyCollected[id] == nil then + self.bountyCollected[id] = {} + end + + if grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.FREE then + self.bountyCollected[id].normal = true + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY1 then + self.bountyCollected[id].superior = true + elseif grade == GConst.TournArenaConst.BOUNTY_GRADE_TYPE.PAY2 then + self.bountyCollected[id].superior_max = true + end + end + + self:setDirty() +end + +-- 解锁战令等级成功 +function TournArenaData:onBoughtBountyLevel() + self.bountyLevel = self.bountyLevel + 1 + self:setDirty() +end + +-- 排行榜-------------------------------------------------------------------------------------------------- + +-- 是否有排行榜红点 +function TournArenaData:hasRankRedPoint() + for rank, id in ipairs(self:getRankIdList()) do + if self:isReachRankReward(rank) and not self:isReceivedRankReward(rank) then + return true + end + end + + return false +end + +-- +function TournArenaData:getRankIdList() + if not self.rankIdList then + self.rankIdList = GFunc.getTable(DataManager:getActivityRankByActId(self.actId) or {}) + table.sort(self.rankIdList, function(a, b) + return a < b + end) + end + return self.rankIdList +end + +-- 获取排行榜的配置 +function TournArenaData:getRankCfgByIndex(index) + return ConfigManager:getConfig("activity_rank")[self:getRankIdList()[index]] +end + +-- 是否是最后一次分组 +function TournArenaData:isFinalDay() + return self:getEndRemainTime() <= 86400 +end + +-- 获取当前排行榜阶段 +function TournArenaData:getCurRankStep() + return self.rankStep +end + +-- 获取排名相应的奖励 +function TournArenaData:getRewardByRank(rank) + for index, id in ipairs(self:getRankIdList()) do + local cfg = ConfigManager:getConfig("activity_rank")[id] + if rank >= cfg.ranking[1] and rank <= cfg.ranking[2] then + return cfg.reward + end + end + return nil +end + +-- 获取当前排行榜阶段剩余时间 +function TournArenaData:getCurRankStepRemainTime() + return self.rankStepEndTime - Time:getServerTime() +end + +-- 获取排行榜数据 +function TournArenaData:getRankListData(step) + if self.ranks == nil then + return nil + end + + return self.ranks[step] and self.ranks[step].ranks or {} +end + +-- 获取自己的排名 +function TournArenaData:getSelfRank(step) + if self.ranks == nil or self.ranks[step] == nil then + return 0 + end + + return self.ranks[step].ownRank +end + +-- 获取自己的积分 +function TournArenaData:getSelfScore(step) + if self.ranks == nil or self.ranks[step] == nil then + return 0 + end + + return self.ranks[step].ownSorce +end + +-- 是否满足段位奖励条件 +function TournArenaData:isReachRankReward() + if self:getCurRankStep() == 1 then + return false + end + + local lastRank = self:getSelfRank(self:getCurRankStep() - 1) + if lastRank and lastRank <= 0 then + return false + end + return not self:isReceivedRankReward() +end + +-- 是否已领取段位奖励 +function TournArenaData:isReceivedRankReward() + if self:getCurRankStep() == 1 then + return false + end + + local received = self.rankCollected[self:getCurRankStep() - 1] + return received ~= nil and received or false +end + +-- 获取排行榜数据成功 +function TournArenaData:onGetRankData(step, ranks, score, ownRank) + if self.ranks == nil then + self.ranks = {} + end + self.ranks[step] = {ownRank = ownRank, ownSorce = score, ranks = ranks} + + self:setDirty() +end + +-- 领取排名奖励成功 +function TournArenaData:onReceivedRankReward() + self.rankCollected[self:getCurRankStep() - 1] = true + + self:setDirty() +end + + +-- 礼包--------------------------------------------------------------------------------------------------- + +-- 是否有礼包红点 +function TournArenaData:hasGiftRedPoint() + local ids = GConst.TournArenaConst.GIFT_IDS + for index, id in pairs(ids) do + if self:isFreeGift(id) and self:getGiftRemainTime(id) > 0 then + return true + end + end + + return false +end + +-- 获取礼包配置 +function TournArenaData:getGiftCfg(giftId) + return DataManager.ShopData:getActGiftConfig()[giftId] +end + +-- 是否是免费礼包 +function TournArenaData:isFreeGift(id) + return DataManager.ShopData:getActGiftConfig()[id].recharge_id == nil +end + +-- 获取礼包id列表 +function TournArenaData:getGiftIdsSort() + local result = {} + local ids = GConst.TournArenaConst.GIFT_IDS + for index, id in ipairs(ids) do + local sort = id + 10000000000 + + if self:isFreeGift(id) then + sort = sort - 10000000 + end + + if self:getGiftRemainTime(id) > 0 then + sort = sort - 10000 + end + table.insert(result, {id = id, sort = sort}) + end + + table.sort(result, function (a, b) + return a.sort < b.sort + end) + + return result +end + +-- 礼包剩余购买次数 +function TournArenaData:getGiftRemainTime(giftId) + if self:isFreeGift(giftId) then + local giftData = DataManager.ShopData:getActGiftDetailData(PayManager.PURCHARSE_TYPE.ACT_GIFT, giftId) + if giftData and giftData.buy_count > 0 and giftData.latest_buy_at then + if Time:getBeginningOfOneDay(Time:getServerTime()) == Time:getBeginningOfOneDay(giftData.latest_buy_at // 1000) then + return 0 + end + end + return 1 + else + return DataManager.ShopData:getGiftRemainBuyNum(giftId) or 0 + end +end + +return TournArenaData \ No newline at end of file diff --git a/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua.meta b/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua.meta new file mode 100644 index 00000000..a253e759 --- /dev/null +++ b/lua/app/userdata/activity/tourn_arena/tourn_arena_data.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c33e1d5bdb494e84cab9ccd418e3083f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}