|
@@ -11,7 +11,9 @@ local SkillExcel = require("excel.skill").skill
|
|
|
local targets = {}
|
|
local targets = {}
|
|
|
|
|
|
|
|
--对象选择器begin
|
|
--对象选择器begin
|
|
|
-
|
|
|
|
|
|
|
+--[[
|
|
|
|
|
+ ret = 0,1,2 // 0:需要继承skilltargets 1:敌方 2 : 己方
|
|
|
|
|
+]]
|
|
|
local function getTargetSide(attacker,targetMode)
|
|
local function getTargetSide(attacker,targetMode)
|
|
|
if not targetMode[2] or targetMode[2] == 0 then
|
|
if not targetMode[2] or targetMode[2] == 0 then
|
|
|
return 0
|
|
return 0
|
|
@@ -34,25 +36,6 @@ local function canTarget(obj)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--- 同列敌方找不到 随机上下找一列 有敌方的 策划 要求随机
|
|
|
|
|
-local function getColumn2PosRandom(yetList)
|
|
|
|
|
- local randomList = {}
|
|
|
|
|
-
|
|
|
|
|
- for i= 1, 3 do
|
|
|
|
|
- if not yetList[i] then
|
|
|
|
|
- randomList[#randomList + 1] = i
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- if #randomList > 0 then
|
|
|
|
|
- local random = math.random(1, #randomList)
|
|
|
|
|
- local newColumn = randomList[random]
|
|
|
|
|
- yetList[newColumn] = true
|
|
|
|
|
- return newColumn, yetList
|
|
|
|
|
- end
|
|
|
|
|
- return 0, yetList
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
function getObj(pos)
|
|
function getObj(pos)
|
|
|
-- 不能直接取 援军对象
|
|
-- 不能直接取 援军对象
|
|
|
if pos == CombatDefine.BACKUP_POS[1] or pos == CombatDefine.BACKUP_POS[2] then return end
|
|
if pos == CombatDefine.BACKUP_POS[1] or pos == CombatDefine.BACKUP_POS[2] then return end
|
|
@@ -119,92 +102,390 @@ function getTargets(attacker, targetMode, skillTargets, cmdTargets, checkChaofen
|
|
|
return ret
|
|
return ret
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---默认顺序位置
|
|
|
|
|
-function handler1(attacker,targetMode)
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+-- 全体目标
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side 0: 继承param3 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)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
|
|
+ -- 如果传入有skillTarget 优先使用技能所带的target集合
|
|
|
|
|
+ local isSkillTarget = targetMode[3] or 1
|
|
|
|
|
+ local exclude = targetMode[4] or 1
|
|
|
|
|
+ local targetList = {}
|
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
local obj = getObj(pos)
|
|
local obj = getObj(pos)
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ targetList[#targetList+1] = obj
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ if isSkillTarget ~= 1 then
|
|
|
|
|
+ local skillTargetList = {}
|
|
|
|
|
+ for _,obj in ipairs(skillTargets) do
|
|
|
|
|
+ skillTargetList[#skillTargetList + 1] = obj
|
|
|
|
|
+ end
|
|
|
|
|
+ if exclude == 1 then
|
|
|
|
|
+ targetList = skillTargetList
|
|
|
|
|
+ else
|
|
|
|
|
+ --从targetList中剔除skillTargetList
|
|
|
|
|
+ for _,obj in ipairs(skillTargetList) do
|
|
|
|
|
+ for i = 1,#targetList do
|
|
|
|
|
+ if targetList[i].pos == obj.pos then
|
|
|
|
|
+ table.remove(targetList,i)
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ -- 转化为目标target
|
|
|
|
|
+ for _,obj in ipairs (targetList) do
|
|
|
|
|
+ targets[#targets + 1] = obj
|
|
|
|
|
+ end
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+-- 自己
|
|
|
|
|
+local function handler10(attacker)
|
|
|
|
|
+ --if canTarget(obj) then
|
|
|
|
|
+ targets[1] = attacker
|
|
|
|
|
+ --end
|
|
|
|
|
+end
|
|
|
|
|
|
|
|
|
|
+-- 选择指定排号
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt,
|
|
|
|
|
+ {1,2}
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler28(attacker,targetMode)
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+
|
|
|
|
|
+ -- 若没有配置默认攻击全部排
|
|
|
|
|
+ local rowList = targetMode[4] or {1,2,3}
|
|
|
|
|
+ local targetPosList = {}
|
|
|
|
|
+ -- 待优化@mafei
|
|
|
|
|
+ for row,list in pairs(CombatDefine.ROW2POS[targetSide]) do
|
|
|
|
|
+ if table.find(rowList,row) then
|
|
|
|
|
+ for _,pos in pairs(list) do
|
|
|
|
|
+ table.insert(targetPosList,pos)
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ local cnt = targetMode[3]
|
|
|
|
|
+ -- 随机打乱排序
|
|
|
|
|
+ table.shuffle(targetPosList)
|
|
|
|
|
+ for _,pos in ipairs(targetPosList) do
|
|
|
|
|
+ local obj = getObj(pos)
|
|
|
if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
targets[#targets+1] = obj
|
|
targets[#targets+1] = obj
|
|
|
end
|
|
end
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ if #targets >= cnt then
|
|
|
|
|
+ return
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---全体
|
|
|
|
|
-function handler2(attacker,targetMode)
|
|
|
|
|
|
|
+-- 随机选择X个目标
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt, 选择的数量 默认为1
|
|
|
|
|
+ isSelf 0/默认:不做判定 1:不能选择自己, 2:必须有自己
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler6(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
|
|
+ -- 默认选择一个
|
|
|
|
|
+ local cnt = targetMode[3] or 1
|
|
|
|
|
+ local noSelf = targetMode[4] or 0
|
|
|
|
|
+ local targetList = {}
|
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
local obj = getObj(pos)
|
|
local obj = getObj(pos)
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ targetList[#targetList+1] = obj
|
|
|
end
|
|
end
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ end
|
|
|
|
|
+ if noSelf == 2 then
|
|
|
|
|
+ targets[#targets+1] = attacker
|
|
|
|
|
+ end
|
|
|
|
|
+ table.shuffle(targetList)
|
|
|
|
|
+ for _,obj in ipairs(targetList) do
|
|
|
|
|
+ if #targets >= cnt then
|
|
|
|
|
+ break
|
|
|
end
|
|
end
|
|
|
|
|
+ if obj.pos ~= attacker.pos or noSelf == 0 then
|
|
|
|
|
+ targets[#targets+1] = obj
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---前排,中排,后排
|
|
|
|
|
-function handler3(attacker,targetMode)
|
|
|
|
|
|
|
+-- 按照属性X排序,选择前Y个目标 @mafei 还未实现当前hp和mp筛选
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt, 选择的数量 默认为1
|
|
|
|
|
+ attrID, 属性ID
|
|
|
|
|
+ order, 排序方式 0 升序, 1 降序 默认为升序
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler7(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3] or 1
|
|
|
|
|
+ local attrID = targetMode[4] or RoleDefine.HP -- 默认是HP
|
|
|
|
|
+ local order = targetMode[5] or 0 -- 默认升序
|
|
|
|
|
+ local targetList = {}
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
local obj = getObj(pos)
|
|
local obj = getObj(pos)
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ targetList[#targetList+1] = obj
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ table.sort(targetList,function(a,b)
|
|
|
|
|
+ local a_attr = CombatObj.getValue(a,attrID)
|
|
|
|
|
+ local b_attr = CombatObj.getValue(b,attrID)
|
|
|
|
|
+ local ret = a_attr < b_attr
|
|
|
|
|
+ if order ~= 0 then
|
|
|
|
|
+ ret = a_attr > b_attr
|
|
|
|
|
+ end
|
|
|
|
|
+ return ret
|
|
|
|
|
+ end)
|
|
|
|
|
+ for i = 1,cnt do
|
|
|
|
|
+ targets[#targets + 1] = targetList[i]
|
|
|
|
|
+ if #targets >= cnt then
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+end
|
|
|
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
|
|
+ -- 选择正前方一列的X目标
|
|
|
|
|
+ --[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt,
|
|
|
|
|
+ col, 默认正前方,否则选择colList行数
|
|
|
|
|
+ }
|
|
|
|
|
+ ]]
|
|
|
|
|
+ local function handler26(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3]
|
|
|
|
|
+ local targetCol = targetMode[4]
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+ -- 没有targetCol默认选取目标正前方的列数 warning: 检测是否援军情况 @mafei
|
|
|
|
|
+ if not targetCol then
|
|
|
|
|
+ for col,list in pairs(CombatDefine.COLUMN2POS[attacker.side]) do
|
|
|
|
|
+ if table.find(list,attacker.pos) then
|
|
|
|
|
+ targetCol = col
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
end
|
|
end
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ end
|
|
|
|
|
+ -- 筛选出还存在的列
|
|
|
|
|
+ local colList = {}
|
|
|
|
|
+ for col,list in pairs(CombatDefine.COLUMN2POS[targetSide]) do
|
|
|
|
|
+ local colObjList = {}
|
|
|
|
|
+ for i = 1,#list do
|
|
|
|
|
+ local obj = getObj(list[i])
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ table.insert(colObjList,obj)
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ if #colObjList > 0 then
|
|
|
|
|
+ table.insert(colList,colObjList)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
+ -- 没有可选的列
|
|
|
|
|
+ if #colList == 0 then
|
|
|
|
|
+ return
|
|
|
|
|
+ end
|
|
|
|
|
+ local targetList
|
|
|
|
|
+ for col,list in ipairs(colList) do
|
|
|
|
|
+ if col == targetCol then
|
|
|
|
|
+ targetList = list
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ if not targetList then
|
|
|
|
|
+ table.shuffle(colList)
|
|
|
|
|
+ targetList = colList[1]
|
|
|
|
|
+ end
|
|
|
|
|
+ for _,obj in ipairs(targetList) do
|
|
|
|
|
+ targets[#targets+1] = obj
|
|
|
|
|
+ if #targets > cnt then
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---最近一列
|
|
|
|
|
-function handler4(attacker,targetMode)
|
|
|
|
|
|
|
+-- 选择英雄数量最多的一列或者一行
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt,
|
|
|
|
|
+ col 1表示列,2表示行,默认为1
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler31(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3]
|
|
|
|
|
+ local mode = targetMode[4] or 1
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
|
|
+ local posList = CombatDefine.COLUMN2POS
|
|
|
|
|
+ if mode ~= 1 then
|
|
|
|
|
+ posList = CombatDefine.ROW2POS
|
|
|
|
|
+ end
|
|
|
|
|
+ local targetObjList = {}
|
|
|
|
|
+ for _,list in ipairs(posList[targetSide]) do
|
|
|
|
|
+ local objList = {}
|
|
|
|
|
+ for i = 1,#list do
|
|
|
|
|
+ local obj = getObj(list[i])
|
|
|
|
|
+ -- 确认是武将(英雄)
|
|
|
|
|
+ if canTarget(obj) and obj.isPet then
|
|
|
|
|
+ table.insert(objList,obj)
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ if #targetObjList <= #objList then
|
|
|
|
|
+ targetObjList = objList
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ -- 筛选最后的targets
|
|
|
|
|
+ table.shuffle(targetObjList)
|
|
|
|
|
+ for i = 1,#targetObjList do
|
|
|
|
|
+ targets[#targets+1] = targetObjList[i]
|
|
|
|
|
+ if #targets >= cnt then
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+--随机 选择目标 多次
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt, 随机选择的次数, 默认一次
|
|
|
|
|
+ maxCnt 同一目标最多的次数,默认一次
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler29(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3] or 1
|
|
|
|
|
+ local maxCnt = targetMode[4] or 1
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+
|
|
|
|
|
+ local targetList = {}
|
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
local obj = getObj(pos)
|
|
local obj = getObj(pos)
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ table.insert(targetList,obj)
|
|
|
end
|
|
end
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ end
|
|
|
|
|
+ local cntMap = {}
|
|
|
|
|
+ for i = 0,cnt do
|
|
|
|
|
+ local obj = table.shuffle(targetList)[#targetList]
|
|
|
|
|
+ local objPos = obj.pos
|
|
|
|
|
+ cntMap[objPos] = cntMap[objPos] or 0
|
|
|
|
|
+ targets[#targets + 1] = obj
|
|
|
|
|
+ cntMap[objPos] = cntMap[objPos] + 1
|
|
|
|
|
+ if cntMap[pos] >= maxCnt then
|
|
|
|
|
+ table.remove(targetList,#targetList)
|
|
|
|
|
+ end
|
|
|
|
|
+ if #targetList <= 0 then
|
|
|
|
|
+ break
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+--随机选择属性列表中一项最高的角色
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side
|
|
|
|
|
+ cnt, 选择的数量,默认为1
|
|
|
|
|
+ attrList, 属性列表
|
|
|
|
|
+ order 排序方式 0 升序, 1 降序 默认为升序
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler33(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3] or 1
|
|
|
|
|
+ local attrList = targetMode[4] or {}
|
|
|
|
|
+ local order = targetMode[5] or 0 -- 默认升序
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+ local targetList = {}
|
|
|
|
|
+ for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
+ local obj = getObj(pos)
|
|
|
|
|
+ if canTarget(obj) then
|
|
|
|
|
+ table.insert(targetList,obj)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
+ -- 随机出一个属性
|
|
|
|
|
+ local attr = table.shuffle(attrList)[1]
|
|
|
|
|
+ table.sort(targetList,function(a,b)
|
|
|
|
|
+ local a_attr = CombatObj.getValue(a,attr)
|
|
|
|
|
+ local b_attr = CombatObj.getValue(b,attr)
|
|
|
|
|
+ local ret = a_attr < b_attr
|
|
|
|
|
+ if order ~= 0 then
|
|
|
|
|
+ ret = a_attr > b_attr
|
|
|
|
|
+ end
|
|
|
|
|
+ return ret
|
|
|
|
|
+ end)
|
|
|
|
|
+
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---随机前,中,后排
|
|
|
|
|
-function handler5(attacker,targetMode)
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+------------------------------------ 未实现功能 分界线 ------------------------------------
|
|
|
|
|
+
|
|
|
|
|
+-- 根据指定buff层数选择x个目标
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param2 = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ buffID buff ID
|
|
|
|
|
+ count, buff层数 默认为1
|
|
|
|
|
+ cnt, 选择几个目标 默认为1
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+local function handler32(attacker, targetMode, skillTargets)
|
|
|
|
|
+
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+-- 复活x个单位
|
|
|
|
|
+--[[
|
|
|
|
|
+ @param = {
|
|
|
|
|
+ handlerID,
|
|
|
|
|
+ side,
|
|
|
|
|
+ cnt, 选择复活的数量 默认为1
|
|
|
|
|
+ }
|
|
|
|
|
+]]
|
|
|
|
|
+function handler21(attacker,targetMode)
|
|
|
|
|
+ local cnt = targetMode[3] or 1
|
|
|
|
|
+ local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
+
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+--技能目标(所有目标)
|
|
|
|
|
+function handler11(attacker,targetMode,skillTargets)
|
|
|
|
|
+ -- abandon
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+--默认顺序位置
|
|
|
|
|
+function handler1(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
--if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
--if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
-- assert()
|
|
-- assert()
|
|
@@ -224,45 +505,8 @@ function handler5(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---随机
|
|
|
|
|
-function handler6(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- assert()
|
|
|
|
|
- end
|
|
|
|
|
- local cnt = targetMode[3] or 1
|
|
|
|
|
- local noSelf = targetMode[5]
|
|
|
|
|
- local temp = {}
|
|
|
|
|
- for i = 1,CombatDefine.COMBAT_HERO_CNT do
|
|
|
|
|
- local pos = CombatDefine.SIDE2POS[targetSide][i]
|
|
|
|
|
- if not (noSelf and pos == attacker.pos) then
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
- if canTarget(obj) then
|
|
|
|
|
- temp[#temp+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if #temp > 0 then
|
|
|
|
|
- for i = 1,cnt do
|
|
|
|
|
- local r = math.ceil(math.random(0,#temp))
|
|
|
|
|
- r = r == 0 and 1 or r
|
|
|
|
|
- targets[#targets+1] = temp[r]
|
|
|
|
|
- temp[r] = temp[#temp]
|
|
|
|
|
- temp[#temp] = nil
|
|
|
|
|
- if #temp <= 0 then
|
|
|
|
|
- break
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
- if noSelf == 2 and canTarget(attacker) then
|
|
|
|
|
- targets[#targets+1] = attacker
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
---血量最少
|
|
|
|
|
-function handler7(attacker,targetMode)
|
|
|
|
|
|
|
+--最近一列
|
|
|
|
|
+function handler4(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
|
--if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
--if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
-- assert()
|
|
-- assert()
|
|
@@ -282,6 +526,12 @@ function handler7(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
+--随机前,中,后排
|
|
|
|
|
+function handler5(attacker,targetMode)
|
|
|
|
|
+ -- abandon
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
--血量最高
|
|
--血量最高
|
|
|
function handler8(attacker,targetMode)
|
|
function handler8(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
@@ -332,46 +582,6 @@ function handler9(attacker,targetMode)
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---自己
|
|
|
|
|
-function handler10(attacker,targetMode,skillTargets)
|
|
|
|
|
- --if canTarget(obj) then
|
|
|
|
|
- targets[1] = attacker
|
|
|
|
|
- --end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
---技能目标(所有目标)
|
|
|
|
|
-function handler11(attacker,targetMode,skillTargets)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- -- 如果传入有skillTarget 优先使用技能所带的target集合
|
|
|
|
|
- local targetList = {}
|
|
|
|
|
- if skillTargets and #skillTargets > 0 then
|
|
|
|
|
- for _,obj in ipairs(skillTargets) do
|
|
|
|
|
- targetList[#targetList + 1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- else
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targetList[#targetList+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
- if #targetList >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- -- 转化为目标target
|
|
|
|
|
- for _,obj in ipairs (targetList) do
|
|
|
|
|
- targets[#targets + 1] = obj
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
-end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--技能目标(指定第几个目标)
|
|
--技能目标(指定第几个目标)
|
|
@@ -565,26 +775,7 @@ function handler20(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---全体
|
|
|
|
|
-function handler21(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
|
|
|
|
|
--非技能目标
|
|
--非技能目标
|
|
|
function handler22(attacker,targetMode,skillTargets)
|
|
function handler22(attacker,targetMode,skillTargets)
|
|
@@ -675,28 +866,6 @@ function handler25(attacker,targetMode)
|
|
|
return
|
|
return
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-
|
|
|
|
|
---同列
|
|
|
|
|
-function handler26(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
--默认顺序位置2
|
|
--默认顺序位置2
|
|
|
function handler27(attacker,targetMode)
|
|
function handler27(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
@@ -719,50 +888,6 @@ function handler27(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
---前排,中排,后排
|
|
|
|
|
-function handler28(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
---随机 选择目标 多次
|
|
|
|
|
-function handler29(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
--攻击最高
|
|
--攻击最高
|
|
|
function handler30(attacker,targetMode)
|
|
function handler30(attacker,targetMode)
|
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
local targetSide = getTargetSide(attacker,targetMode)
|
|
@@ -784,69 +909,12 @@ function handler30(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
---前排,中排,后排
|
|
|
|
|
-function handler31(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
--- 根据指定buff层数选择目标
|
|
|
|
|
-function handler32(attacker, targetMode, skillTargets, cmdTargets, skillID)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
---随机攻击防御速度最高
|
|
|
|
|
-function handler33(attacker,targetMode)
|
|
|
|
|
- local targetSide = getTargetSide(attacker,targetMode)
|
|
|
|
|
- --if targetSide ~= CombatDefine.ATTACK_SIDE and targetSide ~= CombatDefine.DEFEND_SIDE then
|
|
|
|
|
- -- assert()
|
|
|
|
|
- --end
|
|
|
|
|
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- local atkPos = attacker.backupPos or attacker.pos
|
|
|
|
|
- atkPos = atkPos % CombatDefine.COMBAT_HERO_ALL_CNT
|
|
|
|
|
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS3[targetSide]) do
|
|
|
|
|
- local obj = getObj(pos)
|
|
|
|
|
-
|
|
|
|
|
- if canTarget(obj) and obj.pos ~= attacker.pos then
|
|
|
|
|
- targets[#targets+1] = obj
|
|
|
|
|
- end
|
|
|
|
|
- if #targets >= cnt then
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
- end
|
|
|
|
|
|
|
+------------------------------ 分界线 ------------------------------
|
|
|
|
|
+-- 目前是一样了,等策划配置好skill表后删掉 @mafei
|
|
|
|
|
+function handler3(attacker,targetMode)
|
|
|
|
|
+ return handler28(attacker,targetMode)
|
|
|
end
|
|
end
|
|
|
|
|
+--------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
function handlerInit(attacker, targetMode)
|
|
function handlerInit(attacker, targetMode)
|