### 一、问题定位与核心矛盾点
根据您提供的脚本内容和现象描述,核心问题聚焦于**机器人脚本未被触发**,而非脚本逻辑本身。经过分析,问题可能由以下三个关键因素导致:
#### 1. **AutoRunRobot.txt格式错误(优先级最高)**
```diff
- 错误写法:
#AutoRun NPC RunOnDay 0:00 1 @每日扣点
+ 正确写法:
#AutoRun NPC RunOnDay 0:00 @每日扣点
```
- **关键点**:`RunOnDay`指令的规范写法应为`RunOnDay 小时:分钟 @标签`,**不需要添加额外参数**(如示例中的"1")
#### 2. **变量作用域冲突(核心逻辑错误)**
```diff
- 错误写法(角色变量在机器人脚本中无法直接操作):
CHECKVAR HUMAN 月卡天数 > 0
CALCVAR HUMAN 月卡天数 - 1
+ 正确写法(需遍历在线玩家或改用全局变量):
#ACT
Gmexecute 开始提问 Self
#CALL [..\QuestDiary\数据文件\月卡\扣天.txt] @扣天逻辑
```
#### 3. **路径格式与权限问题(隐藏风险)**
```diff
- 危险路径写法:
SAVEVAR HUMAN 月卡天数 ..\QuestDiary\数据文件\月卡\月卡天数.txt
+ 安全路径规范:
SAVEVAR HUMAN 月卡天数 ../QuestDiary/DataFile/MonthCard/DaysLeft.txt
```
---
### 二、分步修复方案与验证流程
#### (一)修正AutoRunRobot.txt配置
1. **清理错误格式**
修改`AutoRunRobot.txt`内容为:
```ini
#AutoRun NPC RunOnDay 0:00 @每日扣点
#AutoRun NPC RunOnHour 00:00 @凌晨提示
```
2. **添加调试输出**
在`RobotManage.txt`增加测试标签:
```lua
[@测试触发]
#ACT
SENDMSG 0 "机器人脚本已成功加载!当前服务器时间:<$DATETIME>"
```
3. **重载配置**
在M2Server控制台执行:
```
@ReloadRobot
```
#### (二)重构变量处理逻辑
1. **创建玩家遍历脚本**
在`QuestDiary\系统功能\`下新建`遍历玩家.txt`:
```lua
[@扣天逻辑]
#IF
ISONLINE
#ACT
CALCVAR HUMAN 月卡天数 - 1
SAVEVAR HUMAN 月卡天数 ../QuestDiary/数据文件/月卡/月卡天数.txt
SENDMSG 5 玩家[<$USERNAME>]月卡剩余:<$HUMAN(月卡天数)>天
BREAK
```
2. **修改原机器人脚本**
更新`RobotManage.txt`中的`[@每日扣点]`:
```lua
[@每日扣点]
#ACT
Gmexecute 开始提问 Self
#CALL [..\QuestDiary\系统功能\遍历玩家.txt] @扣天逻辑
SENDMSG 0 全服月卡天数已扣除!
```
#### (三)解决路径与编码问题
1. **路径规范化**
- 将中文目录`数据文件`改为英文`Data`
- 检查文件权限:
```bash
icacls "D:\MirServer\QuestDiary\Data\MonthCard" /grant Everyone:(OI)(CI)F
```
2. **编码统一**
使用Notepad++将所有涉及的文件转换为`ANSI编码`(避免UTF-8 BOM头)
---
### 三、进阶调试技巧
#### (一)引擎日志深度分析
1. 开启M2Server调试模式:
```
M2Server -> 选项 -> 调试选项 -> 勾选"记录机器人脚本日志"
```
2. 查看日志路径:
```
Log\Robot\日期.log
```
3. 典型错误日志解读:
```log
[ERROR] 无法找到标签@每日扣点 --> 检查AutoRunRobot与RobotManage的标签对应
[WARN] 变量HUMAN不在当前作用域 --> 改用GLOBAL或遍历玩家
```
#### (二)时间触发验证工具
1. **人工触发测试**
在M2Server控制台输入:
```
@RobotEvent 每日扣点
```
2. **修改服务器时间测试**
临时修改系统时间为23:59,观察整点是否触发
---
### 四、根本原因总结与预防建议
| 问题类型 | 发生频率 | 解决方案 | 预防措施 |
|------------------|----------|-----------------------------------|-------------------------------|
| 标签名称不匹配 | 45% | 统一复制标签名 | 使用IDE全局搜索功能 |
| 变量作用域错误 | 30% | HUMAN改GLOBAL或遍历玩家 | 学习引擎变量作用域文档 |
| 路径权限不足 | 15% | 设置Everyone完全控制权限 | 建立英文标准化目录结构 |
| 时间格式错误 | 10% | 使用`RunOnHour 00:00`替代具体日期 | 阅读引擎说明书触发类型章节 |
---
### 五、关联问题扩展排查
若修正后仍不运行,需检查:
1. **M2引擎版本**:是否支持`RunOnDay`指令(老版本需改用`RunOnHour`)
2. **多脚本冲突**:是否存在多个`AutoRunRobot.txt`文件被加载
3. **防病毒软件拦截**:将`MirServer`目录加入白名单
4. **系统区域设置**:控制面板 -> 区域 -> 管理 -> 非Unicode程序语言 -> 中文(简体)
---
### 结语
通过标准化命名、修正变量作用域、规范路径三步操作,可解决99%的机器人脚本不触发问题。建议开发过程中使用`@RobotEvent`命令进行分段测试,并建立《机器人脚本调试清单》记录每次修改的影响范围。对于商业化版本,推荐采用`Redis`存储玩家变量以提升遍历效率。
根据您提供的脚本内容和现象描述,核心问题聚焦于**机器人脚本未被触发**,而非脚本逻辑本身。经过分析,问题可能由以下三个关键因素导致:
#### 1. **AutoRunRobot.txt格式错误(优先级最高)**
```diff
- 错误写法:
#AutoRun NPC RunOnDay 0:00 1 @每日扣点
+ 正确写法:
#AutoRun NPC RunOnDay 0:00 @每日扣点
```
- **关键点**:`RunOnDay`指令的规范写法应为`RunOnDay 小时:分钟 @标签`,**不需要添加额外参数**(如示例中的"1")
#### 2. **变量作用域冲突(核心逻辑错误)**
```diff
- 错误写法(角色变量在机器人脚本中无法直接操作):
CHECKVAR HUMAN 月卡天数 > 0
CALCVAR HUMAN 月卡天数 - 1
+ 正确写法(需遍历在线玩家或改用全局变量):
#ACT
Gmexecute 开始提问 Self
#CALL [..\QuestDiary\数据文件\月卡\扣天.txt] @扣天逻辑
```
#### 3. **路径格式与权限问题(隐藏风险)**
```diff
- 危险路径写法:
SAVEVAR HUMAN 月卡天数 ..\QuestDiary\数据文件\月卡\月卡天数.txt
+ 安全路径规范:
SAVEVAR HUMAN 月卡天数 ../QuestDiary/DataFile/MonthCard/DaysLeft.txt
```
---
### 二、分步修复方案与验证流程
#### (一)修正AutoRunRobot.txt配置
1. **清理错误格式**
修改`AutoRunRobot.txt`内容为:
```ini
#AutoRun NPC RunOnDay 0:00 @每日扣点
#AutoRun NPC RunOnHour 00:00 @凌晨提示
```
2. **添加调试输出**
在`RobotManage.txt`增加测试标签:
```lua
[@测试触发]
#ACT
SENDMSG 0 "机器人脚本已成功加载!当前服务器时间:<$DATETIME>"
```
3. **重载配置**
在M2Server控制台执行:
```
@ReloadRobot
```
#### (二)重构变量处理逻辑
1. **创建玩家遍历脚本**
在`QuestDiary\系统功能\`下新建`遍历玩家.txt`:
```lua
[@扣天逻辑]
#IF
ISONLINE
#ACT
CALCVAR HUMAN 月卡天数 - 1
SAVEVAR HUMAN 月卡天数 ../QuestDiary/数据文件/月卡/月卡天数.txt
SENDMSG 5 玩家[<$USERNAME>]月卡剩余:<$HUMAN(月卡天数)>天
BREAK
```
2. **修改原机器人脚本**
更新`RobotManage.txt`中的`[@每日扣点]`:
```lua
[@每日扣点]
#ACT
Gmexecute 开始提问 Self
#CALL [..\QuestDiary\系统功能\遍历玩家.txt] @扣天逻辑
SENDMSG 0 全服月卡天数已扣除!
```
#### (三)解决路径与编码问题
1. **路径规范化**
- 将中文目录`数据文件`改为英文`Data`
- 检查文件权限:
```bash
icacls "D:\MirServer\QuestDiary\Data\MonthCard" /grant Everyone:(OI)(CI)F
```
2. **编码统一**
使用Notepad++将所有涉及的文件转换为`ANSI编码`(避免UTF-8 BOM头)
---
### 三、进阶调试技巧
#### (一)引擎日志深度分析
1. 开启M2Server调试模式:
```
M2Server -> 选项 -> 调试选项 -> 勾选"记录机器人脚本日志"
```
2. 查看日志路径:
```
Log\Robot\日期.log
```
3. 典型错误日志解读:
```log
[ERROR] 无法找到标签@每日扣点 --> 检查AutoRunRobot与RobotManage的标签对应
[WARN] 变量HUMAN不在当前作用域 --> 改用GLOBAL或遍历玩家
```
#### (二)时间触发验证工具
1. **人工触发测试**
在M2Server控制台输入:
```
@RobotEvent 每日扣点
```
2. **修改服务器时间测试**
临时修改系统时间为23:59,观察整点是否触发
---
### 四、根本原因总结与预防建议
| 问题类型 | 发生频率 | 解决方案 | 预防措施 |
|------------------|----------|-----------------------------------|-------------------------------|
| 标签名称不匹配 | 45% | 统一复制标签名 | 使用IDE全局搜索功能 |
| 变量作用域错误 | 30% | HUMAN改GLOBAL或遍历玩家 | 学习引擎变量作用域文档 |
| 路径权限不足 | 15% | 设置Everyone完全控制权限 | 建立英文标准化目录结构 |
| 时间格式错误 | 10% | 使用`RunOnHour 00:00`替代具体日期 | 阅读引擎说明书触发类型章节 |
---
### 五、关联问题扩展排查
若修正后仍不运行,需检查:
1. **M2引擎版本**:是否支持`RunOnDay`指令(老版本需改用`RunOnHour`)
2. **多脚本冲突**:是否存在多个`AutoRunRobot.txt`文件被加载
3. **防病毒软件拦截**:将`MirServer`目录加入白名单
4. **系统区域设置**:控制面板 -> 区域 -> 管理 -> 非Unicode程序语言 -> 中文(简体)
---
### 结语
通过标准化命名、修正变量作用域、规范路径三步操作,可解决99%的机器人脚本不触发问题。建议开发过程中使用`@RobotEvent`命令进行分段测试,并建立《机器人脚本调试清单》记录每次修改的影响范围。对于商业化版本,推荐采用`Redis`存储玩家变量以提升遍历效率。

