152 lines
3.4 KiB
Lua
152 lines
3.4 KiB
Lua
local TalentData = class("TalentData", BaseData)
|
|
|
|
local TalentCfg = ConfigManager:getConfig("talent")
|
|
local PlayerExpCfg = ConfigManager:getConfig("player_exp")
|
|
|
|
function TalentData:setDirty()
|
|
self.data.isDirty = not self.data.isDirty
|
|
end
|
|
|
|
function TalentData:ctor()
|
|
self.data.isDirty = false
|
|
end
|
|
|
|
function TalentData:init(data)
|
|
data = data or GConst.EMPTY_TABLE
|
|
self.stage = data.stage
|
|
self.levels = data.levels or {}
|
|
|
|
self.allAttr = {}
|
|
self.attrDirty = true
|
|
self:getAllAttr()
|
|
end
|
|
|
|
function TalentData:clear()
|
|
end
|
|
|
|
function TalentData:getCfgList()
|
|
return TalentCfg
|
|
end
|
|
|
|
function TalentData:getActiveList()
|
|
local list = {}
|
|
for id = 1, #TalentCfg do
|
|
local cfg = TalentCfg[id]
|
|
cfg.id = id
|
|
local lv = self:getLevels(id)
|
|
if lv and lv > 0 then
|
|
table.insert(list, cfg)
|
|
end
|
|
end
|
|
return list
|
|
end
|
|
|
|
function TalentData:getPlayerExpCfgList(stage)
|
|
if stage then
|
|
return PlayerExpCfg[stage]
|
|
end
|
|
return PlayerExpCfg
|
|
end
|
|
|
|
function TalentData:getStage()
|
|
return self.stage
|
|
end
|
|
|
|
function TalentData:checkStage()
|
|
local lv = DataManager.PlayerData:getLv()
|
|
return lv >= self.stage, self.stage
|
|
end
|
|
|
|
function TalentData:getLevels(id)
|
|
if id then
|
|
return self.levels[id] or 0
|
|
end
|
|
return self.levels
|
|
end
|
|
|
|
function TalentData:onUpgrade(data)
|
|
self.upData = data
|
|
self.stage = data.stage
|
|
self.levels[data.id] = data.level
|
|
self.attrDirty = true
|
|
self:getAllAttr()
|
|
self:setDirty()
|
|
end
|
|
|
|
function TalentData:getUpData()
|
|
local data = self.upData
|
|
self.upData = nil
|
|
return data
|
|
end
|
|
|
|
function TalentData:isAllMax()
|
|
for id = 1, #TalentCfg do
|
|
local cfg = TalentCfg[id]
|
|
local lv = self:getLevels(id)
|
|
if lv and lv > 0 and cfg.attr then
|
|
for _, v in ipairs(cfg.attr) do
|
|
self.allAttr[v.type] = (self.allAttr[v.type] or 0) + v.num * lv
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--@region 属性
|
|
function TalentData:getAttrById(id)
|
|
local cfg = TalentCfg[id]
|
|
if not cfg then
|
|
return {}
|
|
end
|
|
local lv = self:getLevels(id)
|
|
local allAttr = {}
|
|
local num = 0
|
|
if not cfg.attr then
|
|
num = cfg.value
|
|
else
|
|
for i,v in ipairs(cfg.attr) do
|
|
local attr = {}
|
|
attr.type = v.type
|
|
attr.num = v.num * lv
|
|
table.insert(allAttr, attr)
|
|
end
|
|
end
|
|
return allAttr, num
|
|
end
|
|
|
|
function TalentData:getAllAttr()
|
|
if self.attrDirty == true then
|
|
self.attrDirty = false
|
|
self:_updateAllAttr()
|
|
end
|
|
return self.allAttr
|
|
end
|
|
|
|
function TalentData:_updateAllAttr()
|
|
self.allAttr = {}
|
|
for id = 1, #TalentCfg do
|
|
local cfg = TalentCfg[id]
|
|
local lv = self:getLevels(id)
|
|
if lv and lv > 0 and cfg.attr then
|
|
for _, v in ipairs(cfg.attr) do
|
|
self.allAttr[v.type] = (self.allAttr[v.type] or 0) + v.num * lv
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 处理全局属性
|
|
local attr = {}
|
|
attr[GConst.ALL_ATTR.ATTR_ATK_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_ATK_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_HP_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_HP_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_DMGDEC_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_DMGDEC_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_CRIT_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_CRIT_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_CRIT_TIME_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_CRIT_TIME_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_NORMAL_HURTP_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_NORMAL_HURTP_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_SKILL_HURTP_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_SKILL_HURTP_ALL]
|
|
attr[GConst.ALL_ATTR.ATTR_ATKP_ALL] = self.allAttr[GConst.ALL_ATTR.ATTR_ATKP_ALL]
|
|
|
|
DataManager.HeroData:setTalentAttr(attr)
|
|
|
|
return self.allAttr
|
|
end
|
|
--@endregion
|
|
return TalentData |