slot0 = class("ShipExpItemUsagePage", import("...base.BaseSubView"))
function slot0.getUIName(slot0)
return "ShipExpItemUsagePage"
end
function slot0.OnLoaded(slot0)
slot0.backBtn = slot0:findTF("frame/top/btnBack")
slot0.confirmBtn = slot0:findTF("frame/buttons/confirm")
slot0.recomBtn = slot0:findTF("frame/buttons/recom")
slot0.clearBtn = slot0:findTF("frame/buttons/clear")
slot0.levelTxt = slot0:findTF("frame/content/level/Text"):GetComponent(typeof(Text))
slot0.expTxt = slot0:findTF("frame/content/level/exp"):GetComponent(typeof(Text))
slot0.currentProgress = slot0:findTF("frame/content/level/y"):GetComponent(typeof(Slider))
slot0.tipProgress = slot0:findTF("frame/content/level/w"):GetComponent(typeof(Slider))
slot0.previewProgress = slot0:findTF("frame/content/level/g"):GetComponent(typeof(Slider))
slot0.itemIds = slot0:GetAllItemIDs()
if #slot0.itemIds <= 3 then
slot0.uiItemList = UIItemList.New(slot0:findTF("frame/content/items"), slot0:findTF("frame/content/items/tpl"))
else
slot0.uiItemList = UIItemList.New(slot0:findTF("frame/content/scrollrect/content"), slot0:findTF("frame/content/items/tpl"))
end
setActive(slot0:findTF("frame/content/items"), slot1)
setActive(slot0:findTF("frame/content/scrollrect"), not slot1)
setText(slot0:findTF("frame/top/bg/infomation/title"), i18n("ship_exp_item_title"))
setText(slot0:findTF("frame/content/label"), i18n("coures_level_tip"))
setText(slot0.confirmBtn:Find("pic"), i18n("ship_exp_item_label_confirm"))
setText(slot0.recomBtn:Find("pic"), i18n("ship_exp_item_label_recom"))
setText(slot0.clearBtn:Find("pic"), i18n("ship_exp_item_label_clear"))
end
function slot0.OnInit(slot0)
slot0.cards = {}
onButton(slot0, slot0._tf, function ()
uv0:Hide()
end, SFX_CANCEL)
onButton(slot0, slot0.backBtn, function ()
uv0:Hide()
end, SFX_CANCEL)
onButton(slot0, slot0.recomBtn, function ()
triggerButton(uv0.clearBtn)
for slot4, slot5 in pairs(uv0.cards) do
slot5.value = uv0:Recommand()[slot5.item.id] or 0
slot5:UpdateValue()
end
end, SFX_PANEL)
onButton(slot0, slot0.clearBtn, function ()
for slot3, slot4 in pairs(uv0.cards) do
slot4.value = 0
slot4:UpdateValue()
end
end, SFX_PANEL)
onButton(slot0, slot0.confirmBtn, function ()
if _.all(_.values(uv0.itemCnts), function (slot0)
return slot0 == 0
end) then
pg.TipsMgr.GetInstance():ShowTips(i18n("ship_remould_no_material"))
return
end
function slot0(slot0)
uv0:emit(ShipMainMediator.ON_ADD_SHIP_EXP, uv0.shipVO.id, uv0.itemCnts)
if slot0 then
uv0:Hide()
else
uv0:Flush(uv0.shipVO)
end
end
slot2 = Clone(uv0.shipVO)
slot3 = slot2:getMaxLevel()
slot2.exp = slot2.exp + uv0:GetAdditionExp()
slot4 = false
while slot2:canLevelUp() do
slot2.exp = slot2.exp - slot2:getLevelExpConfig().exp_interval
slot2.level = math.min(slot2.level + 1, slot3)
slot4 = true
end
slot5 = slot2.maxLevel <= slot2.level
if slot4 and (slot2.maxLevel == slot2.level and slot2.exp > 0 or slot2.maxLevel < slot2.level) then
pg.MsgboxMgr.GetInstance():ShowMsgBox({
content = i18n("coures_exp_overflow_tip", slot2.exp),
onYes = function ()
uv0(uv1)
end
})
else
slot0(slot5)
end
end, SFX_PANEL)
slot0.uiItemList:make(function (slot0, slot1, slot2)
if slot0 == UIItemList.EventUpdate then
uv0:UpdateItemPanel(uv0.itemIds[slot1 + 1], slot2)
end
end)
end
function slot0.GetItem(slot0, slot1)
return getProxy(BagProxy):getItemById(slot1) or Item.New({
count = 0,
type = DROP_TYPE_ITEM,
id = slot1
})
end
function slot0.Recommand(slot0)
slot2 = Clone(slot0.shipVO)
slot3 = slot0:GetAllItemIDs()
table.sort(slot3, function (slot0, slot1)
return slot1 < slot0
end)
slot4 = pg.item_data_template
for slot8, slot9 in ipairs(slot3) do
for slot16 = 1, slot0:GetItem(slot9).count do
if slot8 ~= #slot3 and slot0:PreCalcExpOverFlow(slot2, tonumber(slot4[slot9].usage_arg), tonumber(slot8 + 1 > #slot3 and 0 or slot4[slot3[slot8 + 1]].usage_arg)) then
break
else
slot2:addExp(tonumber(slot11))
slot1[slot9] = slot1[slot9] + 1
if slot2.maxLevel == slot2.level then
return slot1
end
end
end
end
return {
[slot9] = 0
}
end
function slot0.PreCalcExpOverFlow(slot0, slot1, slot2, slot3)
slot4 = slot1.exp
slot5 = slot1.level
slot1.exp = slot1.exp + slot2
slot6 = slot1:getMaxLevel()
while slot1:canLevelUp() do
slot1.exp = slot1.exp - slot1:getLevelExpConfig().exp_interval
slot1.level = math.min(slot1.level + 1, slot6)
end
slot1.exp = slot4
slot1.level = slot5
return slot6 <= slot1.level and slot3 < slot1.exp
end
function slot0.GetAllItemIDs(slot0)
slot2 = {}
for slot6, slot7 in ipairs(pg.gameset.ship_exp_books.description) do
if pg.item_data_statistics[slot7] then
table.insert(slot2, slot7)
end
end
return slot2
end
function slot0.Show(slot0, slot1)
pg.UIMgr.GetInstance():BlurPanel(slot0._tf)
uv0.super.Show(slot0)
slot0:Flush(slot1)
end
function slot0.Flush(slot0, slot1)
slot0.itemCnts = {}
slot0.shipVO = slot1
slot0:InitItems()
slot0:UpdateLevelInfo()
end
function slot0.Hide(slot0)
pg.UIMgr.GetInstance():UnblurPanel(slot0._tf, slot0._parentTf)
uv0.super.Hide(slot0)
end
function slot0.InitItems(slot0)
table.sort(slot0.itemIds, function (slot0, slot1)
return slot0 < slot1
end)
slot0.uiItemList:align(#slot0.itemIds)
end
function slot0.UpdateItemPanel(slot0, slot1, slot2)
if not slot0.cards[slot2] then
slot3 = ShipExpItemUsageCard.New(slot2)
slot3:SetCallBack(function (slot0, slot1, slot2, slot3)
uv0:OnAddItem(slot0, slot1, slot2, slot3)
end)
slot0.cards[slot2] = slot3
end
slot3:Update(slot1)
end
function slot0.OnAddItem(slot0, slot1, slot2, slot3, slot4)
if slot0.shipVO.maxLevel == slot0.shipVO.level then
slot1:ForceUpdateValue(slot0.itemCnts[slot2])
pg.TipsMgr.GetInstance():ShowTips(i18n("coures_tip_exceeded_lv"))
return
end
slot5 = Clone(slot0.shipVO)
for slot10, slot11 in pairs(slot0.itemCnts) do
if slot10 ~= slot2 then
slot6 = 0 + tonumber(pg.item_data_template[slot10].usage_arg) * slot11
end
end
slot5:addExp(slot6)
slot7 = pg.item_data_template[slot2].usage_arg
slot8 = 0
if slot4 then
slot8 = slot3
elseif slot5.level ~= slot5.maxLevel then
for slot12 = 1, slot3 do
slot5:addExp(tonumber(slot7))
slot8 = slot8 + 1
if slot5.maxLevel == slot5.level then
break
end
end
end
if slot3 > (slot0.itemCnts[slot2] or 0) then
slot8 = math.max(slot0.itemCnts[slot2] or 0, slot8)
end
if slot3 ~= slot8 then
slot1:ForceUpdateValue(slot8)
slot3 = slot8
end
slot0.itemCnts[slot2] = slot3
slot0:UpdateLevelInfo()
end
function slot0.GetTempShipVO(slot0, slot1, slot2)
if slot2 > 0 then
slot3 = Clone(slot1)
slot3:addExp(slot2)
return slot3
end
return slot1
end
function slot0.GetAdditionExp(slot0)
for slot5, slot6 in pairs(slot0.itemCnts) do
slot1 = 0 + tonumber(pg.item_data_template[slot5].usage_arg) * slot6
end
return slot1
end
function slot0.UpdateLevelInfo(slot0)
slot1 = slot0.shipVO
slot0.levelTxt.text = slot1.level .. (slot0:GetTempShipVO(slot1, slot0:GetAdditionExp()).level - slot1.level <= 0 and (slot2 > 0 and "+0" or "") or "+" .. slot4 .. "")
slot7 = slot1:getLevelExpConfig().exp_interval
slot0.expTxt.text = string.format("%d(+%d)/%d", slot1.exp, COLOR_GREEN, slot2, slot7)
slot0.currentProgress.value = slot1.exp / slot7
slot0.tipProgress.value = slot2 <= 0 and slot8 or slot8 + 0.003
slot0.previewProgress.value = slot2 <= 0 and 0 or slot4 >= 1 and 1 or slot3.exp / slot7
end
function slot0.OnDestroy(slot0)
for slot4, slot5 in pairs(slot0.cards) do
slot5:Dispose()
end
slot0.cards = nil
end
return slot0