miduo_server/luafight/Modules/Battle/Logic/RoleLogic.lua

133 lines
4.1 KiB
Lua
Raw Normal View History

2019-03-12 14:05:45 +08:00
RoleLogic = {}
RoleLogic.__index = RoleLogic
--local RoleLogic = RoleLogic
--local RoleDataName = RoleDataName
--local BattleLogic = BattleLogic
local Random = Random
local floor = math.floor
local max = math.max
local Passivity = require("Modules/Battle/Logic/Base/Passivity")
2019-03-21 14:33:56 +08:00
local skillPool = BattleObjectPool.New(function ()
return Skill:New()
end)
function RoleLogic.New()
2019-03-26 15:11:47 +08:00
local instance = {uid=0,roleData=0,data=RoleData.New(),camp=0,name=0,roleType=0,
shield=BattleList.New(),
exCalDmgList=BattleList.New(),
buffFilter=BattleList.New(),
2019-03-22 15:00:06 +08:00
BuffMgr=BuffManager.New(),Event=BattleEvent:New(),passiveList=0,isDead=false,Auto=false,IsDebug=false,enable=false}
2019-03-12 14:05:45 +08:00
setmetatable(instance, RoleLogic)
2019-03-21 14:33:56 +08:00
return instance
end
function RoleLogic:Init(uid, data)
self.uid = uid
self.roleData = data
self.data:Init(self, data.property)
self.camp = data.camp --阵营 0我方 1敌方
self.name = data.name
self.roleType = 1 --阵营 1普通 2Boss 3召唤物
2019-03-12 14:05:45 +08:00
2019-03-21 14:33:56 +08:00
self.shield:Clear() --护盾列表
self.exCalDmgList:Clear() --额外计算伤害列表
2019-03-26 15:11:47 +08:00
self.buffFilter:Clear() --buff屏蔽列表
2019-03-12 14:05:45 +08:00
2019-03-21 14:33:56 +08:00
self.BuffMgr:Init(self)
self.Event:ClearEvent()
2019-03-12 14:05:45 +08:00
2019-03-21 14:33:56 +08:00
self.passiveList = {}
2019-03-12 14:05:45 +08:00
if data.skill and #data.skill > 0 then
2019-03-21 14:33:56 +08:00
self.skill = skillPool:Get()
self.skill:Init(self, data.skill)
self.skill.sp = 0
local time = max(6-self:GetRoleData(RoleDataName.Speed)/(8*(self:GetRoleData(RoleDataName.Level)+10)), 1.5)
self.skill.spPass = floor( time * BattleLogic.GameFrameRate)
2019-03-12 14:05:45 +08:00
end
if data.superSkill and #data.superSkill > 0 then
2019-03-21 14:33:56 +08:00
self.superSkill = skillPool:Get()
self.superSkill:Init(self, data.superSkill)
self.superSkill.spPass = floor(self.superSkill.cd * BattleLogic.GameFrameRate)
self.superSkill.sp = self.superSkill.spPass
2019-03-12 14:05:45 +08:00
end
for i = 1, #data.passivity do
local v = data.passivity[i]
local id = v[1]
local args = v[2]
2019-03-21 14:33:56 +08:00
Passivity[id](self, args)
2019-03-12 14:05:45 +08:00
end
2019-03-27 15:47:27 +08:00
self.isDead = self:GetRoleData(RoleDataName.Hp) == 0
2019-03-21 14:33:56 +08:00
self.Auto = true
self.IsDebug = false
self.enable = true
2019-03-12 14:05:45 +08:00
end
function RoleLogic:GetRoleData(property)
return self.data:GetData(property)
end
function RoleLogic:AddBuff(buff)
2019-03-26 15:11:47 +08:00
for i=1, self.buffFilter.size do
if self.buffFilter.buffer[i](buff) then
return
end
end
2019-03-12 14:05:45 +08:00
self.BuffMgr:AddBuff(buff)
end
2019-03-21 14:33:56 +08:00
function RoleLogic:Dispose()
if self.skill then
self.skill:Dispose()
skillPool:Put(self.skill)
self.skill = nil
end
if self.superSkill then
self.superSkill:Dispose()
skillPool:Put(self.superSkill)
self.superSkill = nil
end
end
2019-03-12 14:05:45 +08:00
function RoleLogic:Update()
self.BuffMgr:Update()
if not self.enable then
return
end
if self.superSkill then
if self.superSkill.sp >= self.superSkill.spPass then
if self.skill then
if self.skill.sp >= self.skill.spPass then
2019-03-21 14:33:56 +08:00
if self.Auto and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp) then
2019-03-12 14:05:45 +08:00
if Random.Range01() <= 0.75 then
self.skill:Cast()
else
self.superSkill:Cast()
end
end
else
self.skill.sp = self.skill.sp + 1
end
else
2019-03-21 14:33:56 +08:00
if self.Auto and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp) then
2019-03-12 14:05:45 +08:00
self.superSkill:Cast()
end
end
else
self.superSkill.sp = self.superSkill.sp + 1
end
else
if self.skill then
if self.skill.sp >= self.skill.spPass then
2019-03-21 14:33:56 +08:00
if self.Auto and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp) then
2019-03-12 14:05:45 +08:00
self.skill:Cast()
end
else
self.skill.sp = self.skill.sp + 1
end
end
end
end