back_recharge
duhui 2023-04-07 16:43:05 +08:00
parent c5e20dde2b
commit 24c12d6d4f
19 changed files with 923 additions and 338 deletions

View File

@ -27,6 +27,7 @@ require("Modules.Battle.Logic.SkillManager")
require("Modules.Battle.Logic.OutDataManager")
require("Modules.Battle.Logic.BattleLogManager")
require("Modules.Battle.Logic.Monster.MonsterManager")
require("Modules.Battle.Logic.Weapon.FightWeaponManager")
require("Modules.Battle.Logic.HardStageCondition")
require("Modules.Battle.Logic.HardStageEventManager")
require "Modules/Battle/Data/ConfigData"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -22,6 +22,9 @@ local BuffRegister = {
[BuffName.BreakArmor] = "BreakArmor",
[BuffName.AddAttack] = "AddAttack",
[BuffName.Suppress] = "Suppress",
[BuffName.BuDongSign] = "BuDongSign",
[BuffName.FalseNoDead] = "FalseNoDead",
[BuffName.SuckBlood] = "SuckBlood",
}
@ -232,7 +235,7 @@ end
function BuffManager:HasBuff(target, type, checkFunc,caster,dotType)
--如果当前是判断燃烧buff and 当前目标是攻击的主目标则直接返回true
if type== BuffName.DOT and caster and dotType and dotType==1 and caster.curMainTarget==target then
if type== BuffName.DOT and caster and dotType and dotType==1 and (caster.curMainTarget==target or caster.isAllBurn) then
return true
end
if self.buffDic.kvList[type] then

View File

@ -2335,7 +2335,7 @@ local effectList = {
local pro = args[1]
local isBoss=BattleUtil.CheckIsBoss(target)
if isBoss then
return
return
end
BattleUtil.SeckillHP(skill,caster,target,pro)
end,
@ -2788,6 +2788,11 @@ local effectList = {
else
buff=Buff.Create(caster, t1, r1,t2)
end
elseif t1==BuffName.DOT then
local treat=floor(caster:GetRoleData(BattlePropList[v1])*v2)
buff=Buff.Create(caster, t1, r1,1,t2,treat)
elseif t1==BuffName.FalseNoDead then
buff=Buff.Create(caster, t1, r1,t2,v1)
else
buff=Buff.Create(caster, t1, r1,t2)
end
@ -2965,7 +2970,124 @@ local effectList = {
end)
end,
-- 造成目标[a]*[b]%的间接伤害
-- a[属性],b[float]
[151] = function(caster, target, args, interval, skill)
local pro = args[1]
local f1 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
if (pro==12 or pro==13) and BattleUtil.CheckIsBoss(target) then
return
end
local damage = floor(BattleUtil.ErrorCorrection(f1 * target:GetRoleData(BattlePropList[pro])))
BattleUtil.FinalDamageCountShield(nil, caster, target, damage)
end)
end,
--直接斩杀剩余所有血量(御甲无效)
[152] = function(caster, target, args, interval, skill)
local isBoss=BattleUtil.CheckIsBoss(target)
if isBoss then
return
end
BattleUtil.Seckill(skill,caster,target)
end,
--瞬间恢复[a]*[b]%生命,并移除中毒灼烧状态
--a[属性],b[float]
[153] = function(caster, target, args, interval, skill)
local pro1 = args[1]
local f1 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
local val = floor(BattleUtil.FP_Mul(target:GetRoleData(BattlePropList[pro1]), f1))
BattleUtil.CalTreatNoCrit(caster, target, val,1,skill)
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
return clearBuffPredicate(buff,5)
end)
end)
end,
--瞬间恢复[a]*[b]%生命,并移除中毒灼烧状态
--a[属性],b[float]
[154] = function(caster, target, args, interval, skill)
local pro1 = args[1]
local f1 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
local val = floor(BattleUtil.FP_Mul(target:GetRoleData(BattlePropList[pro1]), f1))
BattleUtil.CalTreatNoCrit(caster, target, val,1,skill)
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
return clearBuffPredicate(buff,5)
end)
end)
end,
--神兵[a]属性[b]%+对位英雄损失血量[c]%的[d]伤害
--a[属性],b[float],c[int],d[int]
[155] = function(caster, target, args, interval, skill)
local pro = args[1]
local f1 = args[2]
local f2 = args[3]
local type = args[4]
BattleLogic.WaitForTrigger(interval, function ()
local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(BattlePropList[pro]), f1))
if skill.ownHero then
local addValue=(skill.ownHero:GetRoleData(RoleDataName.MaxHp)-skill.ownHero:GetRoleData(RoleDataName.Hp))*f2
val=val+floor(addValue)
end
BattleUtil.FinalDamage(skill, caster, target,val, nil, 0, nil, true)
end)
end,
-- 造成[a]*[b]%的间接伤害
-- a[属性],b[float]
[156] = function(caster, target, args, interval, skill)
local pro = args[1]
local f1 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
if (pro==12 or pro==13) and BattleUtil.CheckIsBoss(target) then
return
end
local damage = floor(BattleUtil.ErrorCorrection(f1 * caster:GetRoleData(BattlePropList[pro])))
BattleUtil.FinalDamage(nil, caster, target, damage, nil, 0, nil, true)
end)
end,
-- 造成[a]*[b]%的伤害,吸取所有有仇视效果的[c]%生命上限*效果层数的伤害,如果神兵对应英雄回满血,多回的血造成伤害
-- a[属性],b[float],c[float]
[157] = function(caster, target, args, interval, skill)
local pro = args[1]
local f1 = args[2]
local v1 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
if skill.ownHero==nil then
return
end
local damage = floor(BattleUtil.ErrorCorrection(f1 * caster:GetRoleData(BattlePropList[pro])))
local arr=RoleManager.Query(function(v) return v.camp~=caster.camp end)
local allAddHp=0
local addDamage=0
addDamage=damage
if arr then
for i = 1, #arr do
--BattleLogic.BuffMgr:HasBuff(arr[i], BuffName.BreakArmor, function (buff) return buff.signType == 5 end)
local list=BattleLogic.BuffMgr:GetAllBuffByFunc(function(buff) return buff.target==arr[i] and buff.type==BuffName.BreakArmor and buff.signType==5 end)
local len=BattleUtil.LengthOfTable(list)
if len>0 then
local addhp=floor(arr[i]:GetRoleData(RoleDataName.MaxHp)*v1)*len
allAddHp=allAddHp+ addhp
--LogError("吸取的血量==="..addhp.." 层树=="..len)
BattleUtil.FinalDamage(nil,caster,arr[i],addhp)
BattleLogic.BuffMgr:ClearBuff(arr[i], function(buff)
return buff.type == BuffName.BreakArmor and buff.signType==5
end)
end
end
local hp=skill.ownHero:GetRoleData(RoleDataName.MaxHp)-skill.ownHero:GetRoleData(RoleDataName.Hp)
--LogError("damage=="..addDamage.." alladdhp=="..allAddHp.." hp=="..hp)
if hp>0 then
BattleUtil.FinalTreat(caster,skill.ownHero,hp)
end
if allAddHp>hp then
addDamage=addDamage+allAddHp-hp
end
end
BattleUtil.FinalDamage(nil, caster, target,addDamage, nil, 0, nil, true)
end)
end,
}

View File

@ -7886,19 +7886,25 @@ local passivityList = {
end
BattleLogic.Event:AddEvent(BattleEventName.RoleRealDead, onBattleRoleDead,nil,nil,role)
end,
--死亡后有[a]%概率[b]%血量复活,并回复[c]点怒气
--a[float],b[float],c[int]
--死亡后有[a]%概率[b]%血量复活,并回复[c]点怒气,最多触发[d]次(d不填为无限次)
--a[float],b[float],c[int],d[int]
[329]=function (role,args,id,judge)
local p1=args[1]
local p2=args[2]
local num=args[3]
local time=args[4]
local aaa=0
local onRoleRealDead = function(deadRole)
--如果死亡的不是自身
if deadRole~=role then
return
end
if time and aaa>=time then
return
end
BattleUtil.RandomAction(p1, function ()
deadRole:SetRelive(p2,role)
aaa=aaa+1
BattleUtil.CalRage(role, role,num,CountTypeName.Add)
end)
end
@ -11510,28 +11516,70 @@ local passivityList = {
if t6 then
table.insert(types,t6)
end
-- local heros={}
-- local onSkillCast = function(skill)
-- if skill and not skill.isTriggerJudge and judge==1 then
-- return
-- end
-- if skill.type == BattleSkillType.Special then
-- local list = skill:GetDirectTargets()
-- for key, value in pairs(list) do
-- table.insert(heros,list)
-- end
-- LogError("#heros=========="..#heros)
-- end
-- end
-- role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast,nil,nil,role)
-- 释放技能后
local onSkillEnd = function(skill)
-- local onSkillEnd = function(skill)
-- if skill and not skill.isTriggerJudge and judge==1 then
-- return
-- end
-- local heros
-- if skill.type == BattleSkillType.Special then
-- heros = skill:GetDirectTargetsNoMiss()
-- end
-- if heros then
-- for i = 1, #heros do
-- -- BattleUtil.CalRage(role, list[i], i1, CountTypeName.Sub)
-- local isAdd=false
-- for key, value in pairs(types) do
-- if not isAdd and BattleLogic.BuffMgr:HasBuff(heros[i],value) then
-- BattleUtil.CalRage(role, heros[i], v1, CountTypeName.Sub)
-- isAdd=true
-- end
-- end
-- end
-- heros={}
-- end
-- end
-- role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd,nil,nil,role)
local OnPassiveDamaging = function(damagingFunc, defRole, damage,skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type == BattleSkillType.Special then
local list = skill:GetDirectTargetsNoMiss()
if list then
for i = 1, #list do
-- BattleUtil.CalRage(role, list[i], i1, CountTypeName.Sub)
local isAdd=false
for key, value in pairs(types) do
if not isAdd and BattleLogic.BuffMgr:HasBuff(list[i],value) then
BattleUtil.CalRage(role, list[i], v1, CountTypeName.Sub)
isAdd=true
end
end
end
if skill==nil then
return
end
if skill.type~=BattleSkillType.Special then
return
end
local isAdd=false
for key, value in pairs(types) do
if not isAdd and BattleLogic.BuffMgr:HasBuff(defRole,value) then
BattleUtil.CalRage(role, defRole, v1, CountTypeName.Sub)
isAdd=true
end
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd,nil,nil,role)
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging,nil,nil,role)
end,
--敌方处于[a]类型[b]状态的单位死亡,有[c]*己方[d]阵营存活数的概率,将效果转移,持续[e]回合给目标周围有[f][g][h][i]类型效果的神将
--a[int],b[int],c[int],d[int],e[float],f[int]
@ -11655,5 +11703,518 @@ local passivityList = {
end
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundEnd, onRoundChange,nil,nil,role)
end,
--攻击附加自身[a]属性[b]%的间接伤害,由受击目标平分
--a[int],b[float]
[446]=function(role,args,id,judge)
local p1=args[1]
local v1=args[2]
local onSkillEnd = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
local list = skill:GetDirectTargetsNoMiss()
local len=#list
if list and len>0 then
local damage = floor(BattleUtil.FP_Mul(role:GetRoleData(BattlePropList[p1]), v1)/len)
for i = 1, #list do
BattleUtil.FinalDamage(nil, role, list[i],damage)
end
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd,nil,nil,role)
end,
--每回合开始时,以自身[a]的[b]%为全体神将添加御甲,可叠加,持续至战斗结束
--a[int],b[float]
[447]=function (role,args,id,judge)
local p1=args[1]
local v1=args[2]
local onRoundStart= function(round)
if role:IsDead() then
return
end
local list = RoleManager.Query(function(v) return v.camp == role.camp end)
for i = 1, #list do
local val = floor(BattleUtil.FP_Mul(v1, role:GetRoleData(BattlePropList[p1])))
--如果身上有御甲就添加御甲的值
BattleUtil.AddBlood(list[i],val)
end
end
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundStart,onRoundStart,nil,nil,role)
end,
-- 技能直接伤害的[a]%治疗友方生命最少[b]名队友,并恢复目标[c]属性[d]%的血量
-- a[float],b[int],c[int],d[float]
[448] = function(role, args,id,judge)
local f1 = args[1]
local num = args[2]
local p1 = args[3]
local v1 = args[4]
local allDamage = 0
local OnHit = function(atkRole, damage, bCrit, finalDmg, damageType, skill)
if skill and skill.type == BattleSkillType.Special then
--吸血修改finaldag 改成 damage by:王振兴 2020/08/17
allDamage = allDamage + damage
end
end
local function onSkillCast(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type == BattleSkillType.Special then
allDamage = 0
role.Event:AddEvent(BattleEventName.RoleHit, OnHit,nil,nil,role)
end
end
local function onSkillCastEnd(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type == BattleSkillType.Special then
role.Event:RemoveEvent(BattleEventName.RoleHit, OnHit)
local arr = RoleManager.NoOrder(function (r) return r.camp == role.camp and r.deadFilter end)
local len=#arr
if arr==nil or len==0 then
return
end
if num>len then
num=len
end
BattleUtil.SortByHpFactor(arr, 1)
for i = 1, num do
-- 检测技能伤害<E4BCA4><E5AEB3><EFBFBD>疗加成
local f = BattleUtil.CheckSkillDamageHeal(f1, role, arr[i])
-- 治疗血量最低队友实际伤害的f1%
BattleUtil.ApplyTreat(role, arr[i], floor(BattleUtil.ErrorCorrection(allDamage*f)))
local dd = floor(BattleUtil.ErrorCorrection(arr[i]:GetRoleData(BattlePropList[p1])*v1))
BattleUtil.FinalTreat(role, arr[i], dd)
end
-- 清空伤害记录
allDamage = 0
end
end
role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast,nil,nil,role)
role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd,nil,nil,role)
end,
--受到直接伤害有[a]%的概率给全体神将回复[b]点怒气
--a[float],b[int]
[449]=function (role,args,id,judge)
local p1=args[1]
local v1=args[2]
local isTrigger=true
local onBeHit = function(caster,damage, bCrit, finalDmg, damageType,skill)
if skill==nil then
return
end
if isTrigger==false then
return
end
BattleUtil.RandomAction(p1,function()
local list = RoleManager.Query(function(v) return v.camp == role.camp end)
for i = 1, #list do
local r = list[i]
if r and not r:IsDead() then
BattleUtil.CalRage(role,r,v1,CountTypeName.Add)
isTrigger=false
end
end
end)
end
role.Event:AddEvent(BattleEventName.RoleBeHit, onBeHit,nil,nil,role)
local onRoleTurnStart=function()
isTrigger=true
end
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundStart,onRoleTurnStart,nil,nil,role)
end,
--主动治疗己方神将时,治疗如果溢出,溢出血量的[a]%转化为御甲
--a[float]
[450] = function(role, args,id,judge)
local pro = args[1]
local onRoleTreat=function(target,realTreat,treat)
local hp=treat- realTreat
if hp>0 then
local value=floor(hp*pro)
BattleUtil.AddBlood(target,value)
end
end
local OnSkillCast = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
role.Event:AddEvent(BattleEventName.RoleTreat, onRoleTreat,nil,nil,role)
end
local OnSkillCastEnd = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
role.Event:RemoveEvent(BattleEventName.RoleTreat,onRoleTreat,nil,nil,role)
end
role.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast,nil,nil,role)
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd,nil,nil,role)
end,
--[a]%概率免疫减怒
--a[float]
[451]=function(role,args)
local pro=args[1]
BattleUtil.RandomAction(pro,function()
role.isImmuneReduceRage=true
end)
end,
-- 释放技能后[a]%概率再次释放技能,伤害为初始技能伤害[b]%,释放次数每增加1,概率是之前的[c]%;控制概率为之前[d]%
-- a[float],b[float],c[float],d[float]
[452] = function(role, args,id,judge)
local p1 = args[1]
local p2 = args[2]
local p3 = args[3]
local p4 = args[4]
local pro=p1
local triggerTime=0
local onSkillEnd = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type~=BattleSkillType.Special then
return
end
pro=p1*(p3^triggerTime)
local isRand=BattleUtil.RandomAction(pro,function()
triggerTime=triggerTime+1
role:AddSkill(BattleSkillType.Special, false, false, nil)
end)
--连击中断,概率和次数回调
if not isRand then
pro=p1
triggerTime=0
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd,nil,nil,role)
local OnPassiveDamaging = function(damagingFunc, defRole, damage)
if triggerTime==0 then
return
end
local dd = BattleUtil.CountValue(damage,p2, CountTypeName.SubPencent) - damage
damagingFunc(-floor(dd))
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging,nil,nil,role)
local onPassiveRandomControl = function(func, ctrl2,target,rand)
if triggerTime==0 then
return
end
local subValue=floor(rand-rand*p4)
if func then func(subValue, CountTypeName.Sub) end
end
role.Event:AddEvent(BattleEventName.PassiveRandomControl, onPassiveRandomControl,nil,nil,role)
end,
-- 技能,普攻治疗治疗有[a]%概率解除目标的禁疗效果
-- a[float]
[453] = function(role, args,id,judge)
local pro = args[1]
local curSkill = nil
local disposeCtrlNoHeal = function(caster,target)
if caster==role and target.ctrl_noheal then
BattleUtil.RandomAction(pro,function()
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
return buff.type == BuffName.Control and buff.ctrlType==4
end)
end)
end
end
local OnSkillCast = function(skill)
curSkill=skill
BattleLogic.Event:AddEvent(BattleEventName.DisposeRoleCtrl_noheal,disposeCtrlNoHeal)
end
local OnSkillCastEnd = function(skill)
curSkill=nil
BattleLogic.Event:RemoveEvent(BattleEventName.DisposeRoleCtrl_noheal,disposeCtrlNoHeal)
end
role.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast)
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--视敌方全体为燃烧
[454]=function(role, args,id,judge)
role.isAllBurn=true
end,
-- 释放技能后[a]%*目标数量的概率再次释放技能,伤害为初始技能伤害[b]%,追加技能是否触[c]发特性;如果目标处于[d]效果[e]状态,额外对其造成[f]%的间接伤害
-- a[float],b[float],c[int 0不触发 1触发 ],d[int],e[int],f[float] (d,e,f不填不触发)
[455] = function(role, args,id,judge)
local p1 = args[1]
local p2 = args[2]
local p3 = args[3]
local t1 = args[4]
local t2 = args[5]
local v1 = args[6]
local pro=p1
local triggerTime=0
local onSkillEnd = function(skill)
triggerTime=0
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type~=BattleSkillType.Special or skill.isAdd then
return
end
pro=p1*#skill:GetDirectTargetsNoExile()
local isTrigger=false
if p3==1 then
isTrigger=true
end
--LogError("pro=="..pro.." p1=="..p1.." len=="..#skill:GetDirectTargetsNoExile())
local isRand=BattleUtil.RandomAction(pro,function()
triggerTime=triggerTime+1
role:AddSkill(BattleSkillType.Special, false, true, nil,isTrigger)
end)
--连击中断,概率和次数回调
if not isRand then
--pro=p1
triggerTime=0
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd,nil,nil,role)
local OnPassiveDamaging = function(damagingFunc, defRole, damage,skill)
if triggerTime==0 then
return
end
local dd = BattleUtil.CountValue(damage,(1-p2), CountTypeName.SubPencent) - damage
--LogError("dd========="..dd)
damagingFunc(-floor(dd))
-- triggerTime=0
if t1 and t2 and v1 then
if BattleLogic.BuffMgr:HasBuff(defRole, t1, function (buff)
if t1==BuffName.DOT then
return buff.damageType==t2
end
end) then
local aaa=floor(damage*v1)
BattleUtil.FinalDamageCountShield(nil,role,defRole,aaa)
end
end
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging,nil,nil,role)
end,
--技能必定暴击
[456]=function(role, args,id,judge)
local crit=false
local OnSkillCast = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type==BattleSkillType.Special or skill.type==BattleSkillType.Extra then
crit=role.mustCrit
role.mustCrit = true
end
end
local OnSkillCastEnd = function(skill)
if skill.type==BattleSkillType.Special or skill.type==BattleSkillType.Extra then
role.mustCrit = crit
end
end
role.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast)
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--如果技能目标处于[a]效果[b]状态,必定命中
--a[int],b[int]
[457]=function(role, args,id,judge)
local t1=args[1]
local t2=args[2]
local crit=false
local OnSkillCast = function(skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
if skill.type==BattleSkillType.Special or skill.type==BattleSkillType.Extra then
local arr=skill:GetDirectTargets()
for i = 1, #arr do
if BattleLogic.BuffMgr:HasBuff(arr[i], t1, function (buff)
if t1==BuffName.DOT then
return buff.damageType==t2
end
end)
then
arr[i].beMustHit=true
end
end
end
end
local OnSkillCastEnd = function(skill)
if skill.type==BattleSkillType.Special or skill.type==BattleSkillType.Extra then
local arr=skill:GetDirectTargetsNoMiss()
for i = 1, #arr do
if BattleLogic.BuffMgr:HasBuff(arr[i], t1, function (buff)
if t1==BuffName.DOT then
return buff.damageType==t2
end
end)
then
arr[i].beMustHit=false
end
end
end
end
role.Event:AddEvent(BattleEventName.SkillCastBefore, OnSkillCast)
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--技能额外造成目标[a]属性 ([b]+10/目标数量)% 的伤害。
--a[int 属性id] b[float]
[458]=function(role,args,id,judge)
local f1 = args[1]
local dt = args[2]
-- 直接伤害后
local onPassiveDamaging = function(func, defRole, damage,skill)
if skill and not skill.isTriggerJudge and judge==1 then
return
end
--观音,这个被动只有额外技能才能触发 by王振兴 2021/1/21 17:48
if skill and (skill.type == BattleSkillType.Extra or skill.type == BattleSkillType.Special ) then
--如果是boss 并且额外伤害是根据最大生命则返回
if (f1==12 or f1==13) and BattleUtil.CheckIsBoss(defRole) then
return
end
local num=#skill:GetDirectTargetsNoExile()
local val = floor(BattleUtil.FP_Mul((dt+10/num)/100, defRole:GetRoleData(BattlePropList[f1])))
BattleUtil.FinalDamageCountShield(nil,role,defRole,val)
end
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, onPassiveDamaging,nil,nil,role)
end,
-- 敌方神将处于[a]效果[b]状态,己方神将对其造成伤害增加[c]%;额外造成[d]属性[e]%的间接伤害,每回合同一神将最多受到[f]次额外伤害
-- a[int] b[int] c[float] d[int] e[float] f[int]
[459] = function(role, args,id,judge)
local t1 = args[1]
local t2 = args[2]
local f2 = args[3]
local p1 = args[4]
local p2 = args[5]
local num = args[6]
local function onPassiveDamaging(damagingFunc, atkRole, defRole, damage,skill,skilldotType, bCrit,damageType, dotType,isDirect)
--不是真实伤害
if not skill and not isDirect then
return
end
if atkRole.camp==role.camp and BattleLogic.BuffMgr:HasBuff(defRole, t1, function (buff) return true end) then
local dd = BattleUtil.CountValue(damage, f2, CountTypeName.AddPencent) - damage
damagingFunc(-floor(BattleUtil.ErrorCorrection(dd)))
if p1 and p2 then
if defRole.suppressTime>=num then
return
end
if (p1==12 or p1==13) and BattleUtil.CheckIsBoss(defRole) then
return
end
local val = floor(BattleUtil.FP_Mul(p2, defRole:GetRoleData(BattlePropList[p1])))
BattleUtil.FinalDamageCountShield(nil,atkRole,defRole,val)
defRole.suppressTime=defRole.suppressTime+1
end
end
end
BattleLogic.Event:AddEvent(BattleEventName.PassiveDamaging, onPassiveDamaging,nil,nil,role)
local function onRoundChange()
local list=RoleManager.QueryIncludeExile(function(v) return true end,true)
for key, value in pairs(list) do
value.suppressTime=0
end
end
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, onRoundChange,nil,nil,role)
end,
-- 受到[a]攻击有[b]%概率使攻击者[c][d],持续[e]回合,参数1[f],参数2[g],参数3[h]
-- a[int 攻击类型],b[float],c[int],d[int],e[int],f[int/float],g[int/float],h[int/float] (a:0 所有攻击 1只限制技能伤害)
[460] = function(role, args)
local type=args[1]
local f1 = args[2]
local t1 = args[3]
local t2 = args[4]
local i1 = args[5]
local v1 = args[6]
local v2 = args[7]
local v3 = args[8]
-- 技能后后
local onRoleBeHit = function(caster,damage, bCrit, finalDmg, damageType, skill)
--屏蔽相同阵营
if caster.camp==role.camp then
return
end
--检测技能
if type==1 and (not skill or skill.type==BattleSkillType.Normal)then
return
end
local buff=nil
if t1==BuffName.Suppress then
buff=Buff.Create(role,t1,i1)
end
if buff then
BattleUtil.RandomAction(f1,function()
caster:AddBuff(buff)
end)
end
end
role.Event:AddEvent(BattleEventName.RoleBeHit, onRoleBeHit,nil,nil,role)
end,
--击杀目标为我方所有神将回复死亡目标生命上限*[a]% /我方剩余神将
--a[float]
[461] = function(role, args,id,judge)
local pro = args[1]
local OnDead = function(defRole, damage, bCrit, finalDmg, damageType, skill)
if skill==nil or skill.ownHero==nil then
return
end
if defRole:IsDead()==false or skill.ownHero:IsDead() then
return
end
local arr=RoleManager.Query(function(v) return v.camp==role.camp end)
--LogError("role:GetRoleData(RoleDataName.maxHp)==".. defRole:GetRoleData(RoleDataName.maxHp).." len== "..#arr)
local val = floor(BattleUtil.FP_Mul(pro, defRole:GetRoleData(RoleDataName.MaxHp))/#arr)
for i=1, #arr do
BattleUtil.ApplyTreat(role, arr[i], val)
end
end
role.Event:AddEvent(BattleEventName.RoleHit, OnDead,nil,nil,role)
end,
--受到直接伤害,[a]%概率给目标上[b]类型[c]效果,持续[d]回合,
--a[float],b[int],c[int],d[int]
[462] = function(role, args)
local pro = args[1]
local t1 = args[2]
local t2 = args[3]
local r1 = args[4]
local trigger=nil
local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType,skill)
if skill then
BattleUtil.RandomAction(pro,function()
local isBoss=BattleUtil.CheckIsBoss(atkRole)
if isBoss then
return
end
atkRole:AddBuff(Buff.Create(role,t1,r1,t2,1,2))
end)
end
end
trigger=RoleManager.GetRoleByCampAndPos(role.camp,role.position)
if trigger then
trigger.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit,nil,nil,role)
end
end,
}
return passivityList

View File

@ -37,6 +37,8 @@ BattleLogic.GameDeltaTime = 1 / BattleLogic.GameFrameRate
BattleLogic.TotalOrder = 0
--当前波次
BattleLogic.CurOrder = 0
--当前回合触发总次数添加buff伤害治疗
local curRoundTriggerTime=0
local actionPool = BattleObjectPool.New(function ()
return { 0, 0 }
end)
@ -46,6 +48,9 @@ local rolePool = BattleObjectPool.New(function ()
return RoleLogic.New()
end)
function BattleLogic.AddRoundTriggerTime()
curRoundTriggerTime=curRoundTriggerTime+1
end
function BattleLogic.Init(data, _userData, maxRound)
if BattleLogic.IsOpenBattleRecord then
record = {}
@ -70,9 +75,9 @@ function BattleLogic.Init(data, _userData, maxRound)
BattleLogic.Result = -1
-- 日志管理放到前面初始化
BattleLogManager.Init(fightData, userData, maxRound)
MonsterManager.Init()
RoleManager.Init()
MonsterManager.Init()
FightWeaponManager.Init()
SkillManager.Init()
OutDataManager.Init(fightData)
PassiveManager.Init()
@ -96,7 +101,9 @@ function BattleLogic.Init(data, _userData, maxRound)
allEnemyDamage=allEnemyDamage+damage
end
end)
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange,function()
curRoundTriggerTime=0
end)
end
@ -163,6 +170,14 @@ function BattleLogic.InitOrder()
MonsterManager.AddMonster(playerMonsterList[i])
end
end
local playerWeaPonList = fightData.playerData.weaponList
if playerWeaPonList then
for i=1, #playerWeaPonList do
--LogError("创建一个神兵")
FightWeaponManager.AddWeapon(playerWeaPonList[i])
end
end
local enemyMonsterList = fightData.enemyData[1].monsterList
if enemyMonsterList then
@ -170,6 +185,13 @@ function BattleLogic.InitOrder()
MonsterManager.AddMonster(enemyMonsterList[i])
end
end
local enemyWeaponList = fightData.enemyData[1].weaponList
if enemyWeaponList then
for i=1, #enemyWeaponList do
LogError("创建一个神兵")
FightWeaponManager.AddWeapon(enemyWeaponList[i])
end
end
else
RoleManager.ClearEnemy()
@ -182,7 +204,16 @@ function BattleLogic.InitOrder()
local enemyMonsterList = orderList.monsterList
if enemyMonsterList then
for i=1, #enemyMonsterList do
MonsterManager.AddMonster(enemyMonsterList[i])
MonsterManager.AddMonster(enemyMonsterList[i])
end
end
FightWeaponManager.ClearEnemy()
local enemyWeaponList = orderList.weaponList
if enemyWeaponList then
for i=1, #enemyWeaponList do
--LogError("创建一个神兵")
FightWeaponManager.AddWeapon(enemyWeaponList[i])
end
end
end
@ -481,6 +512,11 @@ function BattleLogic.Update()
BattleLogic.BattleEnd(-1)
return
end
if curRoundTriggerTime>2000 then
--assert(false, "Battle Round Time Out !!!")
BattleLogic.BattleEnd(-2)
return
end
local roleResult = RoleManager.GetResult()
if roleResult == 0 then
BattleLogic.BattleEnd(0)
@ -570,6 +606,7 @@ function BattleLogic.BattleEnd(result)
local v1 = HardStageCondition.CheckCondition(harConfig.ConditionType,harConfig.ConditionValue)
table.insert(levelStarRecord,hardStageConfig.ConditionValue[i])
table.insert(levelStarRecord,v1)
print("k=="..hardStageConfig.ConditionValue[i].." v=="..v1)
end
end
end
@ -616,6 +653,7 @@ end
function BattleLogic.Clear()
-- 清空角色
RoleManager.Clear()
MSkillManager.Clear()
-- 清空事件
while tbActionList.size > 0 do
actionPool:Put(tbActionList.buffer[tbActionList.size])

View File

@ -2,7 +2,7 @@ BreakArmor = Buff:New()
--初始化Buff通过传入一些自定义参数控制成长相关的数值
function BreakArmor:SetData(...)
self.signType, --1 破军 2.迷魂 3. 4.主角状态
self.signType, --1 破军 2.迷魂 3. 4.主角状态 5.仇视
self.signValue1,
self.signValue2=...
-- 刷新排序等级

View File

@ -25,7 +25,7 @@ end
--初始化后调用一次
function DOT:OnStart()
if self.caster.isTeam or self.caster.type == BattleUnitType.Player then
if self.caster.isTeam or self.caster.type == BattleUnitType.Player or self.caster.type == BattleUnitType.Weapon then
self.isRealDamage = true
end
end

View File

@ -43,6 +43,7 @@ BattleEventName = {
BattleEnd = indexAdd(),
AddRole = indexAdd(),
AddMonster = indexAdd(),
AddWeapon = indexAdd(),
RemoveRole = indexAdd(),
RemoveMonster = indexAdd(),
MpChanged = indexAdd(),
@ -201,7 +202,8 @@ BattleEventName = {
CheckDamageIsImmune = indexAdd(),--检测伤害是否免疫
BloodValueGetZero = indexAdd(), --御甲值清零
RoleAddBuffCheckBan = indexAdd(),--角色添加buff检测是否被禁止
WeaponSkillCast = indexAdd(), --神兵技能释放
CheckFalseNoDead = indexAdd(), --检测伪不灭
}
BattleMaxFrame = 1000000
@ -287,6 +289,9 @@ BuffName = {
BreakArmor = 17,
AddAttack = 18,
Suppress = 19,
BuDongSign = 20,
FalseNoDead=21, --伪不灭
SuckBlood = 22, --吸血
}
DotType = {
@ -375,6 +380,7 @@ BattleUnitType = {
Role = 1,
Monster = 2,
Player = 3,
Weapon = 4, --武器
}
BattleRoleElementType = {

View File

@ -238,13 +238,13 @@ function BattleUtil.SortByRage(arr, sort)
if r1==r2 then
return a.position>b.position
else
return r1 < r2
return r1 > r2
end
else
if r1==r2 then
return a.position>b.position
else
return r1 > r2
return r1 < r2
end
end
end)
@ -320,13 +320,15 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType)
return {arr[1]}
end
return {RoleManager.GetAggro(role)}
elseif chooseType == 5 then --神兵对应的英雄
local weaponer=RoleManager.GetRoleByCampAndPos(role.camp,role.position)
return {weaponer}
else
arr = RoleManager.Query()
end
--选择范围
if chooseLimit == 0 then --选择全体不做任何操作
elseif chooseLimit == 1 then-- 前排
local tempArr = BattleUtil.ChooseFRow(arr)
if #tempArr == 0 then -- 没有选择后排
@ -432,13 +434,13 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType)
BattleUtil.SortByProp(tempArr,RoleDataName.Attack,sort)
arr=tempArr
elseif chooseWeight ==10 then --剩余血量百分比低于25%且生命绝对值最小
return BattleUtil.GetHpPctLessThanPctHero(arr,0.25)
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.25)}
elseif chooseWeight ==11 then --剩余血量百分比低于32%且生命绝对值最小
return BattleUtil.GetHpPctLessThanPctHero(arr,0.32)
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.32)}
elseif chooseWeight ==12 then --剩余血量百分比低于40%且生命绝对值最小
return BattleUtil.GetHpPctLessThanPctHero(arr,0.40)
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.40)}
elseif chooseWeight ==13 then --剩余血量百分比低于50%且生命绝对值最小
return BattleUtil.GetHpPctLessThanPctHero(arr,0.50)
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.50)}
elseif chooseWeight ==14 then --我方战位最靠前的单位 的对位及相邻
local list=nil
list=RoleManager.Query(function (r) return r.camp == role.camp end)
@ -464,6 +466,12 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType)
--BattleUtil.SortByProp(arr, RoleDataName.Hp, sort)
BattleUtil.SortByRage(arr, sort)
end
elseif chooseWeight ==18 then --剩余血量百分比低于30%且生命绝对值最小
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.30)}
elseif chooseWeight ==19 then --剩余血量百分比低于35%且生命绝对值最小
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.35)}
elseif chooseWeight ==20 then --剩余血量百分比低于35%且生命绝对值最小
return {BattleUtil.GetHpPctLessThanPctHero(arr,0.45)}
end
local finalArr = {}
if num == 0 then
@ -486,10 +494,10 @@ end
function BattleUtil.GetHpPctLessThanPctHero(arr,pct)
local hp=0
local hero=nil
for i = 1, #arr[i] do
for i = 1, #arr do
local aaa=arr[i]
local curHp=aaa:GetRoleData(RoleDataName.Hp)
local r1 = curHp / aaa:GetRoleData(RoleDataName.MaxHp)
local r1 = curHp /aaa:GetRoleData(RoleDataName.MaxHp)
if r1<pct then
if hero==nil then
hero=aaa
@ -576,10 +584,18 @@ end
-- 秒杀
function BattleUtil.Seckill(skill, atkRole, defRole)
-- 灵兽无效
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then
return
end
--检测伪不灭
local damage = defRole:GetRoleData(RoleDataName.Hp)
local realDamage=damage
local damagingFunc = function(dmgDeduction)
realDamage = dmgDeduction
damage=realDamage
end
defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill)
local finalDmg = defRole.data:SubValue(RoleDataName.Hp, damage)
if finalDmg >= 0 then
if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then
@ -608,10 +624,16 @@ end
-- 秒杀定额血量
function BattleUtil.SeckillHP(skill, atkRole, defRole, pro)
-- 灵兽无效
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then
return
end
local damage = floor(BattleUtil.FP_Mul(defRole:GetRoleData(RoleDataName.MaxHp),pro))
local realDamage=damage
local damagingFunc = function(dmgDeduction)
realDamage = dmgDeduction
damage=realDamage
end
defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill)
local finalDmg = defRole.data:SubValue(RoleDataName.Hp, damage)
if finalDmg >= 0 then
if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then
@ -642,7 +664,7 @@ function BattleUtil.ApplyDamage(skill, atkRole, defRole, damage, bCrit, damageTy
return
end
-- 灵兽无效
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then
return
end
@ -708,8 +730,8 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit,
end
--计算血量防护
local realDamage=damage
--血量防护只会防直接伤害
if defRole.bloodShield and skill then
--血量防护只会防直接伤害 也能防护间接伤害 2023/01/11
if defRole.bloodShield then
realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole))
-- damage=realDamage
end
@ -726,6 +748,12 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit,
damage=0
end
--御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27
--检测伪不灭
local damagingFunc = function(dmgDeduction)
realDamage = dmgDeduction
damage=realDamage
end
defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect)
local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage)
if finalDmg >= 0 then
if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then
@ -860,7 +888,7 @@ end
function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect)
-- 灵兽无效
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then
if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then
return
end
if damage < 0 then damage = 0 end
@ -870,8 +898,8 @@ function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageTy
end
--计算血量防护
local realDamage=damage
--血量防护只会防直接伤害
if defRole.bloodShield and skill then
--血量防护只会防直接伤害 也能防护间接伤害 2023/01/11
if defRole.bloodShield then
realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole))
-- damage=realDamage
end
@ -887,6 +915,12 @@ function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageTy
realDamage=0
damage=0
end
--检测伪不灭
local damagingFunc = function(dmgDeduction)
realDamage = dmgDeduction
damage=realDamage
end
defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect)
--御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27
local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage)
if finalDmg >= 0 then
@ -934,7 +968,7 @@ function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageTy
"damage", damage,
"dotType", tostring(dotType)
)
BattleLogic.AddRoundTriggerTime()
return finalDmg
end
@ -953,8 +987,8 @@ function BattleUtil.FinalDamageCountShield(skill, atkRole, defRole, damage, bCri
end
--计算血量防护
local realDamage=damage
--血量防护只会防直接伤害
if defRole.bloodShield and skill then
--血量防护只会防直接伤害 也能防护间接伤害 2023/01/11
if defRole.bloodShield then
realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole))
-- damage=realDamage
end
@ -972,6 +1006,12 @@ function BattleUtil.FinalDamageCountShield(skill, atkRole, defRole, damage, bCri
realDamage=0
damage=0
end
--检测伪不灭
local damagingFunc = function(dmgDeduction)
realDamage = dmgDeduction
damage=realDamage
end
defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect)
local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage)
if finalDmg >= 0 then
if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then
@ -1200,7 +1240,7 @@ function BattleUtil.CalTreat(castRole, targetRole, value, baseFactor,skill)
return
end
-- 灵兽无效
if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player then
if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player or targetRole.type == BattleUnitType.Weapon then
return
end
BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole,targetRole)
@ -1211,12 +1251,13 @@ function BattleUtil.CalTreat(castRole, targetRole, value, baseFactor,skill)
end
return
end
local mustCrit=castRole.mustCrit
-- 是否暴击: 暴击率 = 自身暴击率 - 对方抗暴率
local bCrit = false
local critRandom = Random.Range01()
local critCondition = castRole:GetRoleData(RoleDataName.Crit)
bCrit = critRandom <= critCondition
bCrit = bCrit or targetRole.isFlagCrit == true -- 必定暴击
bCrit =mustCrit or bCrit or targetRole.isFlagCrit == true -- 必定暴击
-- 计算暴伤害系数
local critDamageFactor = 1
--计算暴击
@ -1385,6 +1426,7 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamag
"tpos", targetRole.position,
"value", value
)
BattleLogic.AddRoundTriggerTime()
end
@ -1406,7 +1448,7 @@ function BattleUtil.CheckIsHit(atkRole, defRole,skill)
BattleLogic.Event:DispatchEvent(BattleEventName.PassiveChangeRoleHit,addHitFunc,atkRole,defRole)
local hitCondition = clamp(atkRole:GetRoleData(RoleDataName.Hit)+addHit - defRole:GetRoleData(RoleDataName.Dodge), 0, 1)
isHit = hitRandom <= hitCondition
return mustHit or isHit
return mustHit or defRole.beMustHit or isHit
end
@ -1426,6 +1468,7 @@ function BattleUtil.AddBlood(target,value)
else
target.Event:DispatchEvent(BattleEventName.ShowHintText, BattleArtFontType.Blood)
end
BattleLogic.AddRoundTriggerTime()
end
@ -1458,7 +1501,7 @@ function BattleUtil.RandomControl(rand, ctrl, caster, target, round,skill)
table.insert(cl, {v, ct})
end
end
caster.Event:DispatchEvent(BattleEventName.PassiveRandomControl, _CallBack, ctrl, target)
caster.Event:DispatchEvent(BattleEventName.PassiveRandomControl, _CallBack, ctrl, target,rand)
target.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl, target)
BattleLogic.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl,caster,target)
rand = BattleUtil.CountChangeList(rand, cl)

View File

@ -8,7 +8,10 @@ local this = MonsterManager
function MonsterManager.Init()
this.monsterList = {}
-- 初始化灵兽技能管理
MSkillManager.Init()
if MSkillManager.isInit==false then
--LogError("初始化 ====================mskikkmanager")
MSkillManager.Init()
end
end
function MonsterManager.AddMonster(data)

View File

@ -16,6 +16,12 @@ function MSkill:Init(owner, group, index, skillData,playerSkillIndex)
self.isAdd = false
self.isRage = false
self.type = BattleSkillType.Monster
--LogError("当前灵兽类型====================="..owner.type)
--LogError("owner.camp=="..owner.camp.." owner.position=="..owner.position)
-- if owner.type==BattleUnitType.Weapon then
self.ownHero=RoleManager.GetRoleByCampAndPos(owner.camp,owner.position)
-- end
--后端传过来的数据最后一个是主角技能
if owner.position==100 then
if playerSkillIndex==self.owner.skillNum then
@ -85,6 +91,7 @@ function MSkill:Cast(func)
end
-- 释放技能开始
--LogError("灵兽释放技能")
self.owner.Event:DispatchEvent(BattleEventName.SkillCast, self)
BattleLogic.Event:DispatchEvent(BattleEventName.SkillCast, self)
-- 只对效果1的目标发送事件效果1是技能的直接伤害目标

View File

@ -5,7 +5,9 @@ require("Modules.Battle.Logic.Monster.MonsterSkill.MSkillGroup")
MSkillManager = {}
local this = MSkillManager
this.isInit=false
function this.Init()
this.isInit=true
this.MSkillGroupList = {} -- 技能组列表
this.MSkillList = {} -- 技能列表
MTrigger.Init()
@ -45,5 +47,9 @@ function this.CreateMSkill(monster, group, index, skilldata,groupIndex)
return this.MSkillList[position][groupIndex][index]
end
function this.Clear()
this.isInit=false
end
return MSkillManager

View File

@ -98,6 +98,7 @@ function RoleLogic:Init(uid, data, position)
self.bloodShield = nil
self.IsCanAddSkill = true -- 是否可以追加技能
self.mustHit=false --必定命中
self.beMustHit=false --必定被命中
self.mustCrit=false --必定暴击
self.isBanBlood=false --是否禁止上御甲
self.isImmuneAllReduceShield = false --免疫敌方无敌盾(敌方无敌盾对自己无效)
@ -106,6 +107,8 @@ function RoleLogic:Init(uid, data, position)
self.addAttack=0 --添加的攻击
self.isNormalAttackAddRage=true --普攻是否回复怒气
self.curMainTarget=nil --当前主目标
self.isAllBurn = false --是否视敌方全体为燃烧
self.suppressTime = 0 --被压制的次数
self.passiveList = {}
if data.passivity and #data.passivity > 0 then
--排序363类型的排在前面
@ -410,6 +413,7 @@ function RoleLogic:AddBuff(buff,_ignorePro)
end
end
BattleLogic.BuffMgr:AddBuff(self, buff)
BattleLogic.AddRoundTriggerTime()
end
end
@ -433,7 +437,8 @@ function RoleLogic:IsAvailable(skill)
return false
end
--角色没有真正死亡 在 被眩晕/沉默的 情况下 任然能释放死亡技能
if (self.ctrl_dizzy or self.ctrl_slient) and self:IsDead() and skill and skill.type==BattleSkillType.DeadSkill then
--(self.ctrl_dizzy or self.ctrl_slient) and
if self:IsDead() and skill and skill.type==BattleSkillType.DeadSkill then
return true
end
-- 眩晕 -- 死亡

View File

@ -160,6 +160,10 @@ function this.GetRole(camp, pos)
return PosList[pos + camp*6]
end
function this.GetRoleByCampAndPos(camp, pos)
return PosList[pos + camp*6]
end
-- 获取某阵营所有角色
function this.GetRoleByCamp(camp)
local list = {}

View File

@ -91,7 +91,7 @@ function Skill:Cast(func)
--技能的施法时间计算根据当前目标id关联的持续时间取其中时间最长的一个
local duration = self.hitTime + self.continueTime
-- 结算时间向后延长0.2秒,避免在效果结算完成前就结束了技能释放
local time=0.8
local time=1.2
-- if self.id==1282 then
-- time=1
-- end
@ -148,7 +148,7 @@ end
function Skill:EndSkill()
-- 技能后摇
-- 技能结束后摇后结束技能释放
BattleLogic.WaitForTrigger(0.3, function()
BattleLogic.WaitForTrigger(0.5, function()
-- 结束回调
self.isTriggePassivity=false
self.triggerPassivityId={}

View File

@ -1,256 +1,42 @@
v1.0.115
1.添加被动444445
v1.0.114
1.被动273189184修改
master_zh_test同步数据表2022_09_02_16_53_59
master_zh_test同步数据表2022_08_24_16_07_52
v1.0.113
1.被动387 437修改
master_zh_test同步数据表2022_08_17_18_26_38
master_zh_test同步数据表2022_08_10_18_33_50
master_zh_test同步数据表2022_08_10_17_37_10
master_zh_test同步数据表2022_08_10_15_22_09
master_zh_test同步数据表2022_08_03_17_06_59
v1.0.112
1.online_special 同步到zh_test
v1.0.111
1.438修改
v1.0.110
1.新增神印
master_zh_test同步数据表2022_03_29_17_06_53
master_zh_test同步数据表2022_03_22_11_35_14
master_zh_test同步数据表2022_03_22_11_35_01
master_zh_test同步数据表2022_03_21_16_48_11
v1.0.109
1.新增神系英雄技能被动
master_zh_test同步数据表2022_03_14_18_15_06
master_zh_test同步数据表2022_03_14_17_24_10
v1.0.108
1.新增429 430 431被动
master_zh_test同步数据表2022_03_08_16_52_49
v1.0.107
1.新增427 428被动
master_zh_test同步数据表2022_03_07_17_48_07
master_zh_test同步数据表2022_03_02_15_24_08
v1.0.106
1.新增425 426被动
master_zh_test同步数据表2022_03_01_15_02_06
v1.0.105
1.新增425 426被动
v1.0.104
1.被动375修改
master_zh_test同步数据表2022_02_22_19_20_35
master_zh_test同步数据表2022_02_22_18_59_21
v1.0.103
1.被动226 423 424修改
master_zh_test同步数据表2022_02_22_10_34_06
master_zh_test同步数据表2022_02_15_15_03_42
v1.0.102
1.效果108修改
2.被动356修改 新增422
master_zh_test同步数据表2022_02_08_14_14_42
v1.0.101
1.修复姑获鸟神魂五对所有人生效的问题
v1.0.100
1.御甲初始化修改
master_zh_test同步数据表2022_01_24_18_51_19
v1.0.99
1.御甲显示修改
v1.0.98
1.被动414修改
master_zh_test同步数据表2022_01_24_10_59_41
master_zh_test同步数据表2022_01_18_15_41_40
v1.0.97
1.护盾buff修改
master_zh_test同步数据表2022_01_17_16_56_13
master_zh_test同步数据表2022_01_17_16_30_59
master_zh_test同步数据表2022_01_15_19_12_17
v1.0.96
1.被动417-421 白金法宝
master_zh_test同步数据表2022_01_11_16_23_47
master_zh_test同步数据表2022_01_10_18_57_57
v1.0.95
1.新增被动414-417
2.添加御甲修改
v1.0.94
1.被动283修改
v1.0.93
1.战斗结束获取队伍剩余角色信息接口修改
master_zh_test同步数据表2021_12_28_09_56_49
master_zh_test同步数据表2021_12_24_18_32_21
v1.0.92
1.新增412被动 56被动修改
master_zh_test同步数据表2021_12_21_18_13_54
v1.0.91
1.护盾buff修改
2.鲸吞魂印修改
v1.0.90
1、修复RoleManager table.removebyvalue方法空报错
master_zh_test同步数据表2021_12_14_12_03_26
v1.0.89
1.第五期神魂
2.第二期变身卡
master_zh_test同步数据表2021_12_13_18_06_46
v1.0.88
1.被动257修改
2.不灭修改
v1.0.87
1.被动257修改
master_zh_test同步数据表2021_12_07_17_09_58
master_zh_test同步数据表2021_12_07_16_56_46
v1.0.86
1 战斗驱动逻辑修改 回合转换添加延时减半
2.被动257修改
v1.0.85
1 战斗驱动逻辑修改 回合转换添加延时减半
v1.0.84
1 战斗驱动逻辑修改 回合转换添加延时
master_zh_test同步数据表2021_12_06_19_02_28
v1.0.83
1 第四期神魂添加
master_zh_test同步数据表2021_11_30_12_06_26
v1.0.82
1 目标选择逻辑添加
master_zh_test同步数据表2021_11_29_19_48_14
v1.0.81
1、效果137修改
master_zh_test同步数据表2021_11_27_22_26_12
v1.0.80
1、同步战斗逻辑
master_zh_test同步数据表2021_11_23_11_29_17
v1.0.79
1、被动391修改 我方流血显示修改
master_zh_test同步数据表2021_11_22_18_00_26
v1.0.78
1、被动112 258 360修改提交
2. 伤害公式修改
3.战斗超时 pvp添加战斗类型
v1.0.77
1、第三批神魂提交
v1.0.76
1、修复前后端战斗数据格式不一致导致的结果不一致
master_zh_test同步数据表2021_11_16_11_07_25
v1.0.75
1添加不处理增伤的伤害接口
master_zh_test同步数据表2021_11_15_17_10_47
v1.0.74
1第二期神魂技能
master_zh_test同步数据表2021_11_08_18_01_19
v1.0.73
1被动285修改
master_zh_test同步数据表2021_11_08_17_48_59
v1.0.72
1第一期神魂技能
v1.0.71
1灵兽技能检测添加初始化
2.追加技能特效修改
v1.0.70
1、添加神魂被动技能
master_zh_test同步数据表2021_11_01_14_07_31
master_zh_test同步数据表2021_10_26_10_10_26
master_zh_test同步数据表2021_10_25_18_57_36
v1.0.69
1、战斗公式修改
master_zh_test同步数据表2021_10_22_18_57_18
v1.0.68
1、添加主角技能
2. 被动199修改
master_zh_test同步数据表2021_10_18_11_00_42
master_zh_test同步数据表2021_10_16_19_07_28
master_zh_test同步数据表2021_10_16_19_06_48
v1.0.67
1、被动344添加空判断
2. 战斗力公式修改
master_zh_test同步数据表2021_10_12_15_58_23
master_zh_test同步数据表2021_10_12_10_25_47
master_zh_test同步数据表2021_10_11_18_25_43
v1.0.66
1、被动312修改
master_zh_test同步数据表2021_10_09_18_47_41
master_zh_test同步数据表2021_10_09_18_46_50
v1.0.65
1、被动116 258 281 312 344 250修改
2. 精卫借的怒气不会回复怒气
3. 添加不处理增伤被动的方法
master_zh_test同步数据表2021_09_28_17_45_03
v1.0.64
1、353 351 137 被动修改
2. 添加获取没有出发不灭的目标
master_zh_test同步数据表2021_09_27_18_41_38
v1.0.63
1、353被动修改
v1.0.62
1、添加御甲buff
2.添加最后一期紫府神印,添加白金装备被动 觉醒被动修改
master_zh_test同步数据表2021_09_26_20_35_14
master_zh_test同步数据表2021_09_18_21_14_36
master_zh_test同步数据表2021_09_18_18_42_35
1. 同步战斗
v1.0.61
1、技能是否能释放 添加是否有技能目标判断
2.被动196 200 188 修改
master_zh_test同步数据表2021_09_17_16_21_53
master_zh_test同步数据表2021_09_15_20_05_28
master_zh_test同步数据表2021_09_15_14_23_26
master_zh_test同步数据表2021_09_14_15_46_46
master_zh_test同步数据表2021_09_14_11_51_05
1. 同步战斗
v1.0.60
1、被动56修改
master_zh_test同步数据表2021_09_11_18_04_19
1. 同步战斗
v1.0.59
1、被动261 修改
master_zh_test同步数据表2021_09_10_18_24_51
1. 同步战斗
v1.0.58
1、修复方法缺失报错
1. 被动414修改
2.御甲显示修改
v1.0.57
1、尝试修复孙悟空大招不会增加伤害的问题
2、添加用于debug的log
master_zh_test同步数据表2021_09_07_11_00_31
1. 护盾buff修改
v1.0.56
1.选生命百分比最少目标逻辑修改 去掉有不灭单位
2. 死亡不把怒气显示清空
3.被动99 307 选目标逻辑修改
1. 被动417-421
v1.0.55
1.被动263 269 274 332 112 145 修改
2. 添加战斗日志
v1.0.54
1. 被动91 被动115 160修改
2. Dot类buff清除逻辑修改
master_zh_test同步数据表2021_08_27_18_25_18
master_zh_test同步数据表2021_08_21_16_34_06
v1.0.54
1. 被动141 310 283 330 336修改
master_zh_test同步数据表2021_08_02_19_27_29
1. 56被动修改
v1.0.54
1. 新加被动412
v1.0.53
1. 随机种子修改
master_zh_test同步数据表2021_07_31_17_55_16
master_zh_test同步数据表2021_07_31_17_54_20
1. 神魂第一期英雄技能添加
v1.0.52
1. 死亡技能不会被控制
2.追加技能是否触发特性修改
master_zh_test同步数据表2021_07_26_11_10_56
1. 灵兽技能检测修改
v1.0.51
1. 被动292 修改
1. 山河社稷图星级检测修改
v1.0.50
1. 被动292 319修改
master_zh_test同步数据表2021_07_13_18_19_09
master_zh_test同步数据表2021_07_10_20_33_05
1. 灵兽技能触发机制修改
v1.0.49
1. 同步客户端逻辑
1. 同步dev分支战斗逻辑
v1.0.48
1. 新增紫府神印被动效果
1. 同步dev分支战斗逻辑
v1.0.47
1. 新增英雄觉醒被动 及 困难副本被动 效果
master_zh_test同步数据表2021_06_30_07_33_23
master_zh_test同步数据表2021_06_28_13_40_30
1. 同步dev分支战斗逻辑
v1.0.46
1、同步数据表
1. 同步dev分支战斗逻辑
v1.0.45
1. 【战斗】修改免疫控制效果清除提示
1. 新增紫府神印被动效果
v1.0.44
1. 【战斗】修复群体性的免疫效果不会正常消失的问题
1. 新增英雄觉醒被动 及 困难副本被动 效果
v1.0.43
1. 被动200修改
v1.0.42
@ -395,4 +181,4 @@ v1.0.1
v1.0.0
1、创建战斗版本文件
2、灵兽技能加入
2、灵兽技能加入