c1_lua/lua/app/module/equip/equip_manager.lua
2025-10-30 20:12:43 +08:00

209 lines
6.9 KiB
Lua

local EquipManager = class("EquipManager", BaseModule)
function EquipManager:showEquipListUI(heroEntity, part)
UIManager:showUI("app/ui/equip/equip_list_ui", {heroEntity = heroEntity, part = part})
end
function EquipManager:showEquipGrowthUI(slotId, part)
UIManager:showUI("app/ui/equip/equip_growth_ui", {slotId = slotId, part = part})
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: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, attrs, attrNexts)
local params = {
type = type,
lvNew = lvNew,
attrs = attrs,
attrNexts = attrNexts,
}
UIManager:showUI("app/ui/equip/equip_get_resonate_ui", params)
end
--@region 协议
-- 装备穿戴
function EquipManager:onEquipWearReq(slotId, ids)
if table.nums(ids) <= 0 then
return
end
local params = {}
params.slot = slotId
params.ids = ids
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, attrs, attrNexts = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.QLT, result.reqData.slot)
DataManager.EquipData:onWearSuccess(result.reqData.slot, result.reqData.ids)
DataManager.HeroData:setAllHeroesDitry()
DataManager.HeroData:setDirty()
DataManager.HeroData:calcPower()
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, attrs, attrNexts)
-- 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, attrs, attrNexts = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.LV_UP, result.reqData.slot)
DataManager.EquipData:onUpgradeSuccess(result.reqData.slot, result.upgraded)
DataManager.HeroData:setAllHeroesDitry()
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:showEquipGetResonateUI(GConst.EquipConst.RESONATE_PAGE.LV_UP, lvNew, attrs, attrNexts)
-- 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, attrs, attrNexts = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.REFINE, result.reqData.slot)
DataManager.EquipData:onRefineSuccess(result.reqData.slot, result.reqData.part, result.part)
DataManager.HeroData:setAllHeroesDitry()
DataManager.HeroData:setDirty()
DataManager.HeroData:calcPower()
local lvNew = DataManager.EquipData:getResonateLevel(GConst.EquipConst.RESONATE_PAGE.REFINE, result.reqData.slot)
if lvOld < lvNew then
self:showEquipGetResonateUI(GConst.EquipConst.RESONATE_PAGE.REFINE, lvNew, attrs, attrNexts)
-- 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
--@region 上报
local EVENT_NAME_EQUIP_OPT = "client_equip_opt"
BIReport.EQUIP_OP_TYPE = {
GET = "Get",
WEAR = "Wear",
LEVEL_UP = "LevelUp",
REFINE_UP = "RefineUp",
RESOLVE = "Resolve",
}
-- 装备
function BIReport:postEquipWearOpt(optType, seat, list)
local str_list = ""
for _, equipId in ipairs(list) do
str_list = str_list .. equipId .. ";"
end
local args = {
opt_type = optType,
seat = seat,
wear_equips = str_list,
seat_data = DataManager.EquipData:getSeatDataString(),
}
self:report(EVENT_NAME_EQUIP_OPT, args)
end
function BIReport:postEquipLvUpOpt(optType, seat, parts)
local strData = ""
for _, part in ipairs(parts) do
strData = strData .. part .. ";"
end
local args = {
opt_type = optType,
seat = seat,
part = strData,
seat_data = DataManager.EquipData:getSeatDataString(),
}
self:report(EVENT_NAME_EQUIP_OPT, args)
end
function BIReport:postEquipResolveOpt(optType, resolveIds, rewards)
local args = {
opt_type = optType,
resolve_ids = resolveIds,
reward_str = rewards and GFunc.getRewardsStr(rewards) or nil,
seat_data = DataManager.EquipData:getSeatDataString(),
}
self:report(EVENT_NAME_EQUIP_OPT, args)
end
function BIReport:postEquipGet(equipId, cfgId, getType)
local equip = DataManager.EquipData:getEquipByUid(equipId)
local args = {
opt_type = BIReport.EQUIP_OP_TYPE.GET,
equip_id = equipId,
equip_cfg_id = cfgId,
type = getType,
}
if equip then
args.equip_part = equip:getPart()
args.equip_qlt = equip:getQlt()
end
self:report(EVENT_NAME_EQUIP_OPT, args)
end
--@endregion
return EquipManager