c1_lua/lua/app/userdata/player/player_data.lua
2023-05-31 22:23:04 +08:00

179 lines
4.1 KiB
Lua

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