XueZhanShaCheng = class("XueZhanShaCheng", BaseSystemLogic)
ZhuanSheng = VarCfg.player.sZhuanSheng --玩家转生等级
KuangBao = VarCfg.player.sRage --玩家狂暴开启
WangZheZanZu = VarCfg.player.sWangZheZanZu --玩家王者等级
huoyue = VarCfg.player.nHuoyue --玩家活跃值
function X
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-21 11:44:45 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你这套攻城脚本写得挺有想法的,整体框架和逻辑基本都考虑到了,但确实存在一些需要调整和优化的地方。
让我根据你的策划需求和996引擎的特性,逐条帮你分析一下:
---
### 1. **攻城时间控制**
**问题**:
你的脚本里通过 `checkTime` 函数判断 `hour == 20` 来限制进入皇宫,但策划要求 **新区合区当晚(20:00~21:00)**、**老区每天攻沙**。
这里没有区分“新区首沙”和“老区日常”,且没有判断“合区当晚”的逻辑。
**建议**:
- 用 **全局变量** 或 **系统变量** 记录是否为首沙(例如 `SetSysInt("G500", 1)` 表示首沙已结束)。
- 在 `checkTime` 中加入对 `G500` 的判断:
- 如果 `G500 == 0`(首沙未开始),则只在 **合区当晚的20点** 允许进入(需额外判断合区日期)。
- 如果 `G500 == 1`(首沙已结束),则 **每天20点** 都可进入。
---
### 2. **攻沙资格检测**
**问题**:
你在 `FlyMap` 中检测了等级、转生、狂暴,但 **王者赞助** 没有检测。
另外,转生等级和狂暴的变量取值方式比较复杂,容易出错。
**建议**:
- 王者赞助通常是一个 **称号** 或 **变量**,可以用 `checktitle(actor, "王者赞助")` 或读取对应变量判断。
- 简化变量取值,例如转生等级可以直接用 `GetInt(0, actor, "转生等级")`。
---
### 3. **活跃值系统**
**问题**:
- `ontimer7` 函数名应为 `ontimer(actor, 7)` 才能被QF事件触发。
- 当前每分钟+1活跃值的逻辑是 **只要在皇宫就加**,但策划要求是 **攻沙期间**(20:00~21:00)才加。
- 死亡触发 `playDie` 在QF中应为 `playDie(actor)`,且需注册。
**建议**:
- 在 `ontimer` 触发时先判断是否在攻沙时间内,再增加活跃值。
- 确保QF文件中有对应的事件注册,例如:
```lua
-- QF文件
function ontimer(actor, timerid)
if timerid == 7 then
-- 增加活跃值逻辑
end
end
function playDie(actor)
-- 死亡增加活跃值逻辑
end
```
---
### 4. **奖励发放逻辑**
**问题**:
- `lingjiang` 函数中 `setTimer` 只判断是否为21:03,但 **没有定时器触发**,需要依赖外部调用。
- 奖励发放是 **21:03准时发放**,但你的逻辑是玩家点击领奖时才判断时间,这可能导致部分玩家无法领取。
**建议**:
- 在 **21:03** 设置一个 **全局定时器**,自动遍历两个领奖地图的玩家并发放奖励。
- 用 `hastimerex` 检查定时器是否存在,避免重复发放。
---
### 5. **地图传送与清理**
**问题**:
- `castlewarstart` 中 `getplayerlst(0)` 是获取全服玩家,但攻城开始只需要把 **非皇宫玩家** 传回土城即可。
- 攻沙期间攻击怪物回城的逻辑写在 `killMon`,但需要确保 **只在攻沙时间生效**。
**建议**:
- 在 `castlewarstart` 中只传送 **不在皇宫地图** 的玩家。
- 在 `killMon` 中先判断 `castleinfo(5)` 是否为攻沙状态,再执行回城。
---
### 6. **领奖地图人数统计**
**问题**:
- 你在 `lingjiang` 中用了 `getplaycountinmap` 和 `getplaycount`,但这两个函数可能返回 **0或table**,需要做好类型判断。
- 奖励平分时,如果人数为0会导致除零错误。
**建议**:
- 用 `type(failplayList) == "table"` 判断返回值,并处理空表情况。
- 在计算平分奖励前,先判断 `failPlayCount > 0`。
---
### 7. **代码优化建议**
1. **变量命名**:尽量用英文或拼音全称,避免缩写,例如 `huoyue` 改为 `ActiveValue`。
2. **函数封装**:把重复的逻辑(如时间判断、资格检测)封装成独立函数。
3. **注释补充**:关键逻辑加上注释,方便后续维护。
4. **错误处理**:所有玩家操作都加上 `pcall` 或条件判断,避免脚本报错导致引擎崩溃。
---
### 8. **最终核对清单**
- [ ] 区分新区首沙与老区日常的攻城时间。
- [ ] 加入王者赞助检测。
- [ ] 活跃值只在攻沙期间增加。
- [ ] 奖励发放改为全局定时器自动执行。
- [ ] 攻沙开始只传送非皇宫玩家。
- [ ] 所有QF事件都已正确注册。
- [ ] 领奖地图人数统计做好空值判断。
---
小仙,你的脚本框架已经搭得不错了,只要把上述问题调整一下,就能完美运行!
如果还有不明白的地方,随时问我,或者去请教浮生梦尊师也行哦!
← 返回问答库