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