local PlayerData = class("PlayerData", BaseData) function PlayerData:ctor() self.data.dirty = false end function PlayerData:clear() DataManager:unregisterCrossDayFunc("PlayerData") end function PlayerData:init(data) local basicInfo = data.basic_info or GConst.EMPTY_TABLE self.data.level = basicInfo.level or 1 self.data.exp = basicInfo.exp or 0 self.lvUpNeedExp = self:getNextExp(self.data.level) self.data.payAmount = basicInfo.pay_amount or 0 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 self.lastLoginTime = basicInfo.lastLoginTime or Time:getBeginningOfServerToday() DataManager:registerCrossDayFunc("PlayerData", function() self:resetOnCrossDay() self:markDirty() end) self.createTime = basicInfo.create_at or 0 -- 创角时间 self:initModuleUnlockInfo() end function PlayerData:initModuleUnlockInfo() self.showModuleUnlockChapter = 0 if self.moduleUnlockChapterMap then return end self.moduleUnlockChapterMap = {} local cfg = ConfigManager:getConfig("func_open") for _, info in pairs(cfg) do if info.pop_ups == nil and info.stage then self.moduleUnlockChapterMap[info.stage] = true end end Logger.printTable(self.moduleUnlockChapterMap) end function PlayerData:resetOnCrossDay() self.data.vitGemCount = 0 self.data.vitADCount = 0 end function PlayerData:markDirty() self.data.dirty = not self.data.dirty end function PlayerData:setVit(vit) self.vit = vit end function PlayerData:getVit() return self.vit or 0 end function PlayerData:getMaxVit() if self.maxVit == nil then self.maxVit = ConfigManager:getConfig("recovery")[GConst.ItemConst.ITEM_ID_VIT].limit end return self.maxVit end function PlayerData:getMaxLv() return ConfigManager:getConfigNum("player_exp") end function PlayerData:addExp(exp) self.data.exp = self.data.exp + exp if self.data.level >= self:getMaxLv() then return end self:markDirty() end function PlayerData:setLv(level, exp) self.data.level = level self.data.exp = exp self.lvUpNeedExp = self:getNextExp(self.data.level) self:markDirty() end function PlayerData:getLv() return self.data.level end function PlayerData:getNextExp(lv) lv = lv or self.data.level local cfg = ConfigManager:getConfig("player_exp") if not cfg[lv] then return 1 end return cfg[lv].need_exp end function PlayerData:getExpPercent() return self.data.exp / self.lvUpNeedExp end function PlayerData:getIfCanLevelUp() if self.data.level >= self:getMaxLv() then return false end return self.data.exp >= self.lvUpNeedExp end function PlayerData:getAccountInfo() if not self.accountInfo then self.accountInfo = LocalData:getAccountInfo() end return self.accountInfo end function PlayerData:getAcountId() return self:getAccountInfo().id or GConst.EMPTY_STRING end function PlayerData:addVitGemBuyCount() self.data.vitGemCount = self.data.vitGemCount + 1 end function PlayerData:addVitAdBuyCount() self.data.vitADCount = self.data.vitADCount + 1 end function PlayerData:getVitGemBuyCount() return self.data.vitGemCount end function PlayerData:getVitAdBuyCount() return self.data.vitADCount end -- 获取玩家支付总额 function PlayerData:getTotalPayAmount() return self.data.payAmount or 0 end -- 支付回调中调用 function PlayerData:addPayment(rechargeId) local cfg = ConfigManager:getConfig("recharge")[rechargeId] self.data.payAmount = self.data.payAmount + cfg.price end -- 获取创角时间 function PlayerData:getCreateTime() return self.createTime end -- 获取玩家是否可以显示功能解锁 function PlayerData:getIfCanShowModuleUnlock() return self.showModuleUnlockChapter > 0 end function PlayerData:markShowModuleUnlock() self.showModuleUnlockChapter = 0 end function PlayerData:getModuleUnlockChapter() return self.showModuleUnlockChapter end function PlayerData:checkIfCanShowModuleUnlock(chapterId) if self.moduleUnlockChapterMap == nil then return end if not self.moduleUnlockChapterMap[chapterId] then return end self.showModuleUnlockChapter = chapterId end return PlayerData