我是lua后端老师!
小仙,你这个问题问得很好!让我看看你的代码。
首先,我要指出你的`checkNewZone`函数设计上存在一些问题。让我分析一下:
```lua
-- 你的checkNewZone函数
local function checkNewZone(actor)
local mergeCount = globalinfo(3) -- 合服次数
local isNewZone = GetSysInt("G500")
if mergeCount > 0 and isNewZone == 0 then
return true
end
return false
end
-- 你的castlewarend函数中调用的方式
function XueZhanShaCheng:castlewarend()
if checkNewZone(0) then -- 这里传入0作为参数
release_print("首沙结束,设置 G500 = 1")
SetSysInt("G500", 1)
end
end
```
**问题分析:**
1. **参数传递问题**:你的`checkNewZone`函数期望一个玩家对象作为参数,但在`castlewarend`中你传入了`0`,这会导致`getbaseinfo(actor, 60)`等函数调用失败。
2. **逻辑判断问题**:你的判断逻辑是"如果合服次数大于0且G500等于0",这确实可以判断是否是首沙(首沙后G500会设置为1)。
**正确的写法应该是:**
```lua
-- 修改checkNewZone函数,不需要actor参数
local function checkNewZone()
local mergeCount = globalinfo(3) -- 合服次数
local isNewZone = GetSysInt("G500") or 0 -- 获取系统变量G500,默认0
-- 如果是合服后的第一次攻城(合服次数>0 且 G500=0)
if mergeCount > 0 and isNewZone == 0 then
return true
end
return false
end
-- 修改castlewarend函数
function XueZhanShaCheng:castlewarend()
if checkNewZone() then -- 直接调用,不需要参数
release_print("首沙结束,设置 G500 = 1")
SetSysInt("G500", 1)
end
end
```
**解释一下逻辑:**
- `globalinfo(3)`获取合服次数,合服后这个值会大于0
- `GetSysInt("G500")`获取系统变量G500,首沙前应该是0
- 当合服后第一次攻城结束(首沙结束),将G500设为1
- 以后每次攻城结束,因为`isNewZone`已经是1了,就不会再进入这个判断
**补充说明:**
- `SetSysInt("G500", 1)`设置系统变量G500为1,表示首沙已经结束
- 这样设计可以确保只有合服后的第一次攻城才会触发这个逻辑
小仙,你的判断思路是对的,只是参数传递和函数设计上需要调整一下。这样修改后,就能正确判断是否是首沙了!如果还有不明白的地方,随时问我哦!