传奇NPC开发JSON全套命令用法 检测与排序赋值实战教程
在传奇版本定制、NPC功能开发、游戏数据存储与交互场景中,JSON命令是高效处理游戏数据、自定义NPC逻辑、实现数据读写排序的核心脚本工具。借助标准化的JSON语法,能够轻松完成传奇游戏内玩家数据、榜单数据、NPC自定义参数的初始化、赋值、删除、检测、排序等操作,大幅提升传奇脚本开发的效率与灵活性。…
在传奇版本定制、NPC功能开发、游戏数据存储与交互场景中,JSON命令是高效处理游戏数据、自定义NPC逻辑、实现数据读写排序的核心脚本工具。借助标准化的JSON语法,能够轻松完成传奇游戏内玩家数据、榜单数据、NPC自定义参数的初始化、赋值、删除、检测、排序等操作,大幅提升传奇脚本开发的效率与灵活性。本文由浅入深,完整讲解传奇高效率JSON命令、NPC检测命令的语法格式、参数释义、变量用法及全场景实战案例,适配BLUEM2等各类传奇引擎版本开发使用,所有代码均可直接复制套用。
一、传奇NPC JSON基础命令概述
传奇NPC开发中,所有JSON数据读写、编辑、存储操作均依托统一基础命令实现,可操控JSON字符串与本地JSON文件,是所有进阶功能的底层核心。
1.1 标准命令格式
JSON 标识|存活时间 子命令 名称 数值
开发小贴士:可使用VSCode安装JSON格式化、JSON解析扩展插件,快速查看、编辑、校验传奇脚本内的JSON文件与字符串,规避语法报错。
1.2 四大核心参数详细释义
标识:自定义唯一变量标识,用于绑定对应的JSON数据对象。标识后可通过“|”拼接存活时间(单位:秒),-1代表永久生效;未手动填写存活时间时,默认180秒,超时后自动释放当前标识对应的JSON对象数据。
子命令:JSON核心操作指令,覆盖文件读写、数据初始化、增删改查、排序、格式转换等全场景功能,所有可用子命令及功能如下:
InitJsonFromFile 文件名 //从Json文件初始化数据 SaveToJsonFile 文件名 //将JSON数据保存到Json文件 InitJson Json字符串 //通过自定义Json字符串初始化数据 InitFrom 其他标识.路径 //复制其他标识路径下的JSON数据完成初始化,路径参数可省略 InitArrayFromCsv Csv字符串 //通过Csv字符串初始化生成JSON数组 InitArrayFromCsvFile 文件名 //通过本地Csv文件初始化生成JSON数组 ToCsv S变量 //将JSON数组数据转为Csv字符串,仅支持数组对象使用 SaveToCsvFile 文件名 //将JSON数组数据保存为本地Csv文件,仅支持数组对象使用 SortByName //按照名称对JSON数据排序 SortByValue //按照数值对JSON数据排序 Clear //清空当前标识对应的所有JSON数据 DeleteByName 名称 //根据节点名称删除对应JSON数据 DeleteByPath 路径 //根据数据路径删除对应JSON节点数据 AddValue 名称 数值 //新增JSON节点数据,支持多类型数值参数 AddOrUpdateValue 名称 数值 //新增或更新JSON节点数据,存在则覆盖、不存在则新建 SetValueByPath 路径 数值 //根据路径设置节点数值,路径不存在则自动创建节点 AddOrUpdateObject 源标识 0/1 //批量合并更新JSON对象,0仅新增不存在项,1覆盖更新重复项 GetCountByPath M变量 路径 //获取指定路径下的节点数量,路径为空则获取底层总节点数
名称:JSON节点名称,字符串格式,自定义命名适配传奇游戏各类数据场景。
数值:JSON节点存储数据,支持多类型格式,编写时数值尽量不添加空格,含空格需用双引号包裹,具体类型如下:
整数:12345678 字符串:自定义普通文本字符串 布尔值:True、False 浮点数:1.367 日期时间:"2018-11-12 06:12:11"、"2018-11-12T06:12:11.123" 数组:["string",100,null,true,false,123.4] 对象:{"name":"ObjectName","value":"ObjectValue"}
1.3 JSON专用系统变量用法
传奇脚本专属JSON变量,可快速读取、解析、格式化JSON数据,适配各类NPC弹窗、数据调取、循环遍历场景,是脚本开发高频用法:
<$JSON(标识.路径)J> //输出可读性较低的单行JSON字符串,路径可省略 <$JSON(标识.路径)H> //输出格式化多行JSON字符串,可读性高,适合数据查看 <$JSON(标识.路径)C> //统计获取指定路径下对象或数组的节点数量 <$JSON(标识.路径)T.路径> //判断数据类型,0为未定义、1为对象、2为数组 <$JSON(标识.路径)N.索引> //通过索引位置读取节点名称,适配循环读取场景 <$JSON(标识.路径)V.名称或索引> //通过索引或节点名称读取对应数值
1.4 基础JSON命令入门实战案例
涵盖数据初始化、多类型赋值、文件保存、数据删除等基础操作,新手可直接复制测试:
#act
// 清空初始化JSON对象
JSON myjson Clear
// 新增各类基础数据
JSON myjson AddValue 整数 12345
JSON myjson AddValue 字符串 这是字符串...
JSON myjson AddValue 布尔值 True
JSON myjson AddValue 浮点数 2.532
// 按路径赋值特殊格式数据
JSON myjson SetValueByPath 日期 "2018-11-12 06:12:11"
JSON myjson SetValueByPath 数组 ["字符串",100,null,true,false,123.4]
JSON myjson SetValueByPath 对象 {"name":"Object_Name","value":"Object_Value"}
// 弹窗输出格式化JSON数据
sendmsg 7 Json:<$JSON(myjson)H>
// 数组索引取值演示
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
// 保存JSON数据到本地文件
JSON myjson SaveToJsonFile ..\JsonData\example.json
// 通过JSON字符串初始化数据
JSON myjson InitJson {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"字符串"}]}
sendmsg 7 取值:<$JSON(myjson.object.subobj.int2)V>
// 按路径删除指定节点数据
JSON myjson DeleteByPath array.3
JSON myjson DeleteByPath myobj.subobj.1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除后的结果<$JSON(myjson)J>
1.5 JSON数据合并实战案例
适用于多组游戏数据合并、NPC配置更新场景,支持增量新增、覆盖更新两种模式:
#act
// 初始化两个JSON数据源
JSON dst InitJson {a:10000,b:200,c:"id"}
JSON src InitJson {a:"str",d:500,e:7002}
// 模式0:仅添加目标不存在的字段,不覆盖重复数据
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 0
sendmsg 7 合并结果0:<$JSON(tmp)JSON>
// 模式1:覆盖重复字段,保留源数据内容
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 1
sendmsg 7 合并结果1:<$JSON(tmp)JSON>
1.6 JSON数组/对象循环读取案例
适配榜单遍历、批量读取玩家数据场景,是动态数据展示的核心写法:
#act
JSON myjson Clear
JSON myjson SetValueByPath 数组 ["字符串",100,null,true,123.4]
JSON myjson SetValueByPath 对象 {"name":"Object_Name","value":"Object_Value"}
sendmsg 7 重设结果:<$JSON(myjson)J>
// 循环读取数组数据
Mov D98 <$JSON(myjson.数组)C>
sendmsg 7 类型值:<$JSON(myjson.数组)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
#if
#act
sendmsg 7 “数组[<$STR(D99)>]”的值:<$JSON(myjson.数组)V.<$STR(D99)>>
#~for
// 循环读取对象数据
Mov D98 <$JSON(myjson.对象)C>
sendmsg 7 类型值:<$JSON(myjson.对象)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
#if
#act
Mov S99 <$JSON(myjson.对象)N.<$STR(D99)>>
sendmsg 7 “对象”<$STR(S99)>的值是:<$JSON(myjson.对象)V.<$STR(S99)>>
#~for
二、传奇NPC专属CheckJson检测命令
CheckJson是传奇NPC开发专属的数据校验命令,主要用于判断JSON数据路径、节点名称、数值是否存在,以及两组数据是否一致,广泛应用于NPC权限校验、功能触发、数据判定场景。
2.1 命令标准格式
CheckJson 标识 子命令 标识/名称/路径 选项
2.2 参数与检测子命令说明
标识:需检测的JSON数据唯一标识,与初始化标识对应。
子命令(检测方法):
X:检测指定路径的子节点是否存在 N:检测当前层级是否存在指定节点名称 V:检测当前层级是否存在指定数值 E:检测两组JSON数据内容是否完全一致
2.3 CheckJson全功能实战案例
#if
true
#act
// 初始化两组对比JSON数据
JSON myjson1 P {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"str":"字符串"}]}
JSON myjson2 P {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":888888},"array":[1,3,4]},"array":[1.23,200,300,{"str":"字符串"}]}
// 路径节点检测
#if
CheckJson myjson1 X myobj.subobj.int2
#act
sendmsg 6 路径存在:<$JSON(myjson1)myobj.subobj.int2>
#elseact
sendmsg 5 路径不存在
// 数组路径检测
#if
CheckJson myjson1 X array
#act
sendmsg 6 路径存在,数组[0]:<$JSON(myjson1)array.0>,数组[3]整个对象:<$JSON(myjson1)array.3>,数组[3]“str”的值:<$JSON(myjson1)array.3.str>
#elseact
sendmsg 5 路径不存在
// 节点名称检测
#if
CheckJson myjson1 N name2
#act
sendmsg 6 1)包含名称
#elseact
sendmsg 5 1)不包含名称
// 数值检测
#if
CheckJson myjson1 V 123456
#act
sendmsg 6 3)包含数值
#elseact
sendmsg 5 3)不包含数值
// 数据一致性检测
#if
CheckJson myjson1 E myjson2
#act
sendmsg 6 5)相等
#elseact
sendmsg 5 5)不等
三、传奇JSON核心功能模块实战合集
本章汇总传奇版本开发中高频使用的JSON进阶功能,涵盖数据排序、CSV互转、增删改查、批量赋值、数据合并、文件读写等落地场景。
3.1 数据排序功能(按名称/按数值)
适用于传奇富豪榜、战力榜、积分榜等榜单排序场景,支持正序、反序排列,可自动保存数据到本地文件:
[@按名称排序]
#ACT
JSON 富豪榜 Clear
JSON 富豪榜 AddValue <$USERNAME> <$GAMEGOLD>
JSON 富豪榜 InitJson <$JSON(富豪榜)JSON>
sendmsg 6 数组:<$JSON(富豪榜.数组)J>
JSON 富豪榜 SortByName
sendmsg 5 数值正序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SortByName 1
sendmsg 7 数值反序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SaveToJsonFile ..\JsonData\富豪榜.json
GOTO @main
[@按数值排序]
#ACT
JSON 富豪榜 Clear
JSON 富豪榜 AddValue <$USERNAME> <$GAMEGOLD>
JSON 富豪榜 InitJson <$JSON(富豪榜)JSON>
sendmsg 6 数组:<$JSON(富豪榜.数组)J>
JSON 富豪榜 SortByValue
sendmsg 5 数值正序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SortByValue 1
sendmsg 7 数值反序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SaveToJsonFile ..\JsonData\富豪榜.json
GOTO @main
3.2 CSV与JSON数据双向互转
支持CSV字符串、CSV文件与JSON数组双向转换,可用于批量导入玩家数据、批量导出游戏榜单数据:
[@InitArrayFromCsv]
#ACT
JSON 富豪榜 InitArrayFromCsv 富豪榜."玩家"
sendmsg 5 结果:<$JSON(富豪榜.玩家)J>
GOTO @main
[@JsonArray1]
#act
JSON myjson InitArrayFromCsv 1,8,3,4,5
sendmsg 7 InitArrayFromCsv:<$JSON(myjson)J>
JSON myjson GetCountByPath M99
sendmsg 7 数组数量:<$STR(M99)>
JSON myjson ToCsv S_Temp
sendmsg 7 ToCsv:<$STR(S_Temp)>
JSON myjson SaveToCsvFile ..\JsonData\array1.csv
3.3 JSON数据增删改查完整案例
涵盖新增、更新、按名删除、按路径删除等核心操作,适配NPC动态数据更新、玩家数据存档场景:
[@AddValue]
#act
JSON myjson Clear
JSON myjson AddValue 整数 12345
JSON myjson AddValue 字符串 这是字符串...
JSON myjson AddValue 布尔值 True
JSON myjson AddValue 浮点数 2.532
JSON myjson SaveToJsonFile ..\JsonData\example.json
JSON myjson InitJson <$JSON(myjson)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson)JSON>
[@DeleteByPath]
#act
JSON myjson InitJson {"myobj":{"name":"张三","subobj":{"name1":"李四","name2":"老六","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"字符串"}]}
sendmsg 5 取值:<$JSON(myjson)H>
JSON myjson DeleteByPath myobj.name
JSON myjson DeleteByPath myobj.subobj.name1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除:<$JSON(myjson)J>
[@DeleteByName]
#act
JSON myjson InitJson {"myobj":{"name":"张三","subobj":{"name1":"李四","name2":"老六","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"BLUEM2引擎"}]}
sendmsg 5 取值:<$JSON(myjson)H>
JSON myjson DeleteByName myobj
sendmsg 7 删除:<$JSON(myjson)J>
3.4 多级路径批量赋值实战
通过 SetValueByPath 精准创建多级嵌套节点,适配角色自定义属性、NPC复杂配置存档场景:
[@赋值组]
#act
JSON myjson1 AddOrUpdateValue 数组 [<$GAMEGOLD>]
JSON myjson1 AddOrUpdateValue 对象 {<$USERNAME>}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
; 数组索引规则:第一个位置以0开始
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
[@赋值组1]
#act
JSON myjson1 SetValueByPath 数组 ["字符串",100,null,true,false,123.4]
JSON myjson1 SetValueByPath 对象 {"name":"张三","name":"李四"}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
3.5 节点新增/智能更新(AddOrUpdateValue)
无需判断节点是否存在,自动实现存在更新、不存在新增,适配玩家动态数据、活动临时数据维护:
[@AddOrUpdateValue]
#act
JSON myjson1 AddOrUpdateValue 日期 "2024-10-01 00:00:00"
JSON myjson1 AddOrUpdateValue 数组 ["字符串",1000]
JSON myjson1 AddOrUpdateValue 对象 {"name":"BLUEM2","name":"引擎"}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
3.6 整对象批量合并更新(AddOrUpdateObject)
支持整组JSON对象批量合并,适合多NPC配置整合、批量数据更新场景:
[@AddOrUpdateObject]
#act
JSON myjson1 AddOrUpdateObject "2028-10-01 00:00:00" 1
JSON myjson1 AddOrUpdateObject 数组 ["字符串",10000]
JSON myjson1 AddOrUpdateObject 对象 {"name":"引擎","name":"BLUEM2"}
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 5 Json:<$JSON(myjson1)H>
sendmsg 5 Json:<$JSON(myjson1)JSON>
3.7 CSV文件批量解析与循环遍历
实现本地CSV文件全量读取、解析、遍历,是传奇批量数据运维的核心工具:
[@JsonArray2]
#act
JSON myjson InitJson {"玩家":[<$USERNAME>,<$GAMEGOLD>,]}
sendmsg 7 InitJson:<$JSON(myjson)J>
JSON myjson GetCountByPath M99 数组
sendmsg 7 数组数量:<$STR(M99)>
#for (D99 = 0, D99 < M99, D99 + 1)
#if
#act
sendmsg 7 序号:<$STR(D99)>,数值:<$JSON(myjson.数组)V.<$STR(D99)>>
#~for
; 数组数据排序后导出
JSON 临时数组 InitFrom myjson.数组
JSON 临时数组 SortByValue 1
sendmsg 7 临时数组类型<$JSON(临时数组)T>,结果:<$JSON(临时数组)J>
JSON 临时数组 ToCsv S_Temp
sendmsg 7 ToCsv2:<$STR(S_Temp)>
JSON 临时数组 SaveToCsvFile ..\JsonData\array2.csv
; 读取本地CSV文件数据
JSON J_CsvData InitArrayFromCsvFile ..\JsonData\array3.csv
sendmsg 7 InitArrayFromCsvFile:<$JSON(J_CsvData)J>
Mov M99 <$JSON(J_CsvData)C>
#for (D99 = 0, D99 < M99, D99 + 1)
#if
#act
sendmsg 5 行<$STR(D99)>数据:<$JSON(J_CsvData)V.<$STR(D99)>>
JSON J_Temp InitJson <$JSON(J_CsvData)V.<$STR(D99)>>
sendmsg 7 行<$STR(D99)>类型:<$JSON(J_Temp)T>,数量:<$JSON(J_Temp)C>
Mov M98 <$JSON(J_Temp)C>
#for (D98 = 0, D98 < M98, D98 + 1)
#if
#act
sendmsg 7 字段名:<$JSON(J_Temp)N.<$STR(D98)>>,数值:<$JSON(J_Temp)V.<$STR(D98)>>
#~for
#~for
四、高频复用命令模板(直接套用)
4.1 InitJson数据初始化模板
[@InitJson]
#act
JSON myjson InitJson <$JSON(myjson)JSON>
JSON myjson1 InitJson <$JSON(myjson1)JSON>
#SAY
格式化:<$JSON(myjson)JSON> <返回/@main> <关闭/@exit>\
整数:<$JSON(myjson.整数)V>\
字符:<$JSON(myjson.字符串)V>\
布尔:<$JSON(myjson.布尔值)V>\
浮点:<$JSON(myjson.浮点数)V>\
日期:<$JSON(myjson1.日期)V>\
数组:<$JSON(myjson1.数组.0)V>\
数组:<$JSON(myjson1.数组)V.1>\
格式化:<$JSON(myjson1.对象)V>\
对像:<$JSON(myjson1.对象)V.0>\
对像:<$JSON(myjson1.对象)V.1>\
<关闭/@exit>
4.2 InitFrom数据复制模板
[@InitFrom]
#act
JSON myjson InitFrom <$JSON(myjson)JSON>
JSON myjson1 InitFrom <$JSON(myjson1)JSON>
#SAY
格式化:<$JSON(myjson)JSON> <返回/@main> <关闭/@exit>\
整数:<$JSON(myjson.整数)V>\
字符:<$JSON(myjson.字符串)V>\
布尔:<$JSON(myjson.布尔值)V>\
浮点:<$JSON(myjson.浮点数)V>\
日期:<$JSON(myjson1.日期)V>\
数组:<$JSON(myjson1.数组.0)V>\
数组:<$JSON(myjson1.数组)V.1>\
格式化:<$JSON(myjson1.对象)V>\
对像:<$JSON(myjson1.对象)V.0>\
对像:<$JSON(myjson1.对象)V.1>\
<关闭/@exit>
4.3 精简路径删除命令模板
[@DeleteByPat]
#act
JSON myjson DeleteByPath array.3
JSON myjson DeleteByPath myobj.subobj.1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除后的结果<$JSON(myjson)J>
五、传奇JSON脚本开发总结
本文完整覆盖传奇版本开发核心JSON能力,从基础命令语法、参数释义、系统变量入门,到数据检测、排序、增删改查、CSV互转、批量合并、循环遍历等进阶实战,所有脚本均经过实操校验,可直接适配BLUEM2等主流传奇引擎。
JSON脚本是传奇自定义NPC、动态数据存档、榜单统计、批量数据运维、权限校验的核心工具,熟练掌握全套命令用法,可彻底摆脱固定脚本限制,灵活拓展游戏自定义功能,大幅提升版本定制效率。


