generated from root/miduo_server
184 lines
4.9 KiB
Lua
184 lines
4.9 KiB
Lua
RoleData = {}
|
||
RoleData.__index = RoleData
|
||
local max = math.max
|
||
local floor = math.floor
|
||
local function isFactor(name)
|
||
return name > 7
|
||
end
|
||
|
||
function RoleData.New()
|
||
local instance = {role=0, data={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0},
|
||
orginData={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0}}
|
||
setmetatable(instance, RoleData)
|
||
return instance
|
||
end
|
||
|
||
function RoleData:Clone(_role)
|
||
local _clone = RoleData.New()
|
||
_clone.role = _role
|
||
local max = max(#_clone.data, #self.data)
|
||
for i=1, max do
|
||
_clone.data[i] = self.data[i]
|
||
_clone.orginData[i] = self.orginData[i]
|
||
end
|
||
return _clone
|
||
end
|
||
|
||
function RoleData:RoleBack(_role,_cpRoleDate)
|
||
self.role = _role
|
||
local max = max(#_cpRoleDate.data, #self.data)
|
||
for i=1, max do
|
||
self.data[i] = _cpRoleDate.data[i]
|
||
self.orginData[i] =_cpRoleDate.orginData[i]
|
||
end
|
||
end
|
||
|
||
function RoleData:Init(role, data)
|
||
self.role = role
|
||
local max = max(#data, #self.data)
|
||
for i=1, max do
|
||
self.data[i] = BattleUtil.ErrorCorrection(data[i] or 0)
|
||
self.orginData[i] = BattleUtil.ErrorCorrection(data[i] or 0)
|
||
end
|
||
end
|
||
|
||
local function tableKin(_tb,_k)
|
||
for k,v in pairs(_tb) do
|
||
if k==_k then return true end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function RoleData:GetData(name)
|
||
-- for prop in pairs(self.data) do
|
||
-- BattleLogManager.Log(
|
||
-- "hero:"..self.role.roleId..
|
||
-- " camp:".. self.role.camp..
|
||
-- " position:"..self.role.position..
|
||
-- " name:".. name,
|
||
-- " value:"..self.data[name])
|
||
-- end
|
||
if tableKin(self.data,name) then
|
||
return self.data[name]
|
||
end
|
||
return nil
|
||
end
|
||
|
||
local function tableKin(_tb,_k)
|
||
for k,v in pairs(_tb) do
|
||
if k==_k then return true end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function RoleData:GetOrginData(name)
|
||
return self.orginData[name]
|
||
end
|
||
|
||
function RoleData:SetValue(name, value)
|
||
if self.data[name] then
|
||
local delta = self.data[name]
|
||
self.data[name] = value
|
||
delta = value - delta
|
||
if delta ~= 0 then
|
||
self.role.Event:DispatchEvent(BattleEventName.RolePropertyChanged, name, value, delta)
|
||
-- BattleLogManager.Log(
|
||
-- self.role.roleId..":property change",
|
||
-- "camp", self.role.camp,
|
||
-- "position", self.role.position,
|
||
-- "propId", name,
|
||
-- "value", value)
|
||
end
|
||
end
|
||
end
|
||
|
||
function RoleData:AddValue(name, delta)
|
||
if delta < 0 or not self.data[name] then --delta必须非负
|
||
return 0
|
||
end
|
||
if self.data[name] then
|
||
|
||
self:SetValue(name, self.data[name] + delta)
|
||
end
|
||
return delta
|
||
end
|
||
|
||
function RoleData:AddPencentValue(name, pencent)
|
||
if self.data[name] then
|
||
local delta
|
||
if isFactor(name) then
|
||
delta = BattleUtil.ErrorCorrection(self.orginData[name] * pencent)
|
||
else
|
||
delta = floor(self.orginData[name] * pencent)
|
||
end
|
||
return self:AddValue(name, delta)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function RoleData:SubDeltaValue(name, delta)
|
||
if not delta or delta < 0 or not self.data[name] then --delta必须非负
|
||
return 0
|
||
end
|
||
if self.data[name] then
|
||
-- RoleManager.LogCa(
|
||
-- "SubDeltaValue curframe:"..BattleLogic.CurFrame(),
|
||
-- "name:"..name,
|
||
-- "data:"..(self.data[name] - delta)
|
||
-- )
|
||
self:SetValue(name, self.data[name] - delta)
|
||
end
|
||
return delta
|
||
end
|
||
|
||
function RoleData:SubValue(name, delta)
|
||
if delta < 0 or not self.data[name] then --delta必须非负
|
||
return 0
|
||
end
|
||
local orVal = self.data[name]
|
||
if isFactor(name) then
|
||
if orVal then
|
||
self:SetValue(name, self.data[name] - delta)
|
||
orVal = orVal - self.data[name]
|
||
end
|
||
return orVal
|
||
else
|
||
if orVal then
|
||
self:SetValue(name, max(self.data[name] - delta,0))
|
||
orVal = orVal - self.data[name]
|
||
end
|
||
return orVal
|
||
end
|
||
end
|
||
|
||
function RoleData:SubPencentValue(name, pencent)
|
||
if self.data[name] then
|
||
local delta
|
||
if isFactor(name) then
|
||
delta = BattleUtil.ErrorCorrection(self.orginData[name] * pencent)
|
||
else
|
||
delta = floor(self.orginData[name] * pencent)
|
||
end
|
||
return self:SubValue(name, delta)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function RoleData:CountValue(name, value, ct)
|
||
if ct == 1 then
|
||
self:AddValue(name, value)
|
||
elseif ct == 2 then
|
||
self:AddPencentValue(name, value)
|
||
elseif ct == 3 then
|
||
self:SubValue(name, value)
|
||
elseif ct == 4 then
|
||
self:SubPencentValue(name, value)
|
||
end
|
||
end
|
||
|
||
--Debug
|
||
function RoleData:Foreach(func)
|
||
for k,v in ipairs(self.data) do
|
||
func(k, v)
|
||
end
|
||
end |