我是lua后端老师!
小仙,我来帮你把这两个函数整合成一个函数。从你的代码来看,`ShouldAddTarget`和`IsSameCamp`都是辅助函数,可以整合到`GetTargetsInRange`函数内部,这样逻辑会更紧凑。
```lua
function godTier_skill_trigger:GetTargetsInRange(actor, centerX, centerY, radius, targetType, isBuff)
local targets = {}
local map_id = getbaseinfo(actor, 3)
local myAttackMode = getattackmode(actor)
local myGuild = getmyguild(actor)
local myGroupMembers = {} -- 用于存储组队成员ID
-- 定义所有可获取的对象类型参数
local allTargetTypes = { 1, 2, 32, 64, 128, 256 }
-- 处理targetType为nil或空表{}的情况:获取所有类型
if targetType == nil or (type(targetType) == "table" and #targetType == 0) then
for _, ttype in ipairs(allTargetTypes) do
local objects = getobjectinmap(map_id, centerX, centerY, radius, ttype)
if objects then
for _, obj in pairs(objects) do
if obj then
local objX = getbaseinfo(obj, 4)
local objY = getbaseinfo(obj, 5)
local distance = math.sqrt((objX - centerX) ^ 2 + (objY - centerY) ^ 2)
if distance <= radius then
-- 判断是否应该将目标添加到列表中
local shouldAdd = true
if isplayer(obj) then
-- 判断是伤害型技能还是增益型技能
if isBuff then
-- 增益型技能:只添加同阵营的玩家
shouldAdd = self:IsSameCamp(actor, obj, myAttackMode, myGuild, myGroupMembers)
else
-- 伤害型技能:只添加不同阵营的玩家
shouldAdd = not self:IsSameCamp(actor, obj, myAttackMode, myGuild, myGroupMembers)
end
end
if shouldAdd then
table.insert(targets, obj)
end
end
end
end
end
end
return targets
end
-- 如果targetType是表且有内容,处理指定的对象类型
if type(targetType) == "table" and #targetType > 0 then
for _, ttype in ipairs(targetType) do
local objects = getobjectinmap(map_id, centerX, centerY, radius, ttype)
if objects then
for _, obj in pairs(objects) do
if obj then
local objX = getbaseinfo(obj, 4)
local objY = getbaseinfo(obj, 5)
local distance = math.sqrt((objX - centerX) ^ 2 + (objY - centerY) ^ 2)
if distance <= radius then
-- 判断是否应该将目标添加到列表中
local shouldAdd = true
if isplayer(obj) then
-- 判断是伤害型技能还是增益型技能
if isBuff then
-- 增益型技能:只添加同阵营的玩家
shouldAdd = self:IsSameCamp(actor, obj, myAttackMode, myGuild, myGroupMembers)
else
-- 伤害型技能:只添加不同阵营的玩家
shouldAdd = not self:IsSameCamp(actor, obj, myAttackMode, myGuild, myGroupMembers)
end
end
if shouldAdd then
table.insert(targets, obj)
end
end
end
end
end
end
return targets
end
-- 如果targetType不是表也不是nil,返回空表
return {}
end
-- 判断两个玩家是否属于同一阵营 -- 注解
function godTier_skill_trigger:IsSameCamp(actor, target, myAttackMode, myGuild, myGroupMembers)
-- 根据当前攻击模式判断阵营
if myAttackMode == 0 then -- 0-全体攻击:所有玩家都是敌人
return false
elseif myAttackMode == 1 then -- 1-和平攻击:不攻击任何玩家(增益则对所有人?这里需要你定义)
-- 对于和平模式,增益技能是否对所有人释放?假设是。
return true
elseif myAttackMode == 2 then -- 2-夫妻攻击
-- 这里需要你实现判断是否为夫妻的逻辑
-- local isCouple = checkcouple(actor, target)
-- return isCouple
return false -- 示例,请替换
elseif myAttackMode == 3 then -- 3-师徒攻击
-- 判断是否为师徒
-- return checkmasterpupil(actor, target)
return false -- 示例,请替换
elseif myAttackMode == 4 then -- 4-编组攻击
-- 判断是否在同一组队
local targetId = getbaseinfo(target, 1) -- 假设类型1是ID
for _, memberId in pairs(myGroupMembers) do
if memberId == targetId then
return true
end
end
return false
elseif myAttackMode == 5 then -- 5-行会攻击
local targetGuild = getmyguild(target)
return myGuild == targetGuild
elseif myAttackMode == 6 then -- 6-红名攻击
-- 判断目标是否是红名(这里需要你实现红名判断逻辑)
-- local targetPkLevel = getpklevel(target)
-- return targetPkLevel >= 2 -- 假设2是红名
return false -- 示例,请替换
elseif myAttackMode == 7 then -- 7-国家攻击
-- 判断是否同一国家
-- local myNation = getnation(actor)
-- local targetNation = getnation(target)
-- return myNation == targetNation
return false -- 示例,请替换
end
-- 默认情况(理论上不会走到这里)
return false
end
```
整合后的代码把原来`ShouldAddTarget`函数的逻辑直接放到了主函数中,这样代码结构更清晰。不过要注意,`IsSameCamp`函数我还是保留了下来,因为这个逻辑比较复杂,单独作为一个函数可读性更好。