我是lua后端老师!
小仙,你这个问题问得很好!我看到你提供的代码中,在`FlyMap`函数里检查`castleinfo(5)`来判断是否在攻沙期间,但是提示"当前不在攻沙期间,无法进入!"。根据你提供的参考模块,问题在于**没有正确开启沙巴克攻城战**。
在你的代码中,虽然`castleWarStart`函数里有开启攻城的代码,但可能没有正确触发。参考模块使用了**定时器调度**的方式来开启沙巴克。
**需要修改的地方:**
1. **在初始化时添加定时器调度**(参考`SBK:OnStartUp()`函数)
2. **添加全局函数来开启沙巴克**(参考`sbkstart`函数)
**具体修改如下:**
```lua
-- 在XueZhanShaCheng:init函数中添加启动时的初始化
function XueZhanShaCheng:init(actor)
self._cfg = Util:requireCfg(self.mCfg.severPath)
EventManager:add(EventCfg.castleWarStart, handler(self, self.castleWarStart), self)
EventManager:add(EventCfg.castleWarEnd, handler(self, self.castleWarEnd), self)
EventManager:add(EventCfg.killplay, handler(self, self.killplay), self)
EventManager:add(EventCfg.playDie, handler(self, self.playDie), self)
EventManager:add(EventCfg.killMon, handler(self, self.killMon), self)
EventManager:add(EventCfg.onTimer7, handler(self, self.onTimer7), self)
EventManager:add(EventCfg.resetDay, handler(self, self.resetDay), self)
EventManager:add(EventCfg.enterMap, handler(self, self.enterMap), self)
-- 添加:启动时设置沙巴克定时器
self:setScheduled()
end
-- 添加:设置沙巴克定时器函数
function XueZhanShaCheng:setScheduled()
local cfg = self._cfg
-- 这里需要根据你的配置来设置时间,参考SBK模块的配置方式
-- 示例:每周三、六的20:00开启沙巴克
local startTime = ""
local endTime = ""
-- 假设你的cfg中有时间配置,比如cfg.weekTime = {"星期三", "星期六"}
for i, v in ipairs(cfg.weekTime or {"星期三", "星期六"}) do
if i == 1 then
startTime = v .. " " .. (cfg.startTime or "20:00")
endTime = v .. " " .. (cfg.endTime or "21:00")
else
startTime = startTime .. "#" .. v .. " " .. (cfg.startTime or "20:00")
endTime = endTime .. "#" .. v .. " " .. (cfg.endTime or "21:00")
end
end
-- 添加定时器
addscheduled("SBK_START", "SBK_START", 2, startTime, "@xuezhan_start", "") -- 开启沙巴克
addscheduled("SBK_END", "SBK_END", 2, endTime, "@xuezhan_end", "") -- 结束沙巴克
release_print("血战沙城定时器设置完成")
end
-- 添加:全局函数 - 开启血战沙城
function xuezhan_start(actor)
release_print("---------血战沙城开启---------")
addtocastlewarlistex("*") -- 把所有行会添加到攻城列表
addattacksabukall() -- 所有行会同时攻城
gmexecute("0", "ForcedWallConQuestwar") -- 开启沙巴克攻城
-- 发送全服公告
sendmsg("0", 2, '{"Msg":"※※血战沙城已开启※※","FColor":251,"BColor":249,"Type":1}')
-- 所有玩家回到主城
local playlist = getplayerlst(0)
for _, player in pairs(playlist or {}) do
if player and player > 0 then
mapmove(player, "dl01", 290, 392, 10)
sendmsg(player, 1, "血战沙城已开启!")
end
end
end
-- 添加:全局函数 - 结束血战沙城
function xuezhan_end(actor)
release_print("---------血战沙城结束---------")
gmexecute("0", "ForcedWallConQuestwar") -- 关闭沙巴克攻城
-- 发送全服公告
sendmsg("0", 2, '{"Msg":"※※血战沙城已结束※※","FColor":251,"BColor":249,"Type":1}')
-- 移除所有玩家的皇宫定时器
local allPlayers = getplayerlst(0)
for _, player in pairs(allPlayers or {}) do
if hastimer(player, 7) then
setofftimer(player, 7)
end
if getbaseinfo(player, 60) == 1 then
mapmove(player, "dl01", 290, 392, 10)
end
end
end
```
**主要修改点:**
1. 在`init`函数中添加了`self:setScheduled()`来设置定时器
2. 添加了`setScheduled`函数来配置沙巴克的开启和结束时间
3. 添加了全局函数`xuezhan_start`和`xuezhan_end`来实际开启和结束沙巴克
4. 使用`addscheduled`命令设置定时触发
这样修改后,沙巴克就会按照你配置的时间自动开启,`castleinfo(5)`就能正确返回`true`,玩家就可以正常进入了。
如果还有不明白的地方,随时问我哦!不懂的也可以问浮生梦尊师!