function godTier_skill_trigger:GetTargetsInRange(actor, centerX, centerY, radius, targetType)
local targets = {}
local map_id = getbaseinfo(actor, 3)
-- 如果targetType是表,直接返回表中的对象
if type(targetType) == "table" then
for _, obj
嗨,我是Lua后端老师!
小仙,我理解你的需求了!你想要修改`GetTargetsInRange`函数,让第五个参数`targetType`支持多种输入方式:
1. 如果是表`{}`,就获取表里指定的对象类型
2. 如果不是表,就单独获取那个参数的类型
3. 如果是`0`或`nil`,就获取怪物、人物、宝宝、分身
让我帮你修改这个函数:
```lua
function godTier_skill_trigger:GetTargetsInRange(actor, centerX, centerY, radius, targetType)
local targets = {}
local map_id = getbaseinfo(actor, 3)
-- 如果targetType是表,处理表中的对象类型
if type(targetType) == "table" then
local getPlayers = false
local getMonsters = false
local getHeroes = false
local getCopies = false
-- 遍历表,设置要获取的类型标志
for _, ttype in ipairs(targetType) do
if ttype == 1 then
getPlayers = true
elseif ttype == 2 then
getMonsters = true
elseif ttype == 4 or ttype == 64 then
getHeroes = true
elseif ttype == 8 or ttype == 128 then
getCopies = true
end
end
-- 根据标志获取对应类型的对象
if getPlayers or getHeroes or getCopies then
local flag = 0
if getHeroes and getCopies then
flag = 64 + 128 -- 同时获取英雄和分身
elseif getHeroes then
flag = 64 -- 只获取英雄
elseif getCopies then
flag = 128 -- 只获取分身
end
local objects = getobjectinmap(map_id, centerX, centerY, radius, flag)
if objects then
for _, obj in ipairs(objects) do
if obj then
if getHeroes and ishero(obj) then
table.insert(targets, obj)
elseif getCopies and isplayer(obj) and getbaseinfo(obj, 1) ~= actor then
table.insert(targets, obj)
elseif getPlayers and isplayer(obj) then
table.insert(targets, obj)
end
end
end
end
end
-- 获取怪物(包括宝宝)
if getMonsters then
local monsters = getobjectinmap(map_id, centerX, centerY, radius, 2) -- 2表示获取怪物
if monsters then
for _, monster in ipairs(monsters) do
if monster and ismon(monster) then
local master = getbaseinfo(monster, 67) -- 获取怪物主人
-- 如果是宝宝(有主人)或者普通怪物
if (master and master ~= "") or not master then
table.insert(targets, monster)
end
end
end
end
end
return targets
end
-- 如果targetType为0或nil,获取所有类型(怪物、人物、宝宝、分身)
if targetType == 0 or targetType == nil then
-- 获取玩家、英雄、分身
local flag = 64 + 128 -- 同时获取英雄和分身
local objects = getobjectinmap(map_id, centerX, centerY, radius, flag)
if objects then
for _, obj in ipairs(objects) do
if obj then
if ishero(obj) then
table.insert(targets, obj)
elseif isplayer(obj) and getbaseinfo(obj, 1) ~= actor then
table.insert(targets, obj)
elseif isplayer(obj) then
table.insert(targets, obj)
end
end
end
end
-- 获取怪物(包括宝宝)
local monsters = getobjectinmap(map_id, centerX, centerY, radius, 2) -- 2表示获取怪物
if monsters then
for _, monster in ipairs(monsters) do
if monster and ismon(monster) then
local master = getbaseinfo(monster, 67) -- 获取怪物主人
-- 如果是宝宝(有主人)或者普通怪物
if (master and master ~= "") or not master then
table.insert(targets, monster)
end
end
end
end
return targets
end
-- 如果targetType是单个数字,处理单个类型
local getPlayers = (targetType == 1)
local getMonsters = (targetType == 2)
local getHeroes = (targetType == 4 or targetType == 64)
local getCopies = (targetType == 8 or targetType == 128)
-- 获取玩家、英雄、分身
if getPlayers or getHeroes or getCopies then
local flag = 0
if getHeroes and getCopies then
flag = 64 + 128 -- 同时获取英雄和分身
elseif getHeroes then
flag = 64 -- 只获取英雄
elseif getCopies then
flag = 128 -- 只获取分身
end
local objects = getobjectinmap(map_id, centerX, centerY, radius, flag)
if objects then
for _, obj in ipairs(objects) do
if obj then
if getHeroes and ishero(obj) then
table.insert(targets, obj)
elseif getCopies and isplayer(obj) and getbaseinfo(obj, 1) ~= actor then
table.insert(targets, obj)
elseif getPlayers and isplayer(obj) then
table.insert(targets, obj)
end
end
end
end
end
-- 获取怪物(包括宝宝)
if getMonsters then
local monsters = getobjectinmap(map_id, centerX, centerY, radius, 2) -- 2表示获取怪物
if monsters then
for _, monster in ipairs(monsters) do
if monster and ismon(monster) then
local master = getbaseinfo(monster, 67) -- 获取怪物主人
-- 如果是宝宝(有主人)或者普通怪物
if (master and master ~= "") or not master then
table.insert(targets, monster)
end
end
end
end
end
return targets
end
```
现在这个函数支持三种调用方式:
1. **表形式**:`self:GetTargetsInRange(actor, x, y, radius, {1, 2, 64})` - 获取玩家、怪物、英雄
2. **单个数字**:`self:GetTargetsInRange(actor, x, y, radius, 1)` - 只获取玩家
3. **0或nil**:`self:GetTargetsInRange(actor, x, y, radius, 0)` - 获取所有类型(怪物、人物、宝宝、分身)
这样修改后,函数更加灵活了!如果还有不明白的地方,随时可以问我或者请教浮生梦尊师!