传奇记忆石脚本:玩家自定义坐标记录绑定与双击回传完整配置

来源: 作者: 点击:
记忆石功能核心在于让玩家在任意安全坐标记录位置,之后双击物品即可返回该坐标。实现方式通常有两种:一种是物品数据库设置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引擎文档调整。