diff --git a/lua/app/common/data_manager.lua b/lua/app/common/data_manager.lua index 63819272..76486734 100644 --- a/lua/app/common/data_manager.lua +++ b/lua/app/common/data_manager.lua @@ -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) diff --git a/lua/app/common/module_manager.lua b/lua/app/common/module_manager.lua index cf8393b8..85515eec 100644 --- a/lua/app/common/module_manager.lua +++ b/lua/app/common/module_manager.lua @@ -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 diff --git a/lua/app/config/chapter_board.lua b/lua/app/config/chapter_board.lua index a8f26bbc..a53bee14 100644 --- a/lua/app/config/chapter_board.lua +++ b/lua/app/config/chapter_board.lua @@ -911,7 +911,7 @@ local chapter_board = { 0 }, { - 0, + 3, 0 }, { @@ -1109,7 +1109,7 @@ local chapter_board = { 0 }, { - 0, + 3, 0 }, { @@ -7405,9 +7405,1004 @@ local chapter_board = { 0 } } + }, + [35]={ + ["board"]={ + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0, + 3 + }, + { + 0, + 4 + }, + { + 0, + 1 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 4, + 4 + }, + { + 0, + 3 + }, + { + 0, + 1 + }, + { + 0, + 4 + }, + { + 4, + 3 + }, + { + 1, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 4, + 1 + }, + { + 4, + 3 + }, + { + 4, + 4 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 0, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 0, + 0 + }, + { + 14, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 14, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 7, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + } + }, + ["mystery_box_board"]={ + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0, + 3 + }, + { + 0, + 4 + }, + { + 0, + 1 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 4, + 4 + }, + { + 0, + 3 + }, + { + 0, + 1 + }, + { + 0, + 4 + }, + { + 4, + 3 + }, + { + 1, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 4, + 1 + }, + { + 4, + 3 + }, + { + 4, + 4 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 0, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 0, + 0 + }, + { + 14, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 7, + 0 + }, + { + 3, + 0 + }, + { + 14, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 15, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + } + } + }, + [36]={ + ["board"]={ + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 4, + 4 + }, + { + 0, + 2 + }, + { + 4, + 2 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 9, + 0 + }, + { + 4, + 4 + }, + { + 0, + 3 + }, + { + 4, + 4 + }, + { + 9, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 4, + 2 + }, + { + 0, + 3 + }, + { + 4, + 4 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 4, + 2 + }, + { + 4, + 3 + }, + { + 4, + 2 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 14, + 0 + }, + { + 10, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 11, + 0 + }, + { + 14, + 0 + } + } + }, + [37]={ + ["board"]={ + { + 1, + 0 + }, + { + 0, + 1 + }, + { + 0, + 1 + }, + { + 0, + 1 + }, + { + 0, + 2 + }, + { + 0, + 2 + }, + { + 0, + 2 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 14, + 0 + }, + { + 9, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 10, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 3, + 0 + }, + { + 14, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 11, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 14, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0 + }, + { + 0, + 0 + }, + { + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + } + }, + ["mystery_box_board"]={ + { + 1, + 0 + }, + { + 0, + 1 + }, + { + 0, + 1 + }, + { + 0, + 1 + }, + { + 0, + 2 + }, + { + 0, + 2 + }, + { + 0, + 2 + }, + { + 1, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 2, + 0 + }, + { + 1, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 14, + 0 + }, + { + 9, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 10, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 3, + 0 + }, + { + 14, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + }, + { + 11, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 3, + 0 + }, + { + 15, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 1, + 0 + }, + { + 0 + }, + { + 0, + 0 + }, + { + 0 + }, + { + 0, + 0 + }, + { + 1, + 0 + } + } + }, + [38]={ + } } local config = { -data=chapter_board,count=34 +data=chapter_board,count=38 } return config \ No newline at end of file diff --git a/lua/app/config/localization/localization_global_const.lua b/lua/app/config/localization/localization_global_const.lua index 4c78b3f9..dec66e32 100644 --- a/lua/app/config/localization/localization_global_const.lua +++ b/lua/app/config/localization/localization_global_const.lua @@ -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 \ No newline at end of file diff --git a/lua/app/config/skill.lua b/lua/app/config/skill.lua index 47de8128..693587bd 100644 --- a/lua/app/config/skill.lua +++ b/lua/app/config/skill.lua @@ -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 \ No newline at end of file diff --git a/lua/app/config/skill_rogue.lua b/lua/app/config/skill_rogue.lua index 919aa503..b3b3a181 100644 --- a/lua/app/config/skill_rogue.lua +++ b/lua/app/config/skill_rogue.lua @@ -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]={ diff --git a/lua/app/config/strings/cn/global.lua b/lua/app/config/strings/cn/global.lua index 0a66911b..07e92ae9 100644 --- a/lua/app/config/strings/cn/global.lua +++ b/lua/app/config/strings/cn/global.lua @@ -111,6 +111,7 @@ local localization_global = ["IDLE_DROP_DESC_3"] = "立刻获得{0}小时挂机奖励", ["STR_FREE"] = "免费", ["TODAY_REMAIN_TIMES"] = "今日剩余{0}次", + ["BUY_ENERGY"] = "购买体力", } return localization_global \ No newline at end of file diff --git a/lua/app/config/task.lua b/lua/app/config/task.lua index eadb5ee3..5c2df6be 100644 --- a/lua/app/config/task.lua +++ b/lua/app/config/task.lua @@ -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==" } diff --git a/lua/app/global/global_const.lua b/lua/app/global/global_const.lua index 81f91ecb..43eb0d24 100644 --- a/lua/app/global/global_const.lua +++ b/lua/app/global/global_const.lua @@ -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 diff --git a/lua/app/module/mail.meta b/lua/app/module/mail.meta new file mode 100644 index 00000000..07eb42c5 --- /dev/null +++ b/lua/app/module/mail.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 085251417eef56a4a8431c13b3392fd6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/module/mail/mail_const.lua b/lua/app/module/mail/mail_const.lua new file mode 100644 index 00000000..26c5c0f8 --- /dev/null +++ b/lua/app/module/mail/mail_const.lua @@ -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 \ No newline at end of file diff --git a/lua/app/module/mail/mail_const.lua.meta b/lua/app/module/mail/mail_const.lua.meta new file mode 100644 index 00000000..7cfe7600 --- /dev/null +++ b/lua/app/module/mail/mail_const.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 40977769f7f9c5f40b5bdac7c190ec35 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/module/mail/mail_manager.lua b/lua/app/module/mail/mail_manager.lua new file mode 100644 index 00000000..c327dacf --- /dev/null +++ b/lua/app/module/mail/mail_manager.lua @@ -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 \ No newline at end of file diff --git a/lua/app/module/mail/mail_manager.lua.meta b/lua/app/module/mail/mail_manager.lua.meta new file mode 100644 index 00000000..23ac1383 --- /dev/null +++ b/lua/app/module/mail/mail_manager.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9bb5abd215ec3b44aacf26c4581b1fa7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/commerce/buy_vit_ui.lua b/lua/app/ui/commerce/buy_vit_ui.lua index 35f48ac1..918898cf 100644 --- a/lua/app/ui/commerce/buy_vit_ui.lua +++ b/lua/app/ui/commerce/buy_vit_ui.lua @@ -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 \ No newline at end of file diff --git a/lua/app/ui/game_setting/select_other_btn_ui.lua b/lua/app/ui/game_setting/select_other_btn_ui.lua index 76133704..29e08790 100644 --- a/lua/app/ui/game_setting/select_other_btn_ui.lua +++ b/lua/app/ui/game_setting/select_other_btn_ui.lua @@ -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)) diff --git a/lua/app/ui/mail.meta b/lua/app/ui/mail.meta new file mode 100644 index 00000000..855e4644 --- /dev/null +++ b/lua/app/ui/mail.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f38a3c4920f0d6498585ad8264181f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/ui/mail/cell.meta b/lua/app/ui/mail/cell.meta new file mode 100644 index 00000000..039e302b --- /dev/null +++ b/lua/app/ui/mail/cell.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e0046c59ad9bbc43933e1d2dca2d905 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/ui/mail/cell/mail_cell.lua b/lua/app/ui/mail/cell/mail_cell.lua new file mode 100644 index 00000000..08118035 --- /dev/null +++ b/lua/app/ui/mail/cell/mail_cell.lua @@ -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 \ No newline at end of file diff --git a/lua/app/ui/mail/cell/mail_cell.lua.meta b/lua/app/ui/mail/cell/mail_cell.lua.meta new file mode 100644 index 00000000..92a68f21 --- /dev/null +++ b/lua/app/ui/mail/cell/mail_cell.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1f5fcba2f06710a4bbeab76ae83d1b76 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/mail/mail_detail_ui.lua b/lua/app/ui/mail/mail_detail_ui.lua new file mode 100644 index 00000000..5903a4aa --- /dev/null +++ b/lua/app/ui/mail/mail_detail_ui.lua @@ -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 \ No newline at end of file diff --git a/lua/app/ui/mail/mail_detail_ui.lua.meta b/lua/app/ui/mail/mail_detail_ui.lua.meta new file mode 100644 index 00000000..20c7d965 --- /dev/null +++ b/lua/app/ui/mail/mail_detail_ui.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88fc0b06ecebcf54f9713464dee3bde3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/mail/mail_ui.lua b/lua/app/ui/mail/mail_ui.lua new file mode 100644 index 00000000..0703ce82 --- /dev/null +++ b/lua/app/ui/mail/mail_ui.lua @@ -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 \ No newline at end of file diff --git a/lua/app/ui/mail/mail_ui.lua.meta b/lua/app/ui/mail/mail_ui.lua.meta new file mode 100644 index 00000000..d9bbf371 --- /dev/null +++ b/lua/app/ui/mail/mail_ui.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f6ce58542eaf3046bc7f329075ae62e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/mail.meta b/lua/app/userdata/mail.meta new file mode 100644 index 00000000..bc641b1c --- /dev/null +++ b/lua/app/userdata/mail.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2f9edf752615204da2c3f31531c458e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/userdata/mail/mail_data.lua b/lua/app/userdata/mail/mail_data.lua new file mode 100644 index 00000000..ec91a9d2 --- /dev/null +++ b/lua/app/userdata/mail/mail_data.lua @@ -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 \ No newline at end of file diff --git a/lua/app/userdata/mail/mail_data.lua.meta b/lua/app/userdata/mail/mail_data.lua.meta new file mode 100644 index 00000000..4281f8db --- /dev/null +++ b/lua/app/userdata/mail/mail_data.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a1288415a188ea64f807d5e0e28bc56f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/mail/mail_entity.lua b/lua/app/userdata/mail/mail_entity.lua new file mode 100644 index 00000000..7801ba46 --- /dev/null +++ b/lua/app/userdata/mail/mail_entity.lua @@ -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 \ No newline at end of file diff --git a/lua/app/userdata/mail/mail_entity.lua.meta b/lua/app/userdata/mail/mail_entity.lua.meta new file mode 100644 index 00000000..550c6744 --- /dev/null +++ b/lua/app/userdata/mail/mail_entity.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2726071e33132774391e1f44fe68b154 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/player/player_data.lua b/lua/app/userdata/player/player_data.lua index 711253f3..0e63a8d2 100644 --- a/lua/app/userdata/player/player_data.lua +++ b/lua/app/userdata/player/player_data.lua @@ -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