|
|
@@ -36,7 +36,7 @@ local function canTarget(obj)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-function getObj(pos)
|
|
|
+local function getObj(pos)
|
|
|
-- 不能直接取 援军对象
|
|
|
if pos == CombatDefine.BACKUP_POS[1] or pos == CombatDefine.BACKUP_POS[2] then return end
|
|
|
|
|
|
@@ -102,31 +102,15 @@ function getTargets(attacker, targetMode, skillTargets, cmdTargets, checkChaofen
|
|
|
return ret
|
|
|
end
|
|
|
|
|
|
-
|
|
|
-
|
|
|
--- 全体目标
|
|
|
---[[
|
|
|
- @param2 = {
|
|
|
- handlerID,
|
|
|
- side 0: 全部双方 1:敌方 2: 己方
|
|
|
- isSkillTarget 1:非 2:是;默认1
|
|
|
- exclude 1: 否 2:是 和isSkillTarget关联,是skillTarget还是取非skillTarget
|
|
|
- }
|
|
|
- @param3 = targetObjList 技能目标(所有目标)
|
|
|
-]]
|
|
|
-local function handler2(attacker,targetMode,skillTargets)
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
- -- 如果传入有skillTarget 优先使用技能所带的target集合
|
|
|
- local isSkillTarget = targetMode[3] or 1
|
|
|
- local exclude = targetMode[4] or 1
|
|
|
+local function getTargetList(side,isSkillTarget,exclude,skillTargets)
|
|
|
local targetList = {}
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
+ for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[side]) do
|
|
|
local obj = getObj(pos)
|
|
|
if canTarget(obj) then
|
|
|
targetList[#targetList+1] = obj
|
|
|
end
|
|
|
end
|
|
|
- if isSkillTarget ~= 1 then
|
|
|
+ if isSkillTarget ~= 1 then
|
|
|
local skillTargetList = {}
|
|
|
for _,obj in ipairs(skillTargets) do
|
|
|
skillTargetList[#skillTargetList + 1] = obj
|
|
|
@@ -145,6 +129,25 @@ local function handler2(attacker,targetMode,skillTargets)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
+ return targetList
|
|
|
+end
|
|
|
+
|
|
|
+-- 全体目标
|
|
|
+--[[
|
|
|
+ @param2 = {
|
|
|
+ handlerID,
|
|
|
+ side 0: 全部双方 1:敌方 2: 己方
|
|
|
+ isSkillTarget 1:非 2:是;默认1
|
|
|
+ exclude 1: 否 2:是 和isSkillTarget关联,是skillTarget还是取非skillTarget
|
|
|
+ }
|
|
|
+ @param3 = targetObjList 技能目标(所有目标)
|
|
|
+]]
|
|
|
+local function handler2(attacker,targetMode,skillTargets)
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
+ -- 如果传入有skillTarget 优先使用技能所带的target集合
|
|
|
+ local isSkillTarget = targetMode[3] or 1
|
|
|
+ local exclude = targetMode[4] or 1
|
|
|
+ local targetList = getTargetList(targetSide,isSkillTarget,exclude,skillTargets)
|
|
|
-- 转化为目标target
|
|
|
for _,obj in ipairs (targetList) do
|
|
|
targets[#targets + 1] = obj
|
|
|
@@ -445,11 +448,7 @@ local function handler33(attacker,targetMode)
|
|
|
|
|
|
end
|
|
|
|
|
|
-
|
|
|
-
|
|
|
------------------------------------- 未实现功能 分界线 ------------------------------------
|
|
|
-
|
|
|
--- 根据指定buff层数选择x个目标
|
|
|
+-- 根据自身指定buff层数选择x个目标
|
|
|
--[[
|
|
|
@param2 = {
|
|
|
handlerID,
|
|
|
@@ -457,27 +456,69 @@ end
|
|
|
buffID buff ID
|
|
|
count, buff层数 默认为1
|
|
|
cnt, 选择几个目标 默认为1
|
|
|
+ isSkillTarget 1:非 2:是;默认1
|
|
|
+ exclude 1: 否 2:是 和isSkillTarget关联,是skillTarget还是取非skillTarget
|
|
|
}
|
|
|
]]
|
|
|
local function handler32(attacker, targetMode, skillTargets)
|
|
|
+ local buffID = assert(targetMode[3],"invalid config")
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
-
|
|
|
+ local isSkillTarget = targetMode[6] or 1
|
|
|
+ local exclude = targetMode[7] or 1
|
|
|
+ local targetList = getTargetList(targetSide,isSkillTarget,exclude,skillTargets)
|
|
|
+ local exist,buffLayer = CombatBuff.isStatus(attacker,buffID)
|
|
|
+ if not exist then
|
|
|
+ return
|
|
|
+ end
|
|
|
+ local count = buffLayer // (targetMode[4] or 1 )
|
|
|
+ local maxHit = targetMode[5] or 1
|
|
|
+ local hitObjMap = {}
|
|
|
+ -- 打乱targetList表
|
|
|
+ table.shuffle(targetList)
|
|
|
+ -- 筛选targets
|
|
|
+ while true do
|
|
|
+ if #targetList <= 0 or count <= 0 then
|
|
|
+ break
|
|
|
+ end
|
|
|
+ local r = math.random(#targetList)
|
|
|
+ local obj = targetList[r]
|
|
|
+ hitObjMap[obj.pos] = hitObjMap[obj.pos] or 0
|
|
|
+ -- 如果有重复的obj应该也删除
|
|
|
+ if hitObjMap[obj.pos] >= maxHit then
|
|
|
+ table.remove(targetList,r)
|
|
|
+ else
|
|
|
+ hitObjMap[obj.pos] = hitObjMap[obj.pos] + 1
|
|
|
+ targets[#targets+1] = obj
|
|
|
+ count = count - 1
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
-- 复活x个单位
|
|
|
--[[
|
|
|
- @param = {
|
|
|
+ @param2 = {
|
|
|
handlerID,
|
|
|
side,
|
|
|
cnt, 选择复活的数量 默认为1
|
|
|
}
|
|
|
]]
|
|
|
-function handler21(attacker,targetMode)
|
|
|
+local function handler21(attacker,targetMode)
|
|
|
local cnt = targetMode[3] or 1
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
-
|
|
|
+ local targetList = getTargetList(targetSide,1)
|
|
|
+ table.shuffle(targetList)
|
|
|
+ for _,obj in ipairs(targetList) do
|
|
|
+ -- 判断能否复活
|
|
|
+ if CombatBuff.canRevive(obj) then
|
|
|
+ targets[#targets+1] = obj
|
|
|
+ end
|
|
|
+ if #targets >= cnt then
|
|
|
+ break
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
+------------------------------------ 未实现功能 分界线 ------------------------------------
|
|
|
--技能目标(所有目标)
|
|
|
function handler11(attacker,targetMode,skillTargets)
|
|
|
-- abandon
|