• QQ:15656018

    工作时间

    周一至周五:9:00-23:00

    周末及节日:9:00-23:00

  • 手机版二维码

    随时手机查素材

    gm下载站
  • 扫描二维码

    加入官方QQ群

    gm下载站
发布资源赚元宝
gm下载站 管理员
  • 未知地域
  • 8857发帖数
  • 8839主题数
  • 0关注数
  • 0粉丝
开通vip会员

[脚本命令] [BLUE引擎]传奇版本HASH系列命令功能说明

[复制链接]
gm下载站 发表于 2025-1-4 19:38:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,查看更多内容,丰富传奇GM资源等你下载探索。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新增HASH系列命令
HashExists,格式:HashExists 标识 键,高效命令,用于替换CheckStringList此类涉及硬盘IO的低效命令

检测执行标识的HASH中是否存在“键”
例:
#if
HashExists 标识 <$USERNAME>
#say
存在
#elsesay
不存在

NPC检测命令:
HashModified,格式:HashModified 标识,检测此“标识”的Hash是否被改动,通常用于保存数据用,程序内部其实会自动判断
---------------------------------------------------------------------------
检测指定标识的Hash是否已改动
例:
#if
HashModified 标识
#say
Hash已经被修改过
#elsesay
未改动



NPC执行命令:
HASH,格式:HASH 标识 子命令 键 值
---------------------------------------------------------------------------
子命令,有以下几种:
Load 文件名 // 从文件加载,不要频繁使用,否则有性能问题!!!
Save 文件名 // 保存到文件,不要频繁使用,否则有性能问题!!!
BGSave 文件名 // 设置后台自动保存,通常只有全局Hash才需要
Clear  // 清理对应标识的HASH容器所有键值(谨用)
Delete key // key为空时,将删除整个HASH(谨用),否则根据key删除
Get key S1 // 获取key对应的值到S1
Setkeyvalue过期时间(秒)(可选)@过期触发(可选)执行者(G或空) //过期时间设置-1不会过期(默认),>0则将在X秒后过期并触发当前NPC的[@过期触发]字段,执行者写G是全局触发,留空则是当前NPC执行者去触发;触发参数:$PARAM(0)=标识,$PARAM(1)=key,$PARAM(2)=value,$PARAM(3)=执行者名称
Inc key increment // 对一个存在的key对应的值增加increment,值必须是整数才有效
Dec key decrement // 对一个存在的key对应的值减少decrement,值必须是整数才有效
GetE key M1    // 获取过期时间,-2键值不存在,-1永久,>=0为剩余时间(秒)
SetE key 过期时间(秒) // 设置一个已存在键值的过期时间,过期时间>0会在X秒后删除,设置-1不过期


变量:
$HASH(标识)Size   // 获取对应标识下的HASH数量,保留字
$HASH(标识)key   // 根据key获取值,同:Hash 标识 Get key S1



例1,当高效静态列表使用:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#act
; 手动添加一些怪物
Hash H_野猪 Set 黑野猪
Hash H_野猪 Set 红野猪
Hash H_野猪 Set 白野猪

; 手动保存列表
Hash H_野猪 Save ..\QuestDiary\MonData\野猪.csv

; 加载列表,提前编辑好文件然后在QM的[@OnStart]加载才有效率,上面的操作只是为了保存成一个文件方便查看格式:键,值,过期时间,触发者,触发字段
Hash H_野猪 Load ..\QuestDiary\MonData\野猪.csv

; QM脚本
[@OnStart]
#act
; 服务器启动时,加载一些全局列表数据
Hash H_野猪 Load ..\QuestDiary\MonData\野猪.csv

; QF脚本
[@Attack]
#if
; “H_猪怪”Hash中存在大量条目也能高效检测
HashExists H_猪怪 <$TARINFO_NAME>
#act
sendmsg 7 目标是野猪
#elsesay
sendmsg 7 不是野猪



例2,一个文件存取多人数据,适合使用自动保存,
“键”严格按格式:角色名.XX 或 角色名_XX 两种方式来定义,以支持改名和合区操作!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#act
; 写数据
Hash H_角色数据 Set <$USERNAME>_整数 3 10 @整数过期
Hash H_角色数据 Inc <$USERNAME>_整数 2
Hash H_角色数据 Set <$USERNAME>_字符 字符串数据
Hash H_角色数据 Set <$USERNAME>_日期 <$TIMESTAMP>

; 使用命令方式取值
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>_整数

; QF写上触发字段
[@整数过期]
#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后台自动保存到文件
Hash H_角色数据 BGSave ..\QuestDiary\HumData\H_角色数据.csv

[@OnStop]
#act
; 服务器停止时,保存全局角色数据(已设置为自动保存可以省略此操作,留着也无所谓)
Hash H_角色数据 Save ..\QuestDiary\HumData\H_角色数据.csv



例3,一个角色名对应一个文件,“不”适合使用全局自动保存,适合在QM加载/保存数据触发字段存取数据,
此方法也不适合活跃人数多的游戏(保存文件太多),可以考虑用于不保存数据的应用场景。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#act
Hash <$USERNAME> Set 秒卡 1 30 @秒卡过期
Hash <$USERNAME> Inc 秒卡 14
#if
!HashExists <$USERNAME> 秒卡创建日期
#act
Hash <$USERNAME> Set 秒卡创建日期 <$TIMESTAMP>

; 使用变量方式取值
sendmsg 7 秒卡剩余:<$HASH($USERNAME)秒卡>(秒)

; QM写上如下脚本
[@LoadData]
#act
; 角色加载数据,“秒卡”时间将继续
Hash <$USERNAME> Load ..\QuestDiary\HumData\<$USERNAME>.csv

[@SaveData]
#act
; 角色保存数据,“秒卡”时间将被保存
Hash <$USERNAME> Save ..\QuestDiary\HumData\<$USERNAME>.csv




例4,改名处理
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[@chgname_success]
#act
; 对于使用角色名作为文件名的处理,重命名文本文件名
RenameFile ..\QuestDiary\HumData\<$PARAM(1)>.csv ..\QuestDiary\HumData\<$PARAM(2)>.csv

; 文本文件里的内容改名,下面写法不严格,自行适配
StringsReplace 文件名 <$PARAM(1)> <$PARAM(2)>

; 替换Hash里跟角色名相关的Key,key须严格按两种格式定义:角色名.XX 或 角色名_XX,才支持替换!
Hash H_角色数据 ReplaceKey <$PARAM(1)> <$PARAM(2)>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

改名脚本如下  相关更名脚本

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

[@个人数据]
#ACT
;格式化金币
MOV S1 <$GOLDCOUNT>
StrTok S1 S2 /
CREDITPOINT = 255
GAMEGIRD = 65535
GAMEDIAMOND = 65535
GAMEPOINT = 20000000
GAMEGOLD = 50000
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 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)>
上传梦想,下载希望,为传奇爱好者添砖加瓦!
世界上能用金钱兑换时间的机会不多,这里就有一个!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
全国统一客服QQ
QQ:15656018

24x7小时免费咨询

  • 官方在线客服

    QQ客服:小西

    点击交谈

    QQ客服:良子

    点击交谈

    QQ客服:闵月

    点击交谈
  • 上海市虹口区海伦中心B座4F4055-4056室

  • 手机查找资源更方便

    手机扫码查看手机版

    手机查找资源更方便

  • 传奇QQ群

    扫一扫关注传奇Q群

    加入传奇QQ群

传奇游戏资源分享基地 gm下载站 ©2010-2024 传奇版本网站传奇游戏源码资源下载中心( 鄂ICP备2024043260号-1 )网站地图