当前位置:首页 > 引擎 > Blue引擎

传奇HASH系列NPC脚本命令大全 实用脚本案例教程

admin19小时前1
在传奇版本搭建与NPC脚本制作中,HASH系列命令是提升脚本运行效率、优化数据存储读写、实现自定义数据统计的核心脚本指令。相比传统硬盘IO读写脚本命令,HASH系列命令运行更高效、数据检测更精准,广泛应用于传奇怪物筛选、角色数据存储、道具时效管控、角色改名适配等各类场景。本文详细讲解传奇全部HASH…

在传奇版本搭建与NPC脚本制作中,HASH系列命令是提升脚本运行效率、优化数据存储读写、实现自定义数据统计的核心脚本指令。相比传统硬盘IO读写脚本命令,HASH系列命令运行更高效、数据检测更精准,广泛应用于传奇怪物筛选、角色数据存储、道具时效管控、角色改名适配等各类场景。本文详细讲解传奇全部HASH系列核心脚本命令、语法格式及实战脚本案例,方便传奇版本开发者快速上手使用。

一、传奇HashExists检测命令详解

命令作用:HashExists是传奇高效检测脚本命令,主要用于检测指定执行标识的HASH容器内是否存在对应键值,可完全替代CheckStringList等低效硬盘IO命令,大幅优化服务器运行性能,避免大量数据检测时出现卡顿问题。

标准格式:HashExists 标识 键

脚本释义:精准判定设定标识的HASH数据中,是否包含自定义键值,适配大批量数据快速校验场景。

实战示例

#if

HashExists 标识 <$USERNAME>

#say

存在

#elsesay

不存在

二、传奇HashModified数据改动检测命令

命令作用:HashModified属于NPC专属检测命令,用于检测指定标识的HASH数据是否发生修改,是传奇脚本数据保存、数据更新判定的核心指令。该命令支持程序自动判定,无需额外冗余代码,适配各类角色数据、游戏数据变动监控场景。

标准格式:HashModified 标识

脚本释义:实时监测对应标识的HASH容器数据变动状态,为数据保存、数据同步提供判定依据。

实战示例

#if

HashModified 标识

#say

Hash已经被修改过

#elsesay

未改动

三、传奇HASH核心执行命令(全子命令详解)

命令作用:HASH是传奇脚本多功能核心执行命令,支持数据加载、保存、清理、赋值、增减数值、时效设置等多种操作,是传奇自定义数据存储、时效道具、角色数据存档的核心指令。

标准格式:HASH 标识 子命令 键 值

全部子命令功能明细

Load 文件名:从指定文件加载HASH数据,禁止频繁调用,高频使用会造成服务器性能损耗,建议仅在服务器启动时统一加载。文件路径示例:..\QuestDiary\MonData\野猪.csv

Save 文件名:将HASH容器数据保存至指定文件,同样不建议频繁使用,避免频繁硬盘读写影响服务器效率。

BGSave 文件名:开启后台自动保存功能,仅适配全局HASH数据场景,无需手动执行保存指令,自动同步数据文件。

Clear:清空指定标识HASH容器内所有键值数据,属于高危操作,使用前需做好数据备份,谨慎调用。

Delete key:删除HASH指定键值,key为空时直接删除整个HASH容器,key不为空则仅删除对应单条数据,高危指令需慎用。

Get key S1:读取指定key对应的数值,赋值给自定义变量S1,用于脚本数据调用与展示。

Setkeyvalue:自定义键值时效与触发规则,支持三个可选参数:过期时间(秒,默认-1永久有效)、过期触发字段、执行权限(G为全局触发,空为当前NPC触发)。触发参数包含标识、key、value、执行者名称,适配时效道具、限时buff等场景。

Inc key increment:对指定key的整数数值进行累加,仅支持整数数据,用于道具数量、积分、次数递增等场景。

Dec key decrement:对指定key的整数数值进行递减,仅支持整数数据,适配道具消耗、次数扣除、积分减少等场景。

GetE key M1:获取指定键值的剩余时效,返回值规则:-2=键值不存在、-1=永久有效、≥0=剩余有效秒数。

SetE key 过期时间(秒):为已存在的键值设置时效,数值大于0则倒计时结束自动删除,设置-1恢复永久有效状态。

四、传奇HASH专属系统变量

传奇脚本内置专属HASH保留变量,可快速调取HASH数据,简化脚本编写流程:

$HASH(标识)Size:统计并获取指定标识HASH容器内的总键值数量,可用于数据统计、列表计数。

$HASH(标识)key:直接根据key调取对应数值,效果等同于【Hash 标识 Get key S1】命令,写法更简洁。

五、传奇HASH脚本实战经典案例

案例一:高效怪物静态列表筛选脚本

该案例利用HASH命令替代传统低效列表检测,实现怪物类型快速判定,适配传奇打怪判定、怪物专属掉落、怪物buff判定等场景,服务器运行效率更高。

#act

; 手动添加野猪类怪物数据至HASH容器

Hash H_野猪 Set 黑野猪

Hash H_野猪 Set 红野猪

Hash H_野猪 Set 白野猪

; 手动保存怪物列表数据至本地文件

Hash H_野猪 Save ..\QuestDiary\MonData\野猪.csv

; QM服务器启动脚本:初始化加载怪物数据

[@OnStart]

#act

Hash H_野猪 Load ..\QuestDiary\MonData\野猪.csv

; QF攻击触发脚本:判定目标是否为野猪类怪物

[@Attack]

#if

HashExists H_猪怪 <$TARINFO_NAME>

#act

sendmsg 7 目标是野猪

#elsesay

sendmsg 7 不是野猪

案例二:全局角色批量数据存取脚本

适合全区角色统一数据存储,支持自动后台保存、数据时效设置、数值增减,键值统一采用【角色名_XX】格式,完美适配角色改名、合服数据同步场景。

#act

; 写入角色各类自定义数据,设置数值过期触发事件

Hash H_角色数据 Set <$USERNAME>_整数 3 10 @整数过期

Hash H_角色数据 Inc <$USERNAME>_整数 2

Hash H_角色数据 Set <$USERNAME>_字符 字符串数据

Hash H_角色数据 Set <$USERNAME>_日期 <TIMESTAMP>

; 读取HASH存储的角色数据

Hash H_角色数据 Get <$USERNAME>_整数 M1

Hash H_角色数据 Get <$USERNAME>_字符 S1

Hash H_角色数据 Get <$USERNAME>_日期 S2

sendmsg 7 数值:<$STR(M1)>,字符:<$STR(S1)>,日期:<$STR(S2)>

; 删除指定角色HASH键值数据

Hash H_角色数据 Delete <$USERNAME>_整数

; 数据过期触发脚本

[@整数过期]

#act

OutputMessage整数过期:uid=<$PARAM(0)>,key=<$PARAM(1)>,val=<$PARAM(2)>,who=<$PARAM(3)>

; QM启动加载与停止保存脚本

[@OnStart]

#act

Hash H_角色数据 Load ..\QuestDiary\HumData\H_角色数据.csv

Hash H_角色数据 BGSave ..\QuestDiary\HumData\H_角色数据.csv

[@OnStop]

#act

Hash H_角色数据 Save ..\QuestDiary\HumData\H_角色数据.csv

案例三:单角色独立数据存储脚本

单角色对应独立数据文件,适合秒卡时效、个人专属限时道具等小众场景,不适合高人气传奇服务器,避免文件过多造成服务器卡顿。

#act

; 设置角色秒卡数据及过期触发

Hash <$USERNAME> Set 秒卡 1 30 @秒卡过期

Hash <$USERNAME> Inc 秒卡 14

#if

!HashExists <$USERNAME> 秒卡创建日期

#act

Hash <$USERNAME> Set 秒卡创建日期 <TIMESTAMP>

; 变量调取HASH数据展示

sendmsg 7 秒卡剩余:<$HASH($USERNAME)秒卡>(秒)

; 角色登录加载数据

[@LoadData]

#act

Hash <$USERNAME> Load ..\QuestDiary\HumData\<$USERNAME>.csv

; 角色下线保存数据

[@SaveData]

#act

Hash <$USERNAME> Save ..\QuestDiary\HumData\<$USERNAME>.csv

案例四:传奇角色改名数据同步脚本

针对传奇角色改名场景,同步修改本地数据文件及HASH容器键值,解决改名后数据丢失、数据不匹配问题,适配合服、角色更名功能开发。

[@chgname_success]

#act

; 重命名角色独立数据文件

RenameFile ..\QuestDiary\HumData\<$PARAM(1)>.csv ..\QuestDiary\HumData\<$PARAM(2)>.csv

; 替换文件内旧角色名数据

StringsReplace 文件名 <$PARAM(1)> <$PARAM(2)>

; 同步替换HASH容器内角色相关键值

Hash H_角色数据 ReplaceKey <$PARAM(1)> <$PARAM(2)>

案例五:角色属性数据存取与增减脚本

完整实现传奇角色金币、元宝、灵符、声望、金刚石等基础属性的HASH存储、读取、增减修改功能,可直接用于个人数据面板、属性调整系统开发。

<获取个人数据/@个人数据>

[@个人数据]

#ACT

;格式化金币

MOV S1 <$GOLDCOUNT>

StrTok S1 S2 /

CREDITPOINT = 255

GAMEGIRD = 65535

GAMEDIAMOND = 65535

GAMEPOINT = 20000000

GAMEGOLD = 50000

; 将角色各类属性存入HASH容器

Hash H_角色 Set <$USERNAME>_灵符 <$GAMEGIRD>

Hash H_角色 Set <$USERNAME>_金币 <$STR(S2)>

Hash H_角色 Set <$USERNAME>_元宝 <$GAMEGOLD>

Hash H_角色 Set <$USERNAME>_泡点 <$GAMEPOINT>

Hash H_角色 Set <$USERNAME>_金刚石 <$GAMEDIAMOND>

Hash H_角色 Set <$USERNAME>_声望 <$CREDITPOINT>

; 保存角色数据文件

Hash H_角色 Save ..\QuestDiary\HumData\H_角色.csv

; 读取HASH存储的角色属性数据

Hash H_角色 Get <$USERNAME>_声望 S1

Hash H_角色 Get <$USERNAME>_金币 S2

Hash H_角色 Get <$USERNAME>_元宝 S3

Hash H_角色 Get <$USERNAME>_灵符 S4

Hash H_角色 Get <$USERNAME>_金刚石 S5

Hash H_角色 Get <$USERNAME>_泡点 S6

#SAY

<$USERNAME>\

声望:<$STR(S1)>、金币:<$STR(S2)>、元宝:<$STR(S3)>、灵符:<$STR(S4)>、金刚石:<$STR(S5)>、泡点:<$STR(S6)>\

<返回/@个人数据>

; 灵符增加脚本

[@增加键值]

#if

HashExists H_角色 <$USERNAME>_灵符

#ACT

GAMEGIRD + 100

Hash H_角色 INC <$USERNAME>_灵符 100

Hash H_角色 Get <$USERNAME>_灵符 S4

sendmsg 5 调整灵符100、当前剩余灵符:<$STR(S4)>

; 灵符减少脚本

[@减少键值]

#if

HashExists H_角色 <$USERNAME>_灵符

#ACT

GAMEGIRD - 100

Hash H_角色 Dec <$USERNAME>_灵符 100

Hash H_角色 Get <$USERNAME>_灵符 S4

sendmsg 5 调整灵符100、当前剩余灵符:<$STR(S4)>

六、HASH脚本使用注意事项

1、Load、Save子命令禁止高频调用,频繁硬盘读写会导致传奇服务器卡顿、性能下降,数据加载统一放在服务器启动事件,保存优先使用后台自动保存指令。

2、Clear、Delete空键值为高危操作,会清空全部HASH数据,操作前务必备份数据文件,避免数据丢失。

3、角色数据键值严格使用【角色名.XX】或【角色名_XX】格式,可完美适配角色改名、合服数据同步场景。

4、单角色独立HASH文件模式不适合高在线服务器,大量文件堆积会影响服务器运行效率,高服优先使用全局HASH数据存储。

扫描二维码推送至手机访问。

本文章九路游发布,如需转载请注明出处。如有侵权请联系站长删除。

本文链接:https://www.9luu.com/501.html

分享给朋友: