| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975 |
- ----------------------------------
- -- 对象选择
- ----------------------------------
- local CombatImpl = require("combat.CombatImpl")
- local CombatObj = require("combat.CombatObj")
- local CombatDefine = require("combat.CombatDefine")
- local RoleDefine = require("role.RoleDefine")
- local CombatCalc = require("combat.CombatCalc")
- local CombatBuff = require("combat.CombatBuff")
- local SkillExcel = require("excel.skill").skill
- local targets = {}
- --对象选择器begin
- local function getTargetSide(attacker,targetMode)
- if targetMode[2] == 0 then
- return 0
- elseif targetMode[2] == 1 then
- if attacker.side == CombatDefine.ATTACK_SIDE then
- return CombatDefine.DEFEND_SIDE
- else
- return CombatDefine.ATTACK_SIDE
- end
- elseif targetMode[2] == 2 then
- return attacker.side
- end
- end
- local function canTarget(obj)
- if obj and obj.hp and obj.hp > 0 and not CombatBuff.isStatus(obj,{"revive"}) and CombatDefine.isBackup(obj) ~= CombatDefine.BACKUP_TYPE1 then
- return true
- 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)
- -- 不能直接取 援军对象
- if pos == CombatDefine.BACKUP_POS[1] or pos == CombatDefine.BACKUP_POS[2] then return end
- local obj = CombatImpl.objList[pos]
- local backupPos = pos < CombatDefine.COMBAT_HERO_CNT and CombatDefine.BACKUP_POS[1] or CombatDefine.BACKUP_POS[2]
- local backupObj = CombatImpl.objList[backupPos]
- -- 援军已上场
- if backupObj and backupObj.backupPos == pos then
- return backupObj
- end
- return obj
- end
- --
- CAN_EMPTY_TARGET = { [22] = 1 }
- function getTargets(attacker, targetMode, skillTargets, cmdTargets, checkChaofen, isNormalAtk, skillID)
- for i = 1, #targets do
- targets[i] = nil
- end
-
- handlerInit(attacker, targetMode)
- if isNormalAtk then
- local isStatus, cmd, ind = CombatBuff.isStatus(attacker, { "tiaoxin" })
- if isStatus then
- local buffer = attacker.buffer[ind]
- local target = buffer.attackPos and getObj(buffer.attackPos)
- if canTarget(target) then
- targets[#targets + 1] = target
- end
- elseif attacker.normalTarget and attacker.normalTarget.status then
- handlerStatus(attacker, attacker.normalTarget.status)
- end
- end
- if targets[1] == nil then
- if checkChaofen then
- -- 检查是否被嘲讽
- local chaofen, fromPos = CombatBuff.isChaofen(attacker)
- if chaofen then
- local obj = getObj(fromPos)
- if canTarget(obj) and obj.pos ~= attacker.pos then
- return { obj }, true
- end
- end
- end
-
- if skillID and CombatBuff.isStatus(attacker, { "hunluan" }) and CombatImpl.isFanji == false then
- handlerHunluan(attacker, targetMode)
- elseif handler[targetMode[1]] then
- handler[targetMode[1]](attacker, targetMode, skillTargets, cmdTargets, skillID)
- end
- if not CAN_EMPTY_TARGET[targetMode[1]] and targetMode[2] == 1 and targets[1] == nil and targetMode[1] ~= 32 then
- handler[1](attacker, targetMode, skillTargets)
- end
- handlerFenTan(attacker, targetMode, skillTargets, cmdTargets, skillID)
- end
- local ret = { }
- for _, v in ipairs(targets) do
- ret[#ret + 1] = v
- end
- return ret
- end
- --默认顺序位置
- function handler1(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_POS[atkPos]) 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 handler2(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_POS[atkPos]) 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 handler3(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_POS[atkPos]) 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 handler4(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_POS[atkPos]) 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 handler5(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_POS[atkPos]) 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 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)
- 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_POS[atkPos]) 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 handler8(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_POS[atkPos]) 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 handler9(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_POS[atkPos]) 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 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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler12(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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler13(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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler14(attacker,targetMode,skillTargets,cmdTargets)
- 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_POS[atkPos]) 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 handler15(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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler16(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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler17(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_POS[atkPos]) 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 handler18(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_POS[atkPos]) 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 handler19(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_POS[atkPos]) 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 handler20(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_POS[atkPos]) 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 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_POS[atkPos]) 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)
- 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_POS[atkPos]) 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 handler23(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
- for _,pos in ipairs(CombatDefine.DEFAULT_TARGET_POS[atkPos]) 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 handler24(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_POS[atkPos]) 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 handler25(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 job = targetMode[4]
- local temp = {}
- for _,pos in ipairs(CombatDefine.SIDE2POS[targetSide]) do
- local obj = getObj(pos)
- if canTarget(obj) and obj.job == job then
- targets[#targets + 1] = obj
- end
- if #targets >= cnt then
- break
- end
- end
- if #targets == 0 then
- handler1(attacker,targetMode)
- end
- return
- 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_POS[atkPos]) 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
- function handler27(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_POS[atkPos]) 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 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_POS[atkPos]) 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_POS[atkPos]) 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)
- 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_POS[atkPos]) 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 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_POS[atkPos]) 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_POS[atkPos]) 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_POS[atkPos]) 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 handlerInit(attacker, targetMode)
- -- 清除分摊标志
- attacker.handBuffCalcType = nil
- for _, pos in ipairs(CombatDefine.SIDE2POS[0]) do
- local obj = getObj(pos)
- if obj then
- obj.fentq = nil
- end
- end
- end
- -- 处理所有对象是否需要分摊
- function handlerFenTan(attacker, targetMode, skillTargets, cmdTargets, skillID)
- if #targets <= 0 then return end
- if skillID then
- local skillConfig = SkillExcel[skillID]
- if skillConfig then
- if skillConfig.otherArgs and skillConfig.otherArgs.hurtFenTan then
- return
- end
- end
- end
- local tagObj = targets[1]
- local targetSide = tagObj.side
- local fentq = {}
- local fentCnt = 0
- for _, pos in ipairs(CombatDefine.SIDE2POS[targetSide]) do
- local obj = getObj(pos)
- if obj and canTarget(obj) and obj.bufferCmd["fentan"] then
- fentq[pos] = 1
- fentCnt = fentCnt + 1
- end
- end
- -- 分摊比列
- for _, pos in ipairs(CombatDefine.SIDE2POS[targetSide]) do
- local obj = getObj(pos)
- if obj and canTarget(obj) and obj.bufferCmd["fentan"] then
- obj.fentq = fentCnt
- -- 把不在队列的分摊对象加入到队列当中
- local find = false
- for _, tarobj in ipairs(targets) do
- if tarobj.pos == obj.pos then
- find = true
- end
- end
- if not find then
- targets[#targets + 1] = obj
- end
- end
- end
-
- end
- function handlerHunluan(attacker,targetMode)
- local cnt = targetMode[3] or CombatDefine.COMBAT_HERO_ALL_CNT
- local len = 0
- local selectList = {}
- for pos = 1,CombatDefine.COMBAT_HERO_ALL_CNT do
- local obj = getObj(pos)
- if canTarget(obj) then
- len = len + 1
- selectList[len] = obj
- end
- end
-
- -- 混乱要随机选择目标 modify buy dxzeng
- local randomLen = #selectList
- if randomLen <= 0 or cnt <= 0 then return end
-
- if cnt > randomLen then
- cnt = randomLen
- end
-
- for index = 1, cnt do
- local len = 0
- local tempRandom = {}
- for k, v in pairs(selectList) do
- len = len + 1
- tempRandom[len] = k
- end
-
- local randomIndex = math.random(1, len)
- local selectIndex = tempRandom[randomIndex]
- targets[#targets+1] = selectList[selectIndex]
- selectList[selectIndex] = nil
- end
- end
- function handlerStatus(attacker,status)
- local targetSide
- if attacker.side == CombatDefine.ATTACK_SIDE then
- targetSide = CombatDefine.DEFEND_SIDE
- else
- targetSide = CombatDefine.ATTACK_SIDE
- end
- for _,pos in ipairs(CombatDefine.SIDE2POS[targetSide]) do
- local obj = getObj(pos)
- if canTarget(obj) and CombatBuff.isStatus(obj,status) then
- targets[#targets+1] = obj
- return
- end
- end
- end
- handler = handler or {} --选择策略
- handler[1] = handler1 --1 默认顺序位置
- handler[2] = handler2 --2 全体
- handler[3] = handler3 --3 前排,中排,后排
- handler[4] = handler4 --4 前方一列
- handler[5] = handler5 --5 随机前排,中排,后排
- handler[6] = handler6 --6 随机
- handler[7] = handler7 --7 血量最少
- handler[8] = handler8 --8 血量最高
- handler[9] = handler9 --9 攻击最高
- handler[10] = handler10 --10 自己
- handler[11] = handler11 --11 技能目标(所有目标)
- handler[12] = handler12 --12 技能目标(指定第几个目标)
- handler[13] = handler13 --13 被击时攻击者
- handler[14] = handler14 --14 额外作用目标
- handler[15] = handler15 --15 技能目标(生命高于或者低于攻击方)
- handler[16] = handler16 --16 技能目标(护甲高于或者低于攻击方)
- handler[17] = handler17 --17 技能目标(血量百分比最少)
- handler[18] = handler18 --18 技能目标(血量最少,优先选择非满血的英雄)
- handler[19] = handler19 --19 随机后排,优先选择非满血的英雄
- handler[20] = handler20 --20 随机,优先选择非满血的英雄
- handler[21] = handler21 --21 死亡武将
- handler[22] = handler22 --22 非技能目标
- handler[23] = handler23 --23 技能目标(速度高于或者低于攻击方)
- handler[24] = handler24 --24 职业+攻击力排名
- handler[25] = handler25 --25 职业优先
- handler[26] = handler26 --26 同一列
- handler[27] = handler27 --27 同一列
- handler[28] = handler28 --27 同一列
- handler[29] = handler29 --27 同一列
- handler[30] = handler30 --30 自己跟目标攻击最高
- handler[31] = handler31 --31 同行人数最多
- handler[32] = handler32 --32 指定buff选择
- handler[33] = handler33 --32 指定buff选择
- --对象选择器end
|