根据代码分析,判断点击的是宠物的逻辑主要在这几个地方:
1. **宠物锁定按钮的显示条件**(`MainTarget.OnUpdateLockBtn`函数):
```lua
if SL:GetMetaValue("PET_ALIVE") and MainTarget._LockUIState ~= false then
GUI:setVisible(MainTarget.UI.LockPanel, true)
-- 显示锁定按钮
end
```
只有当宠物存活(`PET_ALIVE`为true)且界面锁定状态不为false时,才会显示宠物锁定按钮。
2. **点击锁定面板时的判断**(`MainTarget.OnClickLockPanel`函数):
```lua
-- 未存活
if not SL:GetMetaValue("PET_ALIVE") then
return
end
-- F9关闭了
if MainTarget._LockUIState == false then
return
end
```
点击锁定面板时,会检查宠物是否存活和锁定功能是否开启。
3. **目标选择时的判断**(`MainTarget.OnTargetChange`函数):
```lua
if SL:GetMetaValue("ACTOR_IS_PLAYER", actor) or
(SL:GetMetaValue("ACTOR_IS_MONSTER", actor) and not SL:GetMetaValue("ACTOR_BIGICON_ID", actor)) then
MainTarget.SelectTarget(targetID)
else
MainTarget.SelectTarget(nil)
end
```
这里通过`ACTOR_IS_PLAYER`和`ACTOR_IS_MONSTER`来判断目标类型,但并没有直接判断是否为宠物的逻辑。
**核心判定方式**:
系统并没有直接判断"点击的是宠物",而是通过以下方式间接判定:
- 当你点击某个目标时,系统会获取该目标的ID(`MainTarget._targetID`)
- 然后通过`SL:GetMetaValue("PET_LOCK_ID")`获取当前宠物锁定的目标ID
- 如果这两个ID相同,就认为当前目标是宠物,并更新锁定按钮状态
所以判定逻辑是:**当前选中的目标ID是否等于宠物锁定的目标ID**,而不是直接判断目标是否为宠物类型。