更新概览
本次更新围绕”多人副本体验优化”目标,全面完善了队伍副本命令系统,并建立了严格的脚本格式规范。新功能让多人副本的准入检查、资源管理、团队传送更加可靠稳定。
核心更新内容:
- ✅ 队伍检查命令优化:修复了
CHECKGROUPMEMBERITEMIDX
和CHECKGROUPMEMBERLEVEL
的实现问题
- ✅ 脚本格式规范:解决了
[@_USEITEM]
触发器空格敏感问题
- ✅ 自动化检查工具:开发了
check_envir_scripts.py
格式检查工具
- ✅ 调试系统增强:添加了详细的日志调试体系
下文将以「哨探NPC副本系统」为完整案例,展示队伍命令的实际用法与调试过程。
队伍副本命令系统
核心命令速览
队伍状态检查
1 2 3 4 5 6 7 8 9 10 11
| GROUPLEADER NOT GROUPLEADER
GroupCount > 3 GroupCount >= 1 GroupCount == 1
GROUPCHECKNEARBY
|
队伍成员检查
1 2 3 4 5 6 7 8 9 10 11
| CHECKGROUPMEMBERLEVEL >= 40 CHECKGROUPMEMBERLEVEL < 40
CHECKGROUPMEMBERGOLD >= 50000 CHECKGROUPMEMBERGOLD < 50000
CHECKGROUPMEMBERITEMIDX 90226 1 CHECKGROUPMEMBERITEMIDX 91195 1
|
队伍资源操作
1 2 3 4 5 6 7 8 9
| TakeGroupMemberGold 50000
TakeGroupMemberItemIdx 90226 1 TakeGroupMemberItemIdx 91195 1
GroupInstanceMove 80 1005 272 0
|
副本创建
1 2 3 4 5 6
| CreateInstance 地图ID 副本类型 最大人数 难度模式 CreateInstance 80 2 21 0 CreateInstance 80 2 21 1 CreateInstance 72 2 0 0 CreateInstance 73 2 31 0
|
实战案例:哨探NPC副本系统
1. 屠魔大厅入口检查模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| [@1_1_1]
;检测队长 NOT GROUPLEADER
Break
勇士你不是队长,请等待队长操作!
;检测队员等级 - 所有队员都需要>=40级 NOT CHECKGROUPMEMBERLEVEL >= 40
Break
队伍有成员等级未达到40级!
;检测队员金币 - 所有队员都需要>=5万金币 CHECKGROUPMEMBERGOLD < 50000
Break
队伍有成员金币不到5万!
;检测队员物品 - 所有队员都需要有灵符 CHECKGROUPMEMBERITEMIDX 90226 1
Break
队伍有成员灵符不到1个!请确认每人背包都有至少1个灵符(ID:90226)!
;检测队员位置 - 所有队员都需要在附近 GROUPCHECKNEARBY
CreateInstance 80 2 21 0 TakeGroupMemberGold 50000 TakeGroupMemberItemIdx 90226 1 GroupInstanceMove 80 1005 272 0
队伍成员不在附近
|
2. 多难度副本选择
1 2 3 4 5 6 7 8 9 10 11
| CreateInstance 73 2 31 0 GroupInstanceMove 73 887 284 0
CreateInstance 73 2 31 1 GroupInstanceMove 73 887 284 0
CreateInstance 73 2 31 2 GroupInstanceMove 73 887 284 0
|
3. 不同费用模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
CHECKGROUPMEMBERGOLD < 100000
Break
队伍有成员金币不到10万!
GROUPCHECKNEARBY
CreateInstance 36 2 36 0 TakeGroupMemberGold 100000 GroupInstanceMove 36 1058 503 0
CHECKGROUPMEMBERITEMIDX 90226 3
Break
队伍有成员灵符不到3个!
GROUPCHECKNEARBY
CreateInstance 36 2 36 0 TakeGroupMemberItemIdx 90226 3 GroupInstanceMove 36 1058 503 0
|
脚本格式规范与问题解决
关键发现:[@_USEITEM]空格敏感问题
在调试过程中,我们发现了一个严重的格式敏感问题:[@_USEITEM]
触发器行末的多余空格会导致脚本无法正确注册和执行。
问题症状
- 物品使用时调用了
CallDefaultNPC
- 日志显示”调用Envir脚本处理物品XXXX”
- 但Envir脚本没有任何响应
- 没有LOG日志输出
根本原因
Envir脚本引擎对[@_USEITEM(物品ID)]
行的格式要求严格,行末不能有任何多余的空格或制表符。
正确格式示例
✅ 正确格式
1 2 3 4 5 6 7 8 9
| [@_USEITEM(1410036)] LOG "[ENVIR脚本调试] [@_USEITEM(1410036)] 脚本被调用"
CheckItemidx 1410036 1
LOG "[物品使用调试] 物品脚本开始执行" TakeItemIdx 1410036 1 GiveTitle 11 Break
|
❌ 错误格式(行末有空格)
1 2 3 4 5 6 7 8
| [@_USEITEM(1410036)] ← 这里有多余空格! LOG "[ENVIR脚本调试] [@_USEITEM(1410036)] 脚本被调用"
CheckItemidx 1410036 1
TakeItemIdx 1410036 1 GiveTitle 11 Break
|
自动化检查工具
我们开发了专门的格式检查工具:check_envir_scripts.py
功能特性
- ✅ 检测
[@_USEITEM]
行末多余空格
- ✅ 检测其他行末空格问题
- ✅ 检测Tab和空格混用问题
- ✅ 自动修复功能
- ✅ 生成详细报告
- ✅ 支持UTF-8和GBK编码
使用方法
- 检查单个文件
1
| python check_envir_scripts.py "Database\System\Envir\Core\Items\消耗品\称号坐骑.txt"
|
- 检查整个目录
1
| python check_envir_scripts.py "Database\System\Envir"
|
- 自动修复问题
1
| python check_envir_scripts.py "Database\System\Envir" --fix
|
- 生成检查报告
1
| python check_envir_scripts.py "Database\System\Envir" --report report.txt
|
实际修复案例
工具在全库扫描中发现并修复了6个文件的7个空格问题:
1 2 3 4 5 6
| 已修复: Database\System\Envir\NPCs\Maps\哨探\6242-哨探.txt 已修复: Database\System\Envir\NPCs\Maps\法玛寺院\6132-石龟头02.txt 已修复: Database\System\Envir\Core\Systems\Buff管理.txt 已修复: Database\System\Envir\Core\Items\消耗品\技能道具.txt 已修复: Database\System\Envir\Core\Items\消耗品\药剂道具.txt 已修复: Database\System\Envir\Core\Items\礼包类\宝箱道具.txt
|
调试系统增强
新增调试日志体系
1. 队伍命令调试
1 2 3 4 5 6 7
| 主程.添加系统日志($"[CheckGroupMemberItemIdx调试] 开始检查队伍物品 - 物品ID:{itemId}, 数量:{itemCount}, 玩家:{player.对象名字}"); 主程.添加系统日志($"[CheckGroupMemberItemIdx调试] 玩家队伍状态:{player.所属队伍 != null}"); 主程.添加系统日志($"[CheckGroupMemberItemIdx调试] 队伍成员数:{player.所属队伍?.队伍成员?.Count ?? 0}");
主程.添加系统日志($"[CheckGroupMemberLevel调试] 开始检查队伍等级 - 要求等级:{level}, 操作符:{op}, 玩家:{player.对象名字}");
|
2. 物品使用调试
1 2 3 4 5 6 7
| 主程.添加系统日志($"[物品使用调试] 玩家{this.对象名字}尝试使用物品 - 背包类型:{背包类型}, 物品位置:{物品位置}"); 主程.添加系统日志($"[物品使用调试] 调用Envir脚本处理物品{item.物品编号}");
LOG "[ENVIR脚本调试] [@_USEITEM(物品ID)] 脚本被调用" LOG "[物品使用调试] 物品名称(物品ID) 脚本开始执行"
|
日志分析案例
成功的队伍检查日志
1 2 3 4 5 6
| [CheckGroupMemberItemIdx调试] 开始检查队伍物品 - 物品ID:90226, 数量:1, 玩家:a [CheckGroupMemberItemIdx调试] 玩家队伍状态:True [CheckGroupMemberItemIdx调试] 队伍成员数:2 [CheckGroupMemberItemIdx调试] 队员1:a, 物品检查结果:True [CheckGroupMemberItemIdx调试] 队员2:b, 物品检查结果:True [CheckGroupMemberItemIdx调试] 最终结果:成功, flag值=False
|
成功的物品使用日志
1 2 3 4 5 6
| [物品使用调试] 玩家a尝试使用物品 - 背包类型:1, 物品位置:9 [物品使用调试] 调用Envir脚本处理物品1410036 [ENVIR脚本调试] [@_USEITEM(1410036)] 脚本被调用 [物品使用调试] 伤不起(1410036) 脚本开始执行 [物品使用调试] 伤不起(1410036) 物品已消耗 [物品使用调试] 伤不起(1410036) 称号11已授予
|
最佳实践与预防措施
1. 编辑器设置建议
推荐使用支持显示空白字符的编辑器:
- Visual Studio Code: 设置
"editor.renderWhitespace": "all"
- Notepad++: 视图 → 显示符号 → 显示空格和制表符
- Sublime Text: 设置
"draw_white_space": "all"
2. 脚本开发流程
1 2 3 4 5 6 7 8 9 10 11 12
|
python check_envir_scripts.py "脚本文件路径"
python check_envir_scripts.py "脚本文件路径" --fix
|
3. 队伍副本脚本模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| [@副本入口]
NOT GROUPLEADER
Break
勇士你不是队长,请等待队长操作!
GroupCount > 最大人数
Break
队伍人数超过限制!
NOT CHECKGROUPMEMBERLEVEL >= 最低等级
Break
队伍有成员等级未达到要求!
CHECKGROUPMEMBERGOLD < 需要金币
Break
队伍有成员金币不足!
CHECKGROUPMEMBERITEMIDX 物品ID 数量
Break
队伍有成员缺少必需物品!
GROUPCHECKNEARBY
CreateInstance 地图ID 副本类型 最大人数 难度 TakeGroupMemberGold 金币数量 TakeGroupMemberItemIdx 物品ID 数量 GroupInstanceMove 地图ID X Y 朝向
队伍成员不在附近
|
技术要点与故障排除
1. 常见问题诊断
队伍检查失败
脚本不执行
2. 调试命令速查
1 2 3 4 5 6 7 8 9
| @设置玩家变量 角色名 变量名 值 @设置玩家变量 a J22 0
MOVE 147 0 0 1
|
3. 性能优化建议
- 避免在高频调用的脚本中使用复杂的队伍检查
- 合理使用Break语句避免不必要的检查
- 定期清理调试日志以避免文件过大
Bug修复与新增功能
公会系统修复
- ✅ 修复 公会NPC老沙创建公会功能 - 解决了创建公会时的异常问题
- ✅ 优化 公会创建流程的错误处理机制
- ✅ 增强 公会系统的稳定性和可靠性
宝石镶嵌系统修复
- ✅ 修复 宝石镶嵌NPC功能异常 - 解决了宝石无法正常镶嵌的问题
- ✅ 优化 宝石镶嵌的成功率计算
- ✅ 修复 镶嵌失败时的物品回退机制
新增管理命令:查询玩家变量
命令格式
支持的变量类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| G0-G∞ A0-A∞
U0-U∞ T0-T∞ J0-J∞
N0-N∞ S0-S∞ Q0-Q∞
M0-M∞ B0-B∞
|
使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @查询玩家变量 张三 J22
@查询玩家变量 李四 U100
@查询玩家变量 王五 G50
@查询玩家变量 赵六 T10
|
实际应用场景
1 2 3 4 5 6 7 8 9 10 11
| @查询玩家变量 玩家名 J22 @查询玩家变量 玩家名 U50
@查询玩家变量 玩家名 U200 @查询玩家变量 玩家名 T15
@查询玩家变量 玩家名 J100 @查询玩家变量 玩家名 G10
|
常见问题解答(Q&A)
Q: 人物释放技能时聊天框一直提示”只有管理员才可以看到”?
问题现象:
- 玩家释放技能时,聊天框频繁出现调试信息
- 提示信息显示”只有管理员才可以看到”
- 影响正常游戏体验
解决方案:
检查技能脚本调试开关
检查服务器日志等级
清理技能脚本中的调试代码
预防措施:
- 生产环境部署前关闭所有调试开关
- 定期检查脚本中的调试代码
- 建立调试代码清理检查清单
Q: 如何调整升级自动学习技能功能?
配置文件位置:
1
| Database\System\lua\Player\player.lua
|
配置参数说明:
1 2 3 4
| 开关新手送技能 = 1 真实玩家送技能等级限制 = 35 假人送技能等级限制 = 255
|
常用配置方案:
完全关闭自动送技能
只对低等级玩家开启
1 2 3
| 开关新手送技能 = 1 真实玩家送技能等级限制 = 20 假人送技能等级限制 = 20
|
区分真实玩家和假人
1 2 3
| 开关新手送技能 = 1 真实玩家送技能等级限制 = 35 假人送技能等级限制 = 255
|
高等级也送技能
1 2 3
| 开关新手送技能 = 1 真实玩家送技能等级限制 = 255 假人送技能等级限制 = 255
|
修改后的生效方式:
- 修改配置文件后需要重启服务器
- 或者使用热重载功能(如果支持)
- 建议在测试服务器先验证配置效果
注意事项:
- 等级限制为0表示完全不送技能
- 等级限制为255表示不受等级限制
- 假人和真实玩家可以设置不同的等级限制
- 修改前建议备份原配置文件
版本变更摘要(Changelog)
队伍系统优化
- ✅ 修复
CHECKGROUPMEMBERITEMIDX
物品检查实现
- ✅ 修复
CHECKGROUPMEMBERLEVEL
等级检查逻辑
- ✅ 增强 队伍资源操作命令稳定性
- ✅ 新增 详细的调试日志系统
脚本格式规范
- ✅ 解决
[@_USEITEM]
触发器空格敏感问题
- ✅ 新增
check_envir_scripts.py
自动检查工具
- ✅ 建立 Envir脚本格式规范文档
- ✅ 修复 全库6个文件的7个格式问题
Bug修复与系统优化
- ✅ 修复 公会NPC老沙创建公会功能异常
- ✅ 修复 宝石镶嵌NPC功能问题
- ✅ 优化 公会创建流程错误处理
- ✅ 修复 宝石镶嵌失败回退机制
新增管理功能
- ✅ 新增
@查询玩家变量
管理命令
- ✅ 支持 全局变量(G/A)、角色变量(U/T/J)查询
- ✅ 支持 临时变量(N/S/Q)、地图变量(M/B)查询
- ✅ 提供 完整的变量调试和排错支持
调试体系增强
- ✅ 新增 队伍命令详细调试日志
- ✅ 新增 物品使用流程调试日志
- ✅ 新增 脚本执行状态追踪
- ✅ 优化 错误信息展示格式
- ✅ 新增 技能调试信息控制机制
文档与配置完善
- ✅ 新增 常见问题解答(Q&A)章节
- ✅ 完善 升级送技能配置说明
- ✅ 提供 技能调试问题解决方案
- ✅ 建立 变量查询命令使用手册
写给开发者的话
这次更新不仅解决了具体的功能问题,更重要的是建立了一套完整的脚本质量保障体系。
格式问题的教训:一个小小的空格字符,可能导致几小时的调试工作。这提醒我们:
- 工具化是提高开发效率的关键
- 规范化能避免大多数低级错误
- 自动化检查应该成为开发流程的标准环节
建议的工作流程:
1
| 编写脚本 → 格式检查 → 自动修复 → 功能测试 → 日志验证 → 提交代码
|
希望这套工具和规范能够帮助团队避免类似问题,让我们把更多精力投入到核心游戏功能的开发上!
最后更新:2025-08-19
涉及文件:队伍命令系统 + Envir脚本格式规范 + Bug修复 + 管理命令扩展 + Q&A文档