From 6347ed6f9cd43bbd4694aff17422648f4c6a3a55 Mon Sep 17 00:00:00 2001
From: puxuan <413323644@qq.com>
Date: Wed, 17 Sep 2025 17:23:26 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E5=A4=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lua/app/common/bi_report.lua | 6 +
.../localization_global_const.lua | 18 +
lua/app/config/strings/cn/global.lua | 18 +
lua/app/module/equip/equip_manager.lua | 183 ++++++----
lua/app/ui/common/cell/equip_cell.lua | 102 +++---
lua/app/ui/equip/equip_get_resonate_ui.lua | 43 +++
.../ui/equip/equip_get_resonate_ui.lua.meta | 10 +
lua/app/ui/equip/equip_growth_ui.lua | 160 ++++----
lua/app/ui/equip/equip_resolve_ui.lua | 345 ++++++++++++++++++
lua/app/ui/equip/equip_resolve_ui.lua.meta | 10 +
lua/app/ui/equip/equip_resonate_ui.lua | 164 +++++++++
lua/app/ui/equip/equip_resonate_ui.lua.meta | 10 +
lua/app/ui/hero/equip_info_comp.lua | 16 +-
lua/app/ui/hero/hero_detail_ui.lua | 5 +-
lua/app/userdata/equip/equip_data.lua | 340 ++++++++++++-----
lua/app/userdata/equip/equip_entity.lua | 3 +
16 files changed, 1144 insertions(+), 289 deletions(-)
create mode 100755 lua/app/ui/equip/equip_get_resonate_ui.lua
create mode 100644 lua/app/ui/equip/equip_get_resonate_ui.lua.meta
create mode 100755 lua/app/ui/equip/equip_resolve_ui.lua
create mode 100644 lua/app/ui/equip/equip_resolve_ui.lua.meta
create mode 100755 lua/app/ui/equip/equip_resonate_ui.lua
create mode 100644 lua/app/ui/equip/equip_resonate_ui.lua.meta
diff --git a/lua/app/common/bi_report.lua b/lua/app/common/bi_report.lua
index d3923442..017c0e4a 100644
--- a/lua/app/common/bi_report.lua
+++ b/lua/app/common/bi_report.lua
@@ -183,6 +183,12 @@ BIReport.ITEM_GET_TYPE = {
TASK_ACHIEVEMENT = "task_achievement",
+ -- 装备相关
+ EQUIP_WEAR = "equip_wear",
+ EQUIP_LV_UP = "equip_lv_up",
+ EQUIP_REFINE = "equip_refine",
+ EQUIP_RESOLVE = "equip_resolve",
+
-- 召唤
FORCE_SUMMON = "force_summon",
FORCE_SUMMON_WISH_HREO_ID = "force_summon_wish_hero_id",
diff --git a/lua/app/config/localization/localization_global_const.lua b/lua/app/config/localization/localization_global_const.lua
index f9c70efa..4b00678f 100644
--- a/lua/app/config/localization/localization_global_const.lua
+++ b/lua/app/config/localization/localization_global_const.lua
@@ -734,6 +734,24 @@ local LocalizationGlobalConst =
EQUIP_HERO_DESC_34 = "EQUIP_HERO_DESC_34",
EQUIP_HERO_ACTIVATION_1 = "EQUIP_HERO_ACTIVATION_1",
EQUIP_HERO_ACTIVATION_2 = "EQUIP_HERO_ACTIVATION_2",
+ EQUIP_HERO_M_1 = "EQUIP_HERO_M_1",
+ EQUIP_HERO_M_2 = "EQUIP_HERO_M_2",
+ EQUIP_HERO_M_3 = "EQUIP_HERO_M_3",
+ EQUIP_QLT_DESC_1 = "EQUIP_QLT_DESC_1",
+ EQUIP_QLT_DESC_2 = "EQUIP_QLT_DESC_2",
+ EQUIP_QLT_DESC_3 = "EQUIP_QLT_DESC_3",
+ EQUIP_QLT_DESC_4 = "EQUIP_QLT_DESC_4",
+ EQUIP_QLT_DESC_5 = "EQUIP_QLT_DESC_5",
+ LV_POINT = "LV_POINT",
+ EQUIP_HERO_1 = "EQUIP_HERO_1",
+ EQUIP_HERO_2 = "EQUIP_HERO_2",
+ EQUIP_HERO_3 = "EQUIP_HERO_3",
+ EQUIP_DESC_40 = "EQUIP_DESC_40",
+ EQUIP_DESC_48 = "EQUIP_DESC_48",
+ EQUIP_QLT_SELECT = "EQUIP_QLT_SELECT",
+ EQUIP_QLT_SELECT_ALL_1 = "EQUIP_QLT_SELECT_ALL_1",
+ EQUIP_QLT_SELECT_ALL_2 = "EQUIP_QLT_SELECT_ALL_2",
+ REBACK_MATERIAL_DESC = "REBACK_MATERIAL_DESC",
}
return LocalizationGlobalConst
\ No newline at end of file
diff --git a/lua/app/config/strings/cn/global.lua b/lua/app/config/strings/cn/global.lua
index eeeb2b06..57e28eb4 100644
--- a/lua/app/config/strings/cn/global.lua
+++ b/lua/app/config/strings/cn/global.lua
@@ -734,6 +734,24 @@ local localization_global =
["EQUIP_HERO_DESC_34"] = "强化至{0}级可继续精炼",
["EQUIP_HERO_ACTIVATION_1"] = "已激活:强化共鸣Lv{0}",
["EQUIP_HERO_ACTIVATION_2"] = "已激活:精炼共鸣Lv{0}",
+ ["EQUIP_HERO_M_1"] = "所有装备强化{0}可激活下个等级",
+ ["EQUIP_HERO_M_2"] = "所有装备品质达到{0}可激活下个等级",
+ ["EQUIP_HERO_M_3"] = "所有装备精炼{0}级可激活下个等级",
+ ["EQUIP_QLT_DESC_1"] = "绿{0}星",
+ ["EQUIP_QLT_DESC_2"] = "蓝{0}星",
+ ["EQUIP_QLT_DESC_3"] = "紫{0}星",
+ ["EQUIP_QLT_DESC_4"] = "橙{0}星",
+ ["EQUIP_QLT_DESC_5"] = "红{0}星",
+ ["LV_POINT"] = "LV.",
+ ["EQUIP_HERO_1"] = "强化共鸣",
+ ["EQUIP_HERO_2"] = "品质共鸣",
+ ["EQUIP_HERO_3"] = "精炼共鸣",
+ ["EQUIP_DESC_40"] = "没有可分解的装备",
+ ["EQUIP_DESC_48"] = "分解后所选装备会消失,确定分解吗?",
+ ["EQUIP_QLT_SELECT"] = "{0}\n及以下",
+ ["EQUIP_QLT_SELECT_ALL_1"] = "所有品质",
+ ["EQUIP_QLT_SELECT_ALL_2"] = "所有部位",
+ ["REBACK_MATERIAL_DESC"] = "分解获得",
}
return localization_global
\ No newline at end of file
diff --git a/lua/app/module/equip/equip_manager.lua b/lua/app/module/equip/equip_manager.lua
index 9a52851e..7e3264b7 100644
--- a/lua/app/module/equip/equip_manager.lua
+++ b/lua/app/module/equip/equip_manager.lua
@@ -10,99 +10,128 @@ end
function EquipManager:showEquipInfoUI(params)
local uiObj = UIManager:checkOpen(UIManager.UI_PATH.EQUIP_INFO_UI)
- if uiObj then
- uiObj:ctor(params)
- uiObj:onRefresh()
- else
- UIManager:showUI(UIManager.UI_PATH.EQUIP_INFO_UI, params)
- end
-end
-
--- 请求触发装备升级礼包
-function EquipManager:reqEquipUpgradeGift(heroId, part)
- if DataManager.EquipData:getCanShowGiftId(heroId, part) ~= nil then
- return
- end
-
- self:sendMessage(ProtoMsgType.FromMsgEnum.TriggerWeaponArmorGiftReq, {hero_id = heroId, equip_position = part}, {}, self.rspEquipUpgradeGift, nil)
-end
-
-function EquipManager:rspEquipUpgradeGift(result)
- DataManager.EquipData:initGifts(result.info)
-end
-
--- 升级装备
-function EquipManager:reqUpgrade(id, part)
- local entity = DataManager.EquipData:getEquip(id, part)
- if not entity then
- return
- end
-
- local heroEntity = DataManager.HeroData:getHeroById(id)
- if heroEntity == nil or not heroEntity:isUnlock() then
- return
- end
-
- for index, cost in ipairs(entity:getUpgradeMaterials()) do
- if cost.num > DataManager.BagData.ItemData:getItemNumById(cost.id) then
- GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_8))
- self:showItemGetPop(id, part, cost.id, cost.num)
- return
- end
- end
-
- if not entity:isEnoughGold() then
- if not ModuleManager.ShopManager:tryTriggerCoinGift() then
- GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_GOLD)
- end
- return
- end
-
- if entity:isMaxLevel() then
- if entity:getPart() == GConst.EquipConst.PART_TYPE.WEAPON then
- GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_7, DataManager.PlayerData:getLv() + 1))
- else
- GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_9, entity:getLevel() + 1))
- end
- return
- end
-
- local itemGetType = BIReport.ITEM_GET_TYPE.EQUIP_UPGRADE
- if part ~= GConst.EquipConst.PART_TYPE.WEAPON then
- itemGetType = BIReport.ITEM_GET_TYPE.ARMOR_UPGRADE
- end
- self:sendMessage(ProtoMsgType.FromMsgEnum.EquipUpgradeReq, {hero_id = id, position = part}, {}, self.rspUpgrade, itemGetType)
-end
-
-function EquipManager:rspUpgrade(result)
- if result.err_code == GConst.ERROR_STR.SUCCESS then
- DataManager.EquipData:onUpgradeEquip(result.reqData.hero_id, result.reqData.position)
-
- if result.reqData.position == GConst.EquipConst.PART_TYPE.WEAPON then
- ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_UPGRADE_WEAPON)
- else
- ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_UPGRADE_ARMOR)
- end
+ if uiObj then
+ uiObj:ctor(params)
+ uiObj:onRefresh()
+ else
+ UIManager:showUI(UIManager.UI_PATH.EQUIP_INFO_UI, params)
end
end
---@region
+-- 共鸣
+function EquipManager:showEquipResonateUI(slotId, page)
+ UIManager:showUI("app/ui/equip/equip_resonate_ui", {slotId = slotId, page = page})
+end
+
+-- 分解弹窗(批量分解)
+function EquipManager:showEquipResolveUI()
+ UIManager:showUI("app/ui/equip/equip_resolve_ui")
+end
+
+-- 套装效果弹窗
+function EquipManager:showEquipGetResonateUI(type, lvNew, attrNum, attrNextNum)
+ local params = {
+ type = type,
+ lvNew = lvNew,
+ attrNum = attrNum,
+ attrNextNum = attrNextNum,
+ }
+ UIManager:showUI("app/ui/equip/equip_get_resonate_ui", params)
+end
+
+--@region 协议
+-- 装备穿戴
function EquipManager:onEquipWearReq(slotId, ids)
local params = {}
params.slot = slotId
params.ids = ids
- self:sendMessage(ProtoMsgType.FromMsgEnum.EquipWearReq, params, {}, self.onEquipWearRsp, BIReport.ITEM_GET_TYPE.UPGRADE_HERO)
+ self:sendMessage(ProtoMsgType.FromMsgEnum.EquipWearReq, params, {}, self.onEquipWearRsp, BIReport.ITEM_GET_TYPE.EQUIP_WEAR)
end
function EquipManager:onEquipWearRsp(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
+ local lvOld, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.QLT, result.reqData.slot)
DataManager.EquipData:onWearSuccess(result.reqData.slot, result.reqData.ids)
DataManager.HeroData:setDirty()
DataManager.HeroData:calcPower()
-
- AudioManager:playEffect(AudioManager.EFFECT_ID.HERO_UP)
+ local lvNew = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.QLT, result.reqData.slot)
+ if lvOld < lvNew then
+ self:showEquipGetResonateUI(GConst.EquipConst.RESONATE_PAGE.QLT, lvNew, attrNum, attrNextNum)
+ -- DataManager.GiftPopData:activeEquipResonancePopGift(GConst.EquipConst.RESONATE_PAGE.QLT, lvNew)
+ end
end
end
+-- 装备升级
+function EquipManager:onEquipUpgradeReq(slotId, part)
+ local lv = DataManager.EquipData:getPartLv(slotId, part)
+ local itemCost = DataManager.EquipData:getLevelCost(lv + 1)
+ if not GFunc.checkCost(itemCost.id, itemCost.num, true) then
+ return
+ end
+ local params = {}
+ params.slot = slotId
+ params.part = part
+ self:sendMessage(ProtoMsgType.FromMsgEnum.EquipUpgradeReq, params, {}, self.onEquipUpgradeRsp, BIReport.ITEM_GET_TYPE.EQUIP_LV_UP)
+end
+
+function EquipManager:onEquipUpgradeRsp(result)
+ if result.err_code == GConst.ERROR_STR.SUCCESS then
+ local lvOld, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, result.reqData.slot)
+ DataManager.EquipData:onUpgradeSuccess(result.reqData.slot, result.upgraded)
+ DataManager.HeroData:setDirty()
+ DataManager.HeroData:calcPower()
+ local lvNew = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, result.reqData.slot)
+ if lvOld < lvNew then
+ self:showGetResonateUI(GConst.EquipConst.RESONATE_PAGE.LV_UP, lvNew, attrNum, attrNextNum)
+ -- DataManager.GiftPopData:activeEquipResonancePopGift(GConst.EquipConst.RESONATE_PAGE.LV_UP, lvNew)
+ end
+ end
+end
+
+-- 装备精炼
+function EquipManager:onEquipRefineReq(slotId, part)
+ local refine = DataManager.EquipData:getPartRefine(slotId, part)
+ local itemCost = DataManager.EquipData:getRefineCost(refine + 1)
+ if not GFunc.checkCost(itemCost.id, itemCost.num, true) then
+ return
+ end
+ local params = {}
+ params.slot = slotId
+ params.part = part
+ self:sendMessage(ProtoMsgType.FromMsgEnum.EquipRefineReq, params, {}, self.onEquipRefineRsp, BIReport.ITEM_GET_TYPE.EQUIP_REFINE)
+end
+
+function EquipManager:onEquipRefineRsp(result)
+ if result.err_code == GConst.ERROR_STR.SUCCESS then
+ local lvOld, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.REFINE, result.reqData.slot)
+ DataManager.EquipData:onRefineSuccess(result.reqData.slot, result.reqData.part, result.part)
+ DataManager.HeroData:setDirty()
+ DataManager.HeroData:calcPower()
+ local lvNew = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.REFINE, result.reqData.slot)
+ if lvOld < lvNew then
+ self:showGetResonateUI(GConst.EquipConst.RESONATE_PAGE.REFINE, lvNew, attrNum, attrNextNum)
+ -- DataManager.GiftPopData:activeEquipResonancePopGift(GConst.EquipConst.RESONATE_PAGE.REFINE, lvNew)
+ end
+ end
+end
+
+-- 装备分解
+function EquipManager:onEquipDecomposeReq(ids)
+ self:sendMessage(ProtoMsgType.FromMsgEnum.EquipDecomposeReq, {ids = ids}, {}, self.onEquipDecomposeRsp, BIReport.ITEM_GET_TYPE.EQUIP_RESOLVE)
+end
+
+function EquipManager:onEquipDecomposeRsp(result)
+ if result.err_code ~= GConst.ERROR_STR.SUCCESS then
+ return
+ end
+ GFunc.showRewardBox(result.rewards, {customTitleStr = I18N:getGlobalText(I18N.GlobalConst.REBACK_MATERIAL_DESC)})
+
+ DataManager.EquipData:onResolveSuccess(result.reqData.ids)
+
+ -- ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.EQUIP_RESOLVE_NUM, #result.reqData.ids)
+
+ -- BIReport:postEquipResolveOpt(BIReport.EQUIP_OP_TYPE.RESOLVE, result.reqData.ids, result.rewards)
+end
--@endregion
return EquipManager
\ No newline at end of file
diff --git a/lua/app/ui/common/cell/equip_cell.lua b/lua/app/ui/common/cell/equip_cell.lua
index 66011450..c735dd0c 100644
--- a/lua/app/ui/common/cell/equip_cell.lua
+++ b/lua/app/ui/common/cell/equip_cell.lua
@@ -2,19 +2,22 @@ local EquipCell = class("EquipCell", BaseCell)
function EquipCell:init()
local uiMap = self:getUIMap()
- self.imgQlt = uiMap["equip_cell.content.img_qlt"]
- self.imgIcon = uiMap["equip_cell.content.img_icon"]
- self.rankNode = uiMap["equip_cell.content.rank"]
- self.txRank = uiMap["equip_cell.content.rank.tx_rank"]
- self.levelNode = uiMap["equip_cell.content.level"]
- self.txLv = uiMap["equip_cell.content.level.tx_lv"]
- self.imgUp = uiMap["equip_cell.content.img_up"]
+ self.qltImg = uiMap["equip_cell.content.qlt_img"]
+ self.iconImg = uiMap["equip_cell.content.icon_img"]
+ self.lvTx = uiMap["equip_cell.content.lv_tx"]
self.mask = uiMap["equip_cell.mask"]
self.check = uiMap["equip_cell.check"]
self.lock = uiMap["equip_cell.lock"]
self.select = uiMap["equip_cell.select"]
self.light = uiMap["equip_cell.light"]
- self.levelNode:setActive(false)
+ self.refineBg = uiMap["equip_cell.content.refine_bg"]
+ self.refineBgTx = uiMap["equip_cell.content.refine_bg.refine_tx"]
+
+ self.starNode = uiMap["equip_cell.content.star_cell"]
+ self.starImgs = {}
+ for i = 1, 5 do
+ self.starImgs[i] = uiMap["equip_cell.content.star_cell.star_img_" .. i]
+ end
-- self:hideEffectUp()
end
@@ -27,58 +30,73 @@ function EquipCell:refresh(entity, slotId, showMask, showCheck, showLock)
if entity == nil then
return
end
- self:_refreshShow(entity:getQlt(), entity:getIconRes(), entity:getPartLv(slotId), showMask, showCheck, showLock)
+
+ self:_refresh(entity, showMask, showCheck, showLock)
+ local lv = entity:getPartLv(slotId)
+ if lv then
+ self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.LV_POINT) .. lv)
+ else
+ self.lvTx:setText("")
+ end
+ local part = entity:getPart()
+ local uid = entity:getUid()
+ if uid and uid > 0 then
+ local equipUid = DataManager.EquipData:getPartEquipUid(slotId, part)
+ if equipUid and equipUid == uid then
+ self.refineBg:setActive(true)
+ self.refineBgTx:setText(DataManager.EquipData:getPartRefine(slotId, part))
+ else
+ self.refineBg:setActive(false)
+ end
+ else
+ self.refineBg:setActive(false)
+ end
+end
+
+function EquipCell:refreshByCfg(id, showMask, showCheck, showLock)
+ if id == nil then
+ return
+ end
+ local entity = DataManager.EquipData:getEquipByCfgId(id)
+ self:_refresh(entity, showMask, showCheck, showLock)
+ self.lvTx:setText("")
+ self.refineBg:setActive(false)
+end
+
+function EquipCell:_refresh(entity, showMask, showCheck, showLock)
local qlt = entity:getQlt()
local icon = entity:getIconRes()
- local lv = entity:getPartLv(slotId)
- self.imgQlt:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "frame_" .. qlt)
- self.imgIcon:setActive(true)
- self.imgIcon:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, icon)
+ local star = entity:getStar()
- -- if lv then
- -- self.levelNode:setActive(true)
- -- self.txLv:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_2, lv))
- -- else
- -- self.levelNode:setActive(false)
- -- end
+ self.qltImg:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "frame_" .. qlt)
+ self.iconImg:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, icon)
+ for i, v in ipairs(self.starImgs) do
+ if i <= star then
+ v:setActive(true)
+ v:setSprite(GConst.ATLAS_PATH.COMMON, "common_star_1")
+ else
+ v:setActive(false)
+ end
+ end
+ self.starNode:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT):RefreshLayout()
self:showMask(showMask)
self:showCheck(showCheck)
self:showLock(showLock)
self:showSelect(false)
self:showLight(false)
- self:setShowUp(false)
-end
-
-function EquipCell:refreshByCfg(id, showMask, showCheck, showLock)
- self:_refreshShow(DataManager.EquipData:getQlt(id), DataManager.EquipData:getIconRes(id), nil, showMask, showCheck, showLock)
-end
-
-function EquipCell:refreshByCustom(qlt, icon, lv, showMask, showCheck, showLock)
- self:_refreshShow(qlt, icon, lv, showMask, showCheck, showLock)
-end
-
-function EquipCell:_refreshShow(qlt, icon, lv, showMask, showCheck, showLock)
-
end
function EquipCell:refreshEmpty(part, showSelect)
- self.imgQlt:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "frame_0")
- -- self.imgIcon:setActive(true)
- self.imgIcon:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "101")
- self.rankNode:setActive(false)
- self.levelNode:setActive(false)
+ self.qltImg:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "frame_0")
+ -- self.iconImg:setActive(true)
+ self.iconImg:setSprite(GConst.ATLAS_PATH.ICON_EQUIP, "101")
self:showMask(false)
self:showCheck(false)
self:showLock(false)
self:showSelect(showSelect or false)
self:showLight(false)
- self:setShowUp(false)
-end
-
-function EquipCell:setShowUp(show)
- self.imgUp:setActive(show)
end
function EquipCell:setShowLv(show)
diff --git a/lua/app/ui/equip/equip_get_resonate_ui.lua b/lua/app/ui/equip/equip_get_resonate_ui.lua
new file mode 100755
index 00000000..a772313e
--- /dev/null
+++ b/lua/app/ui/equip/equip_get_resonate_ui.lua
@@ -0,0 +1,43 @@
+local BaseTips = require "app/ui/tips/base_tips"
+local EquipGetEesonateUI = class("EquipGetEesonateUI", BaseTips)
+
+function EquipGetEesonateUI:ctor(params)
+ self.type = params.type
+ self.lvNew = params.lvNew
+ self.attrNum = params.attrNum
+ self.attrNextNum = params.attrNextNum
+end
+
+function EquipGetEesonateUI:getPrefabPath()
+ return "assets/prefabs/ui/equip/equip_get_resonate_ui.prefab"
+end
+
+function EquipGetEesonateUI:setRootUI(ui)
+ self.parentUI = ui
+end
+
+function EquipGetEesonateUI:onLoadRootComplete()
+ local uiMap = self.root:genAllChildren()
+ self.root:addClickListener(function()
+ self:closeUI()
+ end)
+
+ self.layout = uiMap["equip_get_resonate_ui.attr_bg.layout"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
+ self.attrNextValueTx = uiMap["equip_get_resonate_ui.attr_bg.layout.attr_next_value_tx"]
+ -- self.effect = uiMap["equip_get_resonate_ui.vfx_b13_ui_equip_gongmin_b01"]
+ uiMap["equip_get_resonate_ui.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_33))
+ -- self.spineTitle:playAnimComplete("born", false, true, function()
+ -- self.spineTitle:playAnim("idle", true, true)
+ -- end)
+ uiMap["equip_get_resonate_ui.name_tx"]:setText(I18N:getGlobalText("EQUIP_HERO_LV_" .. self.type, self.lvNew))
+ -- self.effect:play()
+ uiMap["equip_get_resonate_ui.attr_bg.attr_name_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.TAG_4_1))
+ uiMap["equip_get_resonate_ui.attr_bg.layout.attr_curr_value_tx"]:setText(self.attrNum)
+ self.attrNextValueTx:setText(self.attrNextNum)
+ local meshProCompNext = self.attrNextValueTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
+ local nowTipsNextX = meshProCompNext.preferredWidth
+ self.attrNextValueTx:setSizeDeltaX(nowTipsNextX)
+ self.layout:RefreshLayout()
+end
+
+return EquipGetEesonateUI
\ No newline at end of file
diff --git a/lua/app/ui/equip/equip_get_resonate_ui.lua.meta b/lua/app/ui/equip/equip_get_resonate_ui.lua.meta
new file mode 100644
index 00000000..21976277
--- /dev/null
+++ b/lua/app/ui/equip/equip_get_resonate_ui.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7cd78d812d92144a4818e2a894b2fa0a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/ui/equip/equip_growth_ui.lua b/lua/app/ui/equip/equip_growth_ui.lua
index 9e2e918a..178fb76c 100644
--- a/lua/app/ui/equip/equip_growth_ui.lua
+++ b/lua/app/ui/equip/equip_growth_ui.lua
@@ -29,9 +29,6 @@ function EquipGrowthUI:onLoadRootComplete()
uiMap["equip_growth_ui.bg.close_btn"]:addClickListener(function()
self:closeUI()
end)
- uiMap["equip_growth_ui.bg.page_info_1.attr_bg.bg.info_btn"]:addClickListener(function()
- self:closeUI()
- end)
-- uiMap["equip_growth_ui.bg.close_btn"]:addClickListener(function()
-- self:closeUI()
-- end)
@@ -57,13 +54,18 @@ function EquipGrowthUI:onLoadRootComplete()
-- self.upAutoBtnTx = uiMap["equip_growth_ui.bg.page_info_1.attr_bg.auto_btn.text"]
self.upMaxDescTx = uiMap["equip_growth_ui.bg.page_info_1.attr_bg.max_desc_tx"]
self.upUpBtn:addClickListener(function()
- self:closeUI()
+ ModuleManager.EquipManager:onEquipUpgradeReq(self.slotId, self.equipPart)
end)
self.upAutoBtn:addClickListener(function()
- self:closeUI()
+ ModuleManager.EquipManager:onEquipUpgradeReq(self.slotId, 0)
+ end)
+ uiMap["equip_growth_ui.bg.page_info_1.attr_bg.bg.info_btn"]:addClickListener(function()
+ ModuleManager.EquipManager:showEquipResonateUI(self.slotId, GConst.EquipConst.RESONATE_PAGE.LV_UP)
end)
uiMap["equip_growth_ui.bg.page_info_1.attr_bg.up_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_3))
uiMap["equip_growth_ui.bg.page_info_1.attr_bg.auto_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_23))
+ uiMap["equip_growth_ui.bg.page_info_2.attr_bg.up_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_20))
+ uiMap["equip_growth_ui.bg.resolve_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_24))
self.upMaxDescTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_27))
-- 精炼
@@ -72,43 +74,24 @@ function EquipGrowthUI:onLoadRootComplete()
-- self.refineNextBg = uiMap["equip_growth_ui.bg.page_info_2.next_bg"]
self.refineNextLvTx = uiMap["equip_growth_ui.bg.page_info_2.next_bg.lv_tx"]
self.refineDescTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.desc_tx"]
- -- self.list = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list"]
- -- self.attrExtraCell1 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1"]
- -- self.point = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1.point"]
- -- self.attrNameTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1.attr_name_tx"]
- -- self.attrCurrTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1.attr_curr_tx"]
- -- self.imgArrow = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1.img_arrow"]
- -- self.attrNextTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_1.attr_next_tx"]
- -- self.attrExtraCell2 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2"]
- -- self.point = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2.point"]
- -- self.attrNameTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2.attr_name_tx"]
- -- self.attrCurrTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2.attr_curr_tx"]
- -- self.imgArrow = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2.img_arrow"]
- -- self.attrNextTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_2.attr_next_tx"]
- -- self.attrExtraCell3 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3"]
- -- self.point = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3.point"]
- -- self.attrNameTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3.attr_name_tx"]
- -- self.attrCurrTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3.attr_curr_tx"]
- -- self.imgArrow = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3.img_arrow"]
- -- self.attrNextTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_3.attr_next_tx"]
- -- self.attrExtraCell4 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4"]
- -- self.point = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4.point"]
- -- self.attrNameTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4.attr_name_tx"]
- -- self.attrCurrTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4.attr_curr_tx"]
- -- self.imgArrow = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4.img_arrow"]
- -- self.attrNextTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.list.attr_extra_cell_4.attr_next_tx"]
- -- self.bg = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg"]
- self.refineInfoBtn = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.info_btn"]
- self.refineDescTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.desc_tx"]
+ -- self.refineInfoBtn = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.info_btn"]
+ self.refineDescTx1 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.desc_tx"]
self.refineCostBg = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg"]
self.refineCostIcon = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg.cost_icon"]
self.refineCostTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg.cost_tx"]
self.refineUpBtn = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.up_btn"]
- self.refineUpBtnTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.up_btn.text"]
self.refineRateTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.rate_tx"]
- self.refineDescTx1 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.desc_tx_1"]
+ self.refineDescTx2 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.desc_tx_1"]
self.refineResolveBtn = uiMap["equip_growth_ui.bg.resolve_btn"]
- self.refineResolveBtnTx = uiMap["equip_growth_ui.bg.resolve_btn.text"]
+ self.refineUpBtn:addClickListener(function()
+ ModuleManager.EquipManager:onEquipRefineReq(self.slotId, self.equipPart)
+ end)
+ self.refineResolveBtn:addClickListener(function()
+ ModuleManager.EquipManager:showEquipResolveUI()
+ end)
+ uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.info_btn"]:addClickListener(function()
+ ModuleManager.EquipManager:showEquipResonateUI(self.slotId, GConst.EquipConst.RESONATE_PAGE.REFINE)
+ end)
self.refineAttrCells = {}
self.refineAttrNameTxs = {}
@@ -125,12 +108,11 @@ function EquipGrowthUI:onLoadRootComplete()
for i = 1, 6 do
self.equipCells[i] = uiMap["equip_growth_ui.bg.equip_list.equip_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.EQUIP_CELL)
self.equipCells[i]:addClickListener(function()
- if self.page == i then
+ if self.equipPart == i then
return
end
- self.page = i
+ self.equipPart = i
self:onRefresh()
- -- ModuleManager.EquipManager:showEquipListUI(self.heroEntity, i)
end)
end
@@ -143,33 +125,38 @@ function EquipGrowthUI:onLoadRootComplete()
self.pageBtns[i] = uiMap["equip_growth_ui.bg.page_btn_" .. i]
self.pageBtnTxs[i] = uiMap["equip_growth_ui.bg.page_btn_" .. i .. ".text"]
self.pageBtns[i] :addClickListener(function()
- if self.equipPart == i then
+ if self.page == i then
return
end
- self.equipPart = i
+ self.page = i
self:onRefresh()
end)
end
uiMap["equip_growth_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BAG_DESC_1))
- -- self:bind(DataManager.HeroData, "isDirty", function()
- -- self:closeUI()
- -- end)
+ self:bind(DataManager.HeroData, "isDirty", function()
+ self:onRefresh()
+ end)
+ self:bind(DataManager.EquipData, "isDirtyRefineSuccess", function()
+ self:onRefresh()
+ end)
+ self:bind(DataManager.EquipData, "isDirtyRefineFail", function()
+ self:onRefresh()
+ end)
end
function EquipGrowthUI:onRefresh()
- -- self:initList()
+ self:refreshEquipCell()
self:refreshPageBtn()
self:refreshPageInfo()
- self:refreshEquipCell()
end
function EquipGrowthUI:refreshEquipCell()
local eid = DataManager.EquipData:getPartEquipUid(self.slotId, self.equipPart)
if eid and eid > 0 then
- local equipEntity = DataManager.EquipData:getEquipByUid(eid)
- self.equipCell:refresh(equipEntity, self.equipPart)
+ self.equipEntity = DataManager.EquipData:getEquipByUid(eid)
+ self.equipCell:refresh(self.equipEntity, self.equipPart)
else
self.equipCell:refreshEmpty(self.equipPart)
end
@@ -178,7 +165,7 @@ function EquipGrowthUI:refreshEquipCell()
local eid = DataManager.EquipData:getPartEquipUid(self.slotId, part)
if eid and eid > 0 then
local equipEntity = DataManager.EquipData:getEquipByUid(eid)
- self.equipCells[part]:refresh(equipEntity, part)
+ self.equipCells[part]:refresh(equipEntity, self.slotId)
else
self.equipCells[part]:refreshEmpty(part)
end
@@ -220,10 +207,10 @@ function EquipGrowthUI:refreshPageUp()
-- self.equipCell:refreshEmpty(self.equipPart)
-- end
- self.upCurrLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, lv))
+ self.upCurrLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_DESC_12) .. lv)
self.upDescTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_14))
- local lv = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, self.equipPart)
- self.upDescTx1:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_ACTIVATION_1, lv))
+ local lv1 = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, self.equipPart)
+ self.upDescTx1:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_ACTIVATION_1, lv1))
self.upMaxDescTx:setActive(isLvMax)
local _, _, resonateAttrNum = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, self.equipPart)
@@ -232,7 +219,7 @@ function EquipGrowthUI:refreshPageUp()
local currAttrNum = GFunc.getFinalAttrValue(currAttr.type, currAttr.num + resonateAttrNum)
self.upAttrCurrTx:setText(currAttrNum)
if not isLvMax then
- self.upNextLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, lv + 1))
+ self.upNextLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.ACT_DESC_12) .. (lv + 1))
local nextAttr = equipEntity:getBaseAttrWithLv(lv + 1)
local nextAttrNum = GFunc.getFinalAttrValue(nextAttr.type, nextAttr.num + resonateAttrNum)
self.upAttrNextTx:setText(nextAttrNum)
@@ -252,19 +239,64 @@ end
--@region 精炼
function EquipGrowthUI:refreshPageRefine()
+ local refine = DataManager.EquipData:getPartRefine(self.slotId, self.equipPart)
+ local isMaxRefine = DataManager.EquipData:isRefineLvMax(self.slotId, self.equipPart)
+ local attrs = self.equipEntity:getExtraList()
+ local count = #attrs
+ for i, cell in ipairs(self.refineAttrCells) do
+ if count >= i then
+ cell:setActive(true)
+ local extraAttr = attrs[i]
+ local nowAttr = DataManager.EquipData:getRefineAttrAdd(refine, extraAttr.type)
+ self.refineAttrNameTxs[i]:setText(GFunc.getAttrNameByType(extraAttr.type))
+ self.refineAttrCurrTxs[i]:setText(GFunc.getFinalAttrValue(extraAttr.type, extraAttr.num + nowAttr.num))
+ if not isMaxRefine then
+ local nextAttr = DataManager.EquipData:getRefineAttrAdd(refine + 1, extraAttr.type)
+ self.refineAttrNextTxs[i]:setText(GFunc.getFinalAttrValue(nextAttr.type, extraAttr.num + nextAttr.num))
+ -- if isGrowthUp and self.effectNameResult then
+ -- self:playEffect(cell.txAttrBaseEffect)
+ -- end
+ end
+ else
+ cell:setActive(false)
+ end
+ end
+ self.refineCurrLvTx:setText(refine)
+ self.refineNextLvTx:setText(refine + 1)
+ self.refineDescTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_12))
+ local lv1 = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.REFINE, self.equipPart)
+ self.refineDescTx1:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_ACTIVATION_2, lv1))
+ if isMaxRefine then
+ self.refineRateTx:setActive(false)
+ self.refineUpBtn:setActive(false)
+ self.refineCostBg:setActive(false)
+ self.refineDescTx2:setActive(true)
+ self.refineDescTx2:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_26))
+ else
+ local lv = DataManager.EquipData:getPartLv(self.slotId, self.equipPart)
+ local needLevel = DataManager.EquipData:getRefineNeedLevel(refine + 1)
+ self.refineDescTx2:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_34, needLevel))
+ local showLimit = lv < needLevel
+ self.refineDescTx2:setActive(showLimit)
- -- self.refineInfoBtn = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.info_btn"]
- -- self.refineDescTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.bg.desc_tx"]
- -- self.refineCostBg = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg"]
- -- self.refineCostIcon = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg.cost_icon"]
- -- self.refineCostTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.cost_bg.cost_tx"]
- -- self.refineUpBtn = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.up_btn"]
- -- self.refineUpBtnTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.up_btn.text"]
- -- self.refineRateTx = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.rate_tx"]
- -- self.refineDescTx1 = uiMap["equip_growth_ui.bg.page_info_2.attr_bg.desc_tx_1"]
- -- self.refineResolveBtn = uiMap["equip_growth_ui.bg.resolve_btn"]
- -- self.refineResolveBtnTx = uiMap["equip_growth_ui.bg.resolve_btn.text"]
+ self.refineRateTx:setActive(not showLimit)
+ self.refineUpBtn:setActive(not showLimit)
+ self.refineCostBg:setActive(not showLimit)
+ local pro = DataManager.EquipData:getPartRefineFailPro(self.slotId, self.equipPart)
+ self.refineRateTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_25, pro))
+
+ local itemCost = DataManager.EquipData:getRefineCost(refine + 1)
+ local costId = GFunc.getRewardId(itemCost)
+ local costNum = GFunc.getRewardNum(itemCost)
+ local count = DataManager.BagData.ItemData:getItemNumById(costId)
+ self.refineCostIcon:setSprite(ModuleManager.ItemManager:getItemIcon(costId))
+ if costNum > count then
+ self.refineCostTx:setText("" .. count .. "/".. costNum)
+ else
+ self.refineCostTx:setText(count .. "/" .. costNum)
+ end
+ end
end
--@endregion
diff --git a/lua/app/ui/equip/equip_resolve_ui.lua b/lua/app/ui/equip/equip_resolve_ui.lua
new file mode 100755
index 00000000..4810b3f0
--- /dev/null
+++ b/lua/app/ui/equip/equip_resolve_ui.lua
@@ -0,0 +1,345 @@
+local EquipResolveUI = class("EquipResolveUI", BaseUI)
+
+
+function EquipResolveUI:onClose()
+end
+function EquipResolveUI:isFullScreen()
+ return false
+end
+function EquipResolveUI:ctor()
+ self.isOpenPartSelect = false
+ self.isOpenQltSelect = false
+
+ self.selectedPart = 0
+ self.selectedQlt = 0
+ self.selectEquips = {}
+end
+
+function EquipResolveUI:getPrefabPath()
+ return "assets/prefabs/ui/equip/equip_resolve_ui.prefab"
+end
+
+function EquipResolveUI:onLoadRootComplete()
+ local uiMap = self.root:genAllChildren()
+ uiMap["equip_resolve_ui.mask"]:addClickListener(function()
+ self:closeUI()
+ end)
+ uiMap["equip_resolve_ui.bg.close_btn"]:addClickListener(function()
+ self:closeUI()
+ end)
+ self.titleTx = uiMap["equip_resolve_ui.bg.title_tx"]
+ self.bg1 = uiMap["equip_resolve_ui.bg.bg_1"]
+ self.bg2 = uiMap["equip_resolve_ui.bg.bg_2"]
+ self.scrollrect = uiMap["equip_resolve_ui.bg.scrollrect"]
+ self.listPart = uiMap["equip_resolve_ui.bg.list_part"]
+ self.listPartBtns = {}
+ for i = 0, 6 do
+ local partBtn = uiMap["equip_resolve_ui.bg.list_part.scrollrect.viewport.content.part_btn_" .. i]
+ partBtn:addClickListener(function()
+ self:selectPart(i)
+ end)
+ local partTx = uiMap["equip_resolve_ui.bg.list_part.scrollrect.viewport.content.part_btn_" .. i .. ".text"]
+ if i == 0 then
+ partTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_QLT_SELECT_ALL_2))
+ else
+ partTx:setText(I18N:getGlobalText(GConst.EquipConst.EQUIP_PART_NAME[i]))
+ end
+ table.insert(self.listPartBtns, {partBtn = partBtn, partTx = partTx})
+ end
+ self.partBtn = uiMap["equip_resolve_ui.bg.part_btn"]
+ self.partTx = uiMap["equip_resolve_ui.bg.part_btn.text"]
+ self.listQlt = uiMap["equip_resolve_ui.bg.list_qlt"]
+ self.listBtnQlts = {}
+ for i = 0, 5 do
+ local qltBtn = uiMap["equip_resolve_ui.bg.list_qlt.scrollrect.viewport.content.qlt_btn_" .. i]
+ qltBtn:addClickListener(function()
+ self:selectQlt(i)
+ end)
+ local qltBtnTx = uiMap["equip_resolve_ui.bg.list_qlt.scrollrect.viewport.content.qlt_btn_" .. i .. ".text"]
+ self.listBtnQlts[i] = {qltBtn = qltBtn, qltBtnTx = qltBtnTx}
+ end
+ self.qltBtn = uiMap["equip_resolve_ui.bg.qlt_btn"]
+ self.qltBtnTx = uiMap["equip_resolve_ui.bg.qlt_btn.text"]
+ self.cost = uiMap["equip_resolve_ui.bg.cost"]
+ self.costTx = uiMap["equip_resolve_ui.bg.cost.cost_tx"]
+ self.selectAllBtn = uiMap["equip_resolve_ui.bg.select_all_btn"]
+ self.selectAllBtnTx = uiMap["equip_resolve_ui.bg.select_all_btn.text"]
+ self.resolveBtn = uiMap["equip_resolve_ui.bg.resolve_btn"]
+ self.emptyTx = uiMap["equip_resolve_ui.bg.empty_tx"]
+
+ self.titleTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_24))
+ uiMap["equip_resolve_ui.bg.desc_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_28))
+ uiMap["equip_resolve_ui.bg.resolve_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_30))
+ uiMap["equip_resolve_ui.bg.empty_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_40))
+
+ self.partBtn:addClickListener(function()
+ self:openPartSelect()
+ end)
+ self.qltBtn:addClickListener(function()
+ self:openQltSelect()
+ end)
+ self.selectAllBtn:addClickListener(function()
+ if table.nums(self.selectEquips) < table.nums(self.listEquip) then
+ for i,v in ipairs(self.listEquip) do
+ self.selectEquips[v:getUid()] = v:getUid()
+ end
+ else
+ self.selectEquips = {}
+ end
+ self:refreshScrollRect()
+ end)
+ self.resolveBtn:addClickListener(function()
+ if table.nums(self.selectEquips) == 0 then
+ GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_31))
+ return
+ end
+ local params = {}
+ params.boxType = GConst.MESSAGE_BOX_TYPE.MB_OK_CANCEL_CLOSE
+ params.content = I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_48)
+ params.okFunc = function()
+ local listUid = {}
+ for i,uid in pairs(self.selectEquips) do
+ table.insert(listUid, uid)
+ end
+ ModuleManager.EquipManager:onEquipDecomposeReq(listUid)
+ end
+ GFunc.showMessageBox(params)
+
+ end)
+ self:bind(DataManager.EquipData, "isDirty", function()
+ self:onRefresh()
+ end)
+ self:bind(DataManager.EquipData, "isDirtyResolve", function()
+ self.selectEquips = {}
+ self.selectedPart = 0
+ self.selectedQlt = 0
+ self:onRefresh()
+ end)
+end
+
+function EquipResolveUI:onRefresh()
+ self.lowestFiveGrades, self.lowestFiveEquips = DataManager.EquipData:getLowestFiveGradeEquips()
+ for i = 0, 5 do
+ if i == 0 then
+ self.listBtnQlts[i].qltBtnTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_QLT_SELECT_ALL_1))
+ else
+ if self.lowestFiveGrades[i] then
+ self.listBtnQlts[i].qltBtn:setActive(true)
+ self.listBtnQlts[i].qltBtnTx:setText(I18N:getGlobalText("EQUIP_QLT_SELECT", I18N:getGlobalText("EQUIP_QLT_DESC_" .. self.lowestFiveGrades[i].qlt, self.lowestFiveGrades[i].star)))
+ else
+ self.listBtnQlts[i].qltBtn:setActive(false)
+ end
+ end
+ end
+
+ self:refreshScrollRect()
+ self:refreshText()
+end
+
+function EquipResolveUI:refreshSelectEquip()
+ for i,uid in pairs(self.selectEquips) do
+ local shouldRemove = false
+ local equip = DataManager.EquipData:getEquipByUid(uid)
+ if self.selectedPart ~= 0 then
+ if equip:getPart() ~= self.selectedPart then
+ shouldRemove = true
+ end
+ end
+ if not shouldRemove and self.selectedQlt ~= 0 then
+ if equip:getQlt() > self.lowestFiveGrades[self.selectedQlt].qlt then
+ -- 品质高于要求
+ shouldRemove = true
+ elseif equip:getQlt() == self.lowestFiveGrades[self.selectedQlt].qlt then
+ -- 同品质时检查星级
+ if equip:getStar() > self.lowestFiveGrades[self.selectedQlt].star then
+ shouldRemove = true
+ end
+ end
+ end
+ if shouldRemove then
+ self.selectEquips[uid] = nil
+ end
+ end
+end
+
+function EquipResolveUI:openPartSelect()
+ if self.isOpenPartSelect then
+ self.isOpenPartSelect = false
+ else
+ self.isOpenPartSelect = true
+ self.listPart:setActive(true)
+ if self.isOpenQltSelect then
+ self:openQltSelect()
+ end
+ end
+ if self.partSeq then
+ self.partSeq:Kill()
+ self.partSeq = nil
+ end
+ self.partSeq = DOTweenManager:createSeqWithIntId()
+ local startSize = self.listPart:getSizeDeltaY()
+ local endSize = self.isOpenPartSelect and 485 or 0
+ local tween = CS.DG.Tweening.DOTween.To(
+ function()
+ return startSize
+ end,
+ function(y)
+ self.listPart:setSizeDeltaY(y)
+ end,
+ endSize, 0.3)
+ tween:SetEase(CS.DG.Tweening.Ease.InOutCirc)
+ self.partSeq:Append(tween)
+ self.partSeq:AppendCallback(function()
+ if self.partSeq then
+ self.partSeq:Kill()
+ self.partSeq = nil
+ end
+ if not self.isOpenPartSelect then
+ self.listPart:setActive(false)
+ end
+ end)
+end
+
+function EquipResolveUI:openQltSelect()
+ if self.isOpenQltSelect then
+ self.isOpenQltSelect = false
+ else
+ self.isOpenQltSelect = true
+ self.listQlt:setActive(true)
+ if self.isOpenPartSelect then
+ self:openPartSelect()
+ end
+ end
+ if self.qltSeq then
+ self.qltSeq:Kill()
+ self.qltSeq = nil
+ end
+ self.qltSeq = DOTweenManager:createSeqWithIntId()
+ local startSize = self.listQlt:getSizeDeltaY()
+ local endSize = self.isOpenQltSelect and 355 or 0
+ local tween = CS.DG.Tweening.DOTween.To(
+ function()
+ return startSize
+ end,
+ function(y)
+ self.listQlt:setSizeDeltaY(y)
+ end,
+ endSize, 0.3)
+ tween:SetEase(CS.DG.Tweening.Ease.InOutCirc)
+ self.qltSeq:Append(tween)
+ self.qltSeq:AppendCallback(function()
+ if self.qltSeq then
+ self.qltSeq:Kill()
+ self.qltSeq = nil
+ end
+ if not self.isOpenQltSelect then
+ self.listQlt:setActive(false)
+ end
+ end)
+end
+
+function EquipResolveUI:selectPart(part)
+ if self.isOpenPartSelect then
+ self:openPartSelect()
+ end
+ self.selectedPart = part
+ self:refreshScrollRect()
+ self:refreshText()
+end
+
+function EquipResolveUI:selectQlt(qlt)
+ if self.isOpenQltSelect then
+ self:openQltSelect()
+ end
+ self.selectedQlt = qlt
+ self:refreshScrollRect()
+ self:refreshText()
+end
+
+function EquipResolveUI:refreshText()
+ if self.selectedPart == 0 then
+ self.partTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_QLT_SELECT_ALL_2))
+ else
+ self.partTx:setText(I18N:getGlobalText(GConst.EquipConst.EQUIP_PART_NAME[self.selectedPart]))
+ end
+ if self.selectedQlt == 0 then
+ self.qltBtnTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_QLT_SELECT_ALL_1))
+ else
+ self.qltBtnTx:setText(I18N:getGlobalText("EQUIP_QLT_SELECT", I18N:getGlobalText("EQUIP_QLT_DESC_" .. self.lowestFiveGrades[self.selectedQlt].qlt, self.lowestFiveGrades[self.selectedQlt].star)))
+ end
+end
+
+-- 新增方法:根据选中的品质+星级,获取该等级及更低的所有装备
+function EquipResolveUI:getEquipsByGradeAndBelow(selectedPart, selectedQlt, selectedStar)
+ -- 2. 筛选符合条件的装备
+ local resultEquips = {}
+ for _, group in ipairs(self.lowestFiveEquips) do
+ -- 判断是否低于或等于选中等级
+ if group:getQlt() < selectedQlt or (group:getQlt() == selectedQlt and group:getStar() <= selectedStar) then
+ if selectedPart == 0 or (selectedPart > 0 and group:getPart() == selectedPart) then
+ table.insert(resultEquips, group)
+ end
+ end
+ end
+ return resultEquips
+end
+
+function EquipResolveUI:refreshScrollRect()
+ if self.selectedQlt == 0 then
+ self.listEquip = DataManager.EquipData:getAllEquipsSortInverted(self.selectedPart, nil, nil, false)
+ else
+ self.listEquip = self:getEquipsByGradeAndBelow(self.selectedPart, self.lowestFiveGrades[self.selectedQlt].qlt, self.lowestFiveGrades[self.selectedQlt].star)
+ end
+ self.emptyTx:setActive(#self.listEquip <= 0)
+ if self.scrollRect == nil then
+ self.scrollRect = self.scrollrect:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
+ self.scrollRect:addInitCallback(function()
+ return GConst.TYPEOF_LUA_CLASS.EQUIP_CELL
+ end)
+ self.scrollRect:addRefreshCallback(function(index, cell)
+ local isSelect = self.selectEquips[self.listEquip[index]:getUid()] ~= nil
+ cell:refresh(self.listEquip[index])
+ cell:showMask(isSelect)
+ cell:showCheck(isSelect)
+ cell:addClickListener(function()
+ if self.selectEquips[self.listEquip[index]:getUid()] then
+ self.selectEquips[self.listEquip[index]:getUid()] = nil
+ cell:showCheck(false)
+ cell:showMask(false)
+ else
+ self.selectEquips[self.listEquip[index]:getUid()] = self.listEquip[index]:getUid()
+ cell:showCheck(true)
+ cell:showMask(true)
+ end
+ self:refreshReward()
+ end)
+ end)
+ end
+ if self.scrollRect:getTotalCount() == nil or self.scrollRect:getTotalCount() <= 0 then
+ self.scrollRect:refillCells(#self.listEquip)
+ elseif self.scrollRect:getTotalCount() ~= #self.listEquip then
+ self.scrollRect:clearCells()
+ self.scrollRect:refillCells(#self.listEquip)
+ else
+ self.scrollRect:updateAllCell()
+ end
+ self:refreshReward()
+end
+
+function EquipResolveUI:refreshReward()
+ self:refreshSelectEquip()
+ if table.nums(self.selectEquips) < table.nums(self.listEquip) then
+ self.selectAllBtnTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_29))
+ else
+ self.selectAllBtnTx:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_21))
+ end
+ local count = 0
+ for i,uid in pairs(self.selectEquips) do
+ local equip = DataManager.EquipData:getEquipByUid(uid)
+ local decompose = DataManager.EquipData:getResolveReward(equip:getId())
+ count = count + decompose.num
+ end
+ self.costTx:setText(count)
+end
+
+return EquipResolveUI
\ No newline at end of file
diff --git a/lua/app/ui/equip/equip_resolve_ui.lua.meta b/lua/app/ui/equip/equip_resolve_ui.lua.meta
new file mode 100644
index 00000000..41224871
--- /dev/null
+++ b/lua/app/ui/equip/equip_resolve_ui.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 88b03c4a3b93b44aaaef9fd1af2f53ad
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/ui/equip/equip_resonate_ui.lua b/lua/app/ui/equip/equip_resonate_ui.lua
new file mode 100755
index 00000000..c718c6d3
--- /dev/null
+++ b/lua/app/ui/equip/equip_resonate_ui.lua
@@ -0,0 +1,164 @@
+local EquipResonateUI = class("EquipResonateUI", BaseUI)
+
+function EquipResonateUI:onClose()
+end
+function EquipResonateUI:isFullScreen()
+ return false
+end
+function EquipResonateUI:ctor(params)
+ params = params or {}
+ self.page = params.page or GConst.EquipConst.RESONATE_PAGE.LV_UP
+ self.slotId = params and params.slotId
+end
+
+function EquipResonateUI:getPrefabPath()
+ return "assets/prefabs/ui/equip/equip_resonate_ui.prefab"
+end
+
+function EquipResonateUI:onLoadRootComplete()
+ local uiMap = self.root:genAllChildren()
+
+ uiMap["equip_resonate_ui.mask"]:addClickListener(function()
+ self:closeUI()
+ end)
+ uiMap["equip_resonate_ui.bg.close_btn"]:addClickListener(function()
+ self:closeUI()
+ end)
+
+ if not self.equipCells then
+ self.equipCells = {}
+ for i = 1, 6 do
+ local cell = uiMap["equip_resonate_ui.bg.equip_list.equip_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.EQUIP_CELL)
+ cell:addClickListener(function()
+ local uid = DataManager.EquipData:getPartEquipUid(self.slotId, self.part)
+ if uid ~= 0 then
+ self.part = i
+ self:onRefresh()
+ end
+ end)
+ table.insert(self.equipCells, cell)
+ end
+ end
+
+ self.lvTx = uiMap["equip_resonate_ui.bg.page_info.lv_tx"]
+ self.tipsTx = uiMap["equip_resonate_ui.bg.page_info.tips_tx"]
+ self.attrNameTxe = uiMap["equip_resonate_ui.bg.page_info.attr_bg.attr_name_tx"]
+ self.attrCurrValueTx = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.attr_curr_value_tx"]
+ self.arrowImg = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.arrow_img"]
+ self.attrNextValueTx = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.attr_next_value_tx"]
+ self.layout = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
+
+ uiMap["equip_resonate_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_4))
+ uiMap["equip_resonate_ui.bg.desc_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_6))
+
+ self.btnTxs = {I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_1), I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_2), I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_3)}
+ self.pageBtns = {}
+ self.pageBtnTxs = {}
+ for i = 1, 3 do
+ self.pageBtns[i] = uiMap["equip_resonate_ui.bg.page_btn_" .. i]
+ self.pageBtnTxs[i] = uiMap["equip_resonate_ui.bg.page_btn_" .. i .. ".text"]
+ self.pageBtns[i]:addClickListener(function()
+ if self.page == i then
+ return
+ end
+ self.page = i
+ self:onRefresh()
+ end)
+ end
+
+ self:bind(DataManager.EquipData, "isDirty", function()
+ self:onRefresh()
+ end)
+end
+
+function EquipResonateUI:onRefresh()
+ self:refreshEquipCell()
+ self:refreshPageBtn()
+ self:refreshPage()
+end
+
+function EquipResonateUI:refreshEquipCell()
+ for part = 1, 6 do
+ local eid = DataManager.EquipData:getPartEquipUid(self.slotId, part)
+ if eid and eid > 0 then
+ local equipEntity = DataManager.EquipData:getEquipByUid(eid)
+ self.equipCells[part]:refresh(equipEntity, self.slotId)
+ else
+ self.equipCells[part]:refreshEmpty(part)
+ end
+ end
+end
+
+function EquipResonateUI:refreshPageBtn()
+ for i = 1, 3 do
+ if self.page == i then
+ self.pageBtns[i]:setSprite(GConst.ATLAS_PATH.COMMON, "common_tab_1")
+ self.pageBtnTxs[i]:setText(self.btnTxs[i])
+ else
+ self.pageBtns[i]:setSprite(GConst.ATLAS_PATH.COMMON, "common_tab_2")
+ self.pageBtnTxs[i]:setText("" .. self.btnTxs[i] .. "")
+ end
+ end
+end
+
+function EquipResonateUI:refreshPage()
+ if self.page == GConst.EquipConst.RESONATE_PAGE.LV_UP then
+ self:refreshPageLv()
+ elseif self.page == GConst.EquipConst.RESONATE_PAGE.QLT then
+ self:refreshPageQlt()
+ elseif self.page == GConst.EquipConst.RESONATE_PAGE.REFINE then
+ self:refreshPageRefine()
+ end
+end
+
+function EquipResonateUI:refreshPageLv()
+ local lv, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(self.page, self.slotId)
+ self:refreshUI(lv, nextLv, attrNum, attrNextNum, DataManager.EquipData:getResonateMaxLevel(1))
+end
+
+function EquipResonateUI:refreshPageQlt()
+ local lv, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(self.page, self.slotId, self.part)
+ self:refreshUI(lv, nextLv, attrNum, attrNextNum, DataManager.EquipData:getResonateMaxLevel(2))
+end
+
+function EquipResonateUI:refreshPageRefine()
+ local lv, nextLv, attrNum, attrNextNum = DataManager.EquipData:getResonateLevel(self.page, self.slotId)
+ self:refreshUI(lv, nextLv, attrNum, attrNextNum, DataManager.EquipData:getResonateMaxLevel(3))
+end
+
+function EquipResonateUI:refreshUI(lv, nextLv, attrNum, attrNextNum, maxLevel)
+ self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.LV_POINT) .. lv)
+ self.attrNameTxe:setText(GFunc.getAttrNameByType("attr_atk"))
+ self.attrCurrValueTx:setText(attrNum)
+ local meshProCompNow = self.attrCurrValueTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
+ local nowTipsNowX = meshProCompNow.preferredWidth
+ self.attrCurrValueTx:setSizeDeltaX(nowTipsNowX)
+
+ if maxLevel ~= nil and lv >= maxLevel then
+ self.arrowImg:setActive(false)
+ self.attrNextValueTx:setActive(false)
+ self.tipsTx:setText(I18N:getGlobalText(I18N.GlobalConst.PET_DESC_15))
+ else
+ if nextLv == nil then
+ self.tipsTx:setText(I18N:getGlobalText(I18N.GlobalConst.PET_DESC_15))
+ else
+ if self.page == GConst.EquipConst.RESONATE_PAGE.QLT then
+ self.tipsTx:setText(I18N:getGlobalText("EQUIP_HERO_M_" .. self.page, I18N:getGlobalText("EQUIP_QLT_DESC_" .. nextLv[1], nextLv[2])))
+ else
+ self.tipsTx:setText(I18N:getGlobalText("EQUIP_HERO_M_" .. self.page, nextLv[1]))
+ end
+ end
+
+ self.attrNextValueTx:setText(attrNextNum)
+ self.arrowImg:setActive(true)
+ self.attrNextValueTx:setActive(true)
+
+ local meshProCompNext = self.attrNextValueTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
+ local nowTipsNextX = meshProCompNext.preferredWidth
+ self.attrNextValueTx:setSizeDeltaX(nowTipsNextX)
+ end
+ self.layout:RefreshLayout()
+end
+
+
+return EquipResonateUI
\ No newline at end of file
diff --git a/lua/app/ui/equip/equip_resonate_ui.lua.meta b/lua/app/ui/equip/equip_resonate_ui.lua.meta
new file mode 100644
index 00000000..34747ca7
--- /dev/null
+++ b/lua/app/ui/equip/equip_resonate_ui.lua.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2ed28da349724427e8aaedd4a32fc8ce
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}
diff --git a/lua/app/ui/hero/equip_info_comp.lua b/lua/app/ui/hero/equip_info_comp.lua
index 3a463a5b..f181643e 100644
--- a/lua/app/ui/hero/equip_info_comp.lua
+++ b/lua/app/ui/hero/equip_info_comp.lua
@@ -33,8 +33,6 @@ function EquipInfoComp:init()
local eid = DataManager.EquipData:getPartEquipUid(self.heroEntity:getMatchType(), i)
if eid and eid > 0 then
local equipEntity = DataManager.EquipData:getEquipByUid(eid)
- -- self.equipCells[part]:refresh(equipEntity, part)
- -- EquipManager:showEquipGrowthUI(slotId)
local parmas = {}
parmas.heroEntity = self.heroEntity
parmas.slotId = self.heroEntity:getMatchType()
@@ -63,12 +61,14 @@ function EquipInfoComp:init()
ModuleManager.EquipManager:onEquipWearReq(soltId, listUids)
end)
self.upBtn:addClickListener(function()
- -- UIManager:showUI("app/ui/hero/hero_attr_ui", {heroEntity = self.heroEntity})
- GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_3))
+ ModuleManager.EquipManager:showEquipGrowthUI(self.heroEntity:getMatchType(), 1)
end)
self.attrBtn:addClickListener(function()
UIManager:showUI("app/ui/hero/hero_attr_ui", {heroEntity = self.heroEntity})
end)
+ self.infoBtn:addClickListener(function()
+ ModuleManager.EquipManager:showEquipResonateUI(self.heroEntity:getMatchType(), 1)
+ end)
end
function EquipInfoComp:setParentUI(ui)
@@ -77,7 +77,6 @@ end
function EquipInfoComp:setHeroData(heroEntity)
self.heroEntity = heroEntity
- self.selectPart = self.selectPart or GConst.EquipConst.PART_TYPE.EQUIP_1
end
function EquipInfoComp:refresh()
@@ -117,8 +116,9 @@ function EquipInfoComp:refreshAttr()
end
function EquipInfoComp:refreshEquip()
+ local slotId = self.heroEntity:getMatchType()
self.curFormation = DataManager.FormationData:getStageFormation()
- if self.curFormation[self.heroEntity:getMatchType()] ~= self.heroEntity:getCfgId() then
+ if self.curFormation[slotId] ~= self.heroEntity:getCfgId() then
self.emptyTx:setActive(true)
self.equipNode:setActive(false)
return
@@ -126,10 +126,10 @@ function EquipInfoComp:refreshEquip()
self.emptyTx:setActive(false)
self.equipNode:setActive(true)
for part = 1, 6 do
- local eid = DataManager.EquipData:getPartEquipUid(self.heroEntity:getMatchType(), part)
+ local eid = DataManager.EquipData:getPartEquipUid(slotId, part)
if eid and eid > 0 then
local equipEntity = DataManager.EquipData:getEquipByUid(eid)
- self.equipCells[part]:refresh(equipEntity, part)
+ self.equipCells[part]:refresh(equipEntity, slotId)
else
self.equipCells[part]:refreshEmpty(part)
end
diff --git a/lua/app/ui/hero/hero_detail_ui.lua b/lua/app/ui/hero/hero_detail_ui.lua
index 7b3929a8..ceb92956 100644
--- a/lua/app/ui/hero/hero_detail_ui.lua
+++ b/lua/app/ui/hero/hero_detail_ui.lua
@@ -35,6 +35,9 @@ function HeroDetailUI:onLoadRootComplete()
self.root:addClickListener(function()
self:closeUI()
end)
+ -- uiMap["hero_detail_ui.mask"]:addClickListener(function()
+ -- self:closeUI()
+ -- end)
uiMap["hero_detail_ui.common.close_btn"]:addClickListener(function()
self:closeUI()
end)
@@ -56,8 +59,6 @@ function HeroDetailUI:onLoadRootComplete()
self.qltBg = uiMap["hero_detail_ui.common.qlt_bg"]
self.qltBgTx = uiMap["hero_detail_ui.common.qlt_bg.qlt_tx"]
self.starComp = uiMap["hero_detail_ui.common.hero_node.star_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.STAR_CELL)
- self.btnsLayout = uiMap["hero_detail_ui.common.btns"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
- self.redNodeLayout = uiMap["hero_detail_ui.red_node"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
self.btnTxs = {I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_4), I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_16), I18N:getGlobalText(I18N.GlobalConst.EQUIP_DESC_1)}
self.pageBtns = {}
diff --git a/lua/app/userdata/equip/equip_data.lua b/lua/app/userdata/equip/equip_data.lua
index ebaf6dc1..fbffcd6b 100644
--- a/lua/app/userdata/equip/equip_data.lua
+++ b/lua/app/userdata/equip/equip_data.lua
@@ -6,8 +6,26 @@ local EquipLevelCfg = ConfigManager:getConfig("equip_level")
local EquipRefineCfg = ConfigManager:getConfig("equip_refine")
local EquipResonateCfg = ConfigManager:getConfig("equip_resonate")
+function EquipData:setDirty()
+ self.data.isDirty = not self.data.isDirty
+end
+
+function EquipData:setDirtyRefineSuccess()
+ self.data.isDirtyRefineSuccess = not self.data.isDirtyRefineSuccess
+end
+
+function EquipData:setDirtyRefineFail()
+ self.data.isDirtyRefineFail = not self.data.isDirtyRefineFail
+end
+
+function EquipData:setDirtyResolve()
+ self.data.isDirtyResolve = not self.data.isDirtyResolve
+end
+
function EquipData:ctor()
self.data.isDirty = false
+ self.data.isDirtyRefineSuccess = false
+ self.data.isDirtyRefineFail = false
end
function EquipData:clear()
@@ -36,10 +54,6 @@ function EquipData:init(data)
self.slots = data.slots or {}
end
-function EquipData:setDirty()
- self.data.isDirty = not self.data.isDirty
-end
-
-- 武器功能是否开启
function EquipData:isWeaponOpen(showToast)
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.EQUIP_WEAPON, not showToast) then
@@ -117,36 +131,33 @@ end
--附加属性
function EquipData:getExtraAttr(id, index)
- return self:getConfig(id)["extra_attr_" .. index]
+ return self:getConfig(id)["extra_attr_" .. index]
end
--精炼额外数值总和
-function EquipData:getRefineAttrAdd(refine, attrId)
- local attrName = GFunc.getAttrNameById(attrId)
- local attrAll = {type = attrName, num = 0}
- for i = 1, refine do
- if i <= refine then
- local attr = self:getRefineAttr(i, attrName)
- if attr then
- attrAll.num = attrAll.num + attr.num
- end
- end
- end
- return attrAll
+function EquipData:getRefineAttrAdd(refine, attrName)
+ local attrAll = {type = attrName, num = 0}
+ for i = 1, refine do
+ if i <= refine then
+ local value = self:getRefineAttr(i, attrName)
+ attrAll.num = attrAll.num + (value or 0)
+ end
+ end
+ return attrAll
end
--对应精炼等级的额外数值
function EquipData:getRefineAttr(refine, attrName)
- local cfg = self:getRefineConfig(refine)
- if attrName == "attr_atk_private" then
- return cfg.extra_attr_add_1
- elseif attrName == "def_dec_private" then
- return cfg.extra_attr_add_2
- elseif attrName == "crit_private" then
- return cfg.extra_attr_add_3
- elseif attrName == "crit_time_private" then
- return cfg.extra_attr_add_4
- end
+ local cfg = self:getRefineConfig(refine)
+ if attrName == "attr_atk" then
+ return cfg.extra_attr_add_1
+ elseif attrName == "attr_hp" then
+ return cfg.extra_attr_add_2
+ elseif attrName == "attr_normal_hurt" then
+ return cfg.extra_attr_add_3
+ elseif attrName == "attr_skill_hurt" then
+ return cfg.extra_attr_add_4
+ end
end
--@endregion
@@ -230,7 +241,15 @@ function EquipData:getEquipByUid(uid)
return self.allEquips[uid]
end
end
---@endregion
+
+function EquipData:getEquipByCfgId(equipId)
+ if equipId == nil then
+ return
+ end
+ local entity = EquipEntity:create({cfg_id = equipId, extra_attrs = {}})
+ return entity
+end
+--endregion
--@region 穿戴
--装备穿戴
@@ -281,9 +300,32 @@ function EquipData:getEquipMaxScore(soltId, part)
end
return equip
end
+
+--获取对应位置的装备Id
+function EquipData:getPartEquipUid(slotId, part)
+ local parts = self.slots[slotId].parts
+ if parts then
+ if part == nil then
+ return parts
+ else
+ local partInfo = parts[part]
+ if partInfo then
+ return partInfo.equip_uid
+ end
+ end
+ end
+ return 0
+end
--@endregion
--@region 装备强化
+function EquipData:getLevelCost(refine)
+ local cfg = self:getLevelConfig(refine)
+ if cfg then
+ return cfg.cost
+ end
+end
+
-----获取强化等级
function EquipData:getPartLv(slotId, part)
local parts = self.slots[slotId].parts
@@ -303,34 +345,43 @@ end
--基础属性额外强化值
function EquipData:getBaseAttrLvAdd(attrType, lv)
- local baseAttrAdd = 0
- for i = 1, lv do
+ local baseAttrAdd = 0
+ for i = 1, lv do
if attrType == "attr_atk" then
baseAttrAdd = baseAttrAdd + self:getLevelConfig(i).base_attr_add[1]
else
- baseAttrAdd = baseAttrAdd + self:getLevelConfig(i).base_attr_add[2]
- end
- end
- return baseAttrAdd
-end
-
---@endregion
---@region 六个部位装备的强化与精炼
---获取对应位置的装备Id
-function EquipData:getPartEquipUid(slotId, part)
- local parts = self.slots[slotId].parts
- if parts then
- if part == nil then
- return parts
- else
- local partInfo = parts[part]
- if partInfo then
- return partInfo.equip_uid
- end
+ baseAttrAdd = baseAttrAdd + self:getLevelConfig(i).base_attr_add[2]
end
end
- return 0
+ return baseAttrAdd
end
+
+function EquipData:onUpgradeSuccess(soltId, upgraded)
+ upgraded = upgraded or {}
+ for part, lv in pairs(upgraded) do
+ if self.slots[soltId].parts[part] then
+ self.slots[soltId].parts[part].level = lv
+ end
+ end
+ self:setDirty()
+end
+--@endregion
+
+--@region 精炼
+function EquipData:getRefineCost(refine)
+ local cfg = self:getRefineConfig(refine)
+ if cfg then
+ return cfg.cost
+ end
+end
+
+function EquipData:getRefineNeedLevel(refine)
+ local cfg = self:getRefineConfig(refine)
+ if cfg then
+ return cfg.equip_level
+ end
+end
+
--获取精炼等级
function EquipData:getPartRefine(slotId, part)
local parts = self.slots[slotId].parts
@@ -343,6 +394,11 @@ function EquipData:getPartRefine(slotId, part)
return 0
end
+function EquipData:isRefineLvMax(slotId, part)
+ local lv = self:getPartRefine(slotId, part)
+ return lv >= #self:getRefineConfig()
+end
+
-- 精炼成功概率
function EquipData:getPartRefineFailPro(slotId, part)
local parts = self.slots[slotId].parts
@@ -351,33 +407,65 @@ function EquipData:getPartRefineFailPro(slotId, part)
if partInfo then
local cfgRefine = self:getRefineConfig(partInfo.refine + 1)
if cfgRefine then
- return (cfgRefine.base_chance + partInfo.refine_fail * cfgRefine.chance_fail) / GConst.DEFAULT_FACTOR
+ return (cfgRefine.base_chance + partInfo.refine_fail * cfgRefine.chance_fail) / 100
end
end
end
return 0
end
+function EquipData:onRefineSuccess(soltId, part, info)
+ local offset = 0
+ local refine = self:getPartRefine(soltId, part)
+ if refine < info.refine then
+ local refine = self.slots[soltId].parts[part].refine
+ self.slots[soltId].parts[part].refine = refine + 1
+ self.slots[soltId].parts[part].refine_fail = 0
+ offset = offset + 1
+ -- self:addPlayEffectParts(part)
+ self:setDirtyRefineSuccess()
+ else
+ local fail = self.slots[soltId].parts[part].refine_fail
+ self.slots[soltId].parts[part].refine_fail = fail + 1
+ self:setDirtyRefineFail()
+ end
+end
+
+-- function EquipData:addPlayEffectParts(part)
+-- if self.lvUpSuccess == nil then
+-- self.lvUpSuccess = {}
+-- end
+-- table.insert(self.lvUpSuccess, part)
+-- end
+-- function EquipData:getPlayEffectParts()
+-- return table.refCopy(self.lvUpSuccess or {})
+-- end
+-- function EquipData:clearPlayEffectParts()
+-- self.lvUpSuccess = {}
+-- end
+--@endregion
+
+--@region 套装 共鸣
function EquipData:getResonateList(type)
- if self.listResonate == nil then
- self.listResonate = {}
- local list = self:getResonateConfig()
- for i,v in pairs(list) do
- if self.listResonate[v.type] == nil then
- self.listResonate[v.type] = {}
- end
- v.id = i
- table.insert(self.listResonate[v.type], v)
- end
- for _,l in ipairs(self.listResonate) do
- table.sort(l, function (a, b)
- return a.id < b.id
- end)
- end
- end
- if self.listResonate[type] then
- return self.listResonate[type]
- end
+ if self.listResonate == nil then
+ self.listResonate = {}
+ local list = self:getResonateConfig()
+ for i,v in pairs(list) do
+ if self.listResonate[v.type] == nil then
+ self.listResonate[v.type] = {}
+ end
+ v.id = i
+ table.insert(self.listResonate[v.type], v)
+ end
+ for _,l in ipairs(self.listResonate) do
+ table.sort(l, function (a, b)
+ return a.id < b.id
+ end)
+ end
+ end
+ if self.listResonate[type] then
+ return self.listResonate[type]
+ end
end
function EquipData:getSlotAllAttr(slotId)
@@ -463,6 +551,11 @@ function EquipData:getSlotAllAttr(slotId)
return attr
end
+function EquipData:getResonateMaxLevel(type)
+ local list = self:getResonateList(type)
+ return list and #list or 0
+end
+
function EquipData:getResonateLevelValue(type, value, value2)
local list = self:getResonateList(type)
local lv = 0
@@ -545,25 +638,6 @@ function EquipData:getResonateLevel(type, slotId)
end
end
-function EquipData:getLevelCost(refine)
- local cfg = self:getLevelConfig(refine)
- if cfg then
- return cfg.cost
- end
-end
-function EquipData:getRefineCost(refine)
- local cfg = self:getRefineConfig(refine)
- if cfg then
- return cfg.cost
- end
-end
-function EquipData:getRefineNeedLevel(refine)
- local cfg = self:getRefineConfig(refine)
- if cfg then
- return cfg.equip_level
- end
-end
-
function EquipData:getEquipUseHero(uid)
local equip = self:getEquipByUid(uid)
local formation = DataManager.FormationData:getStageFormation()
@@ -582,17 +656,91 @@ function EquipData:getResolveReward(id)
return self:getConfig(id).decompose
end
--- 装备分解成功
+function EquipData:getAllEquipsSortInverted(part, qlt, star, use)
+ local list = self:getAllEquips(part, qlt, star, use)
+ return self:reverseTableInPlace(self:sortEquipsList(list))
+end
+
+function EquipData:reverseTableInPlace(t)
+ local i, j = 1, #t
+ while i < j do
+ t[i], t[j] = t[j], t[i] -- 交换元素
+ i = i + 1
+ j = j - 1
+ end
+ return t
+end
+
function EquipData:onResolveSuccess(uids)
- if EDITOR_MODE then
- Logger.logHighlight("装备分解")
- Logger.printTable(uids)
+ for i, uid in ipairs(uids) do
+ if self.allEquips[uid] then
+ self.allEquips[uid] = nil
+ -- self.allEquipsCount = self.allEquipsCount - 1
+ end
+ end
+ self:setDirtyResolve()
+ self:setDirty()
+end
+
+function EquipData:getLowestFiveGradeEquips()
+ -- 1. 使用三重结构避免重复
+ local gradeMap = {} -- { [qlt] = { [star] = {equips} } }
+ local gradeSet = {} -- 用于去重 { ["qlt-star"] = true }
+ local gradeList = {} -- 最终排序列表
+
+ for _, equip in pairs(self.allEquips) do
+ local qlt = equip:getQlt()
+ local star = equip:getStar()
+ local key = qlt.."-"..star -- 去重key
+
+ -- 初始化数据结构
+ if not gradeMap[qlt] then
+ gradeMap[qlt] = {}
+ end
+ if not gradeMap[qlt][star] then
+ gradeMap[qlt][star] = {equips = {}}
+
+ -- 只有首次遇到该组合时才加入排序列表
+ if not gradeSet[key] then
+ gradeSet[key] = true
+ table.insert(gradeList, {qlt = qlt, star = star})
+ end
+ end
+
+ table.insert(gradeMap[qlt][star].equips, equip)
end
- for i, id in pairs(uids) do
- self.allEquips[id] = nil
+ -- 2. 排序(保持不变)
+ table.sort(gradeList, function(a, b)
+ return a.qlt < b.qlt or (a.qlt == b.qlt and a.star < b.star)
+ end)
+
+ -- 3. 构建结果
+ local gradeGroups = {}
+ local allEquips = {}
+ for i = 1, math.min(5, #gradeList) do
+ local qlt = gradeList[i].qlt
+ local star = gradeList[i].star
+ local validEquips = {}
+
+ -- 筛选未使用的装备
+ for _, equip in ipairs(gradeMap[qlt][star].equips) do
+ if not self:getEquipUseHero(equip:getUid()) then
+ table.insert(validEquips, equip)
+ table.insert(allEquips, equip)
+ end
+ end
+
+ -- 只有存在有效装备时才加入结果
+ if #validEquips > 0 then
+ table.insert(gradeGroups, {
+ qlt = qlt,
+ star = star,
+ equips = validEquips
+ })
+ end
end
- self:setDirty()
+ return gradeGroups, allEquips
end
--@endregion
diff --git a/lua/app/userdata/equip/equip_entity.lua b/lua/app/userdata/equip/equip_entity.lua
index a4ac4594..d7f4d2b4 100644
--- a/lua/app/userdata/equip/equip_entity.lua
+++ b/lua/app/userdata/equip/equip_entity.lua
@@ -184,6 +184,9 @@ end
--@region 数据
function EquipEntity:getPartLv(slotId)
+ if not slotId then
+ return 0
+ end
return DataManager.EquipData:getPartLv(slotId, self:getPart())
end