记忆石功能核心在于让玩家在任意安全坐标记录位置,之后双击物品即可返回该坐标。实现方式通常有两种:一种是物品数据库设置StdMode为31,双击触发QFunction-0.txt中的@StdModeFuncX脚本;另一种是通过NPC对话记录坐标,再用物品或命令触发回传。下面以GOM/GEE类引擎为例编写,变量号、物品名、地图号需按实际版本替换。
一、物品数据库配置
在StdItem.db或物品数据库中添加记忆石物品:
Name:记忆石
StdMode:31
AniCount:180
DuraMax:0
Looks:对应素材编号
Price:0
StdMode设为31表示双击该物品可触发脚本功能,AniCount设为180表示触发@StdModeFunc180脚本。AniCount数值必须与QFunction-0.txt中的标签数字一致,且不能与其他物品冲突。
二、QFunction-0.txt触发脚本
文件路径:
Mir200EnvirMapQuest_defQFunction-0.txt
[@StdModeFunc180]
IF
EQUAL P0 0
EQUAL P1 0
ELSESAY
你尚未记录任何坐标,请先找记忆石使者记录位置。\
[@exit]
IF
EQUAL P0 0
EQUAL P1 0
ACT
MAPMOVE <MAPNAME> <P0> <P1>
SENDMSG 7 记忆石已生效,你已返回记录的坐标。
BREAK
P0和P1用于存储玩家记录的X坐标和Y坐标。若坐标未记录,P0和P1默认为0,此时提示玩家先记录坐标。若版本支持地图号存储,可增加P2记录地图编号,传送时改为MAPMOVE <P2> <P0> <P1>。
三、NPC部署配置
文件路径:
Mir200EnvirMerChant.txt
记忆石使者 3 330 330 5 0 0
脚本文件路径:
Mir200EnvirMarket_Def记忆石使者-3.txt
文件名中的地图号必须与MerChant.txt一致。坐标可按版本实际NPC位置调整。
四、NPC主面板脚本
[@main]
SAY
\
\
记忆石服务\
\
<记录当前坐标/@RecordPos>\
<查看已记录坐标/@ShowPos>\
<清除记录/@ClearPos>\
<记忆石说明/@HelpInfo>\
\
[@exit]
五、记录当前坐标
[@RecordPos]
IF
CHECKITEM 记忆石 1
ACT
MOV P0 <X>
MOV P1 <Y>
MOV P2 <MAPNAME>
SENDMSG 7 坐标已记录:地图<MAPNAME>,坐标<X>,<Y>。
CLOSE
ELSESAY
你背包中没有记忆石,无法记录坐标。\
[@exit]
<X>和<Y>为内置变量,分别表示玩家当前X坐标和Y坐标。记录后坐标存入P0、P1、P2,双击记忆石时读取这三个变量进行传送。
六、查看已记录坐标
[@ShowPos]
IF
EQUAL P0 0
EQUAL P1 0
ELSESAY
你已记录的坐标:\
地图:<P2>\
坐标:<P0>,<P1>\
\
[@exit]
SAY
你尚未记录任何坐标。\
[@exit]
七、清除记录
[@ClearPos]
IF
ACT
MOV P0 0
MOV P1 0
MOV P2 0
SENDMSG 7 记忆石记录已清除。
CLOSE
BREAK
清除后双击记忆石将无法传送,需重新记录坐标。
八、记忆石说明
[@HelpInfo]
SAY
记忆石使用说明:\
\
携带记忆石找到记忆石使者NPC。\
在想要记录的位置点击记录当前坐标。\
之后双击背包中的记忆石即可返回记录的坐标。\
清除记录后需重新记录才能使用。\
战斗状态或特定地图可能无法使用记忆石。\
变量P0、P1、P2用于存储坐标,请勿与其他系统共用。\
\
[@exit]
九、战斗状态限制
若版本需要限制战斗状态下使用记忆石,可在@StdModeFunc180中增加判断:
[@StdModeFunc180]
IF
EQUAL P0 0
EQUAL P1 0
ELSESAY
你尚未记录任何坐标,请先找记忆石使者记录位置。\
[@exit]
IF
ISDUAL
ELSESAY
战斗状态下无法使用记忆石。\
[@exit]
IF
ACT
MAPMOVE <P2> <P0> <P1>
SENDMSG 7 记忆石已生效,你已返回记录的坐标。
BREAK
ISDUAL用于检测玩家是否处于战斗状态,部分引擎可能使用其他命令,需按版本确认。
十、跨地图记录与传送
若版本支持跨地图传送,需在记录时保存地图编号,传送时读取:
[@RecordPos]
IF
CHECKITEM 记忆石 1
ACT
MOV P0 <X>
MOV P1 <Y>
MOV P2 <MAPNAME>
SENDMSG 7 坐标已记录:地图<P2>,坐标<P0>,<P1>。
CLOSE
ELSESAY
你背包中没有记忆石,无法记录坐标。\
[@exit]
[@StdModeFunc180]
IF
EQUAL P0 0
EQUAL P1 0
ELSESAY
你尚未记录任何坐标。\
[@exit]
IF
ACT
MAPMOVE <P2> <P0> <P1>
SENDMSG 7 记忆石已生效,你已返回记录的坐标。
BREAK
<MAPNAME>为内置变量,表示当前地图名称或编号。MAPMOVE命令第一个参数为地图编号,后两个为X和Y坐标。
十一、冷却时间控制
若需设置记忆石使用冷却时间,可增加变量控制:
[@StdModeFunc180]
IF
EQUAL P0 0
EQUAL P1 0
ELSESAY
你尚未记录任何坐标。\
[@exit]
IF
LARGE N800 0
ELSESAY
记忆石正在冷却中,请稍后再试。\
[@exit]
IF
ACT
MAPMOVE <P2> <P0> <P1>
MOV N800 1
SENDMSG 7 记忆石已生效,你已返回记录的坐标。
GOTO @StartCool
BREAK
[@StartCool]
IF
ACT
INC N801 1
GOTO @CoolCheck
[@CoolCheck]
IF
SMALL N801 30
ACT
INC N801 1
GOTO @CoolCheck
ELSESACT
MOV N800 0
MOV N801 0
BREAK
N800用于标记冷却状态,N801用于计时。冷却时间30秒可按需调整。若版本支持定时器,可改用定时器命令实现更精确的冷却控制。
十二、部署步骤
在StdItem.db中添加记忆石物品,StdMode设为31,AniCount设为180。
在QFunction-0.txt中添加@StdModeFunc180脚本。
在MerChant.txt中添加记忆石使者NPC。
在Market_Def下创建记忆石使者-3.txt脚本文件。
确认P0、P1、P2、N800、N801变量未与其他系统冲突。
重载NPC和脚本后测试记录、传送、清除、冷却流程。
十三、注意事项
AniCount数值必须与@StdModeFunc后面的数字完全一致,否则双击物品无法触发脚本。
P0、P1、P2为角色变量,每个玩家独立存储,不会互相影响。
若版本不支持<MAPNAME>获取地图编号,可改用<$MAP>或其他内置变量,需按引擎文档确认。
战斗状态检测命令ISDUAL在不同引擎中可能名称不同,部分引擎可能不支持,使用前需确认版本兼容性。
冷却时间若使用循环检测方式,可能占用服务端资源,建议优先使用引擎自带的定时器命令。
记忆石记录坐标后,若玩家换线或重启服务端,变量是否保存取决于引擎配置,需在M2Server中确认角色变量持久化设置。
若版本使用BLUE引擎,变量命名和命令格式可能不同,需按BLUE引擎文档调整。
传奇记忆石脚本:玩家自定义坐标记录绑定与双击回传完整配置
来源:
作者:
点击:

