This commit is contained in:
xiekaidong 2023-05-19 20:00:12 +08:00
commit 1718c96004
30 changed files with 2029 additions and 31 deletions

View File

@ -13,6 +13,7 @@ function DataManager:init()
self:initManager("BattleData", "app/userdata/battle/battle_data")
self:initManager("FormationData", "app/userdata/formation/formation_data")
self:initManager("TutorialData", "app/userdata/tutorial/tutorial_data")
self:initManager("MailData", "app/userdata/mail/mail_data")
self:initManager("ActivityData", "app/userdata/activity/activity_data")
self:initManager("GodPigData", "app/userdata/activity/god_pig/god_pig_data")
self:initManager("BountyData", "app/userdata/bounty/bounty_data")
@ -82,6 +83,7 @@ function DataManager:clear()
self.BagData:clear()
self.FormationData:clear()
self.ActivityData:clear()
self.MailData:clear()
self.GodPigData:clear()
self.BountyData:clear()
self.DailyTaskData:clear()
@ -110,6 +112,7 @@ function DataManager:initWithServerData(data)
self.BagData:init(data.bag)
self.FormationData:init(data.fight_info)
self.TutorialData:init(data.guide)
self.MailData:init(data.mail_info)
self.ActivityData:init()
self.GodPigData:init()
self.BountyData:init(data.bounty)

View File

@ -37,6 +37,8 @@ local MODULE_PATHS = {
BountyManager = "app/module/bounty/bounty_manager",
-- 商店
ShopManager = "app/module/shop/shop_manager",
-- 邮件
MailManager = "app/module/mail/mail_manager",
}
-- 这里的key对应func_open里的id

File diff suppressed because it is too large Load Diff

View File

@ -111,6 +111,7 @@ local LocalizationGlobalConst =
IDLE_DROP_DESC_3 = "IDLE_DROP_DESC_3",
STR_FREE = "STR_FREE",
TODAY_REMAIN_TIMES = "TODAY_REMAIN_TIMES",
BUY_ENERGY = "BUY_ENERGY",
}
return LocalizationGlobalConst

View File

@ -206,7 +206,6 @@ local skill = {
["fx_target_delay"]=900
},
[1200121]={
["energy"]=10,
["position"]=1,
["effect_type"]=2,
["trigger"]=3,
@ -222,7 +221,6 @@ local skill = {
["skill_position"]=1
},
[1200122]={
["energy"]=10,
["position"]=1,
["effect_type"]=2,
["trigger"]=3,
@ -243,6 +241,38 @@ local skill = {
["obj"]=1,
["skill_position"]=1
},
[1200123]={
["position"]=1,
["buff_condition"]={
{
{
["type"]="state",
["attr"]="normal_attack_dec",
["op"]=">",
["v"]=0,
["side"]=2
}
}
},
["condition_rel"]={
{
1,
1
}
},
["effect_type"]=2,
["trigger"]=7,
["effect"]={
{
["type"]="dmg_addition_blue_add",
["num"]=5000,
["ratio"]=10000,
["round"]=1
}
},
["obj"]=1,
["skill_position"]=2
},
[1300110]={
["position"]=1,
["effect_type"]=1,
@ -3089,6 +3119,23 @@ local skill = {
},
[4300121]={
["position"]=4,
["buff_condition"]={
{
{
["type"]="state",
["attr"]="burn",
["op"]=">",
["v"]=0,
["side"]=2
}
}
},
["condition_rel"]={
{
1,
1
}
},
["effect_type"]=2,
["trigger"]=7,
["effect"]={
@ -5881,6 +5928,6 @@ local skill = {
}
}
local config = {
data=skill,count=276
data=skill,count=277
}
return config

View File

@ -700,11 +700,16 @@ local skill_rogue = {
["limit_times"]=1,
["weight"]=3000,
["qlt"]=3,
["type"]=1,
["parameter"]={
1200121
},
["type"]=12,
["skill_position"]=1,
["effect"]={
{
["type"]="add_skill",
["num"]=1200123,
["ratio"]=10000,
["round"]=1
}
},
["icon"]="44"
},
[1200104]={

View File

@ -111,6 +111,7 @@ local localization_global =
["IDLE_DROP_DESC_3"] = "立刻获得{0}小时挂机奖励",
["STR_FREE"] = "免费",
["TODAY_REMAIN_TIMES"] = "今日剩余{0}次",
["BUY_ENERGY"] = "购买体力",
}
return localization_global

View File

@ -6,8 +6,8 @@ local task = {
{
["type"]=1,
["type_for_nothing"]="Vw==",
["id"]=16,
["id_for_nothing"]="Vw4=",
["id"]=17,
["id_for_nothing"]="Vw8=",
["num"]=1,
["num_for_nothing"]="Vw=="
}
@ -21,8 +21,8 @@ local task = {
{
["type"]=1,
["type_for_nothing"]="Vw==",
["id"]=17,
["id_for_nothing"]="Vw8=",
["id"]=16,
["id_for_nothing"]="Vw4=",
["num"]=1,
["num_for_nothing"]="Vw=="
}

View File

@ -12,6 +12,7 @@ local CONST_PATHS = {
BattleConst = "app/module/battle/battle_const",
HeroConst = "app/module/hero/hero_const",
FormationConst = "app/module/formation/formation_const",
MailConst = "app/module/mail/mail_const",
}
if EDITOR_MODE then

8
lua/app/module/mail.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 085251417eef56a4a8431c13b3392fd6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,16 @@
local MailConst = {}
MailConst.MAIL_TYPE = {
CUSTOM = 0, -- 自定义邮件,需要读取
AD = 1, -- 广告邮件,直接看广告领取
NORMAL = 2, -- 普通邮件,直接领取
READ = 3, -- 读取邮件
}
MailConst.MAIL_STATE = {
NOT_READ = 0,
READED = 1,
RECEIVED = 2
}
return MailConst

View File

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

View File

@ -0,0 +1,135 @@
local MailManager = class("MailManager", BaseModule)
function MailManager:showMailUI()
UIManager:showUI("app/ui/mail/mail_ui")
self:getMailList()
end
function MailManager:getMailList(force)
if not force and not DataManager.MailData:getNeedGetNewMail() then
return
end
self:sendMessage(ProtoMsgType.FromMsgEnum.MailListReq, {}, {}, self.getMailListFinish)
end
function MailManager:getMailListFinish(result)
if result.status == 0 then
DataManager.MailData:init(result)
end
end
-- 触发服务器时间相关邮件
function MailManager:getTriggeredTimeMail()
self:sendMessage(ProtoMsgType.FromMsgEnum.MailCycleReq, {}, {}, self.getTriggeredTimeMailFinish)
end
function MailManager:getTriggeredTimeMailFinish(result)
if result.status == 0 then
end
end
function MailManager:claimMail(ids)
if not ids then
for mailId, entity in pairs(DataManager.MailData:getMails()) do
if entity:getIsNormalMail() and entity:canClaim() then
if not ids then
ids = {}
end
table.insert(ids, mailId)
end
end
else
for _, id in ipairs(ids) do
local entity = DataManager.MailData:getMails()[id]
if not entity or not entity:canClaim() then
return
end
end
end
if not ids then
return
end
local reqData = {ids = ids}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailExtractReq, reqData, {}, self.claimMailFinish, BIReport.ITEM_GET_TYPE.MAIL)
end
function MailManager:claimMailFinish(result)
if result.status == 0 then
GFunc.showRewardBox(result.rewards)
local needDeleteIds = {}
for _, id in ipairs(result.ids) do
local entity = DataManager.MailData:getMails()[id]
entity:receivedThis()
if entity:getIsAdMail() or entity:getIsNormalMail() then
table.insert(needDeleteIds, id)
end
BIReport:postMailClaim(id)
end
if needDeleteIds[1] then
DataManager.MailData:deleteMail(needDeleteIds) -- 提前删除邮件,提升体验
self:deleteMail(needDeleteIds)
end
DataManager.MailData:refreshRedPoint()
DataManager.MailData:setDirty()
end
end
function MailManager:deleteMail(ids)
if not ids then
for mailId, entity in pairs(DataManager.MailData:getMails()) do
if entity:canDelete() then
if not ids then
ids = {}
end
table.insert(ids, mailId)
end
end
end
if not ids or not ids[1] then
return
end
local reqData = {ids = ids}
local rspData = {ids = ids}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailDeleteReq, reqData, rspData, self.deleteMailFinish)
end
function MailManager:deleteMailFinish(result)
if result.status then
DataManager.MailData:deleteMail(result.ids)
end
end
function MailManager:readMail(id)
local entity = DataManager.MailData:getMails()[id]
if not entity:notRead() then
UIManager:showUI("app/ui/mail/mail_detail_ui", {id = id})
return
end
local reqData = {ids = {id}}
local rspData = {ids = {id}}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailReadReq, reqData, rspData, self.readMailFinish)
end
function MailManager:readMailFinish(result)
if result.status == 0 then
for _, id in ipairs(result.ids) do
DataManager.MailData:setMailRead(id)
BIReport:postMailOpen(id)
end
UIManager:showUI("app/ui/mail/mail_detail_ui", {id = result.ids[1]})
end
end
function MailManager:needUpdateMail()
DataManager.MailData:setNeedGetNewMail(true)
DataManager.MailData:setDirty()
end
return MailManager

View File

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

View File

@ -14,29 +14,25 @@ end
function BuyVitUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
self.root:addClickListener(function()
self:closeUI()
end)
uiMap["buy_vit_ui.bg.close_btn"]:addClickListener(function()
self:closeUI()
end)
-- uiMap["buy_vit_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BUY_VIT_DESC_1))
uiMap["buy_vit_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BUY_ENERGY))
local constCfg = ConfigManager:getConfig("const")
local diamondReward = constCfg["stamina_diamond_buy"].reward
local adReward = constCfg["stamina_ad_buy"].reward
uiMap["buy_vit_ui.bg.cell_1.num_tx"]:setText("x" .. GFunc.getRewardNum(diamondReward))
uiMap["buy_vit_ui.bg.cell_2.num_tx"]:setText("x" .. GFunc.getRewardNum(adReward))
uiMap["buy_vit_ui.bg.cell_1.num_tx_1"]:setText("x" .. GFunc.getRewardNum(diamondReward))
uiMap["buy_vit_ui.bg.cell_2.num_tx_1"]:setText("x" .. GFunc.getRewardNum(adReward))
self.descTx1 = uiMap["buy_vit_ui.bg.cell_1.desc_tx"]
self.descTx2 = uiMap["buy_vit_ui.bg.cell_2.desc_tx"]
self.numTx1 = uiMap["buy_vit_ui.bg.cell_1.num_tx_1"]
self.numTx2 = uiMap["buy_vit_ui.bg.cell_2.num_tx_1"]
self.numTx1 = uiMap["buy_vit_ui.bg.cell_1.num_tx_2"]
self.numTx2 = uiMap["buy_vit_ui.bg.cell_2.num_tx_2"]
self.checkImg1 = uiMap["buy_vit_ui.bg.cell_1.check_img"]
self.checkImg2 = uiMap["buy_vit_ui.bg.cell_2.check_img"]
self.iconImg1 = uiMap["buy_vit_ui.bg.cell_1.icon_img_1"]
self.iconImg2 = uiMap["buy_vit_ui.bg.cell_2.icon_img_1"]
self.iconImg1 = uiMap["buy_vit_ui.bg.cell_1.icon_img"]
self.iconImg2 = uiMap["buy_vit_ui.bg.cell_2.icon_img"]
self.buyBtn1 = uiMap["buy_vit_ui.bg.cell_1"]
self.buyBtn2 = uiMap["buy_vit_ui.bg.cell_2"]
@ -84,9 +80,6 @@ function BuyVitUI:onRefresh()
self.checkImg2:setVisible(false)
self.iconImg2:setVisible(true)
self.numTx2:setVisible(true)
self.iconImg2:setSprite(GConst.ATLAS_PATH.COMMON, "common_ad", function ()
self.iconImg2:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end)
else
self.buyBtn2:setTouchEnable(false)
self.checkImg2:setVisible(true)
@ -94,13 +87,18 @@ function BuyVitUI:onRefresh()
self.numTx2:setVisible(false)
end
self.descTx1:setText(I18N:getGlobalText(I18N.GlobalConst.BUY_VIT_DESC_2, maxGemBuy - gemBuyCount))
self.descTx2:setText(I18N:getGlobalText(I18N.GlobalConst.BUY_VIT_DESC_2, maxAdBuy - adBuyCount))
self.descTx1:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, maxGemBuy - gemBuyCount))
self.descTx2:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, maxAdBuy - adBuyCount))
local constCfg = ConfigManager:getConfig("const")
local diamondCost = constCfg["stamina_diamond_cost"].reward
self.numTx1:setText(tostring(GFunc.getRewardNum(diamondCost)))
self.numTx2:setText((maxAdBuy - adBuyCount) .. "/" .. GFunc.getConstIntValue("stamina_ad_times"))
if not self.adjustIconAndNum then
self.adjustIconAndNum = true
GFunc.centerImgAndTx(self.iconImg1, self.numTx1)
GFunc.centerImgAndTx(self.iconImg2, self.numTx2)
end
end
return BuyVitUI

View File

@ -18,6 +18,7 @@ function SelectOtherBtnUI:onLoadRootComplete()
end)
self.uiMap["select_other_btn_ui.bg.mail_btn"]:addClickListener(function()
self:closeUI()
ModuleManager.MailManager:showMailUI()
end)
self.uiMap["select_other_btn_ui.bg.mail_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.MAIL_NAME))

8
lua/app/ui/mail.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7f38a3c4920f0d6498585ad8264181f1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9e0046c59ad9bbc43933e1d2dca2d905
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,91 @@
local MailCell = class("MailCell", BaseCell)
local TITLE_ICON = {
[GConst.MailConst.MAIL_STATE.NOT_READ] = "mail_dec_2",
[GConst.MailConst.MAIL_STATE.READED] = "mail_dec_3",
[GConst.MailConst.MAIL_STATE.RECEIVED] = "mail_dec_3",
}
local AD_TITLE_ICON = "mail_dec_1"
function MailCell:refresh(entity)
if not entity then
return
end
local uiMap = self:getUIMap()
local normalNode = uiMap["mail_cell.bg_normal"]
local adNode = uiMap["mail_cell.bg_ad"]
local readNode = uiMap["mail_cell.bg_read"]
if entity:getMailType() == GConst.MailConst.MAIL_TYPE.CUSTOM then
normalNode:setVisible(false)
adNode:setVisible(false)
readNode:setVisible(true)
elseif entity:getMailType() == GConst.MailConst.MAIL_TYPE.AD then
normalNode:setVisible(false)
adNode:setVisible(true)
readNode:setVisible(false)
elseif entity:getMailType() == GConst.MailConst.MAIL_TYPE.NORMAL then
normalNode:setVisible(true)
adNode:setVisible(false)
readNode:setVisible(false)
elseif entity:getMailType() == GConst.MailConst.MAIL_TYPE.READ then
normalNode:setVisible(false)
adNode:setVisible(false)
readNode:setVisible(true)
end
GFunc.setAdsSprite(uiMap["mail_cell.bg_ad.claim_btn.ad"])
uiMap["mail_cell.bg_normal.claim_btn.tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM))
uiMap["mail_cell.bg_read.claim_btn.tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_READ))
uiMap["mail_cell.bg_normal.claim_btn"]:addClickListener(function()
if entity:canClaim() then
ModuleManager.MailManager:claimMail({entity:getId()})
end
end)
uiMap["mail_cell.bg_ad.claim_btn"]:addClickListener(function()
if entity:canClaim() then
SDKManager:showFullScreenAds(BIReport.ADS_CLICK_TYPE.MAIL, function()
ModuleManager.MailManager:claimMail({entity:getId()})
end)
end
end)
uiMap["mail_cell.bg_read.claim_btn"]:addClickListener(function()
ModuleManager.MailManager:readMail(entity:getId())
end)
local titleIcon = uiMap["mail_cell.title_icon"]
local icon = TITLE_ICON[entity:getState()] or TITLE_ICON[GConst.MailConst.MAIL_STATE.NOT_READ]
if entity:notRead() and entity:getMailType() == GConst.MailConst.MAIL_TYPE.AD then
icon = AD_TITLE_ICON
end
if self.icon ~= icon then
titleIcon:setSprite(GConst.ATLAS_PATH.UI_MAIL, icon)
self.icon = icon
end
uiMap["mail_cell.new"]:setVisible(entity:showNew())
uiMap["mail_cell.desc"]:setText(entity:getMailName())
uiMap["mail_cell.time"]:setText(entity:getRemainCdStr())
local rewardBg = uiMap["mail_cell.reward_bg"]
local mask = uiMap["mail_cell.reward_bg.mask"]
if not self.rewardCell then
self.rewardCell = CellManager:addCellComp(uiMap["mail_cell.reward_cell"], GConst.TYPEOF_LUA_CLASS.REWARD_CELL)
end
local rewards = entity:getRewards()
local showCheck = entity:isReceived()
if rewards[2] then
rewardBg:setVisible(true)
self.rewardCell:getBaseObject():setVisible(false)
mask:setVisible(showCheck)
else
rewardBg:setVisible(false)
if entity:haveReward() then
self.rewardCell:getBaseObject():setVisible(true, 0.7)
self.rewardCell:refreshByConfig(rewards[1], showCheck, showCheck)
else
self.rewardCell:getBaseObject():setVisible(false)
end
end
end
return MailCell

View File

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

View File

@ -0,0 +1,99 @@
local MailDetailUI = class("MailDetailUI", BaseUI)
function MailDetailUI:isFullScreen()
return false
end
function MailDetailUI:getPrefabPath()
return "assets/prefabs/ui/mail/mail_detail_ui.prefab"
end
function MailDetailUI:ctor(params)
self.entity = DataManager.MailData:getMails()[params.id]
end
function MailDetailUI:onLoadRootComplete()
self:_display()
self:_addListeners()
self:_bind()
self.sid = self:scheduleGlobal(function()
self:updateTime()
end, 1)
self:updateTime()
end
function MailDetailUI:_display()
local uiMap = self.root:genAllChildren()
uiMap["mail_detail_ui.bg.btn_claimed.btn_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM))
uiMap["mail_detail_ui.bg.tx_1"]:setText(self.entity:getMailName())
uiMap["mail_detail_ui.bg.tx_4"]:setText(I18N:getGlobalText(I18N.GlobalConst.IDLE_TITLE2))
uiMap["mail_detail_ui.bg.btn_claimed"]:setActive(not self.entity:isReceived())
local content = uiMap["mail_detail_ui.bg.tx_3"]
content:setText(self.entity:getMailDesc())
content:setSizeDeltaY(content:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO).preferredHeight)
content:setAnchoredPositionY(0)
local haveReward = self.entity:haveReward()
uiMap["mail_detail_ui.bg.img_bg"]:setVisible(haveReward)
local contentScroll = uiMap["mail_detail_ui.bg.scrollrect"]
if haveReward then
contentScroll:setSizeDeltaY(180)
else
contentScroll:setSizeDeltaY(351)
end
self:refreshScrollRect()
end
function MailDetailUI:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["mail_detail_ui.bg.btn_claimed"]:addClickListener(function()
ModuleManager.MailManager:claimMail({self.entity:getId()})
end)
uiMap["mail_detail_ui.bg.btn_close"]:addClickListener(function()
self:closeUI()
end)
end
function MailDetailUI:_bind()
self:bind(DataManager.MailData, "isDirty", function()
local uiMap = self.root:genAllChildren()
uiMap["mail_detail_ui.bg.btn_claimed"]:setActive(not self.entity:isReceived())
self:refreshScrollRect()
end)
end
function MailDetailUI:refreshScrollRect()
if not self.entity then
return
end
if self.scrollRect then
self.scrollRect:updateAllCell()
return
end
local uiMap = self.root:genAllChildren()
local scrollView = uiMap["mail_detail_ui.bg.img_bg.scrollrect"]
self.scrollRect = scrollView:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRect:addInitCallback(function()
return GConst.TYPEOF_LUA_CLASS.REWARD_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refreshByConfig(self.entity:getRewards()[index], self.entity:isReceived(), self.entity:isReceived())
end)
self.scrollRect:clearCells()
self.scrollRect:refillCells(#self.entity:getRewards())
end
function MailDetailUI:updateTime()
local uiMap = self.root:genAllChildren()
uiMap["mail_detail_ui.bg.tx_2"]:setText(self.entity:getRemainCdStr())
end
return MailDetailUI

View File

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

129
lua/app/ui/mail/mail_ui.lua Normal file
View File

@ -0,0 +1,129 @@
local MailUI = class("MailUI", BaseUI)
local MAIL_CELL = "app/ui/mail/cell/mail_cell"
function MailUI:isFullScreen()
return false
end
function MailUI:getPrefabPath()
return "assets/prefabs/ui/mail/mail_ui.prefab"
end
function MailUI:ctor()
self.mailList = {}
end
function MailUI:onClose()
DataManager.MailData:setLastMailId()
end
function MailUI:dealData()
local list = {}
local count = 0
for id, entity in pairs(DataManager.MailData:getMails()) do
if not entity:isOver() then
table.insert(list, entity)
count = count + 1
end
end
table.sort(list, function(a, b)
local aCan = a:canDelete()
local bCan = b:canDelete()
if aCan == bCan then
local aCd = a:getRemainCd()
local bCd = b:getRemainCd()
if aCd == bCd then
return a:getId() > b:getId()
else
return aCd < bCd
end
else
return not aCan
end
end)
if count ~= #self.mailList then
self.needRefills = true
end
self.mailList = list
end
function MailUI:onLoadRootComplete()
self:_display()
self:_addListeners()
self.sid = self:scheduleGlobal(function()
self:updateTime()
end, 1)
self:updateTime()
end
function MailUI:_display()
local uiMap = self.root:genAllChildren()
self.root:addClickListener(function()
self:closeUI()
end)
uiMap["mail_ui.bg.title_bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.MAIL_TITLE))
uiMap["mail_ui.bg.btn_delect.btn_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_DELETE_ALL))
uiMap["mail_ui.bg.btn_claimed.btn_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM_ALL))
local uiSpine1 = uiMap["mail_ui.ui_spine_1"]
local uiSpine2 = uiMap["mail_ui.ui_spine_2"]
uiSpine1:playAnimComplete("born", false, false, function ()
uiSpine1:playAnim("idle", true, false)
end)
uiSpine2:clearTrack()
uiSpine2:playAnimComplete("born", false, true, function ()
uiSpine2:playAnim("idle", true, false)
end)
end
function MailUI:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["mail_ui.bg.btn_close"]:addClickListener(function()
self:closeUI()
end)
uiMap["mail_ui.bg.btn_delect"]:addClickListener(function()
ModuleManager.MailManager:deleteMail()
end)
uiMap["mail_ui.bg.btn_claimed"]:addClickListener(function()
ModuleManager.MailManager:claimMail()
end)
end
function MailUI:refreshScrollRect()
if self.scrollRect then
if self.needRefills then
self.scrollRect:clearCells()
self.scrollRect:refillCells(#self.mailList)
else
self.scrollRect:updateAllCell()
end
self.needRefills = false
return
end
local uiMap = self.root:genAllChildren()
local scrollView = uiMap["mail_ui.bg.img_2.scrollrect"]
self.scrollRect = scrollView:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRect:addInitCallback(function()
return MAIL_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(self.mailList[index])
end)
self.scrollRect:clearCells()
self.scrollRect:refillCells(#self.mailList)
self.needRefills = false
end
function MailUI:updateTime()
self:dealData()
self:refreshScrollRect()
end
return MailUI

View File

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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b2f9edf752615204da2c3f31531c458e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,203 @@
local MailData = class("MailData", BaseData)
local MailEntity = "app/userdata/mail/mail_entity"
local TIME_TYPE = {
DAY = 1,
WEEK = 2,
MONTH = 3,
}
function MailData:ctor()
self.mails = {}
self.needGetNewMail = false
self.data.isDirty = false
self.data.redPoint = false
self.maxMailId = 0
end
function MailData:clear()
self.mails = {}
self.data.redPoint = false
self.lastMailId = nil
self.mailIsOpen = false
end
function MailData:init(data)
data = data or GConst.EMPTY_TABLE
self.mails = {}
self.needGetNewMail = false
self:addMails(data.mails)
self:updateRedPointCd()
DataManager:registerDataCd("MailData")
end
function MailData:updateRedPointCd()
self.needUpdateRedPointInfo = {}
local cfg = ConfigManager:getConfig("mail")
for i,v in ipairs(cfg) do
if v.time_type == TIME_TYPE.DAY then
for ii = 1, 7 do
self.needUpdateRedPointInfo[ii] = self.needUpdateRedPointInfo[ii] or {}
if #v.time_send == 3 then
local time = v.time_send[1] * 3600 + v.time_send[2] * 60 + v.time_send[3]
if not table.containValue(self.needUpdateRedPointInfo[ii], time) then
table.insert(self.needUpdateRedPointInfo[ii], time)
end
end
end
elseif v.time_type == TIME_TYPE.WEEK then
if #v.time_send == 4 then
local day = v.time_send[1]
self.needUpdateRedPointInfo[day] = self.needUpdateRedPointInfo[day] or {}
local time = v.time_send[2] * 3600 + v.time_send[3] * 60 + v.time_send[4]
if not table.containValue(self.needUpdateRedPointInfo[day], time) then
table.insert(self.needUpdateRedPointInfo[day], time)
end
end
elseif v.time_type == TIME_TYPE.MONTH then
--TODO 暂时没有 无数据格式
end
end
end
function MailData:updateCd()
local nowTime = Time:getServerTime()
local today = Time:getDayofWeek()
local times = self.needUpdateRedPointInfo[today] or {}
local curTime = nowTime % 86400
for i, v in ipairs(times) do
if v == curTime then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.TIME_TRIGGERED_NEW_EMAIL)
break
end
end
end
function MailData:addMails(mails)
if not mails then
return
end
for _, info in pairs(mails) do
local entity = require(MailEntity):create(info)
self.mails[info.id] = entity
if self.maxMailId < info.id then
self.maxMailId = info.id
end
end
self:setDirty()
self:refreshRedPoint()
end
function MailData:getMails()
return self.mails
end
function MailData:setDirty()
self.data.isDirty = not self.data.isDirty
end
function MailData:setMailReceived(id)
if not self.mails[id] then
return
end
self.mails[id]:receivedThis()
self:setDirty()
self:refreshRedPoint()
end
function MailData:setMailRead(id)
if not self.mails[id] then
return
end
self.mails[id]:readThis()
self:refreshRedPoint()
self:setDirty()
end
function MailData:deleteMail(ids)
if not ids then
return
end
for _, id in ipairs(ids) do
self.mails[id] = nil
end
self:setDirty()
end
function MailData:refreshRedPoint()
if self.needGetNewMail then
self.data.redPoint = true
self.isAdRedPoint = false
return
end
local reset = true
local haveNoAdRp = false
for id, entity in pairs(self.mails) do
if entity:canClaim() then
self.data.redPoint = true
if entity:getIsAdMail() then
if not haveNoAdRp then
self.isAdRedPoint = true
end
else
haveNoAdRp = true
self.isAdRedPoint = false
end
reset = false
end
end
if reset then
self.data.redPoint = false
self.isAdRedPoint = false
end
end
function MailData:getRedPoint()
return self.data.redPoint, self.isAdRedPoint
end
function MailData:setNeedGetNewMail(need)
self.needGetNewMail = need == true
if self.needGetNewMail then
self:refreshRedPoint()
end
end
function MailData:getNeedGetNewMail()
return self.needGetNewMail
end
function MailData:getLastMailId()
if not self.lastMailId then
self.lastMailId = LocalData:getLastMailId()
end
return self.lastMailId
end
function MailData:setLastMailId()
if not self.maxMailId or not self.lastMailId then
return
end
if self.lastMailId < self.maxMailId then
self.lastMailId = self.maxMailId
LocalData:setLastMailId(self.lastMailId)
end
end
function MailData:getIsOpen()
if not self.mailIsOpen then
self.mailIsOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.MAIL_OPEN, true)
end
return self.mailIsOpen
end
return MailData

View File

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

View File

@ -0,0 +1,169 @@
local MailEntity = class("MailEntity", BaseData)
function MailEntity:ctor(info)
info = info or GConst.EMPTY_TABLE
self.id = info.id or 0
self.createTime = GFunc.formatTimeStep(info.create_at)
self.mailExpire = GFunc.formatTimeStep(info.expire + info.create_at)
self.state = info.state or GConst.MailConst.MAIL_TYPE.NOT_READ
self.mailType = GConst.MailConst.MAIL_TYPE.CUSTOM
self.mailCfgId = nil -- 可能为空
self.title = json.decode(info.title or "{}")
self.body = json.decode(info.body or "{}")
self.rewards = info.rewards or {}
self.data.isDirty = false
if self.title.key then
local cfg = ConfigManager:getConfig("mail")[self.title.key]
if cfg then
self.mailCfgId = self.title.key
self.mailType = cfg.type
end
end
end
function MailEntity:setDirty()
self.data.isDirty = not self.data.isDirty
end
function MailEntity:getId()
return self.id
end
function MailEntity:notRead()
return self.state == GConst.MailConst.MAIL_STATE.NOT_READ
end
function MailEntity:isRead()
return self.state == GConst.MailConst.MAIL_STATE.READED
end
function MailEntity:readThis()
if self:isReceived() then
return
end
self.state = GConst.MailConst.MAIL_STATE.READED
end
function MailEntity:isReceived()
return self.state == GConst.MailConst.MAIL_STATE.RECEIVED
end
function MailEntity:receivedThis()
self.state = GConst.MailConst.MAIL_STATE.RECEIVED
end
function MailEntity:getState()
return self.state
end
function MailEntity:getMailName()
if self.mailCfgId then
return I18N:getConfig("mail")[self.mailCfgId].name
else
local language = I18N:getCurLanguage()
if self.title.content then
return self.title.content[language] or GConst.EMPTY_STRING
elseif self.title.raw then
return self.title.raw
else
return GConst.EMPTY_STRING
end
end
end
function MailEntity:getMailDesc()
if self.mailCfgId then
return I18N:getConfig("mail")[self.mailCfgId].desc
else
local language = I18N:getCurLanguage()
if self.body.content then
return self.body.content[language] or GConst.EMPTY_STRING
elseif self.body.raw then
return self.body.raw
else
return GConst.EMPTY_STRING
end
end
end
function MailEntity:getMailExpire()
return self.mailExpire
end
function MailEntity:getRemainCd()
if not self.mailExpire then
return 0
end
local remainCd = self.mailExpire - Time:getServerTime()
if remainCd < 0 then
remainCd = 0
end
return remainCd
end
function MailEntity:getRemainCdStr()
local hour = self:getRemainCd() // 3600
if hour <= 0 then
hour = 1
end
return I18N:getGlobalText(I18N.GlobalConst.MAIL_COUNTDOWN, hour)
end
function MailEntity:getRewards()
return self.rewards
end
function MailEntity:haveReward()
return self:getRewards()[1] ~= nil
end
function MailEntity:getMailType()
return self.mailType
end
function MailEntity:getIsAdMail()
return self.mailType == GConst.MailConst.MAIL_TYPE.AD
end
function MailEntity:getIsNormalMail()
return self.mailType == GConst.MailConst.MAIL_TYPE.NORMAL
end
function MailEntity:canClaim()
if self:isOver() then
return false
end
if not self:getRewards()[1] then
return false
end
return not self:isReceived()
end
function MailEntity:isOver()
return self:getRemainCd() <= 0
end
function MailEntity:canDelete()
if self:isReceived() then
return true
end
if not self:haveReward() and self:isRead() then
return true
end
return false
end
function MailEntity:showNew()
if not self:notRead() then
return false
end
return self:getId() > DataManager.MailData:getLastMailId()
end
return MailEntity

View File

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

View File

@ -7,7 +7,7 @@ function PlayerData:init(data)
self.data.dirty = false
self.data.payAmount = basicInfo.pay_amount or 0
local energyLimit = data.energyLimit or GConst.EMPTY_TABLE
local energyLimit = data.energy_limit or GConst.EMPTY_TABLE
self.data.vitGemCount = energyLimit.diamond_count or 0
self.data.vitADCount = energyLimit.ad_count or 0