# Conflicts:
#	lua/app/module/battle/battle_const.lua
This commit is contained in:
xiekaidong 2023-06-28 21:25:19 +08:00
commit c259b2ed58
63 changed files with 2569 additions and 234 deletions

View File

@ -68,6 +68,8 @@ BIReport.ITEM_GET_TYPE = {
RECOVERY_TIME = "RecoveryTime",
ADS_BUY_VIT = "AdsBuyVit",
GEM_BUY_VIT = "GemBuyVit",
ADS_BUY_ARENA_TICKET = "AdsBuyArenaTicket",
GEM_BUY_ARENA_TICKET = "GemBuyArenaTicket",
TASK_DAILY_REFRESH = "TaskDailyRefresh",
TASK_DAILY_REWARD = "TaskDailyReward",
BOUNTY_UNLOCK_LEVEL = "BountyUnlockLevel",
@ -111,6 +113,7 @@ BIReport.ITEM_GET_TYPE = {
CHANGE_NAME = "ChangeName", -- 重命名
CHANGE_AVATAR = "ChangeAvatar", -- 修改头像
CHANGE_FRAME = "ChangeFrame", -- 修改头像框
INTRODUCTORY_GIFT = "IntroductoryGift", -- 入门礼包
}
BIReport.ADS_CLICK_TYPE = {
@ -119,6 +122,8 @@ BIReport.ADS_CLICK_TYPE = {
TASK_DAILY_REFRESH = "TaskDailyRefresh",
TASK_DAILY_TASK = "TaskDailyTask",
IDLE_QUICK_DROP = "IdleQuickDrop",
ARENA_TICKET = "ArenaTicket",
ARENA_REMATCH = "ArenaRematch",
MALL_DAILY = "MallDaily",
MALL_DAILY_RESET = "MallDailyReset",
@ -164,6 +169,7 @@ BIReport.GIFT_TYPE = {
GROWTH_FUND = "GrowthFund",
GROW_UP_GIFT = "GrowUpGift",
ARENA_BOUNTY = "ArenaBounty",
INTRODUCTORY_GIFT = "IntroductoryGift",
}
BIReport.COIN_TYPE = {

View File

@ -10,6 +10,7 @@ function DataManager:init()
self:initManager("ChapterData", "app/userdata/chapter/chapter_data")
self:initManager("DailyChallengeData", "app/userdata/daily_challenge/daily_challenge_data")
self:initManager("DungeonData", "app/userdata/dungeon/dungeon_data")
self:initManager("ArenaData", "app/userdata/arena/arena_data")
self:initManager("HeroData", "app/userdata/hero/hero_data")
self:initManager("BagData", "app/userdata/bag/bag_data")
self:initManager("BattleData", "app/userdata/battle/battle_data")
@ -89,6 +90,7 @@ function DataManager:clear()
self.ChapterData:clear()
self.DailyChallengeData:clear()
self.DungeonData:clear()
self.ArenaData:clear()
self.HeroData:clear()
self.BagData:clear()
self.FormationData:clear()
@ -144,6 +146,7 @@ function DataManager:initWithServerData(data)
self.ShopData:initCommonDailyGoldGift(data.mall_idle and data.mall_idle.ad_count) -- 常驻金币礼包
self.ShopData:initGrowUpGift(data.act_grow_up_gift, data.now_ts) -- 成长礼包
self.ShopData:initLevelUpGift(data.act_level_up_gift) -- 助力/金币礼包
self.ShopData:initIntroductGift(data.act_introductory_gift) -- 入门礼包
-- 商店礼包都初始化完了后检查一下每日红点
self.ShopData:checkShopDiscountRedPoint()
self.SummonData:init(data.summon, true)
@ -156,6 +159,7 @@ function DataManager:initWithServerData(data)
self.TaskData:init()
self:scheduleGlobal()
self:checkDataBind()
ModuleManager.ArenaManager:reqArenaInfo()
-- 写在最后防止某些数据还未初始化就被bi访问报错
self.initWithServer = true

View File

@ -55,6 +55,8 @@ local MODULE_PATHS = {
AccountManager= "app/module/account/account_manager",
-- 活动副本
DungeonManager = "app/module/dungeon/dungeon_manager",
-- 竞技场
ArenaManager = "app/module/arena/arena_manager",
}
-- 这里的key对应func_open里的id
@ -76,6 +78,8 @@ ModuleManager.MODULE_KEY = {
MAIL = "mail_open", -- 邮件
DUNGEON_SHARDS = "dungeon_shards_open", -- 碎片副本
DUNGEON_GOLD = "dungeon_gold_open", -- 金币副本
INTRODUCT_GIFT = "introduct_gift", -- 入门礼包
ARENA = "arena", -- 竞技场
}
local _moduleMgrs = {}

View File

@ -11,6 +11,7 @@ PayManager.PURCHARSE_TYPE = {
PayManager.PURCHARSE_ACT_TYPE = {
FIRST_RECHARGE = 1,
COIN_GIFT = 2,
INTRODUCTORY_GIFT = 3,
BEGINNER_GIFT = 4,
LEVEL_UP_GIFT = 5,
GROWTH_FUND = 6,
@ -30,6 +31,7 @@ PayManager.BI_ITEM_GET_TYPE = {
[PayManager.PURCHARSE_TYPE.ACT_GIFT] = {
[PayManager.PURCHARSE_ACT_TYPE.FIRST_RECHARGE] = BIReport.ITEM_GET_TYPE.FIRST_RECHARGE,
[PayManager.PURCHARSE_ACT_TYPE.COIN_GIFT] = BIReport.ITEM_GET_TYPE.COIN_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.INTRODUCTORY_GIFT] = BIReport.ITEM_GET_TYPE.INTRODUCTORY_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.BEGINNER_GIFT] = BIReport.ITEM_GET_TYPE.BEGINNER_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.LEVEL_UP_GIFT] = BIReport.ITEM_GET_TYPE.LEVEL_UP_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.GROWTH_FUND] = BIReport.ITEM_GET_TYPE.GROWTH_FUND,
@ -46,6 +48,7 @@ PayManager.BI_GIFT_TYPE = {
[PayManager.PURCHARSE_TYPE.ACT_GIFT] = {
[PayManager.PURCHARSE_ACT_TYPE.FIRST_RECHARGE] = BIReport.GIFT_TYPE.FIRST_RECHARGE,
[PayManager.PURCHARSE_ACT_TYPE.COIN_GIFT] = BIReport.GIFT_TYPE.COIN_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.INTRODUCTORY_GIFT] = BIReport.GIFT_TYPE.INTRODUCTORY_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.BEGINNER_GIFT] = BIReport.GIFT_TYPE.BEGINNER_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.LEVEL_UP_GIFT] = BIReport.GIFT_TYPE.LEVEL_UP_GIFT,
[PayManager.PURCHARSE_ACT_TYPE.GROWTH_FUND] = BIReport.GIFT_TYPE.GROWTH_FUND,

View File

@ -177,6 +177,7 @@ GConst.TYPEOF_LUA_CLASS = {
POP_HERO_CELL = "app/ui/shop/cell/pop_hero_cell",
POP_REWARD_CELL = "app/ui/shop/cell/pop_reward_cell",
GIFT_REWARD_CELL = "app/ui/shop/cell/gift_reward_cell",
ARENA_GRADING_CELL = "app/ui/arena/cell/arena_grading_cell",
-- comp
HERO_FORMATION_COMP = "app/ui/common/component/hero_formation_comp",
@ -188,6 +189,7 @@ GConst.ATLAS_PATH = {
BATTLE = "assets/arts/atlas/ui/battle.asset",
DAILY_CHALLENGE = "assets/arts/atlas/ui/daily_challenge.asset",
DUNGEON = "assets/arts/atlas/ui/dungeon.asset",
ARENA = "assets/arts/atlas/ui/arena.asset",
ICON_ITEM = "assets/arts/atlas/icon/item.asset",
UI_LOGIN = "assets/arts/atlas/ui/login.asset",
ICON_SKILL = "assets/arts/atlas/icon/skill.asset",

View File

@ -0,0 +1,123 @@
local ArenaManager = class("ArenaManager", BaseModule)
-- 赛季改变
function ArenaManager:onSeasonChanged()
if not self.isResetting then
return
end
DataManager.ArenaData:onSeasonChanged()
self:reqArenaInfo()
end
-- 匹配
function ArenaManager:reqMatch()
self:sendMessage(ProtoMsgType.FromMsgEnum.MatchReq, {}, {}, self.rspMatch, nil)
end
function ArenaManager:rspMatch(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onMatchInfoReceived(result.match_info)
end
end
-- 挑战
function ArenaManager:reqChallenge()
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPChallengeStartReq, {}, {}, self.rspChallenge, nil)
end
function ArenaManager:rspChallenge(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
end
end
-- 结算
function ArenaManager:reqSettlement()
local parmas = {
win = nil,
heroes = nil,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPChallengeSettlementReq, parmas, {}, self.rspSettlement, nil)
end
function ArenaManager:rspSettlement(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onBattleResultReceived(result.settlement)
-- 总共赢的次数result.total_win_count
-- 总共输的次数result.total_lose_count
-- 展示结算界面
end
end
-- 战报
function ArenaManager:reqRecord()
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRecordHistoryReq, {}, {}, self.rspRecord, nil)
end
function ArenaManager:rspRecord(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onRecentBattleReceived(result.history)
end
end
-- 排行榜
function ArenaManager:reqRank()
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRankReq, {}, {}, self.rspRank, nil)
end
function ArenaManager:rspRank(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onRankDataReceived(result.rank, result.top100.info)
end
end
-- 排行榜玩家编队信息
function ArenaManager:reqRankHeroes(id)
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRankHeroesReq, {rid = id}, {}, self.rspRankHeroes, nil)
end
function ArenaManager:rspRankHeroes(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onRankFormationReceived(result.reqData.rid, result.array_heroes)
end
end
-- 领取上赛季奖励
function ArenaManager:reqLastSeasonReward()
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPSeasonRewardReq, {}, {}, self.rspLastSeasonReward, nil)
end
function ArenaManager:rspLastSeasonReward(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onLastSeasonRewardReceived()
GFunc.showRewardBox(result.rewards)
end
end
-- 更新赛季信息
function ArenaManager:reqArenaInfo()
self.isResetting = true
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPInfoReq, {}, {}, self.rspArenaInfo, nil)
end
function ArenaManager:rspArenaInfo(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
self.isResetting = false
DataManager.ArenaData:init(result.arena_info)
end
end
-- 结束匹配cd
function ArenaManager:reqOverCD(isAd)
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPOverCDReq, {ad = isAd}, {}, self.rspOverCD, nil)
end
function ArenaManager:rspOverCD(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onOverFreeRematchCD(result.reqData.ad)
end
end
return ArenaManager

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a11e7fd70ab0c9a45a852859ee03bb02
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -89,6 +89,13 @@ BattleConst.IS_PVP_BATTLE = {
[BattleConst.BATTLE_TYPE.ARENA] = true,
}
-- 编队
BattleConst.FORMATION_TYPE = {
STAGE = "1",-- 主线章节
ARENA_ATTACK = "2",-- 竞技场进攻
ARENA_DEFEND = "3",-- 竞技场防守
}
BattleConst.TYPEOF_LUA_COMP = {
BATTLE_HERO_COMPONENT = "app/module/battle/component/battle_hero_comp",
BATTLE_MONSTER_COMPONENT = "app/module/battle/component/battle_monster_comp",

View File

@ -23,7 +23,7 @@ function ChapterManager:openBoxFinish(result)
end
function ChapterManager:startFight()
if not ModuleManager.FormationManager:formationIsFull() then
if not DataManager.ArenaData:formationIsFull(GConst.BattleConst.BATTLE_TYPE.STAGE) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end
@ -126,6 +126,10 @@ function ChapterManager:endFightFinish(result)
-- 章节通关 检查是否要弹出功能解锁界面
DataManager.PlayerData:checkIfCanShowModuleUnlock(maxChapter)
end
-- 第二章战斗结算,触发成长礼包
if result.reqData.chapter_id == GConst.ShopConst.INTRODUCTORY_GIFT_TRIGGER_CHAPTER_ID then
DataManager.ShopData:onTriggerIntroductGift()
end
ModuleManager.TaskManager:addFightTaskProgress(reqData.task_stat)
end

View File

@ -1,5 +1,7 @@
local CommerceManager = class("CommerceManager", BaseModule)
-- 体力
function CommerceManager:showBuyVitUI()
UIManager:showUI("app/ui/commerce/buy_vit_ui")
end
@ -38,4 +40,31 @@ function CommerceManager:onBuyBitFinish(data)
end
end
-- 竞技场入场券
function CommerceManager:showBuyArenaTicketUI()
UIManager:showUI("app/ui/arena/arena_buy_ticket_ui")
end
function CommerceManager:onBuyArenaTicket(isAd)
self:sendMessage(ProtoMsgType.FromMsgEnum.BuyTicketReq, {ad = isAd}, {}, self.onBuyArenaTicketFinish, nil)
end
function CommerceManager:onBuyArenaTicketFinish(data)
if data.status ~= 0 then
return
end
if data.costs then
-- 钻石购买
DataManager.PlayerData:addArenaTicketGemBuyCount()
else
-- 激励视频
DataManager.PlayerData:addArenaTicketAdBuyCount()
end
if data.rewards then
GFunc.showRewardBox(data.rewards)
end
end
return CommerceManager

View File

@ -54,7 +54,7 @@ function DailyChallengeManager:startChallenge()
end
-- 检查阵容
if not ModuleManager.FormationManager:formationIsFull() then
if not DataManager.ArenaData:formationIsFull(GConst.BattleConst.BATTLE_TYPE.STAGE) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end

View File

@ -1,13 +1,12 @@
local FormationManager = class("FormationManager", BaseModule)
-- 主线编队
function FormationManager:upHeroToStageFormation(heroId, matchType)
local formation = DataManager.FormationData:getStageFormation()
if formation[matchType] == heroId then
return
end
local args = {
-- formationType = GConst.BattleConst.BATTLE_TYPE.STAGE,
-- matchType = matchType,
id = heroId
}
self:sendMessage(ProtoMsgType.FromMsgEnum.HeroPutOnReq, args, {}, self.upHeroToStageFormationFinish)
@ -26,25 +25,20 @@ function FormationManager:upHeroToStageFormationFinish(result)
end
end
function FormationManager:formationIsFull()
local actvieMap = DataManager.HeroData:getMatchActiveHeroMap()
local formation = DataManager.FormationData:getStageFormation()
local count = 0
for matchtype = 1, GConst.BattleConst.ELEMENT_TYPE_COUNT do
if not formation[matchtype] or formation[matchtype] <= 0 then
if actvieMap[matchtype] and table.nums(actvieMap[matchtype]) > 0 then
return false
end
else
count = count + 1
end
end
-- 竞技场编队
function FormationManager:reqArenaFormation()
local parmas = {
-- 需要五个数据空位用0补齐
attack_heroIds = DataManager.FormationData:getArenaAttackFormation(),-- 进攻编队
defend_heroIds = DataManager.FormationData:getArenaDefendFormation(),-- 防守编队
}
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPHeroesArrayReq, parmas, {}, self.rspArenaFormation, nil)
end
if count <= 0 then
return false
end
return true
function FormationManager:rspArenaFormation(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.FormationData:initArena(result.reqData.attack_heroIds, result.reqData.defend_heroIds)
end
end
return FormationManager

View File

@ -15,6 +15,7 @@ ItemConst.ITEM_ID_BOX_KEY_LV_3 = 15
ItemConst.ITEM_ID_BOX_LV_5 = 18
ItemConst.ITEM_ID_RANDOM_FRAGMENT = 19
ItemConst.ITEM_ID_ARENA_BOUNTY_EXP = 21
ItemConst.ITEM_ID_ARENA_TICKET = 22
ItemConst.ITEM_TYPE = {
RES = 1,

View File

@ -14,11 +14,17 @@ MainCityConst.BOTTOM_ICON = {
MainCityConst.BOTTOM_CLOSE_ICON = {
}
-- main界面模块,序号是模块从左往右的切换顺序,需要是连续的
-- main界面模块
MainCityConst.MAIN_MODULE = {
DAILY_CHALLENGE = 1,
CHAPTER = 2,
DUNGEON = 3,
-- 左侧模块,负数,绝对值升序
ARENA = -1,
DAILY_CHALLENGE = -2,
-- 主模块
CHAPTER = 0,
-- 右侧模块,正数,绝对值升序
DUNGEON = 1,
}
MainCityConst.LEFT_SIDE_BARS = {
@ -31,7 +37,8 @@ MainCityConst.LEFT_SIDE_BARS = {
MainCityConst.RIGHT_SIDE_BARS = {
"app/ui/main_city/cell/side_bar_gold_pig_cell",
"app/ui/main_city/cell/side_bar_first_recharge_cell",
-- "app/ui/main_city/cell/side_bar_first_recharge_cell", 已作废
"app/ui/main_city/cell/side_bar_introduct_gift_cell",
"app/ui/main_city/cell/side_bar_beginner_gift_cell",
"app/ui/main_city/cell/side_bar_grow_up_gift_1_cell",
"app/ui/main_city/cell/side_bar_grow_up_gift_2_cell",

View File

@ -2,6 +2,8 @@ local ShopConst = {}
ShopConst.FIRST_RECHARGE_ID = 10102 -- 首充礼包ID
ShopConst.BEGINNER_GIFT_ID = 40102 -- 新手礼包ID
ShopConst.INTRODUCT_GIFT_ID = 30102 -- 入门礼包ID
ShopConst.INTRODUCTORY_GIFT_TRIGGER_CHAPTER_ID = 2 -- 入门礼包触发的章节ID
ShopConst.MAIN_UI_POP_TYPE = { -- 当触发弹窗时,相关联的类型礼包也要触发
[PayManager.PURCHARSE_TYPE.ACT_GIFT] = {
[PayManager.PURCHARSE_ACT_TYPE.BEGINNER_GIFT] = true,

View File

@ -24,9 +24,15 @@ end
-- 触发弹窗礼包
function ShopManager:triggerGiftPopUI(actType, actId)
if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_GIFT_SHOW_OPEN, true) then
-- 入门礼包不在通用触发条件内
if (actType == PayManager.PURCHARSE_TYPE.ACT_GIFT and actId == GConst.ShopConst.INTRODUCT_GIFT_ID) then
self:showGiftPopUI(actType, actId, false)
DataManager.ShopData:removePopUpGift(actType, actId)
else
if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_GIFT_SHOW_OPEN, true) then
self:showGiftPopUI(actType, actId, false)
DataManager.ShopData:removePopUpGift(actType, actId)
end
end
end
@ -36,6 +42,8 @@ function ShopManager:showGiftPopUI(actType, actId, onlySelf)
end
if actType == PayManager.PURCHARSE_TYPE.ACT_GIFT and actId == GConst.ShopConst.FIRST_RECHARGE_ID then
UIManager:showUI("app/ui/shop/first_recharge_pop_ui")
elseif actType == PayManager.PURCHARSE_TYPE.ACT_GIFT and actId == GConst.ShopConst.INTRODUCT_GIFT_ID then
UIManager:showUI("app/ui/shop/introduct_pop_ui")
else
UIManager:showUI("app/ui/shop/gift_pop_ui", {type = actType, id = actId, onlySelf = onlySelf})
end

View File

@ -104,6 +104,15 @@ function TipsManager:showHeroFragmentTips(itemId)
UIManager:showUI("app/ui/tips/hero_fragment_tips", params)
end
-- formation = {{id = 000, level = 000}, {id = 000, level = 000}, ...}
function TipsManager:showHeroFormation(targetObj, formation)
local params = {
targetObj = targetObj,
formation = formation,
}
UIManager:showUI("app/ui/tips/formation_tips", params)
end
function TipsManager:showBoxTips(itemId)
local params = {
itemId = itemId

View File

@ -37,6 +37,8 @@ local ProtoMsgType = {
[904224593] = "ArenaBountyLevelUnlockRsp",
[1008447203] = "DeleteReq",
[1008449036] = "DeleteRsp",
[1067411524] = "BuyTicketReq",
[1067413357] = "BuyTicketRsp",
[1068769299] = "ReconnectReq",
[1068771132] = "ReconnectRsp",
[1070841461] = "LoginReq",
@ -77,6 +79,8 @@ local ProtoMsgType = {
[2285873970] = "ChapterBoxRewardRsp",
[2429586383] = "MailCycleReq",
[2429588216] = "MailCycleRsp",
[2494225153] = "PVPSettlementADRewardReq",
[2494226986] = "PVPSettlementADRewardRsp",
[2494731810] = "TriggerGoldGiftReq",
[2494733643] = "TriggerGoldGiftRsp",
[2514397758] = "PVPInfoReq",
@ -198,6 +202,8 @@ local ProtoMsgType = {
ArenaBountyLevelUnlockRsp = 904224593,
DeleteReq = 1008447203,
DeleteRsp = 1008449036,
BuyTicketReq = 1067411524,
BuyTicketRsp = 1067413357,
ReconnectReq = 1068769299,
ReconnectRsp = 1068771132,
LoginReq = 1070841461,
@ -238,6 +244,8 @@ local ProtoMsgType = {
ChapterBoxRewardRsp = 2285873970,
MailCycleReq = 2429586383,
MailCycleRsp = 2429588216,
PVPSettlementADRewardReq = 2494225153,
PVPSettlementADRewardRsp = 2494226986,
TriggerGoldGiftReq = 2494731810,
TriggerGoldGiftRsp = 2494733643,
PVPInfoReq = 2514397758,
@ -359,6 +367,8 @@ local ProtoMsgType = {
ArenaBountyLevelUnlockRsp = "ArenaBountyLevelUnlockRsp",
DeleteReq = "DeleteReq",
DeleteRsp = "DeleteRsp",
BuyTicketReq = "BuyTicketReq",
BuyTicketRsp = "BuyTicketRsp",
ReconnectReq = "ReconnectReq",
ReconnectRsp = "ReconnectRsp",
LoginReq = "LoginReq",
@ -399,6 +409,8 @@ local ProtoMsgType = {
ChapterBoxRewardRsp = "ChapterBoxRewardRsp",
MailCycleReq = "MailCycleReq",
MailCycleRsp = "MailCycleRsp",
PVPSettlementADRewardReq = "PVPSettlementADRewardReq",
PVPSettlementADRewardRsp = "PVPSettlementADRewardRsp",
TriggerGoldGiftReq = "TriggerGoldGiftReq",
TriggerGoldGiftRsp = "TriggerGoldGiftRsp",
PVPInfoReq = "PVPInfoReq",

View File

@ -0,0 +1,109 @@
-- 竞技场:购买入场券
local ArenaBuyTicketUI = class("ArenaBuyTicketUI", BaseUI)
function ArenaBuyTicketUI:isFullScreen()
return false
end
function ArenaBuyTicketUI:showCommonBG()
return false
end
function ArenaBuyTicketUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_buy_ticket_ui.prefab"
end
function ArenaBuyTicketUI:onPressBackspace()
self:closeUI()
end
function ArenaBuyTicketUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
uiMap["arena_buy_ticket_ui.bg.close_btn"]:addClickListener(function()
self:closeUI()
end)
uiMap["arena_buy_ticket_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BUY_ENERGY))
local constCfg = ConfigManager:getConfig("const")
local diamondReward = constCfg["arena_notes_diamond_buy"].reward
local adReward = constCfg["arena_notes_ad_buy"].reward
uiMap["arena_buy_ticket_ui.bg.cell_1.num_tx_1"]:setText("x" .. GFunc.getRewardNum(diamondReward))
uiMap["arena_buy_ticket_ui.bg.cell_2.num_tx_1"]:setText("x" .. GFunc.getRewardNum(adReward))
self.descTx1 = uiMap["arena_buy_ticket_ui.bg.cell_1.desc_tx"]
self.descTx2 = uiMap["arena_buy_ticket_ui.bg.cell_2.desc_tx"]
self.numTx1 = uiMap["arena_buy_ticket_ui.bg.cell_1.num_tx_2"]
self.numTx2 = uiMap["arena_buy_ticket_ui.bg.cell_2.num_tx_2"]
self.checkImg1 = uiMap["arena_buy_ticket_ui.bg.cell_1.check_img"]
self.checkImg2 = uiMap["arena_buy_ticket_ui.bg.cell_2.check_img"]
self.iconImg1 = uiMap["arena_buy_ticket_ui.bg.cell_1.icon_img"]
self.iconImg2 = uiMap["arena_buy_ticket_ui.bg.cell_2.icon_img"]
self.buyBtn1 = uiMap["arena_buy_ticket_ui.bg.cell_1"]
self.buyBtn2 = uiMap["arena_buy_ticket_ui.bg.cell_2"]
self.buyBtn1:addClickListener(function()
local diamondCost = constCfg["arena_notes_diamond_cost"].reward
if not GFunc.checkCost(GFunc.getRewardId(diamondCost), GFunc.getRewardNum(diamondCost), true, BIReport.ITEM_GET_TYPE.GEM_BUY_ARENA_TICKET) then
return
end
ModuleManager.CommerceManager:onBuyArenaTicket(false)
end)
self.buyBtn2:addClickListener(function()
SDKManager:showFullScreenAds(BIReport.ADS_CLICK_TYPE.ARENA_TICKET, function ()
ModuleManager.CommerceManager:onBuyArenaTicket(true)
end)
end)
self:bind(DataManager.PlayerData, "arenaTicketGemCount", function()
self:onRefresh()
end)
self:bind(DataManager.PlayerData, "arenaTicketADCount", function()
self:onRefresh()
end)
end
function ArenaBuyTicketUI:onRefresh()
local gemBuyCount = DataManager.PlayerData:getArenaTicketGemBuyCount()
local adBuyCount = DataManager.PlayerData:getArenaTicketAdBuyCount()
local maxGemBuy = GFunc.getConstIntValue("arena_notes_diamond_times")
local maxAdBuy = GFunc.getConstIntValue("arena_notes_ad_times")
if gemBuyCount < maxGemBuy then
self.buyBtn1:setTouchEnable(true)
self.checkImg1:setVisible(false)
self.iconImg1:setVisible(true)
self.numTx1:setVisible(true)
else
self.buyBtn1:setTouchEnable(false)
self.checkImg1:setVisible(true)
self.iconImg1:setVisible(false)
self.numTx1:setVisible(false)
end
GFunc.setAdsSprite(self.iconImg2, false)
if adBuyCount < maxAdBuy then
self.buyBtn2:setTouchEnable(true)
self.checkImg2:setVisible(false)
self.iconImg2:setVisible(true)
self.numTx2:setVisible(true)
else
self.buyBtn2:setTouchEnable(false)
self.checkImg2:setVisible(true)
self.iconImg2:setVisible(false)
self.numTx2:setVisible(false)
end
self.descTx1:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, maxGemBuy - gemBuyCount))
self.descTx2:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, maxAdBuy - adBuyCount))
local constCfg = ConfigManager:getConfig("const")
local diamondCost = constCfg["arena_notes_diamond_cost"].reward
self.numTx1:setText(tostring(GFunc.getRewardNum(diamondCost)))
self.numTx2:setText((maxAdBuy - adBuyCount) .. "/" .. GFunc.getConstIntValue("arena_notes_ad_times"))
if not self.adjustIconAndNum then
self.adjustIconAndNum = true
GFunc.centerImgAndTx(self.iconImg1, self.numTx1)
GFunc.centerImgAndTx(self.iconImg2, self.numTx2)
end
end
return ArenaBuyTicketUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 17e60861d0a06c443a76e9d662eefe9a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,67 @@
-- 竞技场:调整阵容
local ArenaFormationUI = class("ArenaFormationUI", BaseUI)
function ArenaFormationUI:isFullScreen()
return false
end
function ArenaFormationUI:showCommonBG()
return false
end
function ArenaFormationUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_formation_ui.prefab"
end
function ArenaFormationUI:onPressBackspace()
self:closeUI()
end
function ArenaFormationUI:ctor(params)
self.formationType = params
end
function ArenaFormationUI:onCover()
end
function ArenaFormationUI:onReshow()
end
function ArenaFormationUI:onClose()
end
function ArenaFormationUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
uiMap["arena_formation_ui.banner.btn_ok.tx_ok"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_24))
uiMap["arena_formation_ui.banner.btn_ok"]:addClickListener(function()
ModuleManager.FormationManager:reqArenaFormation()
if self.isMatch then
UIManager:showUI("app/ui/arena/arena_match_ui", true)
end
self:closeUI()
end)
local heroUI = uiMap["arena_formation_ui.hero_ui"]
heroUI:initPrefabHelper()
heroUI:genAllChildren()
self.heroComp = heroUI:addLuaComponent("app/ui/hero/hero_comp")
self:bind(DataManager.HeroData, "isDirty", function()
self:onRefresh()
end)
self:bind(DataManager.BagData.ItemData, "dirty", function()
self:onRefresh()
end)
end
function ArenaFormationUI:onRefresh()
if self.formationType == GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK then
-- 从匹配界面进来的
self.isMatch = true
end
self.heroComp:refresh(self.formationType)
end
return ArenaFormationUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 93e588c4cd4c6104c95a51a9de77f4a3
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,228 @@
-- 竞技场:匹配
local ArenaMatchUI = class("ArenaMatchUI", BaseUI)
function ArenaMatchUI:isFullScreen()
return true
end
function ArenaMatchUI:showCommonBG()
return false
end
function ArenaMatchUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_match_ui.prefab"
end
function ArenaMatchUI:onPressBackspace()
self:closeUI()
end
function ArenaMatchUI:ctor(isBack)
self.isBack = isBack-- 是否是返回到匹配结果界面
end
function ArenaMatchUI:onCover()
end
function ArenaMatchUI:onReshow()
end
function ArenaMatchUI:onClose()
if self.waitSid then
ModuleManager.BattleManager:unscheduleGlobal(self.waitSid)
end
if self.countdownSid then
ModuleManager.BattleManager:unscheduleGlobal(self.countdownSid)
end
end
function ArenaMatchUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
-- 匹配等待页
self.matchLoading = uiMap["arena_match_ui.match_loading"]
self.txSeason = uiMap["arena_match_ui.match_loading.tx_season"]
self.txLoading = uiMap["arena_match_ui.match_loading.tx_loading"]
self.btnCancel = uiMap["arena_match_ui.match_loading.btn_cancel"]
self.txCancel = uiMap["arena_match_ui.match_loading.btn_cancel.tx_cancel"]
-- 匹配结果页
self.matchResult = uiMap["arena_match_ui.match_result"]
self.btnClose = uiMap["arena_match_ui.match_result.btn_close"]
-- 对手信息
self.matchAvatar = CellManager:addCellComp(uiMap["arena_match_ui.match_result.match.info.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
self.matchTxName = uiMap["arena_match_ui.match_result.match.info.tx_name"]
self.matchTxLevel = uiMap["arena_match_ui.match_result.match.info.tx_level"]
self.matchGrading = uiMap["arena_match_ui.match_result.match.arena_grading_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.ARENA_GRADING_CELL)
self.matchHeroFormationComp = uiMap["arena_match_ui.match_result.match.formation.hero_formation_comp"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_FORMATION_COMP)
-- 自己信息
self.selfAvatar = CellManager:addCellComp(uiMap["arena_match_ui.match_result.self.info.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
self.selfTxName = uiMap["arena_match_ui.match_result.self.info.tx_name"]
self.selfTxLevel = uiMap["arena_match_ui.match_result.self.info.tx_level"]
self.selfGrading = uiMap["arena_match_ui.match_result.self.arena_grading_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.ARENA_GRADING_CELL)
self.selfHeroFormationComp = uiMap["arena_match_ui.match_result.self.formation.hero_formation_comp"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_FORMATION_COMP)
-- 功能按钮
self.btnStart = uiMap["arena_match_ui.match_result.btn_start"]
self.imgCost = uiMap["arena_match_ui.match_result.btn_start.cost.img_cost"]
self.txStart = uiMap["arena_match_ui.match_result.btn_start.tx_start"]
self.txConst = uiMap["arena_match_ui.match_result.btn_start.cost.tx_cost"]
self.btnRematch = uiMap["arena_match_ui.match_result.btn_rematch"]
self.txRematch = uiMap["arena_match_ui.match_result.btn_rematch.tx_rematch"]
self.txFreeCountdown = uiMap["arena_match_ui.match_result.btn_rematch.tx_free_countdown"]
self.imgAd = uiMap["arena_match_ui.match_result.btn_rematch.img_ad"]
self.btnFormation = uiMap["arena_match_ui.match_result.btn_formation"]
self.txFormation = uiMap["arena_match_ui.match_result.btn_formation.tx_formation"]
self.btnCancel:addClickListener(function()
self:closeUI()
end)
self.btnClose:addClickListener(function()
self:closeUI()
end)
self.btnStart:addClickListener(function()
ModuleManager.ArenaManager:reqChallenge()
self:closeUI()
end)
self.btnRematch:addClickListener(function()
self:onClickRematch()
end)
self.btnFormation:addClickListener(function()
UIManager:showUI("app/ui/arena/arena_formation_ui", GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK)
self:closeUI()
end)
self:bind(DataManager.ArenaData, "isDirty", function()
self:showMatchResult()
end)
end
function ArenaMatchUI:onRefresh()
if DataManager.ArenaData:getMatchInfo() == nil then
ModuleManager.ArenaManager:reqMatch()
end
if self.isBack and DataManager.ArenaData:getMatchInfo() ~= nil then
self:showMatchResult()
else
self:showMatchLoading()
end
end
-- 展示匹配等待页
function ArenaMatchUI:showMatchLoading()
self.matchLoading:setActive(true)
self.matchResult:setActive(false)
self.txSeason:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_21, DataManager.ArenaData:getSeason()))
self.txLoading:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_22))
self.txCancel:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_CANCEL))
-- 等待
if self.waitSid then
ModuleManager.BattleManager:unscheduleGlobal(self.waitSid)
end
self.waitSid = self.matchLoading:performWithDelayGlobal(function()
self:showMatchResult()
end, 1.5)
end
-- 展示匹配结果页
function ArenaMatchUI:showMatchResult()
local matchInfo = DataManager.ArenaData:getMatchInfo()
if not matchInfo then
-- 基本不会走到这
Logger.logError("没有匹配对象却进入了匹配结果页,检查是否是网络慢了等情况")
return
end
self.matchLoading:setActive(false)
self.matchResult:setActive(true)
self.freeRematchCD = DataManager.ArenaData:getFreeRematchCd()
Logger.printTable(matchInfo)
Logger.printTable(self.freeRematchCD)
self.txStart:setText(I18N:getGlobalText(I18N.GlobalConst.TASK_CHALLENGE))
self.txConst:setText(DataManager.ArenaData:getFightCostNum())
self.txRematch:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_23))
self.txFormation:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_10))
self.imgAd:setActive(self.freeRematchCD > 0 and DataManager.ArenaData:canAdRematch())
self.matchAvatar:refresh(matchInfo.avatar, matchInfo.avatar_frame)
self.matchTxName:setText(matchInfo.name)
self.matchTxLevel:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, matchInfo.level))
self.matchGrading:refresh(DataManager.ArenaData:getGradingIdFromScore(matchInfo.score))
self.matchHeroFormationComp:refreshBriefInfo(matchInfo.array_heroes)
self.selfAvatar:refresh(nil, nil, false)
self.selfTxName:setText(DataManager.PlayerData:getNickname())
self.selfTxLevel:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, DataManager.PlayerData:getLv()))
self.selfGrading:refresh(DataManager.ArenaData:getGradingId())
GFunc.centerImgAndTx(self.imgCost, self.txConst, 5)
local formation = {}
for idx, id in pairs(DataManager.FormationData:getArenaAttackFormation()) do
local hero = DataManager.HeroData:getHeroById(id)
if hero then
formation[idx] = {id = id, level = hero:getLv()}
else
formation[idx] = nil
end
end
self.selfHeroFormationComp:refreshBriefInfo(formation)
if self.countdownSid then
ModuleManager.BattleManager:unscheduleGlobal(self.countdownSid)
end
self.countdownSid = self.txFreeCountdown:scheduleGlobal(function()
self:refreshCountdown()
end, 1)
self:refreshCountdown()
end
function ArenaMatchUI:refreshCountdown()
self.freeRematchCD = self.freeRematchCD - 1
if self.freeRematchCD <= 0 then
-- 冷却已好
self.txFreeCountdown:setActive(false)
ModuleManager.BattleManager:unscheduleGlobal(self.countdownSid)
else
-- 冷却未好
self.txFreeCountdown:setActive(true)
self.txFreeCountdown:setText(GFunc.getTimeStrWithHMS(self.freeRematchCD))
end
end
-- 点击重新匹配
function ArenaMatchUI:onClickRematch()
if self.freeRematchCD > 0 then
-- 在cd时间内
if DataManager.ArenaData:canAdRematch() then
-- 看视频
SDKManager:showFullScreenAds(BIReport.ADS_CLICK_TYPE.ARENA_REMATCH, function ()
ModuleManager.ArenaManager:reqOverCD(true)
end)
else
-- 钻石
local params ={
content = I18N:getGlobalText(I18N.GlobalConst.BOUNTY_BUY_LEVEL_COUNTENT),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK_CANCEL,
costId = ItemConst.ITEM_ID_GEM,
costNum = DataManager.ArenaData:getRematchConstGem(),
okFunc = function()
ModuleManager.ArenaManager:reqOverCD(false)
end,
}
GFunc.showMessageBox(params)
end
else
-- 冷却已好
ModuleManager.ArenaManager:reqMatch()
self:showMatchLoading()
end
end
return ArenaMatchUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ce9dee8d5caa5e6498370256f94d5ed6
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,70 @@
-- 竞技场:排行榜
local ArenaRankUI = class("ArenaRankUI", BaseUI)
function ArenaRankUI:isFullScreen()
return false
end
function ArenaRankUI:showCommonBG()
return false
end
function ArenaRankUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_rank_ui.prefab"
end
function ArenaRankUI:onPressBackspace()
self:closeUI()
end
function ArenaRankUI:ctor()
ModuleManager.ArenaManager:reqRank()
end
function ArenaRankUI:onCover()
end
function ArenaRankUI:onReshow()
end
function ArenaRankUI:onClose()
end
function ArenaRankUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
self.txTitle = uiMap["arena_rank_ui.bg.title.tx_title"]
self.closeBtn = uiMap["arena_rank_ui.bg.close_btn"]
self.txRank = uiMap["arena_rank_ui.bg.my_rank.tx_rank"]
self.playerHeadCell = CellManager:addCellComp(uiMap["arena_rank_ui.bg.my_rank.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
self.txName = uiMap["arena_rank_ui.bg.my_rank.tx_name"]
self.cellGrading = uiMap["arena_rank_ui.bg.my_rank.arena_grading_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.ARENA_GRADING_CELL)
self.scrollRectComp = uiMap["arena_rank_ui.bg.list_rank"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_5))
self.txRank:setText(DataManager.ArenaData:getRank())
self.txName:setText(DataManager.PlayerData:getNickname())
self.cellGrading:refresh(DataManager.ArenaData:getGradingId())
self.playerHeadCell:refresh(nil, nil, false)
self.scrollRectComp:addInitCallback(function()
return "app/ui/arena/cell/arena_rank_cell"
end)
self.scrollRectComp:addRefreshCallback(function(index, cell)
cell:refresh(index)
end)
self.closeBtn:addClickListener(function()
self:closeUI()
end)
self:bind(DataManager.ArenaData, "isDirty", function()
self:onRefresh()
end)
end
function ArenaRankUI:onRefresh()
self.scrollRectComp:clearCells()
self.scrollRectComp:refillCells(DataManager.ArenaData:getRankCount())
end
return ArenaRankUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 0245d41639981524eb068a539427d5cf
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,107 @@
-- 竞技场:最近战报
local ArenaRecentBattleUI = class("ArenaRecentBattleUI", BaseUI)
function ArenaRecentBattleUI:isFullScreen()
return false
end
function ArenaRecentBattleUI:showCommonBG()
return false
end
function ArenaRecentBattleUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_recent_battle_ui.prefab"
end
function ArenaRecentBattleUI:onPressBackspace()
self:closeUI()
end
function ArenaRecentBattleUI:ctor()
ModuleManager.ArenaManager:reqRecord()
end
function ArenaRecentBattleUI:onCover()
end
function ArenaRecentBattleUI:onReshow()
end
function ArenaRecentBattleUI:onClose()
end
function ArenaRecentBattleUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
self.txTitle = uiMap["arena_recent_battle_ui.bg.title.tx_title"]
self.btnClose = uiMap["arena_recent_battle_ui.bg.btn_close"]
self.txResult = uiMap["arena_recent_battle_ui.bg.tab.tx_result"]
self.txName = uiMap["arena_recent_battle_ui.bg.tab.tx_name"]
self.txScore = uiMap["arena_recent_battle_ui.bg.tab.tx_score"]
self.txNone = uiMap["arena_recent_battle_ui.bg.tx_none"]
self.records = {}
for i = 1, 5 do
self.records[i] = uiMap["arena_recent_battle_ui.bg.records.battle_record_cell_"..i]
end
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_7))
self.txResult:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_14))
self.txName:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_15))
self.txScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_16))
self.btnClose:addClickListener(function()
self:closeUI()
end)
self:bind(DataManager.ArenaData, "isDirty", function()
self:onRefresh()
end)
end
function ArenaRecentBattleUI:onRefresh()
local showCount = 0
for idx, obj in pairs(self.records) do
local info = DataManager.ArenaData:getRecentBattleByIdx(idx)
if info then
showCount = showCount + 1
obj:setActive(true)
self:refreshRecord(obj, info)
else
obj:setActive(false)
end
end
if showCount == 0 then
self.txNone:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_8))
else
self.txNone:setText("")
end
end
function ArenaRecentBattleUI:refreshRecord(obj, info)
local uiMap = obj:genAllChildren()
local playerHeadCell = CellManager:addCellComp(uiMap["player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
playerHeadCell:refresh(info.match_info.avatar, info.match_info.avatar_frame)
uiMap["tx_name"]:setText(info.match_info.name)
if info.win then
obj:setSprite(GConst.ATLAS_PATH.ARENA,"arena_bg_3")
uiMap["tx_score"]:setText("<color=#2BFF35>+"..info.incr_score.."</color>")
uiMap["img_result"]:setSprite(GConst.ATLAS_PATH.ARENA, "arena_dec_2")
if info.attacker then
uiMap["tx_result"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_19))
else
uiMap["tx_result"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_17))
end
else
obj:setSprite(GConst.ATLAS_PATH.ARENA,"arena_bg_4")
uiMap["tx_score"]:setText("<color=#FF5454>"..info.incr_score.."</color>")
uiMap["img_result"]:setSprite(GConst.ATLAS_PATH.ARENA, "arena_dec_3")
if info.attacker then
uiMap["tx_result"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_20))
else
uiMap["tx_result"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_18))
end
end
end
return ArenaRecentBattleUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3347c147e7632ef408c220f332dce805
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,125 @@
-- 竞技场:赛季奖励
local ArenaSeasonRewardUI = class("ArenaSeasonRewardUI", BaseUI)
function ArenaSeasonRewardUI:isFullScreen()
return false
end
function ArenaSeasonRewardUI:showCommonBG()
return false
end
function ArenaSeasonRewardUI:getPrefabPath()
return "assets/prefabs/ui/arena/arena_season_reward_ui.prefab"
end
function ArenaSeasonRewardUI:onPressBackspace()
self:closeUI()
end
function ArenaSeasonRewardUI:ctor()
end
function ArenaSeasonRewardUI:onCover()
end
function ArenaSeasonRewardUI:onReshow()
end
function ArenaSeasonRewardUI:onClose()
end
function ArenaSeasonRewardUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
self.txTitle = uiMap["arena_season_reward_ui.bg.title.tx_title"]
self.closeBtn = uiMap["arena_season_reward_ui.bg.close_btn"]
-- 赛季奖励
self.seasonReward = uiMap["arena_season_reward_ui.bg.season_reward"]
self.txDesc = uiMap["arena_season_reward_ui.bg.season_reward.tx_desc"]
self.txTime = uiMap["arena_season_reward_ui.bg.season_reward.countdown.tx_time"]
self.seasonRewardComp = uiMap["arena_season_reward_ui.bg.season_reward.reward_list"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
-- 领取奖励
self.getReward = uiMap["arena_season_reward_ui.bg.last_reward"]
self.txSeason = uiMap["arena_season_reward_ui.bg.last_reward.tx_season"]
self.imgGrading = uiMap["arena_season_reward_ui.bg.last_reward.img_grading"]
self.txGrading = uiMap["arena_season_reward_ui.bg.last_reward.img_grading.tx_grading"]
self.getRewardComp = uiMap["arena_season_reward_ui.bg.last_reward.rewards"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.btnGet = uiMap["arena_season_reward_ui.bg.last_reward.btn_get"]
self.txGet = uiMap["arena_season_reward_ui.bg.last_reward.btn_get.tx_get"]
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_11))
self.closeBtn:addClickListener(function()
self:closeUI()
end)
self.btnGet:addClickListener(function()
ModuleManager.ArenaManager:reqLastSeasonReward()
end)
self:bind(DataManager.ArenaData, "isDirty", function()
self:closeUI()
end)
end
function ArenaSeasonRewardUI:onRefresh()
if DataManager.ArenaData:hasSeasonReward() then
self:showGetReward()
else
self:showSeasonReward()
end
end
-- 显示赛季奖励
function ArenaSeasonRewardUI:showSeasonReward()
self.seasonReward:setActive(true)
self.getReward:setActive(false)
self.txDesc:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_12, DataManager.ArenaData:getSeason()))
if self.seasonChangeSid then
ModuleManager.BattleManager:unscheduleGlobal(self.seasonChangeSid)
end
self.seasonChangeSid = self.txTime:scheduleGlobal(function()
self:refreshCountdown()
end, 1)
local ids = DataManager.ArenaData:getGradingIdList()
self.seasonRewardComp:addInitCallback(function()
return "app/ui/arena/cell/arena_season_reward_cell"
end)
self.seasonRewardComp:addRefreshCallback(function(index, cell)
cell:refresh(ids[index])
end)
self.seasonRewardComp:clearCells()
self.seasonRewardComp:refillCells(#ids)
end
function ArenaSeasonRewardUI:refreshCountdown()
self.txTime:setText(Time:formatNumTimeStr(DataManager.ArenaData:getRemainSeasonTime()))
end
-- 显示领取奖励
function ArenaSeasonRewardUI:showGetReward()
self.seasonReward:setActive(false)
self.getReward:setActive(true)
local lastId = DataManager.ArenaData:getLastGradingId()
local rewards = DataManager.ArenaData:getGradingRewardInfo(lastId)
self.txSeason:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_13, DataManager.ArenaData:getSeason() - 1))
self.imgGrading:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingIconName(lastId))
self.txGrading:setText(DataManager.ArenaData:getGradingName(lastId))
self.txGet:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM))
self.btnGet:addRedPoint(65, 35, 0.6)
self.getRewardComp:addInitCallback(function()
return GConst.TYPEOF_LUA_CLASS.REWARD_CELL
end)
self.getRewardComp:addRefreshCallback(function(index, cell)
cell:refresh(rewards[index])
end)
self.seasonRewardComp:clearCells()
self.seasonRewardComp:refillCells(#rewards)
end
return ArenaSeasonRewardUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 894baca67a318bb4aa5cc0ddaa6ed1e1
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,17 @@
local ArenaGradingCell = class("ArenaGradingCell", BaseCell)
function ArenaGradingCell:init()
local uiMap = self:getUIMap()
self.imgGrading = uiMap["arena_grading_cell.img_grading"]
self.imgIdx = uiMap["arena_grading_cell.img_idx"]
self.txGrading = uiMap["arena_grading_cell.tx_grading"]
end
function ArenaGradingCell:refresh(id)
self.txGrading:setText(DataManager.ArenaData:getGradingName(id))
self.imgIdx:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingNumName(id))
self.imgGrading:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingIconName(id))
end
return ArenaGradingCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3c23c830632924a4d924642e20e11848
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,42 @@
local ArenaRankCell = class("ArenaRankCell", BaseCell)
function ArenaRankCell:init()
local uiMap = self:getUIMap()
self.txRank = uiMap["arena_rank_cell.tx_rank"]
self.playerHeadCell = CellManager:addCellComp(uiMap["arena_rank_cell.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
self.txName = uiMap["arena_rank_cell.tx_name"]
self.cellGrading = uiMap["arena_rank_cell.arena_grading_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.ARENA_GRADING_CELL)
self.btnFormation = uiMap["arena_rank_cell.btn_formation"]
self.btnFormation:addClickListener(function()
if DataManager.ArenaData:hasRankFormation() then
self:showHeroFormationTips()
else
self.clickFormation = true
ModuleManager.ArenaManager:reqRankHeroes(self.rankInfo.ID)
end
end)
self:bind(DataManager.ArenaData, "isDirty", function()
if self.clickFormation then
self:showHeroFormationTips()
end
end)
end
function ArenaRankCell:refresh(rank)
self.clickFormation = false
self.rankInfo = DataManager.ArenaData:getRankData(rank)
self.playerHeadCell:refresh(self.rankInfo.avatar, self.rankInfo.avatar_frame)
self.txRank:setText(self.rankInfo.rank)
self.txName:setText(rank)
self.cellGrading:refresh(DataManager.ArenaData:getGradingIdFromScore(self.rankInfo.score))
end
function ArenaRankCell:showHeroFormationTips()
self.clickFormation = false
ModuleManager.TipsManager:showHeroFormation(self.btnFormation, DataManager.ArenaData:getRankFormation(self.rankInfo.ID))
end
return ArenaRankCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: fa896f488ffeb9c46b542ce1a6c080fe
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,28 @@
local ArenaSeasonRewardCell = class("ArenaSeasonRewardCell", BaseCell)
function ArenaSeasonRewardCell:init()
local uiMap = self:getUIMap()
self.cellGrading = uiMap["arena_reward_cell.arena_grading_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.ARENA_GRADING_CELL)
self.rewards = {}
for i = 1, 4 do
self.rewards[i] = uiMap["arena_reward_cell.rewards.reward_cell_"..i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)
end
end
function ArenaSeasonRewardCell:refresh(id)
local rewards = DataManager.ArenaData:getGradingRewardInfo(id)
for idx, cell in pairs(self.rewards) do
if rewards[idx] then
cell:setVisible(true)
cell:refreshByConfig(rewards[idx])
else
cell:setVisible(false)
end
end
self.cellGrading:refresh(id)
end
return ArenaSeasonRewardCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: eb384b8f81faa034699408a272a77a96
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -2,19 +2,26 @@ local HeroCell = class("HeroCell", BaseCell)
function HeroCell:init()
local uiMap = self.baseObject:genAllChildren()
-- 通用
self.icon = uiMap["hero_cell.hero_bg.icon"]
self.heroBg = uiMap["hero_cell.hero_bg"]
self.heroDec = uiMap["hero_cell.hero_bg.dec"]
self.check = uiMap["hero_cell.hero_bg.mask"]
self.matchImg = uiMap["hero_cell.hero_bg.match_img"]
self.progressBg = uiMap["hero_cell.hero_bg.progress_bg"]
self.progress = uiMap["hero_cell.hero_bg.progress"]
self.progressTx = uiMap["hero_cell.hero_bg.progress_tx"]
self.lvTx = uiMap["hero_cell.hero_bg.lv_tx"]
self.unlockTx = uiMap["hero_cell.hero_bg.unlock_tx"]
self.lvUpArrow = uiMap["hero_cell.hero_bg.effect_node.ui_spine_obj"]
self.fragmenImg = uiMap["hero_cell.hero_bg.progress_bg.fragment_img"]
self.sImg = uiMap["hero_cell.hero_bg.s"]
-- 个人节点
self.selfNode = uiMap["hero_cell.hero_bg.self_node"]
self.progressBg = uiMap["hero_cell.hero_bg.self_node.progress_bg"]
self.progress = uiMap["hero_cell.hero_bg.self_node.progress_bg.progress"]
self.progressTx = uiMap["hero_cell.hero_bg.self_node.progress_bg.progress_tx"]
self.unlockTx = uiMap["hero_cell.hero_bg.self_node.unlock_tx"]
self.fragmenImg = uiMap["hero_cell.hero_bg.self_node.progress_bg.fragment_img"]
self.lvUpArrow = uiMap["hero_cell.hero_bg.self_node.effect_node.ui_spine_obj"]
-- 他人节点
self.otherNode = uiMap["hero_cell.hero_bg.other_node"]
self.otherTxName = uiMap["hero_cell.hero_bg.other_node.tx_name"]
self.isGray = false
self.baseObject:addClickListener(function()
if self.clickCallback then
@ -23,7 +30,11 @@ function HeroCell:init()
end)
end
-- 显示自己英雄
function HeroCell:refresh(heroEntity, isGray)
self.selfNode:setVisible(true)
self.otherNode:setVisible(false)
local heroInfo = heroEntity:getConfig()
self:_refresh(heroInfo, isGray)
@ -70,6 +81,17 @@ function HeroCell:refresh(heroEntity, isGray)
end
end
--显示其他人英雄
function HeroCell:refreshBriefInfo(id, level)
self.selfNode:setVisible(false)
self.otherNode:setVisible(true)
self:_refresh(ConfigManager:getConfig("hero")[id])
self.otherTxName:setText(ModuleManager.HeroManager:getHeroName(id))
self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, level))
end
function HeroCell:refreshWithCfgId(id, isGray)
local heroInfo = ConfigManager:getConfig("hero")[id]
self:_refresh(heroInfo, isGray)

View File

@ -28,11 +28,11 @@ function LargeHeroCell:init()
return
end
self.baseObject:setAnchoredPositionX(OUT_SCREEN_X)
ModuleManager.FormationManager:upHeroToStageFormation(self.heroId, self.matchType)
self.onClickUseFunc(self.heroId, self.matchType)
end)
end
function LargeHeroCell:refresh(heroEntity, isGray)
function LargeHeroCell:refresh(heroEntity, isGray, useFunc)
self.heroId = heroEntity:getCfgId()
self.matchType = heroEntity:getMatchType()
local heroInfo = heroEntity:getConfig()
@ -44,6 +44,7 @@ function LargeHeroCell:refresh(heroEntity, isGray)
str = I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_9)
end
self.infoBtnDesc:setText(str)
self.onClickUseFunc = useFunc
end
function LargeHeroCell:refreshWithCfgId(id, isGray)

View File

@ -11,12 +11,11 @@ function HeroFormationComp:init()
uiMap["hero_formation_comp.hero_cell_4"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_CELL),
uiMap["hero_formation_comp.hero_cell_5"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_CELL),
}
self:setFormationActive(true)
end
-- 显示英雄升级/使用等等信息
function HeroFormationComp:refresh()
-- todo 传参控制显示对手还是自己的编队
local formation = DataManager.FormationData:getStageFormation()
for i, heroCell in ipairs(self.heroCells) do
if formation[i] then
@ -36,8 +35,21 @@ function HeroFormationComp:refresh()
end
end
function HeroFormationComp:setFormationVisible(visible)
self.baseObject:setVisible(visible)
-- 显示英雄等级/名称/品级信息
-- formation = {{id = 000, level=000},{id = 000, level=000}, ...}
function HeroFormationComp:refreshBriefInfo(formation)
for i, heroCell in ipairs(self.heroCells) do
if formation[i] then
heroCell:setVisible(true, 1)
heroCell:refreshBriefInfo(formation[i].id, formation[i].level)
else
heroCell:setVisible(false)
end
end
end
function HeroFormationComp:setFormationActive(active)
self.baseObject:setActive(active)
end
function HeroFormationComp:getFormationPosY()

View File

@ -47,6 +47,11 @@ function ResourceCell:show(itemId, hideAddImg)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.GO_SHOP, {page = GConst.ShopConst.PAGE_TYPE.MAIN, subType = GConst.ShopConst.MAIN_PAGE_TYPE.GEM})
end)
self.addImg:setVisible(true)
elseif itemId == GConst.ItemConst.ITEM_ID_ARENA_TICKET then
self.baseObject:addClickListener(function()
ModuleManager.CommerceManager:showBuyArenaTicketUI()
end)
self.addImg:setVisible(true)
else
self.baseObject:removeClickListener()
self.addImg:setVisible(false)

View File

@ -10,7 +10,7 @@ function HeroComp:init()
return HERO_LIST_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(index, self.heroList, self.stageFormation, self.allHeroCount, self.unlockCount, function(cell, heroId)
cell:refresh(index, self.heroList, self.curFormation, self.allHeroCount, self.unlockCount, function(cell, heroId)
self:onClickHero(cell, heroId)
end)
end)
@ -42,6 +42,8 @@ function HeroComp:init()
}
self.heroSpineList = {}
self.largeHeroCell = CellManager:addCellComp(self.uiMap["hero_ui.scrollrect.viewport.content.large_hero_cell"], GConst.TYPEOF_LUA_CLASS.LARGE_HERO_CELL)
self.txTitle = self.uiMap["hero_ui.top_bg.title_bg_img.title_tx"]
self.rimgTopBG = self.uiMap["hero_ui.top_bg"]
self.content = self.uiMap["hero_ui.scrollrect.viewport.content"]
self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)
self.content:addClickListener(function()
@ -50,7 +52,7 @@ function HeroComp:init()
for index, obj in ipairs(self.heroNodeList) do
obj:addClickListener(function()
local heroId = self.stageFormation[index]
local heroId = self.curFormation[index]
if heroId then
local hero = DataManager.HeroData:getHeroById(heroId)
if hero then
@ -62,21 +64,66 @@ function HeroComp:init()
self.heroBgSpineObj[index]:playAnim("idle", true, false)
end
end
self.uiMap["hero_ui.top_bg.title_bg_img.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.MAIN_BTN_2))
end
function HeroComp:refresh()
function HeroComp:refresh(battleType)
self.battleType = battleType
self:clearAdapt()
self:adapt()
self.stageFormation = DataManager.FormationData:getStageFormation()
self:refreshStageFormation()
if self.battleType == GConst.BattleConst.FORMATION_TYPE.STAGE then
self:refreshStageFormation()
elseif self.battleType == GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK then
self:refreshArenaFightFormation()
elseif self.battleType == GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND then
self:refreshArenaDefendFormation()
end
end
-- 展示主线章节阵容
function HeroComp:refreshStageFormation()
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.MAIN_BTN_2))
self.rimgTopBG:setTexture("assets/arts/textures/background/hero/hero_bg_1.png")
self.curFormation = DataManager.FormationData:getStageFormation()
self.onClickUseFunc = function(id, type)
ModuleManager.FormationManager:upHeroToStageFormation(id, type)
end
self:refreshScrollRect()
end
function HeroComp:refreshStageFormation()
-- 展示竞技场进攻阵容
function HeroComp:refreshArenaFightFormation()
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_10))
self.rimgTopBG:setTexture("assets/arts/textures/background/arena/arena_bg_2.png")
self.curFormation = DataManager.FormationData:getArenaAttackFormation()
self.onClickUseFunc = function(id, type)
DataManager.FormationData:upHeroToFormation(self.battleType, type, id)
self:refreshArenaFightFormation()
end
self:refreshScrollRect()
end
-- 展示竞技场防守阵容
function HeroComp:refreshArenaDefendFormation()
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_9))
self.rimgTopBG:setTexture("assets/arts/textures/background/arena/arena_bg_2.png")
self.curFormation = DataManager.FormationData:getArenaDefendFormation()
self.onClickUseFunc = function(id, type)
DataManager.FormationData:upHeroToFormation(self.battleType, type, id)
self:refreshArenaDefendFormation()
end
self:refreshScrollRect()
end
function HeroComp:refreshScrollRect()
for i = 1, 5 do
local heroId = self.stageFormation[i]
local heroId = self.curFormation[i]
local hero = DataManager.HeroData:getHeroById(heroId)
if hero and hero:getLv() > 0 then
self.heroAddImgList[i]:setVisible(false)
@ -85,7 +132,7 @@ function HeroComp:refreshStageFormation()
self.heroSpineList[i]:playAnimation("idle", true)
else
SpineManager:loadHeroAsync(hero:getModelId(), self.heroNodeList[i], function(spineObject)
if heroId ~= self.stageFormation[i] then
if heroId ~= self.curFormation[i] then
return
end
if self.heroSpineList[i] then
@ -104,9 +151,7 @@ function HeroComp:refreshStageFormation()
end
end
end
end
function HeroComp:refreshScrollRect()
self:sortHeroList()
self.allHeroCount = #self.heroList
self.unlockCount = DataManager.HeroData:getUnlockHeroCount()
@ -164,14 +209,14 @@ function HeroComp:onClickHero(cell, heroId)
local entity = DataManager.HeroData:getHeroById(heroId)
if entity then
if entity:isActived() and not DataManager.FormationData:heroInFormation(GConst.BattleConst.BATTLE_TYPE.STAGE, heroId) then
if entity:isActived() and not DataManager.FormationData:heroInFormation(self.battleType, heroId) then
local targetPos = cell:getBaseObject():getTransform().position
local sPoint = UIManager:getUICameraComponent():WorldToScreenPoint(targetPos)
targetPos = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(self.content:getTransform(), sPoint.x, sPoint.y, UIManager:getUICameraComponent())
self.largeHeroCell:getBaseObject():setAnchoredPosition(targetPos.x, targetPos.y)
self.largeHeroCell:getBaseObject():getTransform():SetAsLastSibling()
self.largeHeroCell:refresh(entity, not entity:isActived())
self.largeHeroCell:showCheck(self.stageFormation[entity:getMatchType()] == heroId)
self.largeHeroCell:refresh(entity, not entity:isActived(), self.onClickUseFunc)
self.largeHeroCell:showCheck(self.curFormation[entity:getMatchType()] == heroId)
else
ModuleManager.HeroManager:showHeroDetailUI(heroId)
self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)

View File

@ -0,0 +1,46 @@
local SideBarBaseCellComp = require "app/ui/main_city/cell/side_bar_base_cell"
local SideBarIntroductGiftCell = class("SideBarIntroductGiftCell", SideBarBaseCellComp)
function SideBarIntroductGiftCell:getModuleKey()
return ModuleManager.MODULE_KEY.INTRODUCT_GIFT
end
function SideBarIntroductGiftCell:getIsOpen()
return DataManager.ShopData:getIntroductGiftShowSideBar()
end
function SideBarIntroductGiftCell:getSpineName()
return "main_btn_gift_new"
end
function SideBarIntroductGiftCell:onClick()
ModuleManager.ShopManager:showGiftPopUI(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID, true)
end
function SideBarIntroductGiftCell:getIsShowRedPoint()
return false
end
function SideBarIntroductGiftCell:onRefresh()
self.timeBg:setVisible(true)
self:_refreshTime()
end
function SideBarIntroductGiftCell:updateTime()
if self:getIsOpen() then
self:_refreshTime()
else
self:closeBtn()
end
end
function SideBarIntroductGiftCell:_refreshTime()
local remainTime = DataManager.ShopData:getIntroductGiftRemainTime()
if remainTime >= 0 then
self.timeTx:setText(GFunc.getTimeStr(remainTime))
else
self.timeTx:setText("00:00:00")
end
end
return SideBarIntroductGiftCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: c8bc1461168b10444b874ff8cdd0c025
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,146 @@
local MainCompBaseCell = require "app/ui/main_city/component/main_comp_base_cell"
local ArenaComp = class("ArenaComp", MainCompBaseCell)
function ArenaComp:getIsOpen()
return DataManager.ArenaData:isOpen()
end
function ArenaComp:getEntranceName()
return I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_1)
end
function ArenaComp:getFightDesc()
return I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_2)
end
function ArenaComp:onClickFight()
UIManager:showUI("app/ui/arena/arena_match_ui")
end
function ArenaComp:getShowEntranceRedPoint()
return DataManager.ArenaData:hasEntranceRedDot()
end
function ArenaComp:ctor()
end
function ArenaComp:init()
local uiMap = self:getBaseObject():genAllChildren()
self.txSeason = uiMap["arena_comp.tx_season"]
self.txTitle = uiMap["arena_comp.tx_title"]
self.txCountdown = uiMap["arena_comp.countdown.tx_time"]
self.txGarding = uiMap["arena_comp.tx_garding"]
self.imgGarding = uiMap["arena_comp.img_garding"]
self.imgProg = uiMap["arena_comp.prog.img_prog"]
self.txProg = uiMap["arena_comp.prog.tx_prog"]
self.btnHelp = uiMap["arena_comp.tx_season.btn_help"]
self.btnRecord = uiMap["arena_comp.btn_record"]
self.txRecord = uiMap["arena_comp.btn_record.tx_record"]
self.btnFormation = uiMap["arena_comp.btn_formation"]
self.txFormation = uiMap["arena_comp.btn_formation.tx_formation"]
self.btnReward = uiMap["arena_comp.btn_reward"]
self.txReward = uiMap["arena_comp.btn_reward.tx_reward"]
self.btnRank = uiMap["arena_comp.btn_rank"]
self.txRank = uiMap["arena_comp.btn_rank.tx_rank"]
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_4))
self.txRecord:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_7))
self.txFormation:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_9))
self.txReward:setText(I18N:getGlobalText(I18N.GlobalConst.REWARD_DESC))
self.txRank:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_5))
self.btnHelp:addClickListener(function()
ModuleManager.TipsManager:showDescTips(DataManager.DungeonData:getRule(self.moduleKey), self.btnHelp)
end)
self.btnRecord:addClickListener(function()
UIManager:showUI("app/ui/arena/arena_recent_battle_ui")
end)
self.btnFormation:addClickListener(function()
UIManager:showUI("app/ui/arena/arena_formation_ui", GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND)
end)
self.btnReward:addClickListener(function()
UIManager:showUI("app/ui/arena/arena_season_reward_ui")
end)
self.btnRank:addClickListener(function()
UIManager:showUI("app/ui/arena/arena_rank_ui")
end)
self:initBounty()
self:refreshShow()
end
function ArenaComp:initBounty()
local uiMap = self:getBaseObject():genAllChildren()
self.bountyNode = uiMap["arena_comp.bounty_node"]
self.bountyBanner = uiMap["arena_comp.bounty_node.banner"]
self.bountyBanner:addClickListener(function()
ModuleManager.ArenaBountyManager:showBountyMainUI()
end)
self.bountyRewardSpine = uiMap["arena_comp.bounty_node.banner.spine"]
self.bountyBannerInfo = uiMap["arena_comp.bounty_node.banner.info"]
self.bountyBannerDescTx = uiMap["arena_comp.bounty_node.banner.desc"]
self.bountyBannerSlider = uiMap["arena_comp.bounty_node.banner.info.progress_bg.slider"]
self.bountyBannerSliderTx = uiMap["arena_comp.bounty_node.banner.info.progress_bg.slider_tx"]
self.bountyBannerLvTx = uiMap["arena_comp.bounty_node.banner.info.progress_bg.lv_tx"]
uiMap["arena_comp.bounty_node.banner.info.name"]:setText(I18N:getGlobalText(I18N.GlobalConst.BOUNTY_TITLE))
end
function ArenaComp:refreshBounty()
if DataManager.ArenaBountyData:getIfCanClaimReward() then
self.bountyRewardSpine:setVisible(true)
self.bountyRewardSpine:playAnim("idle", true)
self.bountyRewardSpine:getSkeletonGraphic().enabled = true
self.bountyBannerInfo:setVisible(false)
self.bountyBannerDescTx:setText(I18N:getGlobalText(I18N.GlobalConst.COLLET_REWARDS))
else
self.bountyRewardSpine:setVisible(false)
self.bountyRewardSpine:getSkeletonGraphic().enabled = false
local bannerName = DataManager.ArenaBountyData:getBannerName()
self.bountyBanner:setSprite(GConst.ATLAS_PATH.BOUNTY, bannerName)
self.bountyBannerInfo:setVisible(true)
self.bountyBannerDescTx:setText(GConst.EMPTY_STRING)
local exp = DataManager.ArenaBountyData:getExp()
local lvUpExp = DataManager.ArenaBountyData:getLvUpExp()
local level = DataManager.ArenaBountyData:getLevel()
local maxLevel = DataManager.ArenaBountyData:getMaxLevel()
self.bountyBannerSliderTx:setText(exp .. "/" .. lvUpExp)
self.bountyBannerSlider:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = exp / lvUpExp
if level >= maxLevel then
self.bountyBannerLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.STR_MAX))
else
self.bountyBannerLvTx:setText(tostring(level))
end
end
end
function ArenaComp:refreshShow()
local maxScore = DataManager.ArenaData:getGradingScoreTotal()
local curScore = DataManager.ArenaData:getGradingScore()
self.txSeason:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_3, DataManager.ArenaData:getSeason()))
self.txGarding:setText(DataManager.ArenaData:getGradingName(DataManager.ArenaData:getGradingId()))
self.txProg:setText(curScore.."/"..maxScore)
self.imgProg:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = curScore/maxScore
self.seasonChangeCD = DataManager.ArenaData:getRemainSeasonTime()
if self.seasonChangeSid then
ModuleManager.BattleManager:unscheduleGlobal(self.seasonChangeSid)
end
self.seasonChangeSid = self.txCountdown:scheduleGlobal(function()
self:refreshCountdown()
end, 1)
self:refreshBounty() -- 刷新战令
end
function ArenaComp:refreshCountdown()
self.seasonChangeCD = self.seasonChangeCD - 1
if self.seasonChangeCD < 0 then
ModuleManager.ArenaManager:onSeasonChanged()
return
end
self.txCountdown:setText(Time:formatNumTimeStr(self.seasonChangeCD))
end
return ArenaComp

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4ed7562a967f4424f900ab045362eae1
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -15,15 +15,23 @@ function ChapterComp:getEntranceName()
return I18N:getGlobalText(I18N.GlobalConst.MAIN_CHAPTER)
end
function ChapterComp:getEntranceIcon()
return GConst.ATLAS_PATH.MAIN,"main_dec_5"
function ChapterComp:isShowTopNode()
return true
end
function ChapterComp:getEntranceBg()
return GConst.ATLAS_PATH.MAIN,"main_btn_ringt"
function ChapterComp:isShowSideBar()
return true
end
function ChapterComp:getHpCost()
function ChapterComp:isShowBounty()
return true
end
function ChapterComp:isShowHeroFormation()
return true
end
function ChapterComp:getFightHpCost()
return DataManager.ChapterData:getFightCost()
end

View File

@ -9,23 +9,27 @@ function DailyChallengeComp:getEntranceName()
return I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE)
end
function DailyChallengeComp:getEntranceIcon()
return GConst.ATLAS_PATH.MAIN,"main_dec_1"
end
function DailyChallengeComp:getEntranceBg()
return GConst.ATLAS_PATH.MAIN,"main_btn_ligth"
end
function DailyChallengeComp:getShowEntranceRedPoint()
return DataManager.DailyChallengeData:isMeetChallenge()
end
function DailyChallengeComp:getHpCost()
function DailyChallengeComp:isShowTopNode()
return true
end
function DailyChallengeComp:isShowSideBar()
return true
end
function DailyChallengeComp:isShowHeroFormation()
return true
end
function DailyChallengeComp:getFightHpCost()
return DataManager.DailyChallengeData:getChallengeHpCost()
end
function DailyChallengeComp:getTodayRemainCount()
function DailyChallengeComp:getFightTodayRemainCount()
return DataManager.DailyChallengeData:getTodayRemainLimitCount()
end

View File

@ -9,14 +9,6 @@ function DungeonComp:getEntranceName()
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_BTN)
end
function DungeonComp:getEntranceIcon()
return GConst.ATLAS_PATH.MAIN,"main_dec_2"
end
function DungeonComp:getEntranceBg()
return GConst.ATLAS_PATH.MAIN,"main_btn_ringt"
end
function DungeonComp:getShowEntranceRedPoint()
return DataManager.DungeonData:isCanChallengeAnyone()
end

View File

@ -2,6 +2,7 @@ local MainComp = class("MainComp", LuaComponent)
local CHAPTER_COMP = "app/ui/main_city/component/chapter_comp"
local DAILY_CHALLENGE_COMP = "app/ui/main_city/component/daily_challenge_comp"
local DUNGEON_COMP = "app/ui/main_city/component/dungeon_comp"
local ARENA_COMP = "app/ui/main_city/component/arena_comp"
local BOTTOM_HEIGHT = 120
@ -30,12 +31,35 @@ function MainComp:refreshModule(selectModule)
self.dungeonComp = CellManager:addCellComp(dungeonComp, DUNGEON_COMP)
self.dungeonComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.DUNGEON] = self.dungeonComp
-- 竞技场
local arenaComp = self.uiMap["main_comp.arena_comp"]
self.arenaComp = CellManager:addCellComp(arenaComp, ARENA_COMP)
self.arenaComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.ARENA] = self.arenaComp
end
-- 左侧活动入口
if not self.leftEntrance then
self.uiMap["main_comp.left"]:setAnchoredPositionY(self.btnPosY)
self.leftEntrance = {}
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.CHAPTER] = self.uiMap["main_comp.left.chapter"]
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.ARENA] = self.uiMap["main_comp.left.arena"]
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE] = self.uiMap["main_comp.left.daily_challenge"]
end
-- 右侧活动入口
if not self.rightEntrance then
self.uiMap["main_comp.right"]:setAnchoredPositionY(self.btnPosY)
self.rightEntrance = {}
self.rightEntrance[GConst.MainCityConst.MAIN_MODULE.CHAPTER] = self.uiMap["main_comp.right.chapter"]
self.rightEntrance[GConst.MainCityConst.MAIN_MODULE.DUNGEON] = self.uiMap["main_comp.right.dungeon"]
end
if self.curModuleType ~= selectModule then
self.curModuleType = selectModule
ModuleManager.MaincityManager:setCurModule(self.curModuleType)
self:setFormationVisible(true)
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
-- 切换到主线章节
@ -46,8 +70,8 @@ function MainComp:refreshModule(selectModule)
end
elseif self.curModuleType == GConst.MainCityConst.MAIN_MODULE.DUNGEON then
-- 切换到活动副本
self:setFormationVisible(false)
end
self:refreshHeroFormationVisible()
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_COMP_MODULE, self.curModuleType)
end
@ -65,112 +89,197 @@ function MainComp:refreshBtns()
end
function MainComp:refreshFightBtn()
if self.fightBtn == nil then
self.fightBtn = self.uiMap["main_comp.fight_btn"]
-- 体力消耗
self.fightCost = self.uiMap["main_comp.fight_btn.cost"]
self.costTxDesc = self.uiMap["main_comp.fight_btn.cost.tx_desc"]
self.costTxCost = self.uiMap["main_comp.fight_btn.cost.tx_cost"]
-- 剩余次数
self.countTxNum = self.uiMap["main_comp.fight_btn.tx_count"]
-- 按钮文本
self.txFight = self.uiMap["main_comp.fight_btn.tx_desc"]
end
local moduleCell = self.moduleMap[self.curModuleType]
local isShowFight = false
local cost = moduleCell:getHpCost()
-- 体力消耗
local cost = moduleCell:getFightHpCost()
if cost then
self.uiMap["main_comp.fight_btn"]:setActive(true)
self.uiMap["main_comp.fight_btn"]:addClickListener(moduleCell.onClickFight)
self.uiMap["main_comp.fight_btn"]:setAnchoredPositionY(self.btnPosY)
self.uiMap["main_comp.fight_btn.desc"]:setText(I18N:getGlobalText(I18N.GlobalConst.START_DESC))
self.uiMap["main_comp.fight_btn.desc_2"]:setText(GFunc.getRewardNum(cost))
isShowFight = true
self.fightCost:setActive(true)
self.costTxDesc:setText(I18N:getGlobalText(I18N.GlobalConst.START_DESC))
self.costTxCost:setText(GFunc.getRewardNum(cost))
else
self.uiMap["main_comp.fight_btn"]:setActive(false)
return
self.fightCost:setActive(false)
end
local remainCount = moduleCell:getTodayRemainCount()
-- 剩余次数
local remainCount = moduleCell:getFightTodayRemainCount()
if remainCount >= 0 then
self.uiMap["main_comp.fight_btn.num_tx"]:setActive(true)
self.uiMap["main_comp.fight_btn.num_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, remainCount))
isShowFight = true
self.countTxNum:setActive(true)
self.countTxNum:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, remainCount))
else
self.uiMap["main_comp.fight_btn.num_tx"]:setActive(false)
self.countTxNum:setActive(false)
end
-- 按钮描述
local fightDesc = moduleCell:getFightDesc()
if fightDesc then
isShowFight = true
self.txFight:setActive(true)
self.txFight:setText(fightDesc)
self.fightBtn:setSizeDelta(286, 119)
else
self.txFight:setActive(false)
self.fightBtn:setSizeDelta(334, 122)
end
if isShowFight then
self.fightBtn:setActive(true)
self.fightBtn:addClickListener(moduleCell.onClickFight)
self.fightBtn:setAnchoredPositionY(self.btnPosY)
else
self.fightBtn:setActive(false)
end
end
-- 刷新左侧活动模块入口
function MainComp:refreshLeftBtn()
if self.leftBtn == nil then
self.leftBtn = self.uiMap["main_comp.left_btn"]
end
self.leftBtn:setActive(false)
self.leftBtn:setAnchoredPositionY(self.btnPosY)
local leftIdx = self:getCurLeftModuleIdx()
if leftIdx == nil then
return
end
local moduleCell = self.moduleMap[leftIdx]
if not moduleCell:getIsOpen() then
return
local showCount = 0
local leftIdxList = self:getCurLeftModuleIdxList()
for module, entrance in pairs(self.leftEntrance) do
if leftIdxList ~= nil and table.containValue(leftIdxList, module) then
local isShow = self:refreshModuleEntrance(entrance, module, true)
if isShow then
showCount = showCount + 1
end
else
entrance:setActive(false)
end
end
self.leftBtn:setActive(true)
local bgAtlas, bgName = moduleCell:getEntranceBg()
self.uiMap["main_comp.left_btn.bg"]:setSprite(bgAtlas, bgName)
local iconAtlas, iconName = moduleCell:getEntranceIcon()
self.uiMap["main_comp.left_btn.desc"]:setText(moduleCell:getEntranceName())
self.uiMap["main_comp.left_btn.icon"]:setSprite(iconAtlas, iconName, function()
self.uiMap["main_comp.left_btn.icon"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end)
self.leftBtn:addClickListener(function()
self:refreshModule(leftIdx)
end)
if moduleCell:getShowEntranceRedPoint() then
self.leftBtn:addRedPoint(65, 35, 0.6)
if showCount >= 2 then
table.foreach(self.leftEntrance, function(idx, entrance)
entrance:setLocalScale(0.8,0.8)
end)
else
self.leftBtn:removeRedPoint()
table.foreach(self.leftEntrance, function(idx, entrance)
entrance:setLocalScale(1,1)
end)
end
end
-- 刷新右侧活动模块入口
function MainComp:refreshRightBtn()
if self.rightBtn == nil then
self.rightBtn = self.uiMap["main_comp.right_btn"]
end
self.rightBtn:setActive(false)
self.rightBtn:setAnchoredPositionY(self.btnPosY)
local rightIdx = self:getCurRightModuleIdx()
if rightIdx == nil then
return
end
local moduleCell = self.moduleMap[rightIdx]
if not moduleCell:getIsOpen() then
return
local showCount = 0
local rightIdxList = self:getCurRightModuleIdxList()
for module, entrance in pairs(self.rightEntrance) do
if rightIdxList ~= nil and table.containValue(rightIdxList, module) then
local isShow = self:refreshModuleEntrance(entrance, module, false)
if isShow then
showCount = showCount + 1
end
else
entrance:setActive(false)
end
end
self.rightBtn:setActive(true)
local bgAtlas, bgName = moduleCell:getEntranceBg()
self.uiMap["main_comp.right_btn.bg"]:setSprite(bgAtlas, bgName)
local iconAtlas, iconName = moduleCell:getEntranceIcon()
self.uiMap["main_comp.right_btn.desc"]:setText(moduleCell:getEntranceName())
self.uiMap["main_comp.right_btn.icon"]:setSprite(iconAtlas, iconName, function()
self.uiMap["main_comp.right_btn.icon"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end)
self.rightBtn:addClickListener(function()
self:refreshModule(rightIdx)
end)
if moduleCell:getShowEntranceRedPoint() then
self.rightBtn:addRedPoint(-65, 35, 0.6)
if showCount >= 2 then
table.foreach(self.rightEntrance, function(idx, entrance)
entrance:setLocalScale(0.8,0.8)
end)
else
self.rightBtn:removeRedPoint()
table.foreach(self.rightEntrance, function(idx, entrance)
entrance:setLocalScale(1,1)
end)
end
end
function MainComp:getCurLeftModuleIdx()
if self.curModuleType == 1 then
return nil
-- 刷新活动模块入口
function MainComp:refreshModuleEntrance(entrance, moduleType, isLeft)
entrance:setActive(false)
local module = self.moduleMap[moduleType]
if moduleType == nil or module == nil then
return false
end
if not module:getIsOpen() then
return false
end
return self.curModuleType - 1
entrance:setActive(true)
local uiMap = entrance:genAllChildren()
uiMap["desc"]:setText(module:getEntranceName())
-- 竞技场图标显示特殊处理
if moduleType == GConst.MainCityConst.MAIN_MODULE.ARENA then
local curId = DataManager.ArenaData:getGradingId()
uiMap["img_num"]:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingNumName(curId))
uiMap["icon"]:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingIconName(curId))
end
if module:getShowEntranceRedPoint() then
if isLeft then
entrance:addRedPoint(65, 35, 0.6)
else
entrance:addRedPoint(-65, 35, 0.6)
end
else
entrance:removeRedPoint()
end
entrance:addClickListener(function()
self:refreshModule(moduleType)
end)
return true
end
function MainComp:getCurRightModuleIdx()
local totalModuleNum = table.nums(GConst.MainCityConst.MAIN_MODULE)
if self.curModuleType == totalModuleNum then
-- 获取当前左侧活动type list
function MainComp:getCurLeftModuleIdxList()
if self.curModuleType < GConst.MainCityConst.MAIN_MODULE.CHAPTER then
return nil
end
return self.curModuleType + 1
local leftIdx = {}
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
for module, idx in pairs(GConst.MainCityConst.MAIN_MODULE) do
if idx < GConst.MainCityConst.MAIN_MODULE.CHAPTER then
table.insert(leftIdx, idx)
end
end
table.sort(leftIdx, function(a, b)
return math.abs(a) < math.abs(b)
end)
else
table.insert(leftIdx, GConst.MainCityConst.MAIN_MODULE.CHAPTER)
end
return leftIdx
end
-- 获取当前右侧活动type list
function MainComp:getCurRightModuleIdxList()
if self.curModuleType > GConst.MainCityConst.MAIN_MODULE.CHAPTER then
return nil
end
local rightIdx = {}
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
for module, idx in pairs(GConst.MainCityConst.MAIN_MODULE) do
if idx > GConst.MainCityConst.MAIN_MODULE.CHAPTER then
table.insert(rightIdx, idx)
end
end
table.sort(rightIdx, function(a, b)
return math.abs(a) < math.abs(b)
end)
else
table.insert(rightIdx, GConst.MainCityConst.MAIN_MODULE.CHAPTER)
end
return rightIdx
end
function MainComp:initStageFormation()
@ -182,8 +291,8 @@ function MainComp:initStageFormation()
self.btnPosY = (heroBgPosY + (BOTTOM_HEIGHT / 2 - hSHeight)) / 2
end
function MainComp:setFormationVisible(visible)
self.heroCells:setFormationVisible(visible)
function MainComp:refreshHeroFormationVisible()
self.heroCells:setFormationActive(self.moduleMap[self.curModuleType]:isShowHeroFormation())
end
function MainComp:refresh()
@ -196,6 +305,10 @@ function MainComp:getCurModuleType()
return self.curModuleType
end
function MainComp:getCurModule()
return self.moduleMap[self.curModuleType]
end
function MainComp:refreshChapter(force)
self.chapterComp:refreshChapter(force)
end
@ -212,14 +325,23 @@ end
function MainComp:refreshStageFormaion()
self.heroCells:refresh()
self:refreshHeroFormationVisible()
end
function MainComp:getDailyChallengeIconPos()
if self:getCurLeftModuleIdx() == GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE then
return self.leftBtn:getPosition()
local idx = table.indexof(self:getCurLeftModuleIdxList(), GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE)
if idx and self.leftEntrance[idx] then
return self.leftEntrance[idx]:getPosition()
end
if self:getCurRightModuleIdx() == GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE then
return self.rightBtn:getPosition()
idx = table.indexof(self:getCurRightModuleIdxList(), GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE)
if idx and self.rightEntrance[idx] then
return self.rightEntrance[idx]:getPosition()
end
end
function MainComp:refreshArenaBounty()
if self.arenaComp then
self.arenaComp:refreshBounty()
end
end

View File

@ -11,26 +11,45 @@ function MainCompBaseCell:getEntranceName()
return ""
end
function MainCompBaseCell:getEntranceIcon()
return "",""
end
function MainCompBaseCell:getEntranceBg()
return "",""
end
function MainCompBaseCell:getShowEntranceRedPoint()
return false
end
function MainCompBaseCell:getHpCost()
return nil-- 默认不显示挑战按钮
-- 是否展示顶部任务、设置按钮
function MainCompBaseCell:isShowTopNode()
return false
end
function MainCompBaseCell:getTodayRemainCount()
-- 是否展示侧边栏
function MainCompBaseCell:isShowSideBar()
return false
end
-- 是否展示战令入口
function MainCompBaseCell:isShowBounty()
return false
end
-- 是否展示英雄编队
function MainCompBaseCell:isShowHeroFormation()
return false
end
-- 中间按钮展示体力消耗
function MainCompBaseCell:getFightHpCost()
return nil
end
-- 中间按钮展示剩余次数
function MainCompBaseCell:getFightTodayRemainCount()
return -1
end
-- 中间按钮展示描述
function MainCompBaseCell:getFightDesc()
return nil
end
function MainCompBaseCell:onClickFight()
end

View File

@ -137,10 +137,12 @@ function MainCityUI:_addListeners()
ModuleManager.MailManager:getTriggeredTimeMail()
end, time)
end)
self:addEventListener(EventManager.CUSTOM_EVENT.TUTORIAL_TASK_STOP, function()
-- 引导完成时 检测主界面的弹窗是否要触发
self:checkGift()
end)
-- self:addEventListener(EventManager.CUSTOM_EVENT.TUTORIAL_TASK_STOP, function()
-- -- 引导完成时 检测主界面的弹窗是否要触发
-- if not self:checkTutorial(true) then
-- self:checkGift()
-- end
-- end)
self:addEventListener(EventManager.CUSTOM_EVENT.GO_SHOP, function(params)
if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.MALL, false) then
local page = params and params.page or GConst.ShopConst.PAGE_TYPE.MAIN -- 默认主要商品
@ -188,14 +190,14 @@ function MainCityUI:_bind()
end, true)
self:bind(DataManager.FormationData, "dirty", function(binder, value)
if self.selectedIndex == GConst.MainCityConst.BOTTOM_PAGE.HERO then
self.subComps[self.selectedIndex]:refresh()
self.subComps[self.selectedIndex]:refresh(GConst.BattleConst.BATTLE_TYPE.STAGE)
end
end)
self:bind(DataManager.HeroData, "isDirty", function(binder, value)
if self.selectedIndex == GConst.MainCityConst.BOTTOM_PAGE.HERO then
if self.subComps[self.selectedIndex] then
self.subComps[self.selectedIndex]:refresh()
self.subComps[self.selectedIndex]:refresh(GConst.BattleConst.BATTLE_TYPE.STAGE)
end
self:refreshBottomRp()
elseif self.selectedIndex == GConst.MainCityConst.BOTTOM_PAGE.MAIN then
@ -221,6 +223,9 @@ function MainCityUI:_bind()
self:bind(DataManager.BountyData, "dirty", function()
self:refreshBounty()
end)
self:bind(DataManager.ArenaBountyData, "dirty", function()
self:refreshArenaBounty()
end)
self:bind(DataManager.MailData, "redPoint", function()
self:refreshSettingBtn()
@ -660,7 +665,7 @@ end
function MainCityUI:refreshBounty()
local isOpen = DataManager.BountyData:getIsOpen()
if not isOpen or self.mainComp:getCurModuleType() == GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE or GFunc.isShenhe() then
if not isOpen or not self.mainComp:getCurModule():isShowBounty() or GFunc.isShenhe() then
self.bountyNode:setVisible(false)
self.bountyRewardSpine:getSkeletonGraphic().enabled = false
return
@ -693,6 +698,12 @@ function MainCityUI:refreshBounty()
end
end
function MainCityUI:refreshArenaBounty()
if self.mainComp then
self.mainComp:refreshArenaBounty()
end
end
function MainCityUI:refreshTask()
local isOpen = DataManager.DailyTaskData:getIsOpen()
if not isOpen then
@ -715,9 +726,13 @@ function MainCityUI:switchComp(index)
if i == index then
if index == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
comp:clearPostFlag()
comp:refresh()
elseif index == GConst.MainCityConst.BOTTOM_PAGE.HERO then
comp:refresh(GConst.BattleConst.BATTLE_TYPE.STAGE)
else
comp:refresh()
end
comp:refresh()
self:updateTime()
end
end
@ -738,17 +753,10 @@ function MainCityUI:switchMainCompModule(moduleKey)
return
end
if moduleKey == nil then
moduleKey = self.subComps[self.selectedIndex]:getCurModuleType()
end
if moduleKey == GConst.MainCityConst.MAIN_MODULE.DUNGEON then
-- 活动副本切换刷新
self:setTopNodeVisible(false)
self:setSideBarVisible(false)
else
self:setTopNodeVisible(true)
self:setSideBarVisible(true)
local module = self.mainComp:getCurModule()
if module then
self:setTopNodeVisible(module:isShowTopNode())
self:setSideBarVisible(module:isShowSideBar())
self:refreshBounty()
end
end
@ -971,39 +979,39 @@ function MainCityUI:checkMainPop()
end
-- 检查引导
function MainCityUI:checkTutorial()
function MainCityUI:checkTutorial(onlyCheck)
if DataManager.ChapterData:getMaxChapterId() == 1 then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.PASS_ONE_CHAPTER) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.PASS_ONE_CHAPTER, onlyCheck) then
return true
end
end
if DataManager.ChapterData:boxCanGet(2, 1) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.TWO_CHAPTER_BOX_CAN_GOT) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.TWO_CHAPTER_BOX_CAN_GOT, onlyCheck) then
return true
end
end
if DataManager.ChapterData:getMaxChapterId() == 2 then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.PASS_THREE_CHAPTER) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.PASS_THREE_CHAPTER, onlyCheck) then
return true
end
end
if DataManager.DailyChallengeData:isOpen() then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.UNLOCK_DAILY_CHALLENGE) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.UNLOCK_DAILY_CHALLENGE, onlyCheck) then
return true
end
end
if DataManager.DungeonData:isOpenAnyone() then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.UNLOCK_DUNGEON) then
if ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.UNLOCK_DUNGEON, onlyCheck) then
return true
end
end
end
-- 检查礼包(首充/章节/新手/助力/成长/金币顺序)
-- 检查礼包(首充(作废)/入门/章节/新手/助力/成长/金币顺序)
function MainCityUI:checkGift()
-- 审核模式不弹礼包
if GFunc.isShenhe() then
@ -1023,6 +1031,7 @@ function MainCityUI:checkGift()
local beginnerGiftIds
local levelUpGiftIds
local firstRechargeIds
local introductGiftIds
local actPopUpGifts = DataManager.ShopData:getPopUpGiftByType(PayManager.PURCHARSE_TYPE.ACT_GIFT)
if actPopUpGifts and #actPopUpGifts > 0 then
-- 先遍历找出符合弹出的类型
@ -1050,6 +1059,13 @@ function MainCityUI:checkGift()
end
table.insert(firstRechargeIds, actId)
end
-- 入门礼包
if cfgInfo.type == PayManager.PURCHARSE_ACT_TYPE.INTRODUCTORY_GIFT then
if not introductGiftIds then
introductGiftIds = {}
end
table.insert(introductGiftIds, actId)
end
end
end
end
@ -1057,8 +1073,13 @@ function MainCityUI:checkGift()
local growUpPopUpGifts = DataManager.ShopData:getPopUpGiftByType(PayManager.PURCHARSE_TYPE.GROW_UP_GIFT)
-- 按顺序弹出(首充/章节/新手/助力/成长/金币顺序)
-- 首充礼包
if firstRechargeIds and #firstRechargeIds > 0 then
ModuleManager.ShopManager:triggerGiftPopUI(PayManager.PURCHARSE_TYPE.ACT_GIFT, firstRechargeIds[1])
-- if firstRechargeIds and #firstRechargeIds > 0 then
-- ModuleManager.ShopManager:triggerGiftPopUI(PayManager.PURCHARSE_TYPE.ACT_GIFT, firstRechargeIds[1])
-- return true
-- end
-- 入门礼包
if introductGiftIds and #introductGiftIds > 0 then
ModuleManager.ShopManager:triggerGiftPopUI(PayManager.PURCHARSE_TYPE.ACT_GIFT, introductGiftIds[1])
return true
end
-- 章节礼包

View File

@ -0,0 +1,95 @@
local IntroductPopUI = class("IntroductPopUI", BaseUI)
local MAX_ITEM_NUM = 3
function IntroductPopUI:ctor()
end
function IntroductPopUI:isFullScreen()
return false
end
function IntroductPopUI:getPrefabPath()
return "assets/prefabs/ui/shop/introduct_pop_ui.prefab"
end
function IntroductPopUI:onPressBackspace()
self:closeUI()
end
function IntroductPopUI:onLoadRootComplete()
self.uiMap = self.root:genAllChildren()
self.uiMap["introduct_pop_ui.close_btn"]:addClickListener(function()
self:closeUI()
end)
self.titleTx = self.uiMap["introduct_pop_ui.bg.title_bg.title"]
self.titleTx:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_38)) -- 入门礼包
self.rewardCellList = {}
for i = 1, MAX_ITEM_NUM do
table.insert(self.rewardCellList, CellManager:addCellComp(self.uiMap["introduct_pop_ui.bg.pop_reward_cell_" .. i], GConst.TYPEOF_LUA_CLASS.POP_REWARD_CELL))
end
self.descText = self.uiMap["introduct_pop_ui.bg.desc_text"]
self.descText:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_39)) -- 超值S级英雄,仅此一次!
self.buyBtn = self.uiMap["introduct_pop_ui.bg.buy_btn"]
self.buyText = self.uiMap["introduct_pop_ui.bg.buy_btn.text"]
self.buyBtn:addClickListener(function()
self:onClickFuncBtn()
end)
local cfgInfo = PayManager:getGiftConfigInfo(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
local rechargeId = cfgInfo.recharge_id
self.buyText:setText(GFunc.getFormatPrice(rechargeId))
self.timeText = self.uiMap["introduct_pop_ui.bg.time_node.text"]
self:_bind()
self:scheduleGlobal(function()
self:updateTime()
end, 1)
self:refresh()
-- 上报
BIReport:postPayUIShow(BIReport.GIFT_TYPE.INTRODUCTORY_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
end
function IntroductPopUI:_bind()
self:bind(DataManager.ShopData, "isDirty", function()
self:refresh()
end)
end
function IntroductPopUI:refresh()
if DataManager.ShopData:getIntroductGiftRemainBuyCount() <= 0 or DataManager.ShopData:getIntroductGiftRemainTime() <= 0 then
self:closeUI()
end
local cfgInfo = PayManager:getGiftConfigInfo(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
local rewards = cfgInfo.reward or {}
for i = 1, MAX_ITEM_NUM do
if i <= #rewards then
self.rewardCellList[i]:setVisible(true, 0.8)
self.rewardCellList[i]:refresh(rewards[i].id, rewards[i].num, false)
else
self.rewardCellList[i]:setVisible(false)
end
end
self:updateTime()
end
function IntroductPopUI:updateTime()
local remainTime = DataManager.ShopData:getIntroductGiftRemainTime()
if remainTime > 0 then
self.timeText:setText(Time:formatNumTime(remainTime))
else
self:closeUI()
end
end
function IntroductPopUI:onClickFuncBtn()
PayManager:purchasePackage(GConst.ShopConst.INTRODUCT_GIFT_ID, PayManager.PURCHARSE_TYPE.ACT_GIFT)
end
return IntroductPopUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 250463b2c13ef8146bff1f4439207b9a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,63 @@
local BaseTips = require "app/ui/tips/base_tips"
local FormationTips = class("FormationTips", BaseTips)
function FormationTips:ctor(params)
self.desc = (params.desc or GConst.EMPTY_STRING)
self.tarCornerScreenPos = params.tarCornerScreenPos
self.location = params.location
end
function FormationTips:getPrefabPath()
return "assets/prefabs/ui/tips/formation_tips.prefab"
end
function FormationTips:onPressBackspace()
self:closeUI()
end
function FormationTips:init()
local uiMap = self.root:genAllChildren()
self.bg = uiMap["item_tips.bg1.bg"]
self.bg1 = uiMap["item_tips.bg1"]
self.descTx = uiMap["item_tips.bg1.bg.desc_tx"]
end
function FormationTips:onLoadRootComplete()
self:init()
local tipsBgTransform = self.bg:getTransform()
self.originSizeDelta = tipsBgTransform.sizeDelta
self.originPivot = tipsBgTransform.pivot
self.originAnchoredPosition = tipsBgTransform.anchoredPosition
self.originLocalPosition = tipsBgTransform.localPosition
end
function FormationTips:onRefresh()
self.root:addClickListener(function ()
self:closeUI()
end)
self.descTx:setText(self.desc)
-- 这里原来是用preferredHeight,但是在中英文混合的时候这个值可能不准,只有改用renderedHeight
-- renderedHeight必须要先调用下ForceMeshUpdate强制刷新才有效
self.descTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO):ForceMeshUpdate()
local height = self.descTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO).renderedHeight + 18
if height < 130 then
height = 130
end
self.bg:setSizeDeltaY(height)
if self.tarCornerScreenPos then
self:locate(self.location, self.originSizeDelta, self.bg, self.tarCornerScreenPos)
end
end
function FormationTips:onClose()
if self.originSizeDelta then
local tipsBgTransform = self.bg:getTransform()
tipsBgTransform.sizeDelta = self.originSizeDelta
tipsBgTransform.pivot = self.originPivot
tipsBgTransform.anchoredPosition = self.originAnchoredPosition
tipsBgTransform.localPosition = self.originLocalPosition
end
end
return FormationTips

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: dccb95716f55a5b48a055aaf89e8da17
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -12,6 +12,10 @@ function ArenaBountyData:clear()
end
function ArenaBountyData:init(data)
if EDITOR_MODE then
Logger.logHighlight("竞技场战令初始化")
Logger.printTable(data)
end
data = data or GConst.EMPTY_TABLE
self.season = data.season or 1
self.level = data.level or 1
@ -161,7 +165,7 @@ function ArenaBountyData:getRepeatLevelInfo()
end
function ArenaBountyData:getIsOpen()
if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.BOUNTY_OPEN, true) and self.endTime > Time:getServerTime() then
if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true) and self.endTime > Time:getServerTime() then
return true
end
return false
@ -324,7 +328,7 @@ function ArenaBountyData:getEndTime()
end
function ArenaBountyData:getExpItemIcon()
local id = GConst.ItemConst.ITEM_ID_BOUNTY_EXP
local id = GConst.ItemConst.ITEM_ID_ARENA_BOUNTY_EXP
local info = ConfigManager:getConfig("item")[id]
if info == nil then
return GConst.EMPTY_STRING
@ -347,7 +351,7 @@ function ArenaBountyData:markPopBought()
return
end
self.popBoughtTime = Time:getBeginningOfServerToday()
LocalData:setBountyPopTime(self.popBoughtTime)
LocalData:setArenaBountyPopTime(self.popBoughtTime)
end
function ArenaBountyData:clearPopBought()

View File

@ -0,0 +1,394 @@
local ArenaData = class("ArenaData", BaseData)
-- 竞技场
function ArenaData:ctor()
self.data.isDirty = false
end
function ArenaData:clear()
end
function ArenaData:init(data)
data = data or GConst.EMPTY_TABLE
self.season = data.season_number
self.score = data.current_score
self.lastScore = data.last_score
self.lastChallengeCount = data.last_challenge_count-- 上赛季挑战次数
self.seasonRewardGot = data.settle_reward_season-- 最近领取过奖励的赛季
self.todayMatchCount = data.today_match_count
self.matchInfo = data.rival_info
self.matchSuccessTime = data.match_success_at // 1000-- 匹配成功时间,超过配置时间后,匹配对象过期,需要重新匹配
self.matchFreeCdEndTime = data.match_success_cd_end_at // 1000-- 免费匹配cd结束时间<=0表示无cd>0表示cd剩余时间
self.todayAdRematchCount = data.today_ad_count-- 今日看广告跳匹配cd次数
-- 初始化rank配置
self.cfgRank = self:getRankCfg(self.season)
-- 初始化time配置
self.cfgTime = self:getTimeCfg(self.season)
self.curGradingId = self:getGradingIdFromScore(self.score) -- 当前所在段位id
DataManager.FormationData:initArena(data.attack_array_heroes, data.defend_array_heroes)
self:setDirty()
end
function ArenaData:setDirty()
self.data.isDirty = not self.data.isDirty
end
-- 通用 ----------------------------------------------------------------------
-- 获取赛季rank配置
function ArenaData:getRankCfg(season)
local result = {}
for id, data in pairs(ConfigManager:getConfig("arena_rank")) do
if data.season == season then
result[id] = data
end
end
return result
end
-- 获取赛季time配置
function ArenaData:getTimeCfg(season)
local result = table.find(ConfigManager:getConfig("arena_time"), function(value)
return value.season == season
end)
return result
end
-- 是否开启
function ArenaData:isOpen()
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true) then
return false
end
return true
end
-- 获取当前为第几赛季
function ArenaData:getSeason()
return self.season
end
-- 获取帮助文案
function ArenaData:getHelpDesc()
return nil
end
-- 获取当前赛季段位id列表
function ArenaData:getGradingIdList()
return table.keys(self.cfgRank)
end
-- 获取赛季剩余时间(秒)
function ArenaData:getRemainSeasonTime()
local endTime = Time:getCertainTimeByStr(self.cfgTime.end_time)
return endTime - Time:getServerTime()
end
-- 获取赛季结算的剩余时间(秒)
function ArenaData:getRemainSeasonSettlementTime()
-- 赛季结束前30分钟结算
local lockTime = Time:getCertainTimeByStr(self.cfgTime.end_time) - 30 * 60
return lockTime - Time:getServerTime()
end
-- 获取赛季段位结算奖励信息
function ArenaData:getGradingRewardInfo(id)
local cfg = ConfigManager:getConfig("arena_rank")
if cfg[id] == nil then
Logger.logError("未找到段位[%d]相关数据", id)
return nil
end
return cfg[id].season_reward
end
-- 获取积分所对应的段位id
function ArenaData:getGradingIdFromScore(score, isLastSeason)
local seasonId,grading = nil
local cfg = self.cfgRank
if isLastSeason then
cfg = self:getRankCfg(self.season - 1)
end
for id, data in pairs(cfg) do
if score >= data.score and (grading == nil or grading.score < data.score) then
seasonId, grading = id, data
end
end
return seasonId
end
-- 获取段位图标名
function ArenaData:getGradingIconName(id)
local cfg = ConfigManager:getConfig("arena_rank")
if cfg[id] == nil then
Logger.logError("未找到段位[%d]相关数据", id)
return nil
end
return "arena_dan_" .. cfg[id].rank_icon
end
-- 获取段位小段图标
function ArenaData:getGradingNumName(id)
local cfg = ConfigManager:getConfig("arena_rank")
if cfg[id] == nil then
Logger.logError("未找到段位[%d]相关数据", id)
return nil
end
return "arena_num_" .. cfg[id].rank_show
end
-- 获取段位名称
function ArenaData:getGradingName(id)
local cfg = ConfigManager:getConfig("arena_rank")
if cfg[id] == nil then
Logger.logError("未找到段位[%d]相关数据", id)
return nil
end
return I18N:getGlobalText(cfg[id].name_txt)
end
-- 获取重新刷新匹配时间(秒)
function ArenaData:getRematchRefreshTime()
return GFunc.getConstIntValue("arena_refresh_time") * 60
end
-- 获取重新匹配每天最大广告次数
function ArenaData:getRematchAdDailyMaxNum()
return GFunc.getConstIntValue("arena_refresh_ad_times")
end
-- 获取重新匹配钻石消耗
function ArenaData:getRematchConstGem()
return GFunc.getConstIntValue("arena_refresh_cost")
end
-- 获取匹配信息最多存在时间(秒)
function ArenaData:getMatchInfoMaxTime()
return GFunc.getConstIntValue("arena_info_time") * 60 * 60
end
-- 获取战斗消耗
function ArenaData:getFightCostNum()
return GFunc.getRewardNum(GFunc.getConstReward("arena_fight_cost"))
end
-- 排行榜 ----------------------------------------------------------------------
-- 排行榜玩家总数
function ArenaData:getRankCount()
if self.rankList then
return #self.rankList
else
return 0
end
end
-- 获取排行榜第n名数据
function ArenaData:getRankData(rank)
local info = table.find(self.rankList, function (value)
return value.rank == rank
end)
if info == nil then
Logger.logError("没有找到排行榜第%d名数据", rank)
end
return info
end
-- 本地是否有排行榜该玩家编队数据
function ArenaData:hasRankFormation(id)
return self.rankFormation == nil or self.rankFormation[id] == nil
end
-- 获取排行榜玩家编队信息
function ArenaData:getRankFormation(id)
return self.rankFormation[id]
end
-- 匹配 ----------------------------------------------------------------------
-- 获取匹配玩家信息
function ArenaData:getMatchInfo()
if Time:getServerTime() - self.matchSuccessTime > self:getMatchInfoMaxTime() then
-- 超过时间需要重新匹配
return nil
end
if self.matchInfo == nil then
return nil
end
return self.matchInfo
end
-- 个人 ----------------------------------------------------------------------
-- 获取当前段位积分
function ArenaData:getScore()
return self.score
end
-- 获取当前段位id
function ArenaData:getGradingId()
return self.curGradingId
end
-- 获取所在段位的积分 cur - min
function ArenaData:getGradingScore()
return self.score - self:getGradingMinScore(self.score)
end
-- 获取所在段位的最低积分
function ArenaData:getGradingMinScore()
return self.cfgRank[self.curGradingId].score
end
-- 获取所在段位的最高积分 full
function ArenaData:getGradingMaxScore()
local isNext = false
for id, data in pairs(self.cfgRank) do
if isNext then
return data.score
end
if id == self.curGradingId then
isNext = true
end
end
end
-- 获取所在段位的总积分
function ArenaData:getGradingScoreTotal()
return self:getGradingMaxScore() - self:getGradingMinScore()
end
-- 获取自己的排名
function ArenaData:getRank()
return self.rank
end
-- 获取最近战况
function ArenaData:getRecentBattleByIdx(index)
if self.recentBattle == nil then
return nil
end
return self.recentBattle[index]
end
-- 获取免费重新匹配cd 大于0代表在cd中小于等于0代表cd冷却已好可以免费Rematch
function ArenaData:getFreeRematchCd()
if self.matchFreeCdEndTime <= 0 then
-- cd已经冷却
return self.matchFreeCdEndTime
end
return self.matchFreeCdEndTime - Time:getServerTime()
end
-- 今日是否能看视频重新匹配
function ArenaData:canAdRematch()
return self.todayAdRematchCount < self:getRematchAdDailyMaxNum()
end
-- 获取上赛季段位id
function ArenaData:getLastGradingId()
local lastRank = self:getRankCfg(self.season - 1)
local seasonId,grading = nil
for id, data in pairs(lastRank) do
if self.lastScore >= data.score and (grading == nil or grading.score < data.score) then
seasonId, grading = id, data
end
end
return seasonId
end
-- 是否有可领取的上赛季奖励
function ArenaData:hasSeasonReward()
if self.lastChallengeCount <= 0 then
return false
end
if self.seasonRewardGot == self.season - 1 then
return false
end
return true
end
-- 是否有入口红点
function ArenaData:hasEntranceRedDot()
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_ARENA_TICKET) > 0 or self:hasSeasonReward()
end
-- 事件处理 ----------------------------------------------------------------------
-- 获取到排行榜数据
function ArenaData:onRankDataReceived(rank, list)
self.rank = rank
self.rankList = list
self:setDirty()
end
-- 获取到排行榜编队信息
function ArenaData:onRankFormationReceived(id, formation)
if self.rankFormation == nil then
self.rankFormation = {}
end
self.rankFormation[id] = formation
self:setDirty()
end
-- 获取到最近战况数据
function ArenaData:onRecentBattleReceived(recentBattle)
table.sort(recentBattle, function(a, b)
-- 由新到旧
return a.occur_at > b.occur_at
end)
self.recentBattle = recentBattle
self:setDirty()
end
-- 获取到匹配数据
function ArenaData:onMatchInfoReceived(match)
self.matchInfo = match
self.matchSuccessTime = Time:getServerTime()
self.matchFreeCdEndTime = Time:getServerTime() + self:getRematchRefreshTime()
self:setDirty()
end
-- 结算战斗数据
function ArenaData:onBattleResultReceived(settlement)
-- 战斗记录改变
table.remove(self.recentBattle, #self.recentBattle)
table.insert(self.recentBattle, 1, settlement)
-- 积分改变
self.score = self.score + settlement.score
self.curGradingId = self:getGradingIdFromScore(self.score)
self:setDirty()
end
-- 已领取上赛季奖励
function ArenaData:onLastSeasonRewardReceived()
self.seasonRewardGot = self.season - 1
self:setDirty()
end
-- 跳过匹配cd
function ArenaData:onOverFreeRematchCD(isAd)
self.matchFreeCdEndTime = -1
if isAd then
self.todayAdRematchCount = self.todayAdRematchCount + 1
end
self:setDirty()
end
-- 赛季改变
function ArenaData:onSeasonChanged()
self.matchInfo = nil
self:setDirty()
end
return ArenaData

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 385db71b1437e764eb063afef160fe87
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -32,6 +32,9 @@ function ItemData:init(data)
if info.id == GConst.ItemConst.ITEM_ID_VIT then
DataManager.PlayerData:setVit(info.count)
end
if info.id == GConst.ItemConst.ITEM_ID_ARENA_TICKET then
DataManager.PlayerData:setArenaTicket(info.count)
end
self:_add(info.id, info.count)
end
end

View File

@ -5,21 +5,57 @@ function FormationData:ctor()
self.formations = {}
end
-- 初始化主线阵容
function FormationData:init(data)
self.data.dirty = false
self.formations = {}
-- 目前只有主线关卡的
if self.formations == nil then
self.formations = {}
end
if data and data.heroes then
local clientFormation = {}
for matchType, heroId in pairs(data.heroes) do
clientFormation[tonumber(matchType)] = heroId
end
self.formations[GConst.BattleConst.BATTLE_TYPE.STAGE] = clientFormation
self.formations[GConst.BattleConst.FORMATION_TYPE.STAGE] = clientFormation
end
self:setDirty()
end
-- 初始化竞技场阵容
function FormationData:initArena(attack, defend)
if self.formations == nil then
self.formations = {}
end
-- 位置顺序特殊处理
self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK] = {0,0,0,0,0}
self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND] = {0,0,0,0,0}
for idx, id in pairs(attack) do
if id and id ~= 0 then
local type = DataManager.HeroData:getHeroById(id):getMatchType()
self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK][type] = id
end
end
for idx, id in pairs(defend) do
if id and id ~= 0 then
local type = DataManager.HeroData:getHeroById(id):getMatchType()
self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND][type] = id
end
end
self:setDirty()
end
function FormationData:getStageFormation()
return self:getFormation(GConst.BattleConst.BATTLE_TYPE.STAGE)
return self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE)
end
function FormationData:getArenaAttackFormation()
return self:getFormation(GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK)
end
function FormationData:getArenaDefendFormation()
return self:getFormation(GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND)
end
function FormationData:getFormation(formationType)
@ -54,6 +90,27 @@ function FormationData:heroInFormation(formationType, heroId)
return false
end
function FormationData:formationIsFull(formationType)
local actvieMap = DataManager.HeroData:getMatchActiveHeroMap()
local formation = self:getFormation(formationType)
local count = 0
for matchtype = 1, GConst.BattleConst.ELEMENT_TYPE_COUNT do
if not formation[matchtype] or formation[matchtype] <= 0 then
if actvieMap[matchtype] and table.nums(actvieMap[matchtype]) > 0 then
return false
end
else
count = count + 1
end
end
if count <= 0 then
return false
end
return true
end
function FormationData:setDirty()
self.data.dirty = not self.data.dirty
end

View File

@ -66,7 +66,7 @@ function HeroData:getEntity(cfgId, lv)
end
function HeroData:getHeroById(id)
if not id then
if not id or id == 0 then
return
end
if not self.heroes[id] then

View File

@ -37,10 +37,16 @@ function PlayerData:init(data)
self.data.playInfo.unlockAvatar = data.bag.avatars
self.data.playInfo.unlockFrame = data.bag.avatar_frames
-- 体力购买情况初始化
local energyLimit = data.energy_limit or GConst.EMPTY_TABLE
self.data.vitGemCount = energyLimit.diamond_count or 0
self.data.vitADCount = energyLimit.ad_count or 0
-- 竞技场入场券购买情况初始化
local arenaTicketLimit = data.arena or GConst.EMPTY_TABLE
self.data.arenaTicketGemCount = arenaTicketLimit.today_ticket_buy_count or 0
self.data.arenaTicketADCount = arenaTicketLimit.today_ticket_ad_count or 0
self.lastLoginTime = basicInfo.lastLoginTime or Time:getBeginningOfServerToday()
DataManager:registerCrossDayFunc("PlayerData", function()
self:resetOnCrossDay()
@ -486,4 +492,37 @@ function PlayerData:getShowFrameIds()
return table.addArray(unlockIds, lockIds)
end
-- 竞技场战令
function PlayerData:getArenaTicket()
return self.arenaTicket or 0
end
function PlayerData:getArenaTicketGemBuyCount()
return self.data.arenaTicketGemCount
end
function PlayerData:getArenaTicketAdBuyCount()
return self.data.arenaTicketADCount
end
function PlayerData:setArenaTicket(ticket)
self.arenaTicket = ticket
end
function PlayerData:getMaxArenaTicket()
if self.maxArenaTicket == nil then
self.maxArenaTicket = ConfigManager:getConfig("recovery")[GConst.ItemConst.ITEM_ID_ARENA_TICKET].limit
end
return self.maxArenaTicket
end
function PlayerData:addArenaTicketGemBuyCount()
self.data.arenaTicketGemCount = self.data.arenaTicketGemCount + 1
end
function PlayerData:addArenaTicketAdBuyCount()
self.data.arenaTicketADCount = self.data.arenaTicketADCount + 1
end
return PlayerData

View File

@ -116,6 +116,12 @@ function ShopData:markPopUpGift(actType, actId)
if not self.needPopUpGift[actType] then
self.needPopUpGift[actType] = {}
end
-- 如果已经有了 不作处理
for _, id in ipairs(self.needPopUpGift[actType]) do
if id == actId then
return
end
end
table.insert(self.needPopUpGift[actType], actId)
table.sort(self.needPopUpGift[actType])
end
@ -142,6 +148,18 @@ function ShopData:getPopUpGiftByType(actType)
return self.needPopUpGift and self.needPopUpGift[actType]
end
function ShopData:checkHasPopUpGift(actType, actId)
local gifts = self:getPopUpGiftByType(actType)
if gifts and #gifts > 0 then
for _, giftId in ipairs(gifts) do
if (giftId == actId) then
return true
end
end
end
return false
end
-- 获取下一个需要弹出的同类型礼包数据,特别的,如果是主界面部分则多个不同类型的也要考虑进去
function ShopData:getNextPopGiftData(actType, actId)
if GConst.ShopConst.MAIN_UI_POP_TYPE[actType] then
@ -765,60 +783,121 @@ end
-- 成长礼包结束 ----------------------------------------------------------------------------------------------
-- 首充 **********************************************************************************************
-- 首充(作废) **********************************************************************************************
function ShopData:getIsFirstRechargeOpen()
return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FIRST_RECHARGE, true)
return false -- ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FIRST_RECHARGE, true)
end
-- 用于标记是否弹窗 要求等级不低于2 未领取该奖励
function ShopData:initFirstRecharge()
local lv = DataManager.PlayerData:getLv()
if lv > 1 and not self:getHasGotFirstRechargeReward() then
self:markPopUpGift(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.FIRST_RECHARGE_ID)
end
-- local lv = DataManager.PlayerData:getLv()
-- if lv > 1 and not self:getHasGotFirstRechargeReward() then
-- self:markPopUpGift(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.FIRST_RECHARGE_ID)
-- end
end
-- 是否有首充奖励 有支付且未领取
function ShopData:getHasFirstRechargeReward()
local pay = DataManager.PlayerData:getTotalPayAmount()
if pay > 0 and not self:getHasGotFirstRechargeReward() then
return true
else
return false
end
-- local pay = DataManager.PlayerData:getTotalPayAmount()
-- if pay > 0 and not self:getHasGotFirstRechargeReward() then
-- return true
-- else
-- return false
-- end
return false
end
-- 是否已领取首充奖励
function ShopData:getHasGotFirstRechargeReward()
-- 通用act礼包中是否有已购
local boughtNum = self:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.FIRST_RECHARGE_ID)
return boughtNum > 0
-- local boughtNum = self:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.FIRST_RECHARGE_ID)
-- return boughtNum > 0
return true
end
-- 侧边栏是否展示 要求功能开启 未领取该奖励
function ShopData:getShowFirstRechargeSideBar()
if not self:getIsFirstRechargeOpen() then
return false
end
if not self:getHasGotFirstRechargeReward() then
return true
else
return false
end
-- if not self:getIsFirstRechargeOpen() then
-- return false
-- end
-- if not self:getHasGotFirstRechargeReward() then
-- return true
-- else
-- return false
-- end
return false
end
-- 侧边栏红点
function ShopData:showFirstRechargeRp()
if not self:getIsFirstRechargeOpen() then
return false
end
-- if not self:getIsFirstRechargeOpen() then
-- return false
-- end
return self:getHasFirstRechargeReward()
-- return self:getHasFirstRechargeReward()
return false
end
-- 首充结束 ----------------------------------------------------------------------------------------------
-- 入门礼包 ----------------------------------------------------------------------------------------------
function ShopData:initIntroductGift(introductGift)
introductGift = introductGift or {}
self.introductGift = introductGift or {}
self.introductGiftTriggerTime = self.introductGift.trigger_at or 0
self:checkPopIntroductGift()
end
-- 如果可购买则标记可弹窗
function ShopData:checkPopIntroductGift()
if (self:getIntroductGiftRemainTime() > 0 and self:getIntroductGiftRemainBuyCount() > 0) then
self:markPopUpGift(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
end
end
function ShopData:getIntroductGiftTriggerTime()
return self.introductGiftTriggerTime // 1000
end
function ShopData:setIntroductGiftTriggerTime(time)
self.introductGiftTriggerTime = time
end
-- 入门礼包剩余时间
function ShopData:getIntroductGiftRemainTime()
local cfgInfo = self:getActGiftConfig()[GConst.ShopConst.INTRODUCT_GIFT_ID]
local triggerTime = self:getIntroductGiftTriggerTime()
local remainTime = triggerTime + (cfgInfo.limit_time or 0) * 3600 - Time:getServerTime()
return remainTime
end
-- 入门礼包剩余可购次数
function ShopData:getIntroductGiftRemainBuyCount()
local cfgInfo = self:getActGiftConfig()[GConst.ShopConst.INTRODUCT_GIFT_ID]
local buyCount = self:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
return (cfgInfo.limit or 1) - buyCount
end
-- 触发入门礼包(如果已经触发则不会更新)
function ShopData:onTriggerIntroductGift()
if self:getIntroductGiftTriggerTime() <= 0 then
self:initIntroductGift({trigger_at = Time:getServerTime() * 1000})
-- 标记弹窗
self:markPopUpGift(PayManager.PURCHARSE_TYPE.ACT_GIFT, GConst.ShopConst.INTRODUCT_GIFT_ID)
end
end
-- 侧边栏是否展示(时间次数均满足)
function ShopData:getIntroductGiftShowSideBar()
return self:getIntroductGiftRemainBuyCount() > 0 and self:getIntroductGiftRemainTime() > 0
end
-- 入门礼包结束 --------------------------------------------------------------------------------------------
-- 底部栏是否有红点
function ShopData:getRp()
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.MALL, true) then