我是lua后端老师!
小仙,我来帮你分析一下这段行会攻击判断的代码。从你的代码来看,主要是想实现行会攻击模式下的目标判断,但逻辑上确实有些问题。
让我帮你修正一下:
```lua
elseif actor_mode == 5 then -- 行会攻击
local obj_guild = getmyguild(obj) -- 获取目标的行会对象
local isnotat = false
-- 首先检查目标是否有行会
if obj_guild == "" or obj_guild == nil then
isnotat = true -- 无行会玩家可以被攻击
else
-- 判断是否是不同行会的玩家
if actor_guild ~= obj_guild then
-- 还需要检查是否是同盟行会
local isAlly = isallyguild(actor_guild, obj_guild) -- 判断是否结盟
if not isAlly then
-- 如果不是同盟,检查是否是宣战关系
local isWar = iswarguild(actor_guild, obj_guild) -- 判断是否宣战
-- 如果是宣战关系或者既不是同盟也不是宣战,都可以攻击
if isWar or (not isAlly and not isWar) then
isnotat = true
end
end
end
end
if isnotat then
table.insert(targets, obj)
end
end
```
**主要修正点:**
1. **行会对象获取**:`getmyguild()`返回的是行会对象,不是ID
2. **同盟判断逻辑**:使用`isallyguild()`函数判断两个行会是否结盟
3. **宣战判断逻辑**:使用`iswarguild()`函数判断两个行会是否处于宣战状态
4. **攻击条件**:
- 无行会玩家可攻击
- 不同行会且不是同盟的可攻击
- 宣战关系的可攻击
- 同行的不可攻击(需要排除)
**另外需要注意:**
- 你的`group_members`变量需要是同盟行会对象的列表
- 同盟判断应该使用引擎提供的`isallyguild()`接口,这样更准确
- 宣战判断使用`iswarguild()`接口
这样修改后,行会攻击模式的判断逻辑就更清晰和准确了。如果还有不明白的地方,随时问我哦!