传奇如何用 Hero 引擎把输入内容存到指定文本?教你做游戏留言板

来源: 作者: 点击:
在传奇脚本里,经常需要让玩家输入文字并保存起来,比如做一个游戏内的留言板。用 Hero 引擎的 @@InPutString 命令就能实现这个功能,只要几步设置,就能把玩家输入的话存到 D:\mirserver\Mir200\Envir 文件夹的留言.txt 里。下面就一步步教你怎么做。
先弄明白基本原理
其实这个功能就像在游戏里装一个 “记事本”:玩家通过 NPC 对话输入文字(用 @@InPutString 命令),脚本把这些文字 “抄” 下来,再 “贴” 到指定的文本文件里。整个过程需要三个部分配合:触发输入的 NPC 脚本、处理输入内容的脚本命令,以及保存内容的文本文件。
首先要确认 D:\mirserver\Mir200\Envir 文件夹里有没有 “留言.txt”。如果没有,就新建一个空白的文本文档,名字必须是 “留言.txt”,注意别写成 “留言.txt.txt”(可以在文件夹设置里取消 “隐藏已知文件类型的扩展名” 避免这个问题)。
制作接收输入的 NPC 脚本
先在 \mir200\envir\market_def 文件夹里找一个 NPC 的脚本文件,比如 “村长 - 3.txt”(3 是地图编号),用记事本打开。在脚本里添加一段对话,让玩家触发输入功能,比如:
#say
想给其他玩家留言吗?
点击输入内容后点确定即可保存。
#act
@@InPutString 请输入留言内容(最多 30 字) 0 @SaveMessage
这段代码的意思是:玩家和村长对话时,会看到留言提示,点击后弹出输入框(最多 30 字),输入完成后就会触发 @SaveMessage 这个脚本标签。其中 “0” 代表输入框的样式,保持默认即可;@SaveMessage 是后续处理的关键标记,名字可以自己取,但要和后面的脚本对应。
编写保存内容的核心脚本
接下来需要新建一个处理保存功能的脚本。在同一个 market_def 文件夹里,新建一个 “留言处理.txt”,用记事本打开,写入以下内容:
[@SaveMessage]
#act
; 打开留言.txt 文件,准备添加内容
FileOpen 0 D:\mirserver\Mir200\Envir\ 留言.txt 1
; 把玩家输入的内容存到变量 S1 里
mov S1 <\(STR(InPutString)>
;将变量内容写入文件,同时换行
FileWrite 0 <\)USERNAME > 说:<$S1>
FileWrite 0
; 关闭文件,完成保存
FileClose 0
#say
你的留言已保存!
这里的关键是 FileOpen、FileWrite 和 FileClose 三个命令的配合:
FileOpen 0 后面的 “0” 是文件编号(可以是 0-9 的数字),接着是文件的完整路径,最后一个 “1” 代表 “追加模式”(不会覆盖原有内容);
路径里的反斜杠必须用 “\” 而不是 “/”,因为在 Windows 系统里,反斜杠才是正确的路径分隔符;
FileWrite 0 后面的内容就是要写入的文字,<$USERNAME> 会显示玩家的账号名,方便区分是谁留的言;
额外加一行 FileWrite 0 是为了让每条留言单独占一行,看起来更整齐。
让脚本生效的最后步骤
保存好脚本后,需要让游戏加载这些新设置。在游戏里用管理员账号输入 @reloadnpc 命令刷新 NPC,这样刚才修改的村长脚本就会生效。然后走到村长身边对话,试着输入一句 “今天天气不错”,提交后去 D:\mirserver\Mir200\Envir 文件夹里打开留言.txt,应该能看到一行 “你的账号名说:今天天气不错”。
如果看不到内容,先检查路径是否正确:比如服务器安装在 E 盘就不能写 D 盘;文件夹名称是否正确(比如是不是 Mir200 而不是 Mir2000)。另外,输入的内容不要超过 30 个字符,否则可能被截断。
解决常见的小问题
有时候玩家输入后,留言.txt 里会出现乱码。这是因为文本文件的编码格式不对,用记事本打开留言.txt,点击 “文件 - 另存为”,在底部 “编码” 选项里选择 “ANSI”,替换原来的文件即可。
如果提示 “无法打开文件”,可能是权限问题。右键点击留言.txt,在 “属性” 里取消 “只读” 勾选,或者把整个 Envir 文件夹的权限设置为 “everyone 可读写”。
还有种情况是输入内容不显示,检查脚本里的 <$STR (InPutString)> 是否写错了(比如多写了空格),这个变量是固定的,必须原样使用才能获取玩家输入的内容。
扩展用法让留言更实用
可以给每条留言加上时间,只需在 FileWrite 命令里添加系统时间变量,比如:
FileWrite 0 [<\(DATETIME>] <\)USERNAME > 说:<$S1>
这样留言里会显示 “[2024-08-05 15:30:20] 张三说:今天天气不错”,方便查看时间。
如果想限制每天的留言次数,可以用变量记录次数。在 [@SaveMessage] 开头添加:
#if
checkvar H8 > 5 ;H8 是自定义变量,代表当天留言次数
#say
今天留言次数已用完,请明天再来!
#elseact
mov H8 <$H8+1>
; 后面接写入文件的命令
这样每个玩家每天最多只能留 5 条言,避免文件被刷屏。
其实 Hero 引擎的文件操作就像现实中写信:@@InPutString 是让玩家 “写信”,FileOpen 是 “打开信封”,FileWrite 是 “把信放进去”,FileClose 是 “封上信封”。只要把这几个步骤串起来,不仅能做留言板,还能做玩家日记、系统公告记录等功能。多试试修改文字格式和变量,还能做出更有创意的玩法。