diff --git a/lua/app/common/bi_report.lua b/lua/app/common/bi_report.lua
index 0ffca24e..b36f4b59 100644
--- a/lua/app/common/bi_report.lua
+++ b/lua/app/common/bi_report.lua
@@ -116,6 +116,7 @@ BIReport.RUNE_OPT_TYPE = {
BIReport.ITEM_GET_TYPE = {
NEW_PLAYER_INITIAL = "NewPlayerInitial", -- 新玩家创号自带
+ UPGRADE_HERO = "UpgradeHero"
}
BIReport.ADS_CLICK_TYPE = {
@@ -744,32 +745,19 @@ function BIReport:postGemGet(bigNum, getType, itemId)
end
-- 钻石使用
-function BIReport:postGemUse(bigNum, getType, itemId)
- -- CoinNum 代币数量
- -- Type 使用类型
- -- CoinsType 代币类型
- -- IsNew 是否是新用户
- -- MaxLevel 最大关卡
- local itemBigNum = DataManager.BagData.ItemData:getItemBigNumById(itemId)
+function BIReport:postGemUse(num, getType, itemId)
+ -- CoinNum 代币数量 减少代币时 Int 使用代币数量
+ -- Type 使用类型 String Box=开启宝箱、复活=Revive、天赋升级=Talent、Equip=装备升级
+ -- CoinsType 代币类型 String Gold=金币、Gems=钻石
+ -- IsNew 是否是新用户 Boolean 是否为当天新用户,True = 是,False = 否
+ -- MaxChapter 最大章节 Int 已解锁的最大章节
local args = {
type = getType,
- -- coin_value = bigNum.value,
- -- coin_unit = bigNum.unit,
+ coin_num = num,
coin_type = BIReport.COIN_TYPE[itemId],
- -- coin_all_value = itemBigNum.value,
- -- coin_all_unit = itemBigNum.unit,
+ coin_all = DataManager.BagData.ItemData:getItemNumById(itemId),
+ -- max_chapter = DataManager.StageData:getNewChapterId(),
}
- if itemId == GConst.ItemConst.ITEM_ID_GEM then
- args.coin_value = BigNumOpt.bigNum2Num(bigNum)
- args.coin_unit = 0
- args.coin_all_value = BigNumOpt.bigNum2Num(itemBigNum)
- args.coin_all_unit = 0
- else
- args.coin_value = bigNum.value
- args.coin_unit = bigNum.unit
- args.coin_all_value = itemBigNum.value
- args.coin_all_unit = itemBigNum.unit
- end
self:report(EVENT_NAME_COIN_USE, args)
BIReport:printArgsStr(EVENT_NAME_COIN_USE, args)
end
diff --git a/lua/app/common/data_manager.lua b/lua/app/common/data_manager.lua
index 4bffa37d..098034ca 100644
--- a/lua/app/common/data_manager.lua
+++ b/lua/app/common/data_manager.lua
@@ -85,7 +85,7 @@ function DataManager:initWithServerData(data)
self.PlayerData:init(data.PlayerData)
self.ChapterData:init(data.ChapterData)
self.HeroData:init(data.HeroData)
- self.BagData:init(data)
+ self.BagData:init(data.BagData)
self.FormationData:init(data.FormationData)
self:scheduleGlobal()
diff --git a/lua/app/common/module_manager.lua b/lua/app/common/module_manager.lua
index 438cd95e..d3ed6dae 100644
--- a/lua/app/common/module_manager.lua
+++ b/lua/app/common/module_manager.lua
@@ -12,6 +12,7 @@ local MODULE_PATHS = {
TaskManager = "app/module/task/task_manager",
BattleManager = "app/module/battle/battle_manager",
FormationManager = "app/module/formation/formation_manager",
+ HeroManager = "app/module/hero/hero_manager",
}
-- 这里的key对应func_open里的id
diff --git a/lua/app/config/localization/localization_global_const.lua b/lua/app/config/localization/localization_global_const.lua
index 934df81e..8bc688cb 100644
--- a/lua/app/config/localization/localization_global_const.lua
+++ b/lua/app/config/localization/localization_global_const.lua
@@ -11,6 +11,18 @@ local LocalizationGlobalConst =
BTN_TEXT_CANCEL = "BTN_TEXT_CANCEL",
BTN_TEXT_OK = "BTN_TEXT_OK",
BATTLE_DESC_1 = "BATTLE_DESC_1",
+
+ ITEM_NOT_ENOUGH = "ITEM_NOT_ENOUGH",
+ START_DESC = "START_DESC",
+ ["ELEMENT_NAME_2"] = "ELEMENT_NAME_2",
+ ["ELEMENT_NAME_3"] = "ELEMENT_NAME_3",
+ ["ELEMENT_NAME_4"] = "ELEMENT_NAME_4",
+ ["ELEMENT_NAME_5"] = "ELEMENT_NAME_5",
+ ["HERO_DESC_1"] = "HERO_DESC_1",
+ ["HERO_DESC_2"] = "HERO_DESC_2",
+ ["HERO_DESC_3"] = "HERO_DESC_3",
+ ["HERO_DESC_4"] = "HERO_DESC_4",
+ ["HERO_DESC_5"] = "HERO_DESC_5",
}
return LocalizationGlobalConst
\ No newline at end of file
diff --git a/lua/app/config/skill_rogue.lua b/lua/app/config/skill_rogue.lua
index 2263bba7..014993f7 100644
--- a/lua/app/config/skill_rogue.lua
+++ b/lua/app/config/skill_rogue.lua
@@ -12,7 +12,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=1
+ ["icon"]="1"
},
[2]={
["universal"]=1,
@@ -27,7 +27,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=1
+ ["icon"]="1"
},
[3]={
["universal"]=1,
@@ -42,7 +42,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=1
+ ["icon"]="1"
},
[4]={
["universal"]=1,
@@ -57,7 +57,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=2
+ ["icon"]="2"
},
[5]={
["universal"]=1,
@@ -72,7 +72,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=2
+ ["icon"]="2"
},
[6]={
["universal"]=1,
@@ -87,7 +87,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=2
+ ["icon"]="2"
},
[7]={
["universal"]=1,
@@ -102,7 +102,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=3
+ ["icon"]="3"
},
[8]={
["universal"]=1,
@@ -117,7 +117,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=3
+ ["icon"]="3"
},
[9]={
["universal"]=1,
@@ -132,7 +132,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=3
+ ["icon"]="3"
},
[10]={
["universal"]=1,
@@ -147,7 +147,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=4
+ ["icon"]="4"
},
[11]={
["universal"]=1,
@@ -162,7 +162,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=4
+ ["icon"]="4"
},
[12]={
["universal"]=1,
@@ -177,7 +177,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=4
+ ["icon"]="4"
},
[13]={
["universal"]=1,
@@ -192,7 +192,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=5
+ ["icon"]="5"
},
[14]={
["universal"]=1,
@@ -207,7 +207,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=5
+ ["icon"]="5"
},
[15]={
["universal"]=1,
@@ -222,7 +222,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=5
+ ["icon"]="5"
},
[16]={
["universal"]=1,
@@ -237,7 +237,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=6
+ ["icon"]="6"
},
[17]={
["universal"]=1,
@@ -252,7 +252,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=6
+ ["icon"]="6"
},
[18]={
["universal"]=1,
@@ -267,7 +267,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=6
+ ["icon"]="6"
},
[19]={
["universal"]=1,
@@ -284,7 +284,7 @@ local skill_rogue = {
}
},
["obj"]=1,
- ["icon"]=7
+ ["icon"]="7"
},
[20]={
["universal"]=1,
@@ -299,7 +299,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=8
+ ["icon"]="8"
},
[21]={
["universal"]=1,
@@ -314,7 +314,7 @@ local skill_rogue = {
["maxnum"]=500
}
},
- ["icon"]=9
+ ["icon"]="9"
},
[22]={
["universal"]=1,
@@ -329,7 +329,7 @@ local skill_rogue = {
["maxnum"]=1200
}
},
- ["icon"]=9
+ ["icon"]="9"
},
[23]={
["universal"]=1,
@@ -344,7 +344,7 @@ local skill_rogue = {
["maxnum"]=2000
}
},
- ["icon"]=9
+ ["icon"]="9"
},
[24]={
["universal"]=1,
@@ -361,7 +361,7 @@ local skill_rogue = {
}
},
["obj"]=1,
- ["icon"]=10
+ ["icon"]="10"
},
[25]={
["universal"]=1,
@@ -376,7 +376,7 @@ local skill_rogue = {
["maxnum"]=100
}
},
- ["icon"]=11
+ ["icon"]="11"
},
[26]={
["universal"]=1,
@@ -391,7 +391,7 @@ local skill_rogue = {
["maxnum"]=1000
}
},
- ["icon"]=12
+ ["icon"]="12"
},
[27]={
["universal"]=1,
@@ -406,7 +406,7 @@ local skill_rogue = {
["maxnum"]=1000
}
},
- ["icon"]=13
+ ["icon"]="13"
},
[28]={
["universal"]=1,
@@ -421,7 +421,7 @@ local skill_rogue = {
["maxnum"]=1000
}
},
- ["icon"]=14
+ ["icon"]="14"
},
[29]={
["universal"]=1,
@@ -437,7 +437,7 @@ local skill_rogue = {
}
},
["obj"]=1,
- ["icon"]=20
+ ["icon"]="20"
},
[30]={
["universal"]=1,
@@ -453,7 +453,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=15
+ ["icon"]="15"
},
[31]={
["universal"]=1,
@@ -469,7 +469,7 @@ local skill_rogue = {
["range"]=4
}
},
- ["icon"]=15
+ ["icon"]="15"
},
[32]={
["universal"]=1,
@@ -485,7 +485,7 @@ local skill_rogue = {
["range"]=5
}
},
- ["icon"]=15
+ ["icon"]="15"
},
[33]={
["universal"]=1,
@@ -501,7 +501,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=16
+ ["icon"]="16"
},
[34]={
["universal"]=1,
@@ -517,7 +517,7 @@ local skill_rogue = {
["range"]=4
}
},
- ["icon"]=16
+ ["icon"]="16"
},
[35]={
["universal"]=1,
@@ -533,7 +533,7 @@ local skill_rogue = {
["range"]=5
}
},
- ["icon"]=16
+ ["icon"]="16"
},
[36]={
["universal"]=1,
@@ -549,7 +549,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=17
+ ["icon"]="17"
},
[37]={
["universal"]=1,
@@ -565,7 +565,7 @@ local skill_rogue = {
["range"]=4
}
},
- ["icon"]=17
+ ["icon"]="17"
},
[38]={
["universal"]=1,
@@ -581,7 +581,7 @@ local skill_rogue = {
["range"]=5
}
},
- ["icon"]=17
+ ["icon"]="17"
},
[39]={
["universal"]=1,
@@ -597,7 +597,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=18
+ ["icon"]="18"
},
[40]={
["universal"]=1,
@@ -613,7 +613,7 @@ local skill_rogue = {
["range"]=4
}
},
- ["icon"]=18
+ ["icon"]="18"
},
[41]={
["universal"]=1,
@@ -629,7 +629,7 @@ local skill_rogue = {
["range"]=5
}
},
- ["icon"]=18
+ ["icon"]="18"
},
[42]={
["universal"]=1,
@@ -645,7 +645,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=19
+ ["icon"]="19"
},
[43]={
["universal"]=1,
@@ -661,7 +661,7 @@ local skill_rogue = {
["range"]=4
}
},
- ["icon"]=19
+ ["icon"]="19"
},
[44]={
["universal"]=1,
@@ -677,7 +677,7 @@ local skill_rogue = {
["range"]=5
}
},
- ["icon"]=19
+ ["icon"]="19"
},
[200101]={
["limit_times"]=1,
@@ -695,7 +695,7 @@ local skill_rogue = {
["range"]=1
}
},
- ["icon"]=200101
+ ["icon"]="200101"
},
[200102]={
["limit_times"]=2,
@@ -706,7 +706,7 @@ local skill_rogue = {
1000
},
["skill_position"]=3,
- ["icon"]=200102
+ ["icon"]="200102"
},
[200103]={
["limit_times"]=1,
@@ -723,7 +723,7 @@ local skill_rogue = {
}
},
["obj"]=2,
- ["icon"]=200103
+ ["icon"]="200103"
},
[200201]={
["limit_times"]=1,
@@ -734,7 +734,7 @@ local skill_rogue = {
21
},
["skill_position"]=2,
- ["icon"]=200201
+ ["icon"]="200201"
},
[200202]={
["limit_times"]=2,
@@ -745,7 +745,7 @@ local skill_rogue = {
1000
},
["skill_position"]=2,
- ["icon"]=200202
+ ["icon"]="200202"
},
[200203]={
["limit_times"]=1,
@@ -756,7 +756,7 @@ local skill_rogue = {
1
},
["skill_position"]=2,
- ["icon"]=200203
+ ["icon"]="200203"
},
[200301]={
["limit_times"]=1,
@@ -764,7 +764,7 @@ local skill_rogue = {
["qlt"]=3,
["type"]=4,
["skill_position"]=4,
- ["icon"]=200301
+ ["icon"]="200301"
},
[200302]={
["limit_times"]=3,
@@ -775,7 +775,7 @@ local skill_rogue = {
1000
},
["skill_position"]=4,
- ["icon"]=200302
+ ["icon"]="200302"
},
[200303]={
["limit_times"]=2,
@@ -789,7 +789,7 @@ local skill_rogue = {
["range"]=2
}
},
- ["icon"]=200303
+ ["icon"]="200303"
},
[200401]={
["limit_times"]=1,
@@ -797,7 +797,7 @@ local skill_rogue = {
["qlt"]=3,
["type"]=4,
["skill_position"]=5,
- ["icon"]=200401
+ ["icon"]="200401"
},
[200402]={
["limit_times"]=2,
@@ -809,7 +809,7 @@ local skill_rogue = {
1000
},
["skill_position"]=5,
- ["icon"]=200402
+ ["icon"]="200402"
},
[200403]={
["limit_times"]=1,
@@ -821,7 +821,7 @@ local skill_rogue = {
1
},
["skill_position"]=5,
- ["icon"]=200403
+ ["icon"]="200403"
},
[200501]={
["limit_times"]=1,
@@ -839,7 +839,7 @@ local skill_rogue = {
["range"]=1
}
},
- ["icon"]=200501
+ ["icon"]="200501"
},
[200502]={
["limit_times"]=2,
@@ -850,7 +850,7 @@ local skill_rogue = {
1000
},
["skill_position"]=1,
- ["icon"]=200502
+ ["icon"]="200502"
},
[200503]={
["limit_times"]=1,
@@ -866,7 +866,7 @@ local skill_rogue = {
["round"]=1
}
},
- ["icon"]=200503
+ ["icon"]="200503"
},
[200601]={
["limit_times"]=1,
@@ -874,7 +874,7 @@ local skill_rogue = {
["qlt"]=3,
["type"]=4,
["skill_position"]=3,
- ["icon"]=200601
+ ["icon"]="200601"
},
[200602]={
["limit_times"]=2,
@@ -885,7 +885,7 @@ local skill_rogue = {
1000
},
["skill_position"]=3,
- ["icon"]=200602
+ ["icon"]="200602"
},
[200603]={
["limit_times"]=1,
@@ -901,7 +901,7 @@ local skill_rogue = {
["round"]=1
}
},
- ["icon"]=200603
+ ["icon"]="200603"
},
[200701]={
["limit_times"]=1,
@@ -912,7 +912,7 @@ local skill_rogue = {
71
},
["skill_position"]=2,
- ["icon"]=200701
+ ["icon"]="200701"
},
[200702]={
["limit_times"]=2,
@@ -923,7 +923,7 @@ local skill_rogue = {
1000
},
["skill_position"]=2,
- ["icon"]=200702
+ ["icon"]="200702"
},
[200703]={
["limit_times"]=1,
@@ -934,7 +934,7 @@ local skill_rogue = {
72
},
["skill_position"]=2,
- ["icon"]=200703
+ ["icon"]="200703"
},
[200801]={
["limit_times"]=1,
@@ -945,7 +945,7 @@ local skill_rogue = {
81
},
["skill_position"]=4,
- ["icon"]=200801
+ ["icon"]="200801"
},
[200802]={
["limit_times"]=2,
@@ -956,7 +956,7 @@ local skill_rogue = {
1000
},
["skill_position"]=4,
- ["icon"]=200802
+ ["icon"]="200802"
},
[200803]={
["limit_times"]=1,
@@ -968,7 +968,7 @@ local skill_rogue = {
1
},
["skill_position"]=4,
- ["icon"]=200803
+ ["icon"]="200803"
}
}
local config = {
diff --git a/lua/app/config/strings/cn/global.lua b/lua/app/config/strings/cn/global.lua
index 834f0247..1b1104c5 100644
--- a/lua/app/config/strings/cn/global.lua
+++ b/lua/app/config/strings/cn/global.lua
@@ -11,6 +11,19 @@ local localization_global =
["BTN_TEXT_CANCEL"] = "取消",
["BTN_TEXT_OK"] = "确定",
["BATTLE_DESC_1"] = "是否退出战斗",
+
+ ["ITEM_NOT_ENOUGH"] = "{0}不足",
+ ["START_DESC"] = "开始",
+ ["ELEMENT_NAME_1"] = "红色元素",
+ ["ELEMENT_NAME_2"] = "黄色元素",
+ ["ELEMENT_NAME_3"] = "绿色元素",
+ ["ELEMENT_NAME_4"] = "蓝色元素",
+ ["ELEMENT_NAME_5"] = "紫色元素",
+ ["HERO_DESC_1"] = "等级{0}",
+ ["HERO_DESC_2"] = "生命",
+ ["HERO_DESC_3"] = "攻击力",
+ ["HERO_DESC_4"] = "升级",
+ ["HERO_DESC_5"] = "激活",
}
return localization_global
\ No newline at end of file
diff --git a/lua/app/global/global_const.lua b/lua/app/global/global_const.lua
index b7adc1a9..da72a503 100644
--- a/lua/app/global/global_const.lua
+++ b/lua/app/global/global_const.lua
@@ -163,6 +163,7 @@ GConst.TYPEOF_LUA_CLASS = {
ITEM_CELL = "app/ui/common/cell/item_cell",
HERO_CELL = "app/ui/common/cell/hero_cell",
REWARD_CELL = "app/ui/common/cell/reward_cell",
+ LARGE_HERO_CELL = "app/ui/common/cell/large_hero_cell",
}
GConst.ATLAS_PATH = {
@@ -173,6 +174,7 @@ GConst.ATLAS_PATH = {
UI_LOGIN = "assets/arts/atlas/ui/login.asset",
ICON_SKILL = "assets/arts/atlas/icon/skill.asset",
ICON_HERO = "assets/arts/atlas/icon/hero.asset",
+ ICON_SKILL_BUFF = "assets/arts/atlas/icon/skill_buff.asset",
}
GConst.TOUCH_EVENT = {
diff --git a/lua/app/global/global_func.lua b/lua/app/global/global_func.lua
index 6e7918b2..4d561162 100644
--- a/lua/app/global/global_func.lua
+++ b/lua/app/global/global_func.lua
@@ -599,6 +599,7 @@ end
function GFunc.showItemNotEnough(itemId)
local gemTextInfo = I18N:getConfig("item")[itemId]
+ Logger.printTable(gemTextInfo)
if gemTextInfo then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.ITEM_NOT_ENOUGH, gemTextInfo.name))
end
@@ -611,6 +612,22 @@ function GFunc.showJewelryNotEnough(itemId)
end
end
+function GFunc.checkCost(id, num, showToast, giftType)
+ if num <= 0 then
+ BIReport:postDataException(id, num, giftType)
+ -- return false
+ end
+ local count = DataManager.BagData.ItemData:getItemNumById(id)
+ if count < num then
+ if showToast then
+ GFunc.showItemNotEnough(id)
+ end
+ return false
+ else
+ return true
+ end
+end
+
function GFunc.checkCostNum(id, num, giftType)
if num <= 0 then
BIReport:postDataException(id, num, giftType)
diff --git a/lua/app/module/battle/battle_manager.lua b/lua/app/module/battle/battle_manager.lua
index 4f687608..37af2c1e 100644
--- a/lua/app/module/battle/battle_manager.lua
+++ b/lua/app/module/battle/battle_manager.lua
@@ -2,7 +2,7 @@
local BattleManager = class("BattleManager", BaseModule)
local BattleConst = GConst.BattleConst
-BattleManager.SKILL_HERO_CFG = ConfigManager:getConfig("skill_hero")
+BattleManager.SKILL_HERO_CFG = ConfigManager:getConfig("skill")
local BATTLE_CONTROLLER_BASE = "app/module/battle/controller/battle_controller"
diff --git a/lua/app/module/hero/hero_manager.lua b/lua/app/module/hero/hero_manager.lua
new file mode 100644
index 00000000..9eb9004a
--- /dev/null
+++ b/lua/app/module/hero/hero_manager.lua
@@ -0,0 +1,74 @@
+local HeroManager = class("HeroManager", BaseModule)
+
+function HeroManager:showHeroDetailUI(heroId)
+ UIManager:showUI("app/ui/hero/hero_detail_ui", {heroId = heroId})
+end
+
+function HeroManager:getMatchTypeIcon(matchType)
+ return GConst.HeroConst.MATCH_ICON_NAME[matchType]
+end
+
+function HeroManager:getMatchTypeName(matchType)
+ return I18N:getGlobalText("ELEMENT_NAME_" .. matchType)
+end
+
+function HeroManager:getSkillDesc(skillId)
+ return I18N:getConfig("skill")[skillId].desc
+end
+
+function HeroManager:getSkillIcon(skillId)
+ return ConfigManager:getConfig("skill")[skillId].icon
+end
+
+function HeroManager:getSkillRogueDesc(skillId)
+ return I18N:getConfig("skill_rogue")[skillId].desc
+end
+
+function HeroManager:getSkillRogueIcon(skillId)
+ return ConfigManager:getConfig("skill_rogue")[skillId].icon
+end
+
+function HeroManager:getActiveRogueLvs()
+ if not self.activeRogueLvs then
+ self.activeRogueLvs = {}
+ local lvMap = {}
+ for lv, info in ipairs(ConfigManager:getConfig("hero_level")) do
+ if not lvMap[info.unlock_skill] then
+ table.insert(self.activeRogueLvs, lv)
+ lvMap[info.unlock_skill] = true
+ end
+ end
+ end
+
+ return self.activeRogueLvs
+end
+
+function HeroManager:upgradeHero(heroId)
+ local heroEntity = DataManager.HeroData:getHeroById(heroId)
+ if not heroEntity then
+ return
+ end
+
+ local materials = heroEntity:getLvUpMaterials()
+ if not materials or not materials[2] then
+ return
+ end
+
+ local fragmentCost = materials[1] or 0
+ if not GFunc.checkCost(heroEntity:getFramentId(), fragmentCost, true) then
+ return
+ end
+
+ if not heroEntity:canLvUp() then
+ return
+ end
+
+ ServerDataManager:dataOperate(GConst.ServerDataConst.DATA_OP_BEHAVIOR.UPGRADE_HERO, {heroId = heroId}, function(result)
+ if result.status == 0 then
+ GFunc.addCosts(result.costs, BIReport.ITEM_GET_TYPE.UPGRADE_HERO)
+ DataManager.HeroData:setHeroLv(result.heroId, result.lv)
+ end
+ end)
+end
+
+return HeroManager
\ No newline at end of file
diff --git a/lua/app/module/hero/hero_manager.lua.meta b/lua/app/module/hero/hero_manager.lua.meta
new file mode 100644
index 00000000..ee0179c9
--- /dev/null
+++ b/lua/app/module/hero/hero_manager.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 043758738c8f026498f9ccf0fa929a26
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/server/data/server_hero_data.lua b/lua/app/server/data/server_hero_data.lua
index 52219148..c485ed8e 100644
--- a/lua/app/server/data/server_hero_data.lua
+++ b/lua/app/server/data/server_hero_data.lua
@@ -14,10 +14,19 @@ function ServerHeroData:addHero(id, lv)
if self.data.heroes[idStr] then
return
end
+
self.data.heroes[idStr] = {
cfg_id = id,
lv = lv,
}
end
+function ServerHeroData:upgradeHero(heroId)
+ local idStr = tostring(heroId)
+ if not self.data.heroes[idStr] then
+ self:addHero(heroId, 0)
+ end
+ self.data.heroes[idStr].lv = self.data.heroes[idStr].lv + 1
+end
+
return ServerHeroData
\ No newline at end of file
diff --git a/lua/app/server/data/server_item_data.lua b/lua/app/server/data/server_item_data.lua
index 4137ad21..e4539a96 100644
--- a/lua/app/server/data/server_item_data.lua
+++ b/lua/app/server/data/server_item_data.lua
@@ -204,18 +204,6 @@ function ServerItemData:_addItem(id, num, getType)
ServerGameData.PlayerData:setVit(finalNum)
end
self.data.items[idStr].count = finalNum
- if num < 0 then
- if id == GConst.ItemConst.ITEM_ID_GEM then
- ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GEM_COST, -num)
- end
- end
-
- getType = getType or ""
- if num > 0 and id == GConst.ItemConst.ITEM_ID_GOLD and
- getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_RESOLVE and
- getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_REBACK then
- ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GOLD_GET, num)
- end
end
return ServerItemData
\ No newline at end of file
diff --git a/lua/app/server/manager/server_hero_manager.lua b/lua/app/server/manager/server_hero_manager.lua
new file mode 100644
index 00000000..5cef9857
--- /dev/null
+++ b/lua/app/server/manager/server_hero_manager.lua
@@ -0,0 +1,65 @@
+local ServerHeroManager = {}
+
+function ServerHeroManager:onUpgradeHero(params, callback)
+ local result = {
+ status = 1
+ }
+ if params == nil then
+ if callback then
+ callback(result)
+ end
+ return
+ end
+ local heroId = params.heroId
+ local heroCfg = ConfigManager:getConfig("hero")[heroId]
+ if heroId and heroCfg then
+ local ServerGameData = ServerDataManager:getServerGameData()
+ local ItemData = ServerGameData.BagData.ItemData
+ local heroInfo = ServerGameData.HeroData:getHeroByCfgId(heroId) or {cfg_id = heroId, lv = 0}
+ local lv = heroInfo.lv + 1
+ if lv < heroCfg.begin_lv then
+ lv = heroCfg.begin_lv
+ end
+ local nextLvInfo = ConfigManager:getConfig("hero_level")[lv]
+ if not nextLvInfo then
+ return
+ end
+ local fieldName = "cost_" .. heroCfg.qlt
+ nextLvInfo = nextLvInfo[fieldName]
+
+ local fragmentCost = nextLvInfo[1] or 0
+ if not ItemData:tryAddItem(heroCfg.item_id, -fragmentCost) then
+ return
+ end
+
+ local goldCost = nextLvInfo[2] or 0
+ if not ItemData:tryAddItem(GConst.ItemConst.ITEM_ID_GOLD, -goldCost) then
+ return
+ end
+
+ local costs = {
+ {
+ type = GConst.REWARD_TYPE.ITEM,
+ id = heroCfg.item_id,
+ num = fragmentCost
+ },
+ {
+ type = GConst.REWARD_TYPE.ITEM,
+ id = GConst.ItemConst.ITEM_ID_GOLD,
+ num = goldCost
+ }
+ }
+
+ ServerGameData.HeroData:upgradeHero(heroId)
+ result.heroId = heroId
+ result.lv = lv
+ result.costs = ServerGameData:addCosts(costs)
+
+ result.status = 0
+ end
+ if callback then
+ callback(result)
+ end
+end
+
+return ServerHeroManager
\ No newline at end of file
diff --git a/lua/app/server/manager/server_hero_manager.lua.meta b/lua/app/server/manager/server_hero_manager.lua.meta
new file mode 100644
index 00000000..d063a5dc
--- /dev/null
+++ b/lua/app/server/manager/server_hero_manager.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b697148ece07e2f4c873aa1bd9589e59
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/server/server_data_const.lua b/lua/app/server/server_data_const.lua
index f34bd71e..66da8a16 100644
--- a/lua/app/server/server_data_const.lua
+++ b/lua/app/server/server_data_const.lua
@@ -8,7 +8,8 @@ ServerDataConst.REWARD_TYPE = {
ServerDataConst.DATA_OP_BEHAVIOR = {
SYNC_DATA = "SYNC_DATA",
CROSS_DAY = "CROSS_DAY",
- UPDATE_FORMATION = "UPDATE_FORMATION"
+ UPDATE_FORMATION = "UPDATE_FORMATION",
+ UPGRADE_HERO = "UPGRADE_HERO",
}
return ServerDataConst
\ No newline at end of file
diff --git a/lua/app/server/server_data_manager.lua b/lua/app/server/server_data_manager.lua
index 39595396..66125a96 100644
--- a/lua/app/server/server_data_manager.lua
+++ b/lua/app/server/server_data_manager.lua
@@ -4,6 +4,7 @@ local ServerDataManager = {}
function ServerDataManager:init()
self.ServerFormationManager = require("app/server/manager/server_formation_manager")
+ self.HeroManager = require("app/server/manager/server_hero_manager")
end
function ServerDataManager:saveData()
@@ -60,6 +61,7 @@ end
ServerDataManager.OP_FUNC = {
[GConst.ServerDataConst.DATA_OP_BEHAVIOR.SYNC_DATA] = function (...) ServerDataManager:onSyncData(...) end,
[GConst.ServerDataConst.DATA_OP_BEHAVIOR.UPDATE_FORMATION] = function (...) ServerDataManager.ServerFormationManager:updateFormation(...) end,
+ [GConst.ServerDataConst.DATA_OP_BEHAVIOR.UPGRADE_HERO] = function (...) ServerDataManager.HeroManager:onUpgradeHero(...) end,
}
function ServerDataManager:dealGM(params, callback)
@@ -77,6 +79,7 @@ function ServerDataManager:dealGM(params, callback)
return
end
ServerGameData.BagData.ItemData:addItem(id, count)
+ ServerGameData.BagData.ItemData:saveLocalData()
if id == GConst.ItemConst.ITEM_ID_EXP then
ServerGameData.PlayerData:addExp(count)
end
@@ -145,4 +148,8 @@ function ServerDataManager:dealGM(params, callback)
end
end
+function ServerDataManager:getServerGameData()
+ return ServerGameData
+end
+
return ServerDataManager
\ No newline at end of file
diff --git a/lua/app/server/server_game_data.lua b/lua/app/server/server_game_data.lua
index 4f714389..23d44a21 100644
--- a/lua/app/server/server_game_data.lua
+++ b/lua/app/server/server_game_data.lua
@@ -152,6 +152,39 @@ function ServerGameData:addRewards(cfgRewards, getType)
return rewards
end
+
+-- 根据配置表添加奖励
+function ServerGameData:addCosts(cfgRewards, getType)
+ local rewards = {}
+ if cfgRewards then
+ local count = #TempRewards
+ for i = 1, count do
+ table.remove(TempRewards)
+ end
+ for _, reward in ipairs(cfgRewards) do
+ table.insert(TempRewards, reward)
+ end
+ count = #TempRewards
+ for i = 1, count do
+ local reward = table.remove(TempRewards)
+ local newReward = self:getNewReward()
+ local rewardType = GFunc.getRewardType(reward)
+ newReward.type = rewardType
+ if rewardType == GConst.ServerDataConst.REWARD_TYPE.ITEM then
+ self.BagData.ItemData:addItemCost(reward, getType)
+ local rewardId = GFunc.getRewardId(reward)
+ local rewardNum = GFunc.getRewardNum(reward)
+ newReward.item = {
+ id = rewardId,
+ num = rewardNum
+ }
+ end
+ table.insert(rewards, newReward)
+ end
+ end
+ return rewards
+end
+
function ServerGameData:getNewReward()
local rewards = {
type = 0,
diff --git a/lua/app/ui/common/cell/hero_cell.lua b/lua/app/ui/common/cell/hero_cell.lua
index 9c0f8922..d019aa45 100644
--- a/lua/app/ui/common/cell/hero_cell.lua
+++ b/lua/app/ui/common/cell/hero_cell.lua
@@ -6,6 +6,9 @@ function HeroCell:init()
self.heroBg = uiMap["hero_cell.hero_bg"]
self.check = uiMap["hero_cell.hero_bg.mask"]
self.matchImg = uiMap["hero_cell.hero_bg.match_img"]
+ 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.isGray = false
self.baseObject:addClickListener(function()
if self.clickCallback then
@@ -17,11 +20,27 @@ end
function HeroCell:refresh(heroEntity, isGray)
local heroInfo = heroEntity:getConfig()
self:_refresh(heroInfo, isGray)
+
+ local materials = heroEntity:getLvUpMaterials() or {}
+ local fragmentCount = DataManager.BagData.ItemData:getItemNumById(heroEntity:getFramentId())
+ local needFragmentCount = materials[1] or 1
+ self.progressTx:setText(fragmentCount .. "/" .. needFragmentCount)
+ self.progress:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = fragmentCount / needFragmentCount
+ self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, heroEntity:getLv()))
end
function HeroCell:refreshWithCfgId(id, isGray)
local heroInfo = ConfigManager:getConfig("hero")[id]
self:_refresh(heroInfo, isGray)
+
+ local lv = heroInfo.begin_lv
+ local lvInfo = ConfigManager:getConfig("hero_level")[lv]
+ local materials = lvInfo["cost_" .. heroInfo.qlt]
+ local fragmentCount = DataManager.BagData.ItemData:getItemNumById(heroInfo.item_id)
+ local needFragmentCount = materials[1] or 1
+ self.progressTx:setText(fragmentCount .. "/" .. needFragmentCount)
+ self.progress:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = fragmentCount / needFragmentCount
+ self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, lv))
end
function HeroCell:_refresh(heroInfo, isGray)
diff --git a/lua/app/ui/common/cell/large_hero_cell.lua b/lua/app/ui/common/cell/large_hero_cell.lua
index 8ec8c504..d7adb820 100644
--- a/lua/app/ui/common/cell/large_hero_cell.lua
+++ b/lua/app/ui/common/cell/large_hero_cell.lua
@@ -6,28 +6,36 @@ function LargeHeroCell:init()
self.heroBg = uiMap["hero_cell.hero_bg"]
self.check = uiMap["hero_cell.hero_bg.mask"]
self.matchImg = uiMap["hero_cell.hero_bg.match_img"]
+ self.infoBtnDesc = uiMap["large_hero_cell.hero_bg.info_btn.desc"]
+ self.useBtn = uiMap["large_hero_cell.hero_bg.use_btn.desc"]
self.isGray = false
uiMap["large_hero_cell.hero_bg.info_btn"]:addClickListener(function()
- if self.clickCallback1 then
- self.clickCallback1()
- end
+ if not self.heroId or not self.matchType then
+ return
+ end
+ ModuleManager.HeroManager:showHeroDetailUI(self.heroId)
end)
uiMap["large_hero_cell.hero_bg.use_btn"]:addClickListener(function()
- if self.clickCallback1 then
- self.clickCallback1()
- end
+ if not self.heroId or not self.matchType then
+ return
+ end
+ ModuleManager.FormationManager:upHeroToStageFormation(self.heroId, self.matchType)
end)
end
function LargeHeroCell:refresh(heroEntity, isGray)
+ self.heroId = heroEntity:getCfgId()
+ self.matchType = heroEntity:getMatchType()
local heroInfo = heroEntity:getConfig()
self:_refresh(heroInfo, isGray)
end
function LargeHeroCell:refreshWithCfgId(id, isGray)
local heroInfo = ConfigManager:getConfig("hero")[id]
+ self.heroId = id
+ self.matchType = heroInfo.position
self:_refresh(heroInfo, isGray)
end
@@ -47,9 +55,8 @@ function LargeHeroCell:showCheck(visible)
self.check:setVisible(visible)
end
-function LargeHeroCell:addClickListener(btn1Callback, btn2Callback)
- self.clickCallback1 = btn1Callback
- self.clickCallback2 = btn2Callback
+function LargeHeroCell:addClickListener(func)
+ self.baseObject:addClickListener(func)
end
function LargeHeroCell:setVisible(visible)
diff --git a/lua/app/ui/hero/cell/hero_list_cell.lua b/lua/app/ui/hero/cell/hero_list_cell.lua
index 41bff86a..46327806 100644
--- a/lua/app/ui/hero/cell/hero_list_cell.lua
+++ b/lua/app/ui/hero/cell/hero_list_cell.lua
@@ -17,7 +17,12 @@ function HeroListCell:init()
self.titleTx = self.uiMap["hero_list_cell.title.title_desc"]
end
-function HeroListCell:refresh(index, heroList, stageFormation, allHeroCount, activeCount)
+function HeroListCell:refresh(index, heroList, stageFormation, allHeroCount, activeCount, func)
+ self.baseObject:addClickListener(function()
+ if func then
+ func()
+ end
+ end)
if activeCount > 0 and index == 1 then
self.title:setVisible(true)
self.titleTx:setText("临时文本:已解锁")
@@ -44,7 +49,9 @@ function HeroListCell:refresh(index, heroList, stageFormation, allHeroCount, act
self.heroCells[i]:refresh(heroEntity, false)
self.heroCells[i]:showCheck(stageFormation[matchType] == heroId)
self.heroCells[i]:addClickListener(function()
- ModuleManager.FormationManager:upHeroToStageFormation(heroId, matchType)
+ if func then
+ func(self.heroCells[i], heroId)
+ end
end)
elseif heroIndex <= allHeroCount then
if heroStartIndex <= activeCount then
@@ -52,6 +59,11 @@ function HeroListCell:refresh(index, heroList, stageFormation, allHeroCount, act
else
self.heroCells[i]:setVisible(true)
self.heroCells[i]:refreshWithCfgId(heroList[heroIndex], true)
+ self.heroCells[i]:addClickListener(function()
+ if func then
+ func(self.heroCells[i], heroList[heroIndex])
+ end
+ end)
end
else
self.heroCells[i]:setVisible(false)
diff --git a/lua/app/ui/hero/hero_comp.lua b/lua/app/ui/hero/hero_comp.lua
index 0b8a3a0c..a41eeba3 100644
--- a/lua/app/ui/hero/hero_comp.lua
+++ b/lua/app/ui/hero/hero_comp.lua
@@ -1,6 +1,7 @@
local HeroComp = class("HeroComp", LuaComponent)
local HERO_LIST_CELL = "app/ui/hero/cell/hero_list_cell"
+local OUT_SCREEN_X = 10000
function HeroComp:init()
self.uiMap = self:getBaseObject():genAllChildren()
@@ -9,7 +10,9 @@ function HeroComp:init()
return HERO_LIST_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
- cell:refresh(index, self.heroList, self.stageFormation, self.allHeroCount, self.activeCount)
+ cell:refresh(index, self.heroList, self.stageFormation, self.allHeroCount, self.activeCount, function(cell)
+ self:onClickHero(cell, self.heroList[index])
+ end)
end)
self.heroList = {}
local heroCfg = ConfigManager:getConfig("hero")
@@ -31,6 +34,12 @@ function HeroComp:init()
self.uiMap["hero_ui.formation.hero_5.add"],
}
self.heroSpineList = {}
+ self.largeHeroCell = CellManager:addCellComp(self.uiMap["hero_ui.scrollrect.viewport.content.large_hero_cell"], GConst.TYPEOF_LUA_CLASS.LARGE_HERO_CELL)
+ self.content = self.uiMap["hero_ui.scrollrect.viewport.content"]
+ self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)
+ self.content:addClickListener(function()
+ self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)
+ end)
end
function HeroComp:refresh()
@@ -119,4 +128,27 @@ function HeroComp:sortHeroList()
end)
end
+function HeroComp:onClickHero(cell, heroId)
+ if not cell or not heroId then
+ self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)
+ return
+ end
+
+ local entity = DataManager.HeroData:getHeroById(heroId)
+ if entity then
+ if entity:isActived() 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, self.stageFormation[entity:getMatchType()] == heroId)
+ else
+ ModuleManager.HeroManager:showHeroDetailUI(heroId)
+ end
+ else
+ self.largeHeroCell:getBaseObject():setAnchoredPositionX(OUT_SCREEN_X)
+ end
+end
+
return HeroComp
\ No newline at end of file
diff --git a/lua/app/ui/hero/hero_detail_ui.lua b/lua/app/ui/hero/hero_detail_ui.lua
new file mode 100644
index 00000000..ef4c8e54
--- /dev/null
+++ b/lua/app/ui/hero/hero_detail_ui.lua
@@ -0,0 +1,121 @@
+local HeroDetailUI = class("HeroDetailUI", BaseUI)
+
+local DEFAULT_FACTOR = GConst.BattleConst.DEFAULT_FACTOR
+
+function HeroDetailUI:isFullScreen()
+ return false
+end
+
+function HeroDetailUI:getPrefabPath()
+ return "assets/prefabs/ui/hero/hero_detail_ui.prefab"
+end
+
+function HeroDetailUI:ctor(parmas)
+ local heroId = parmas.heroId
+ self.heroEntity = DataManager.HeroData:getHeroById(heroId)
+end
+
+function HeroDetailUI:onLoadRootComplete()
+ self:_display()
+ self:_addListeners()
+ self:_bind()
+end
+
+function HeroDetailUI:_display()
+ local uiMap = self.root:genAllChildren()
+ uiMap["hero_detail_ui.bg.title_desc"]:setText(self.heroEntity:getName())
+ uiMap["hero_detail_ui.bg.lv_desc"]:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, self.heroEntity:getLv()))
+ uiMap["hero_detail_ui.bg.element_desc"]:setText(ModuleManager.HeroManager:getMatchTypeName(self.heroEntity:getMatchType()))
+ uiMap["hero_detail_ui.bg.skill_desc"]:setText(ModuleManager.HeroManager:getSkillDesc(self.heroEntity:getActiveSkill()))
+ uiMap["hero_detail_ui.bg.hp_name"]:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_2))
+ uiMap["hero_detail_ui.bg.atk_name"]:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_3))
+
+ -- uiMap["hero_detail_ui.bg.skill_icon"]:setSprite(GConst.ATLAS_PATH.ICON_SKILL, ModuleManager.HeroManager:getSkillIcon(self.heroEntity:getActiveSkill()))
+ uiMap["hero_detail_ui.bg.hero_icon"]:setSprite(GConst.ATLAS_PATH.ICON_HERO, self.heroEntity:getIcon())
+ uiMap["hero_detail_ui.bg.hero_element"]:setSprite(GConst.ATLAS_PATH.ICON_HERO, ModuleManager.HeroManager:getMatchTypeIcon(self.heroEntity:getMatchType()))
+
+ local materials = self.heroEntity:getLvUpMaterials() or {}
+ local fragmentCount = DataManager.BagData.ItemData:getItemNumById(self.heroEntity:getFramentId())
+ local needFragmentCount = materials[1] or 1
+ uiMap["hero_detail_ui.bg.fragment_num"]:setText(fragmentCount .. "/" .. needFragmentCount)
+ uiMap["hero_detail_ui.bg.slider"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = fragmentCount / needFragmentCount
+
+ local activeCount = self.heroEntity:getActiveRogueCount()
+ local skillList = self.heroEntity:getRogueSkillList()
+ local skillLvs = ModuleManager.HeroManager:getActiveRogueLvs()
+ for i = 1, 3 do
+ local skillId = skillList[i]
+ if skillId then
+ local skillIcon = uiMap["hero_detail_ui.bg.skill_up_" .. i]
+ local skillLv = uiMap["hero_detail_ui.bg.skill_up_" .. i .. ".desc"]
+ skillIcon:addClickListener(function()
+ -- ModuleManager.TipsManager:show
+ GFunc.showToast(ModuleManager.HeroManager:getSkillRogueDesc(skillId))
+ end)
+
+ skillIcon:setSprite(GConst.ATLAS_PATH.ICON_SKILL_BUFF, ModuleManager.HeroManager:getSkillRogueIcon(skillId))
+ skillIcon:setImageGray(i > activeCount)
+ skillIcon:setTouchEnable(true)
+ if i > activeCount then
+ skillLv:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, skillLvs[i] or 0))
+ else
+ skillLv:setText(GConst.EMPTY_STRING)
+ end
+ end
+ end
+
+ uiMap["hero_detail_ui.bg.fragment_bg"]:setVisible(not self.heroEntity:isMaxLv())
+
+ local lv = self.heroEntity:getLv()
+ local str
+ local hpStr
+ local atkStr
+ if self.heroEntity:isActived() then
+ str = I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_4)
+ local curHp = self.heroEntity:getCfgHp() // DEFAULT_FACTOR
+ local curAtk = self.heroEntity:getCfgAtk() // DEFAULT_FACTOR
+ local addHp = self.heroEntity:getCfgHp(lv + 1) // DEFAULT_FACTOR - curHp
+ local addAtk = self.heroEntity:getCfgAtk(lv + 1) // DEFAULT_FACTOR - curAtk
+ if addHp <= 0 then
+ hpStr = curHp
+ else
+ hpStr = curHp .. "+" .. addHp .. ""
+ end
+
+ if addAtk <= 0 then
+ atkStr = curAtk
+ else
+ atkStr = curAtk .. "+" .. addAtk .. ""
+ end
+ else
+ str = I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_5)
+ hpStr = self.heroEntity:getCfgHp(self.heroEntity:getBeginLv())
+ atkStr = self.heroEntity:getCfgAtk(self.heroEntity:getBeginLv())
+ end
+ uiMap["hero_detail_ui.bg.up_btn.desc"]:setText(str)
+ uiMap["hero_detail_ui.bg.up_btn.num"]:setText(materials[2])
+ uiMap["hero_detail_ui.bg.up_btn.rp"]:setVisible(self.heroEntity:canLvUp())
+ uiMap["hero_detail_ui.bg.hp"]:setText(hpStr)
+ uiMap["hero_detail_ui.bg.atk"]:setText(atkStr)
+ uiMap["hero_detail_ui.bg.up_btn"]:setImageGray(not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GOLD, materials[2] or 0))
+ uiMap["hero_detail_ui.bg.up_btn"]:setActive(not self.heroEntity:isMaxLv())
+end
+
+function HeroDetailUI:_addListeners()
+ local uiMap = self.root:genAllChildren()
+ uiMap["hero_detail_ui.bg.back_btn"]:addClickListener(function()
+ self:closeUI()
+ end)
+
+ uiMap["hero_detail_ui.bg.up_btn"]:addClickListener(function()
+ ModuleManager.HeroManager:upgradeHero(self.heroEntity:getCfgId())
+ end)
+end
+
+function HeroDetailUI:_bind()
+ self:bind(self.heroEntity, "lv", function()
+ self:_display()
+ end)
+end
+
+return HeroDetailUI
\ No newline at end of file
diff --git a/lua/app/ui/hero/hero_detail_ui.lua.meta b/lua/app/ui/hero/hero_detail_ui.lua.meta
new file mode 100644
index 00000000..b2cfcfec
--- /dev/null
+++ b/lua/app/ui/hero/hero_detail_ui.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9d56482e42e9d474287fb81d23e5a982
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/ui/main_city/component/main_comp.lua b/lua/app/ui/main_city/component/main_comp.lua
index 06db7c90..3543e8e5 100644
--- a/lua/app/ui/main_city/component/main_comp.lua
+++ b/lua/app/ui/main_city/component/main_comp.lua
@@ -122,6 +122,9 @@ function MainComp:refreshStageFormaion()
local heroEntity = DataManager.HeroData:getHeroById(formation[i])
if heroEntity then
heroCell:refresh(heroEntity)
+ heroCell:addClickListener(function()
+ ModuleManager.HeroManager:showHeroDetailUI(heroEntity:getCfgId())
+ end)
else
heroCell:setVisible(false)
end
diff --git a/lua/app/userdata/bag/bag_data.lua b/lua/app/userdata/bag/bag_data.lua
index 29a93e5e..91e80a51 100644
--- a/lua/app/userdata/bag/bag_data.lua
+++ b/lua/app/userdata/bag/bag_data.lua
@@ -15,7 +15,7 @@ end
function BagData:init(data)
if data then
- self.ItemData:init(data.ItemData)
+ self.ItemData:init(data.ItemData.items)
else
self.ItemData:init()
end
diff --git a/lua/app/userdata/bag/item_data.lua b/lua/app/userdata/bag/item_data.lua
index 0ca621d2..8b44d2c2 100644
--- a/lua/app/userdata/bag/item_data.lua
+++ b/lua/app/userdata/bag/item_data.lua
@@ -4,11 +4,8 @@ local ItemConst = require "app/module/item/item_const"
local ItemData = class("ItemData", BaseData)
local CACHE_ITEM = {
- id = 0,
- count = {
- value = 0,
- unit = 0,
- }
+ cfg_id = 0,
+ count = 0
}
function ItemData:ctor()
@@ -25,8 +22,8 @@ function ItemData:init(data)
-- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
-- elseif info.id == GConst.ItemConst.ITEM_ID_GOLD then
-- local parmas = {}
- -- parmas.gold_value = info.count.value
- -- parmas.gold_unit = info.count.unit
+ -- parmas.gold_value = info.count
+ -- parmas.gold_unit = info.count
-- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
-- end
self:_add(info.cfg_id, info.count)
@@ -67,6 +64,16 @@ function ItemData:getItemBigNumById(id)
return num
end
+function ItemData:getItemNumById(id)
+ local num
+ if self.items[id] then
+ num = self.items[id]:getNum()
+ else
+ num = 0
+ end
+ return num
+end
+
function ItemData:addItemReward(item, itemGetType)
CACHE_ITEM.cfg_id = GFunc.getRewardId(item)
CACHE_ITEM.count = GFunc.getRewardNum(item)
@@ -107,41 +114,41 @@ function ItemData:addItem(data, itemGetType)
self:_addItemNumById(data.cfg_id, data.count)
- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM or data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
- if data.count.value < 0 then
- if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.TRAIN_UP then
- else
- BIReport:postGemUse(data.count, itemGetType, data.cfg_id)
- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
- elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
- local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
- local parmas = {}
- parmas.gold = goldNum
- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
- end
- end
- else
- if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.CHAPTER_DROP then
- else
- BIReport:postGemGet(data.count, itemGetType, data.cfg_id)
- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
- elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
- local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
- local parmas = {}
- parmas.gold = goldNum
- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
- end
- end
- end
- else
- if data.count.value < 0 then
- BIReport:postItemUse(data.count, data.cfg_id, itemGetType)
- else
- BIReport:postItemGet(data.count, data.cfg_id, itemGetType)
- end
- end
+ -- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM or data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
+ -- if data.count < 0 then
+ -- if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.TRAIN_UP then
+ -- else
+ -- BIReport:postGemUse(data.count, itemGetType, data.cfg_id)
+ -- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
+ -- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
+ -- elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
+ -- local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
+ -- local parmas = {}
+ -- parmas.gold = goldNum
+ -- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
+ -- end
+ -- end
+ -- else
+ -- if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.CHAPTER_DROP then
+ -- else
+ -- BIReport:postGemGet(data.count, itemGetType, data.cfg_id)
+ -- if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
+ -- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
+ -- elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
+ -- local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
+ -- local parmas = {}
+ -- parmas.gold = goldNum
+ -- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
+ -- end
+ -- end
+ -- end
+ -- else
+ -- if data.count < 0 then
+ -- BIReport:postItemUse(data.count, data.cfg_id, itemGetType)
+ -- else
+ -- BIReport:postItemGet(data.count, data.cfg_id, itemGetType)
+ -- end
+ -- end
end
function ItemData:addItemNumById(id, num, itemGetType)
diff --git a/lua/app/userdata/battle/battle_data.lua b/lua/app/userdata/battle/battle_data.lua
index 79516793..1efffafb 100644
--- a/lua/app/userdata/battle/battle_data.lua
+++ b/lua/app/userdata/battle/battle_data.lua
@@ -2,7 +2,7 @@ local BattleTeamEntity = require "app/userdata/battle/team/battle_team_entity"
local BattleData = class("BattleData", BaseData)
-local SKILL_HERO_CFG = ConfigManager:getConfig("skill_hero")
+local SKILL_HERO_CFG = ConfigManager:getConfig("skill")
local BattleConst = GConst.BattleConst
local BATTLE_GRID_ENTITY = require "app/userdata/battle/battle_grid_entity"
local BATTLE_BOARD_SKILL_ENTITY = require "app/userdata/battle/skill/battle_borad_skill_entity"
@@ -10,26 +10,32 @@ local BATTLE_BOARD_SKILL_ENTITY = require "app/userdata/battle/skill/battle_bora
local ATTR_TYPE = GConst.ATTR_TYPE
local DEFAULT_FACTOR = BattleConst.DEFAULT_FACTOR
-function BattleData:init(skillIds, skillPool)
+function BattleData:init()
self:clear()
self.atkTeam = self:initTeam(BattleConst.SIDE_ATK)
self.defTeam = self:initTeam(BattleConst.SIDE_DEF)
+ self:initRogueSkills()
+end
- --- todo
- skillIds = {
- 10, 21, 30, 40, 50
- }
- for _, skillId in ipairs(skillIds) do
- local cfg = SKILL_HERO_CFG[skillId]
- self.skillMap[cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId)
- end
-
- ---- skillPool
- self.skillPool = skillPool or {}
-
- for id, info in pairs(ConfigManager:getConfig("skill_rogue")) do
- if not info.universal then
- table.insert(self.skillPool, id)
+function BattleData:initRogueSkills()
+ self.skillPool = {}
+ self.skillMap = {}
+ local skillmap = {}
+ local formation = DataManager.FormationData:getStageFormation()
+ for matchType, heroId in pairs(formation) do
+ if heroId > 0 then
+ local heroEntity = DataManager.HeroData:getHeroById(heroId)
+ if heroEntity then
+ local skillId = heroEntity:getActiveSkill()
+ local cfg = SKILL_HERO_CFG[skillId]
+ self.skillMap[cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId)
+ for _, id in ipairs(heroEntity:getActiveTogueSkills()) do
+ if not skillmap[id] then
+ table.insert(self.skillPool, id)
+ skillmap[id] = true
+ end
+ end
+ end
end
end
end
diff --git a/lua/app/userdata/battle/skill/battle_borad_skill_entity.lua b/lua/app/userdata/battle/skill/battle_borad_skill_entity.lua
index 334b7f38..d83837e8 100644
--- a/lua/app/userdata/battle/skill/battle_borad_skill_entity.lua
+++ b/lua/app/userdata/battle/skill/battle_borad_skill_entity.lua
@@ -13,7 +13,7 @@ function BattleBoardSkillEnity:refreshSkillId(skillId)
return
end
self.skillId = skillId
- self.config = ConfigManager:getConfig("skill_hero")[skillId]
+ self.config = ConfigManager:getConfig("skill")[skillId]
end
function BattleBoardSkillEnity:getSkillId()
diff --git a/lua/app/userdata/hero/hero_data.lua b/lua/app/userdata/hero/hero_data.lua
index d4c5916a..201a9394 100644
--- a/lua/app/userdata/hero/hero_data.lua
+++ b/lua/app/userdata/hero/hero_data.lua
@@ -39,4 +39,12 @@ function HeroData:getActiveHeroCount()
return self.data.activeCount
end
+function HeroData:setHeroLv(id, lv)
+ if not self.heroes[id] then
+ self:addHero(id, lv)
+ return
+ end
+ self.heroes[id]:setLv(lv)
+end
+
return HeroData
\ No newline at end of file
diff --git a/lua/app/userdata/hero/hero_entity.lua b/lua/app/userdata/hero/hero_entity.lua
index 582d287f..258584e8 100644
--- a/lua/app/userdata/hero/hero_entity.lua
+++ b/lua/app/userdata/hero/hero_entity.lua
@@ -6,6 +6,7 @@ function HeroEntity:ctor(cfgId, lv)
self.data.lv = lv
self.attrDirty = false
self.config = ConfigManager:getConfig("hero")[self.cfgId]
+ self.beginLv = self.config.begin_lv -- 初始等级
self.baseAttrOriginal = {}
self.allAttr = {}
@@ -41,6 +42,10 @@ function HeroEntity:getQlt()
return self.config.qlt
end
+function HeroEntity:getBeginLv()
+ return self.beginLv
+end
+
function HeroEntity:getMatchType()
return self.config.position
end
@@ -63,13 +68,32 @@ function HeroEntity:updateAttr()
end
function HeroEntity:updateBaseAttr()
- if self.data.lv <= 0 then
- self.baseAttrOriginal[GConst.ATTR_TYPE.hp] = 0
- self.baseAttrOriginal[GConst.ATTR_TYPE.atk] = 0
- else
- self.baseAttrOriginal[GConst.ATTR_TYPE.hp] = self.config.hp[self.data.lv] or self.config.hp[#self.config.hp]
- self.baseAttrOriginal[GConst.ATTR_TYPE.atk] = self.config.atk[self.data.lv] or self.config.atk[#self.config.atk]
+ self.baseAttrOriginal[GConst.ATTR_TYPE.hp] = self:getCfgHp()
+ self.baseAttrOriginal[GConst.ATTR_TYPE.atk] = self:getCfgAtk()
+end
+
+function HeroEntity:getCfgHp(lv)
+ lv = lv or self.data.lv
+ if lv > self:getMaxLv() then
+ lv = self:getMaxLv()
end
+ if self.config and self.config.hp then
+ return self.config.hp[lv] or 0
+ end
+
+ return 0
+end
+
+function HeroEntity:getCfgAtk(lv)
+ lv = lv or self.data.lv
+ if lv > self:getMaxLv() then
+ lv = self:getMaxLv()
+ end
+ if self.config and self.config.atk then
+ return self.config.atk[lv] or 0
+ end
+
+ return 0
end
function HeroEntity:updateAllAttr()
@@ -90,6 +114,17 @@ function HeroEntity:setDirty()
self.attrDirty = true
end
+function HeroEntity:isMaxLv()
+ return self.data.lv >= self:getMaxLv()
+end
+
+function HeroEntity:getMaxLv()
+ if not self.maxLv then
+ self.maxLv = ConfigManager:getConfigNum("hero_level")
+ end
+ return self.maxLv
+end
+
function HeroEntity:canLvUp()
if self:isMaxLv() then
return false
@@ -100,21 +135,33 @@ function HeroEntity:canLvUp()
return false
end
- for _, reward in ipairs(cost) do
- if not GFunc.checkCost(reward.id, reward.num, false) then
- return false
- end
+ local fragmentCost = cost[1] or 0
+ if not GFunc.checkCost(self:getFramentId(), fragmentCost, false) then
+ return false
+ end
+ local goldCost = cost[2] or 0
+ if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GOLD, goldCost, false) then
+ return false
end
return true
end
+function HeroEntity:isActived()
+ return self.data.lv >= self:getBeginLv()
+end
+
function HeroEntity:getLvUpMaterials()
- local nextLvInfo = ConfigManager:getConfig("hero_up")[self.data.lv + 1]
+ local lv = self.data.lv + 1
+ if lv < self:getBeginLv() then
+ lv = self:getBeginLv()
+ end
+ local nextLvInfo = ConfigManager:getConfig("hero_level")[lv]
if not nextLvInfo then
return
end
- return nextLvInfo.exp
+ local fieldName = "cost_" .. self:getQlt()
+ return nextLvInfo[fieldName]
end
function HeroEntity:getConfig()
@@ -133,4 +180,54 @@ function HeroEntity:getHurtSkill()
return self.config.hurt_skill
end
+function HeroEntity:getFramentId()
+ return self.config.item_id
+end
+
+function HeroEntity:getIcon()
+ return self.config.icon
+end
+
+function HeroEntity:getName()
+ return I18N:getConfig("hero")[self:getCfgId()].name
+end
+
+function HeroEntity:getActiveRogueCount()
+ local lvInfo = ConfigManager:getConfig("hero_level")[self.data.lv]
+ if not lvInfo then
+ return 0
+ end
+ return lvInfo.unlock_skill
+end
+
+function HeroEntity:getRogueSkillList()
+ if not self.rogueSkillList then
+ self.rogueSkillList = {}
+ for i = 1, 3 do
+ local id = self.config["rouge_skill_" .. i]
+ if id then
+ table.insert(self.rogueSkillList, id)
+ else
+ break
+ end
+ end
+ end
+
+ return self.rogueSkillList
+end
+
+function HeroEntity:getActiveTogueSkills()
+ local list = {}
+ for i = 1, self:getActiveRogueCount() do
+ local id = self:getRogueSkillList()[i]
+ if id then
+ table.insert(list, id)
+ else
+ return
+ end
+ end
+
+ return list
+end
+
return HeroEntity
\ No newline at end of file