Changelog

2020-12-15

2020-12-15 BLUE引擎更新,涉及 各模块 等模块,共 161 项功能调整与问题修复。

更新内容

  • M2 修正批量TAKE物品记录可能不正确问题
  • 修正重新加载技能DB后,部分操作技能的NPC命令失效问题(原重新登录可解决)
  • 修正道道合击多次计算对方防御问题!
  • 追心刺技能到达8级可以百分之百破盾
  • !Setup添加参数QuitGameWideTrigger,参数为1时,非安全区下线也可以触发@OnLogout_OffLinePlaying和@OnLogout_SoftClosing,默认0
  • 添加变量$SERVERID,对应!setup参数的serverid
  • 添加变量$ONLINEHUMNUM,当前引擎在线人数
  • 添加变量$OFFLINEHUMNUM',当前引擎离线人数
  • 添加变量$TOTALHUMNUM',总在线人数(多引擎)
  • 添加NPC命令ResetLoopCounter,重置脚本死循环计数,在一些循环较多的脚本需要用到
  • 怪物文本爆率增加权重掉落模式,格式:
  • 1/99999998 物品名1|权重1,物品名2|权重2,物品名3|权重3... 1 $GAMEGOLD ? 1 -1
  • 说明:
    1. 99999998 表示使用权重模式
    1. 权重是非0数字,衡量在一个物品在此条目所有物品中的掉落占比,数字越大几率越大
    1. 此模式必定且只掉落一件物品
    1. 不适合掉落金币
  • 添加NPC命令JSON,操作JSON的字符串,格式:JSON 标识|存活时间 方法 名称 数值
  • !可以使用VSCode(安装json扩展插件,json格式化插件)查看编辑json文件。
  • !资料参考:https://www.runoob.com/json/json-tutorial.html
  • 各个参数意义:
    1. 标识,类似自由变量,指定一个唯一标识,“|”号后面是此对象的存活时间(秒),-1表示永久,
  • 不写存活时间默认是180秒,即180秒后,此标识的JSON对象会被释放。
    1. 方法,有以下几种:
  • L 从文件加载,不要频繁使用,否则有性能问题!!!
  • S 保存到文件,不要频繁使用,否则有性能问题!!!
  • A 添加
  • E 赋值
  • C 清理
  • D 删除指定名称的子结点
  • P 解析给定的字符串

O 排序,格式

    1. JSON 标识 O 是否按名称排序(0/1) 是否排序子结点(0/1)

Y 复制,格式

    1. JSON 标识 Y 源标识 0 // 从“源标识”复制一份到“标识”

M 合并,格式

1) JSON 目标标识 M 源标识 0        // 0 不重复,重复项目将以“目标标识”为准,默认
2) JSON 目标标识 M 源标识 1        // 1 不重复,重复项目将以“源标识”为准
3) JSON 目标标识 M 源标识 2        // 2 可重复,将“源标识”项目追加至“标识”中
    1. 名称,类型是字符串
    1. 数值,有以下几种类型:
  • 整数 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. 取值的变量:
<$JSON(标识)JSON>             // 固定格式,JSON对象的字符串,单行
<$JSON(标识)FORMAT>               // 固定格式,JSON对象格式化后的字符串(换行)
<$JSON(标识)path>             // 某路径或名称下的数值
  • 例:
#act
JSON myjson C
JSON myjson A 整数 12345
JSON myjson A 字符串 这是字符串...
JSON myjson A 布尔值 True
JSON myjson A 浮点数 2.532
JSON myjson E 日期时间 "2018-11-12 06:12:11"
JSON myjson E 数组 ["字符串",100,null,true,false,123.4]
JSON myjson E 对象 {"name":"Object_Name","value":"Object_Value"}
sendmsg 7 myjson格式化字符串是:<$JSON(myjson)FORMAT>
  • ; 第一个位置以0开始
  • sendmsg 7 “数组”第二位置的值是:<$JSON(myjson)数组1>
  • ; 保存到文件
  • JSON myjson S ..\QuestDiary\example.json
  • ; 从字符串解释到JSON
JSON myjson P {"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>

JSON myjson D array[3]
JSON myjson D myobj.subobj[1]
JSON myjson D myobj.subobj.int2
sendmsg 7 删除后的结果<$JSON(myjson)FORMAT>
  • ; 合并例子
JSON myjson1 P {a:10000,b:200,c:"id"}
JSON myjson2 P {a:"str",d:500,e:7002}
  • ; 不重复,重复项目将以“目标标识”为准,默认
JSON cpyjson Y myjson1
JSON cpyjson M myjson2 0
sendmsg 7 合并结果0:<$JSON(cpyjson)JSON>
  • ; 不重复,重复项目将以“源标识”为准
JSON cpyjson Y myjson1
JSON cpyjson M myjson2 1
sendmsg 7 合并结果1:<$JSON(cpyjson)JSON>
  • ; 追加项目,允许重复
JSON cpyjson Y myjson1
JSON cpyjson M myjson2 2
sendmsg 7 合并结果2:<$JSON(cpyjson)JSON>
  • ; 赋值
JSON myjson E object.赋值.int 87654321
JSON myjson E object.赋值.float 5.76
JSON myjson E object.赋值.string abcdefg...
JSON myjson E object.赋值.datetime "2022-11-22 11:22:33.123"
JSON myjson E object.赋值.子对象.int 12345678
JSON myjson E object.赋值.子对象.ishum true
JSON myjson E object.赋值.子对象.float 5.76
JSON myjson E object.赋值.子对象.array [12345,1.76,false,string,2022-11-22T11:22:33.123]
sendmsg 7 赋值结果<$JSON(myjson)FORMAT>
  • 添加NPC检测命令CheckJson,格式:CheckJson 标识 方法 标识|名称|路径 选项
  • 各个参数意义:
    1. 标识,类似自由变量,指定一个唯一标识
    1. 方法,有以下几种:

X 判断是否包含指定路径的子结点,格式

    1. CheckJson myjson X path

N 判断是否包含指定的子结点名称,格式

    1. CheckJson myjson N name 是否嵌套检查子结点(0/1)

V 判断是否包含指定的子结点数值,格式

    1. CheckJson myjson N value 是否嵌套检查子结点(0/1)

E 判断JSON内容是否相同,格式

    1. CheckJson myjson E myjson2
  • 例:
  • #if
  • true
#act
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
  • ; 检测第一层,名为array的数组的第四个对象是否存在
CheckJson myjson1 X array[3]
#act
sendmsg 6 路径存在,取数值方法一:<$JSON(myjson1)array[3][0]>,方法二:<$JSON(myjson1)array[3].str>,方法三(整个对象):<$JSON(myjson1)array[3]>
#elseact
sendmsg 5 路径不存在

#if
CheckJson myjson1 N name2
#act
sendmsg 6 1)包含名称
#elseact
sendmsg 5 1)不包含名称

#if
CheckJson myjson1 N name2 1
#act
sendmsg 6 2)包含名称(检查子结点),数值是:<$JSON(myjson1)myobj.subobj.name2>
#elseact
sendmsg 5 2)不包含名称(检查子结点)

#if
CheckJson myjson1 V 123456
#act
sendmsg 6 3)包含数值
#elseact
sendmsg 5 3)不包含数值

#if
CheckJson myjson2 V 1.23 1
#act
sendmsg 6 4)包含数值(检查子结点):<$JSON(myjson1)array[0]>
#elseact
sendmsg 5 4)不包含数值(检查子结点)

#if
CheckJson myjson1 E myjson2
#act
sendmsg 6 5)相等
#elseact
sendmsg 5 5)不等