miduo_server/luafight/Modules/Battle/Logic/Base/RoleData.lua

126 lines
3.2 KiB
Lua
Raw Normal View History

2019-03-12 14:05:45 +08:00
RoleData = {}
RoleData.__index = RoleData
local max = math.max
2019-03-25 10:58:38 +08:00
local floor = math.floor
2019-08-06 20:55:47 +08:00
local function isFactor(name)
return name > 7
end
2019-03-21 14:33:56 +08:00
function RoleData.New()
2020-04-10 14:52:41 +08:00
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},
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}}
2019-03-12 14:05:45 +08:00
setmetatable(instance, RoleData)
return instance
end
2019-03-21 14:33:56 +08:00
function RoleData:Init(role, data)
self.role = role
2020-04-16 15:10:04 +08:00
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)
2019-03-21 14:33:56 +08:00
end
end
2019-03-12 14:05:45 +08:00
function RoleData:GetData(name)
2019-08-06 20:55:47 +08:00
return self.data[name]
2019-03-12 14:05:45 +08:00
end
2019-06-05 15:25:06 +08:00
function RoleData:GetOrginData(name)
2019-08-06 20:55:47 +08:00
return self.orginData[name]
2019-06-05 15:25:06 +08:00
end
2019-03-12 14:05:45 +08:00
function RoleData:SetValue(name, value)
2019-03-21 14:33:56 +08:00
if self.data[name] then
local delta = self.data[name]
self.data[name] = value
2019-03-12 14:05:45 +08:00
delta = value - delta
if delta ~= 0 then
self.role.Event:DispatchEvent(BattleEventName.RolePropertyChanged, name, value, delta)
2020-06-26 00:42:16 +08:00
BattleLogManager.Log(
"property change",
"camp", self.role.camp,
"position", self.role.position,
"propId", name,
"value", value)
2019-03-12 14:05:45 +08:00
end
end
end
function RoleData:AddValue(name, delta)
if delta < 0 or not self.data[name] then --delta必须非负
return 0
end
2019-03-21 14:33:56 +08:00
if self.data[name] then
self:SetValue(name, self.data[name] + delta)
2019-03-12 14:05:45 +08:00
end
return delta
end
function RoleData:AddPencentValue(name, pencent)
2019-03-21 14:33:56 +08:00
if self.data[name] then
2019-08-06 20:55:47 +08:00
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)
2019-03-12 14:05:45 +08:00
end
2019-03-21 14:33:56 +08:00
return 0
2019-03-12 14:05:45 +08:00
end
function RoleData:SubDeltaValue(name, delta)
2020-04-17 20:02:49 +08:00
if not delta or delta < 0 or not self.data[name] then --delta必须非负
2019-03-12 14:05:45 +08:00
return 0
end
2019-03-21 14:33:56 +08:00
if self.data[name] then
self:SetValue(name, self.data[name] - delta)
2019-03-12 14:05:45 +08:00
end
return delta
end
function RoleData:SubValue(name, delta)
if delta < 0 or not self.data[name] then --delta必须非负
return 0
end
2019-03-21 14:33:56 +08:00
local orVal = self.data[name]
2019-03-12 14:05:45 +08:00
if orVal then
2019-03-21 14:33:56 +08:00
self:SetValue(name, max(self.data[name] - delta, 0))
orVal = orVal - self.data[name]
2019-03-12 14:05:45 +08:00
end
return orVal
end
function RoleData:SubPencentValue(name, pencent)
2019-03-21 14:33:56 +08:00
if self.data[name] then
2019-08-06 20:55:47 +08:00
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)
2019-03-12 14:05:45 +08:00
end
2019-03-21 14:33:56 +08:00
return 0
2019-03-12 14:05:45 +08:00
end
2020-04-16 15:10:04 +08:00
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
2019-03-12 14:05:45 +08:00
--Debug
function RoleData:Foreach(func)
for k,v in ipairs(self.data) do
2019-03-21 14:33:56 +08:00
func(k, v)
2019-03-12 14:05:45 +08:00
end
2020-04-10 14:52:41 +08:00
end