传奇M2全局G变量A变量写入文本自动保存脚本教程

来源: 作者: 点击:
想实现双击物品弹出输入框,玩家填完信息后,把内容存到服务器的一个文本文件里。这个需求涉及两个核心环节:一是用@@InPutString100接收玩家输入,二是把输入的内容保存到全局变量并写入硬盘。下面把整个脚本逻辑拆开,从变量选择到自动保存机制,一步一步给你写明白。

**第一步:搞清楚哪些变量能存、存哪儿**

传奇M2里变量分两类:一类是人物的私人变量(S、P、M、N这些),下线就清零;另一类是全局变量(G和A),存在服务端文件里,服务器重启还在。

你要保存玩家输入的信息,属于文本内容,所以要用字符型变量。
- **S0-S99**:私人变量,字符型。下线就没了,不行。
- **A0-A99**:全局变量,字符型。**可保存**,存在 `Mir200/GlobalVal.ini` 文件里。这个符合你的要求。

另外G0-G99是全局数字变量,存数字用的,不能存文本。所以你要用的是**A变量**。

**第二步:双击物品触发输入框的脚本写法**

要实现双击物品弹出输入框,需要在**QF(功能脚本)**里写触发。QF脚本的路径一般是:`D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt`。

假设你的物品叫“留言纸条”,双击后要让玩家输入内容,脚本这样写:

```
[@StdModeFuncX]
// X 是物品的AniCount字段设置的数字,比如设置成100,这里就是[@StdModeFunc100]
#IF
#ACT
MessageBox 请输入你要留言的内容
#SAY
请在下方的输入框中填写信息,填完后点击确定。\
<输入留言/@@InPutString100>
```

这里 `@@InPutString100` 就是输入框触发字段,数字100可以换成别的,但不能和已有的冲突。

**第三步:玩家输入后,把内容存到A变量**

玩家填完内容点确定,会触发 `[@InPutString100]` 脚本段。你需要在这里把输入的内容赋值给一个A变量。

```
[@InPutString100]
#IF
#ACT
MOV A99 <$STR(S100)>
// S100 是系统临时存放输入内容的变量,把它赋值给全局变量A99
SENDMSG 6 你输入的内容已记录:<$STR(A99)>
```

到这步,玩家输入的内容已经存到**A99**这个全局变量里了。但这时候它还在内存里,只写在 `GlobalVal.ini` 文件里,还没写到你的目标文本文件。

**第四步:把A变量的内容写入指定文本文件**

要把A99的值保存到一个单独的文本里(比如 `.\QuestDiary\留言记录.txt`),需要用**文件读写命令**。常见的写法是用 `WRITELINE` 或 `APPENDTOFILE`。

```
[@InPutString100]
#IF
#ACT
MOV A99 <$STR(S100)>
SENDMSG 6 你输入的内容已记录:<$STR(A99)>
APPENDTOFILE .\QuestDiary\留言记录.txt <$STR(A99)>
// 把A99的值追加写入到留言记录.txt文件里,每行一条
```

`APPENDTOFILE` 命令的作用是在文件末尾追加一行内容,不会覆盖之前的数据。路径前面的 `.\` 代表服务端根目录,一般 `QuestDiary` 文件夹就在 `Envir` 下面。如果没有这个文件夹,手动建一个就行。

**第五步:完整脚本组装**

把上面几段拼起来,一个完整的双击物品触发输入并保存到文本的脚本就是这样:

```
; 放在 QFunction-0.txt 里

[@StdModeFunc100]
#IF
#ACT
MessageBox 请输入你要留言的内容
#SAY
请在下方的输入框中填写信息,填完后点击确定。\
<输入留言/@@InPutString100>

[@InPutString100]
#IF
#ACT
MOV A99 <$STR(S100)>
APPENDTOFILE .\QuestDiary\留言记录.txt <$STR(A99)>
SENDMSG 6 你的留言已保存到服务器文本。
```

**第六步:其他变量保存机制说明**

如果你想保存的是**数字型**的全局变量(比如G变量),它们默认就保存在 `Mir200/GlobalVal.ini` 里。每次修改G变量,M2会自动写进这个文件,不用额外加脚本。

如果你想保存的是**自定义全局变量**(不是A也不是G),需要用 `SAVEVAR` 命令,格式如下:

```
CALCVAR GLOBAL 自定义变量 = <$STR(M88)>
SAVEVAR GLOBAL 自定义变量 .\QuestDiary\记录.txt
```

但你这个需求用A99加 `APPENDTOFILE` 已经足够,不需要绕弯路。

**第七步:注意事项**

1. **路径写对**:`APPENDTOFILE` 后面的路径,建议用 `.\QuestDiary\文件名.txt` 这种相对路径,避免移植服务端时找不到文件。
2. **文件权限**:确保 `QuestDiary` 文件夹和里面的文本文件不是“只读”属性,否则写不进去。
3. **变量冲突**:A99如果你在其他地方也用到了,换个没用过的编号,比如A88、A77都行。
4. **测试**:写完后在游戏里双击物品输入内容,然后去服务端 `.\Mir200\Envir\QuestDiary\` 下找留言记录.txt,打开看内容有没有写进去。