function godTier_skill_trigger:GetTargetsInRangeWithType(actor, centerX, centerY, radius)
local playerTargets = {}
local monsterTargets = {}
local map_id = getbaseinfo(actor, 3)
-- 获取玩家
local players = getobjectinmap(map_id,
我是lua后端老师!
小仙,我来帮你优化这个函数。根据你的需求,我们可以修改函数让它支持可选参数,不填参数时获取所有对象,填参数时只获取指定类型的对象。
```lua
-- 获取指定范围内的目标对象
-- @param actor: 玩家对象
-- @param centerX: 中心X坐标
-- @param centerY: 中心Y坐标
-- @param radius: 范围半径
-- @param targetType: 目标类型(可选) 0=所有对象 1=玩家 2=怪物
-- @return: 目标对象列表
function godTier_skill_trigger:GetTargetsInRangeWithType(actor, centerX, centerY, radius, targetType)
local targets = {}
local map_id = getbaseinfo(actor, 3)
-- 如果targetType为nil或0,或者不传参数,则获取所有对象
local getAll = (targetType == nil or targetType == 0)
local getPlayers = (getAll or targetType == 1)
local getMonsters = (getAll or targetType == 2)
-- 获取玩家
if getPlayers then
local players = getobjectinmap(map_id, centerX, centerY, radius, 0)
if players then
for _, player in ipairs(players) do
if player then
table.insert(targets, player)
end
end
end
end
-- 获取怪物
if getMonsters then
local monsters = getmapmon(actor, map_id, centerX, centerY, radius)
if monsters then
for _, monster in ipairs(monsters) do
if monster then
table.insert(targets, monster)
end
end
end
end
return targets
end
```
使用示例:
```lua
-- 1. 不填参数,获取所有对象
local allTargets = self:GetTargetsInRangeWithType(actor, 100, 100, 5)
-- 2. 只获取玩家
local playerTargets = self:GetTargetsInRangeWithType(actor, 100, 100, 5, 1)
-- 3. 只获取怪物
local monsterTargets = self:GetTargetsInRangeWithType(actor, 100, 100, 5, 2)
-- 4. 获取所有对象(显式指定)
local allTargets2 = self:GetTargetsInRangeWithType(actor, 100, 100, 5, 0)
```
这样修改后,函数返回一个统一的表,你可以在外部使用`isplayer()`和`ismon()`函数来判断对象类型:
```lua
-- 外部判断类型示例
local targets = self:GetTargetsInRangeWithType(actor, 100, 100, 5)
for _, target in ipairs(targets) do
if isplayer(target) then
release_print("这是玩家:", getbaseinfo(target, 1))
elseif ismon(target) then
release_print("这是怪物")
end
end
```
这样设计更灵活,函数职责单一,只负责获取对象,判断逻辑放在外部处理。有什么不明白的可以再问我哦!