118 lines
3.0 KiB
Lua
118 lines
3.0 KiB
Lua
RoleData = {}
|
|
RoleData.__index = RoleData
|
|
local max = math.max
|
|
|
|
local dataOrder = {
|
|
RoleDataName.Level,
|
|
RoleDataName.Hp,
|
|
RoleDataName.MaxHp,
|
|
RoleDataName.Attack,
|
|
RoleDataName.PhysicalDefence,
|
|
RoleDataName.MagicDefence,
|
|
RoleDataName.Speed,
|
|
RoleDataName.DamageBocusFactor,
|
|
RoleDataName.DamageReduceFactor,
|
|
RoleDataName.Hit,
|
|
RoleDataName.Dodge,
|
|
RoleDataName.Crit,
|
|
RoleDataName.CritDamageFactor,
|
|
RoleDataName.TreatFacter,
|
|
RoleDataName.FireDamageBocusFactor,
|
|
RoleDataName.IceDamageBocusFactor,
|
|
RoleDataName.LightDamageBocusFactor,
|
|
RoleDataName.WindDamageBocusFactor,
|
|
RoleDataName.LandDamageBocusFactor,
|
|
RoleDataName.DarkDamageBocusFactor,
|
|
RoleDataName.FireDamageReduceFactor,
|
|
RoleDataName.IceDamageReduceFactor,
|
|
RoleDataName.LightDamageReduceFactor,
|
|
RoleDataName.WindDamageReduceFactor,
|
|
RoleDataName.LandDamageReduceFactor,
|
|
RoleDataName.DarkDamageReduceFactor,
|
|
}
|
|
|
|
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}}
|
|
setmetatable(instance, RoleData)
|
|
return instance
|
|
end
|
|
|
|
function RoleData:Init(role, data)
|
|
self.role = role
|
|
for i=1, #data do
|
|
self.data[dataOrder[i]] = data[i]
|
|
end
|
|
end
|
|
|
|
function RoleData:GetData(name)
|
|
if self.data[name] then
|
|
return self.data[name]
|
|
end
|
|
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)
|
|
if BattleLogic.IsOpenBattleRecord then
|
|
BattleLogic.RecordRoleProperty(self.role.uid, self.role.camp, name, value, delta)
|
|
end
|
|
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
|
|
return self:AddValue(name, self.data[name] * pencent)
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function RoleData:SubDeltaValue(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:SubValue(name, delta)
|
|
if delta < 0 or not self.data[name] then --delta必须非负
|
|
return 0
|
|
end
|
|
local orVal = self.data[name]
|
|
if orVal then
|
|
self:SetValue(name, max(self.data[name] - delta, 0))
|
|
orVal = orVal - self.data[name]
|
|
end
|
|
return orVal
|
|
end
|
|
|
|
function RoleData:SubPencentValue(name, pencent)
|
|
if self.data[name] then
|
|
return self:SubValue(name, self.data[name] * pencent)
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--Debug
|
|
function RoleData:Foreach(func)
|
|
for k,v in ipairs(self.data) do
|
|
func(k, v)
|
|
end
|
|
end |