Previous topicNext topic
Help >
BLUE引擎官方更新 
!微信验证码功能因使用外部文本,当文本达到一定体积(1M以上),会严重影响服务器性能,建议优化思路或者使用两步验证功能替换
!请注意,从2021年开始的程序版本,不再支持windows XP、2003及以下的操作系统
!注意2021.0522.03版及之前的版本,NPC变量用在不合适的字段会导致引擎报错问题,请及时更新。
!不要在游戏服务器上安装搜狗输入法,影响服务器的稳定性
=========================================================================================================================
【免责声明协议】

根据《计算机软件保护条例》(2023年最新版本)的相关规定,为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或存储软件等方式使用软件的,在符合法律法规的前提下,可以不经软件著作权人许可,且不向其支付报酬。但请注意,以下使用条款必须严格遵守:

重要提示:除非你已充分阅读、完全理解并接受本协议中的所有条款,否则你无权下载、安装或使用本软件或相关服务。使用本程序即视为你已阅读、理解并同意接受本协议的约束。本协议在你与我司之间产生法律效力,成为对双方均具有约束力的法律文件。我们非常感谢你对本产品的支持,并希望给你带来良好的使用体验。如果你不同意本协议中的任何条款,请立即停止使用并删除本软件。

1.合法用途:本程序仅供在中华人民共和国大陆地区(不含中国香港、澳门特别行政区及台湾地区)法律允许范围内的个人娱乐、研究和学习之用。用户应确保所有使用行为均符合相关法律法规的要求。

2.源码来源与用途:本程序源码来源于公开网络,并已进行必要的修复和优化。本程序仅供个人单机研究、娱乐使用,未设置任何收费项目。用户不得利用本程序进行任何形式的商业活动或非法用途。

3.禁止商业运营:任何单位或个人均不得将本程序用于商业盈利性经营、架设网络服务器或进行其他任何形式的商业活动。如违反此规定,造成的任何后果由用户自行承担,与本程序及我司无关。

4.合法合规使用:未经版权所有人或产品所有人明确授权许可,任何人不得私自利用本程序的任何部分进行运营、开区、销售等行为。用户应确保所有使用行为均合法合规,如因违法使用导致的一切后果,由用户自行承担。

5.内容删除与版权:由于版权、法律法规等原因,我们不保证本程序内容的长期可用性。用户应在下载后24小时内,从电脑、手机等设备上彻底删除本程序及其相关内容。如未能在规定时间内删除,产生的任何风险与责任均与本程序及我司无关。同时,用户应尊重并保护本程序中的知识产权,不得进行任何形式的侵权或盗版行为。

6.侵权处理:如果你认为我们侵犯了你的合法权益,请立即与我们联系。我们将在收到你的通知后72小时内,对涉及侵权的内容进行审查,并采取相应的处理措施,包括但不限于删除侵权内容等。

7.许可地区:本协议的适用地区为中华人民共和国大陆地区(不含中国香港、澳门特别行政区及台湾地区)。对于其他地区的使用,请遵守当地法律法规。
=========================================================================================================================

2021/5/25	全套配套
---------------------------------------------------------------------------
M2
  物品ID支持64位,解决物品ID因各种原因出现重复问题!
    要保持多区物品ID唯一,须保证同时运行中的游戏区的服务器ID不相同!
    服务器ID即!setup.txt中的ServerID,可在启动器设置,支持范围在0~510之间。
    引擎必须配置有效的【ServerID登记服务器】相关设置,并连接到登记服务器,否则不允许启动,可在启动器配置!
    ServerID登记服务器相关使用说明查看对应目录下的说明文本
    !setup.txt中的itemNumber在本次更新后已经废弃。

  增加物品ID相关变量:
    $ITEMID(n)Json		// n是物品ID,返回一个json对象如:{"DateTime":"2022-11-12T22:33:44","ServerID":123,"Sequence":456}
    $ITEMID(n)Sequence	// 返回物品产生的序列号
    $ITEMID(n)ServerID	// 返回物品产生的服务器ID
    $ITEMID(n)ISO8601	// 返回物品产生的日期时间
    $ITEMID(n)UNIXTIME	// 返回物品产生的Unix时间戳

  修改MagicFire方式1优先针对锁定目标
  商铺可以购买、赠送更多数量的物品
  优化sqlite3性能

  扩展地图参数:SECRET(31|固定角色名|衣服外观|武器外观|衣服外观特效|武器外观特效)
  修补套装激活时的光效
  英雄会检测十步一杀需要的MP量
  修正上版展示品缓存提示错误问题
  修正因改为64位物品ID可能导致对话框的物品ID获取错误问题
  增加变量<$DLGITEMID>,获取对话框的物品ID		// 由于P/M...等整数变量为32位,对于GetDlgItemID不足以赋予物品ID!可改用为字符串型的S变量,或者直接使用<$DLGITEMID>

  修正@PickupItem可能会出现掉落怪物记录错误问题
  PetPickupItemRange设置不同数值会刷新视觉,所以不要频繁切换
  完善NPC参数的预分析逻辑(类似<COLOR=...<$变量>>)
  增加NPC命令:MAIN_FUNC_BTN_TIPS 序号 鼠标提示			// 设置主界面部件的鼠标tips,不要频繁使用,配套客户端更新
  允许毒、符、魔血石类物品持久为0时不消失

  修正SetAbility 45,10点以下为减速度,10点以上为加速度
  NPC命令TakeOff增加取下触发(注意防止死循环)
  改名时如果检测在线角色名占用,会触发[@chgname_fail_name_used_0],<$PARAM(0)>等于"[英雄] "是英雄触发,为空是人物触发	// 注:[@chgname_fail_name_used]是通过DBS检测
  去掉SetItemDesc的当“描述”为空时将删除对应物品ID的描述功能,防止重复设置一个物品属性造成描述不下发刷新问题!

  NPC执行者支持带“.”号,例如:<$JSON(J_UUID.CharName)V>.goto @xxx	// <$JSON(J_UUID.CharName)V>是带“.”号的执行者,未支持之前用法:Mov S_Temp <$JSON(J_UUID.CharName)V>,再<$STR(S_Temp)>.goto @xxx
  JSON的SortByName、SortByValue支持反序排列,参考下面说明
  JSON命令补全子命令GetCountByPath、修正子命令InitArrayFromCsvFile
  优化英雄换符、药粉的逻辑

  QF增加复活成功的触发[@OnRevive],其中:		// 只要复活成功即可触发
    $PARAM(3)	// 角色名
    $PARAM(4)	// 地图名
    $PARAM(5)	// X坐标
    $PARAM(6)	// Y坐标
    $PARAM(8)	// 1/60(1是人物,60是英雄)

  QF增加复活成功且消化复活装备持久的触发[@OnItemDamageRevive],其中:	// 复活成功且消耗了装备持久才触发
    $PARAM(0)	// 装备位置
    $PARAM(1)	// 装备名称
    $PARAM(2)	// looks
    $PARAM(3)	// 角色名
    $PARAM(4)	// 地图名
    $PARAM(5)	// X坐标
    $PARAM(6)	// Y坐标
    $PARAM(7)	// 装备ID
    $PARAM(8)	// 1/60(1是人物,60是英雄)
    $PARAM(9)	// 剩余持久(0表示装备失效或销毁-根据装备无持久是否销毁设置去判定)

  修改变量:$REVIVALDURATION -> $REVIVALCD		// 允许复活的倒计时
  修改变量:$BATTLEMODEDURATION -> $BATTLEMODECD	// 允许小退的倒计时

  增加变量:$TELEPORTCD	// 允许传送的倒计时,-1表示不能传送,0可以立即传送,其他正数表示n秒后可以传送
  增加NPC命令:ChangeRevivalTime +/-/= 毫秒		// 修改个人每次复活间隔时间(非下次复活时间),可以使用$REVIVALCD查看可复活等待秒数
  增加NPC命令:ChangeTeleportTime +/-/= 毫秒		// 修改个人每次传送间隔时间(非下次传送时间),可以使用$TELEPORTCD查看可传送等待秒数,禁止频繁使用

  增加变量:$AbilMakeStoneRate		// 个人石化能力几率
  增加变量:$AbilMakeStoneTime		// 个人石化能力时间
  增加NPC命令:ChangeAbilMakeStoneRate +/-/= 几率(1~255)	// 修改个人石化能力几率,数字越大石化几率“越小”
  增加NPC命令:ChangeAbilMakeStoneTime +/-/= 秒数(1~59)		// 修改个人石化能力时间,数字越大石化时间“越长”
  英雄支持变量:$H.AbilMakeStoneRate、$H.AbilMakeStoneTime、$H.REVIVALCD

  重要变更:去掉物品持久为0是否消失的总开关,改为在物品表设置,RareItem包含256则物品持久为0时属性失效但不会消失,可以用下面mysql查询语句设置:
    UPDATE item SET RareItem = RareItem | 256 WHERE (StdMode IN (5,6,7,10,11,12,13,51,52,53,54,62,63,64)) OR ((StdMode >= 15) AND (StdMode <= 30));		// 掩码包含256,所有“装备”持久0不消失
    UPDATE item SET RareItem = RareItem & (~256) WHERE (StdMode IN (5,6,7,10,11,12,13,51,52,53,54,62,63,64)) OR ((StdMode >= 15) AND (StdMode <= 30));	// 掩码不包含256,所有“物品”持久0时会消失
  重要变更:人物、英雄的符/毒不再需要佩戴到身上,放在背包即可;也可以选择手动佩戴或者在英雄设置面板修改为完全不需要		// 必须配套更新
  身上的符、毒(设置为不消失)持久为0时会自动取下
  优化道士英雄近战逻辑

  NPC命令GetEquipProps增加以下常规变量,允许用于非装备类物品:
    <$STR(S_EQUIP[位置]_ID)>		// 物品ID
    <$STR(S_EQUIP[位置]_NAME)>		// 物品名称
    <$STR(M_EQUIP[位置]_SHAPE)>		// 物品Shape
    <$STR(M_EQUIP[位置]_STDMODE)>	// 物品StdMode
    <$STR(M_EQUIP[位置]_ANICOUNT)>	// 物品AniCount
    <$STR(M_EQUIP[位置]_LOOKS)>		// 物品Looks
    <$STR(M_EQUIP[位置]_COUNT)>		// 物品数量(非重叠物品为1)
    <$STR(M_EQUIP[位置]_OVERLAP_TYPE)>	// 重叠物品类型(0非重叠,1或2是重叠物品)
  扩展NPC命令:GetEquipProps 位置 @自定义成功跳转字段[可选]		// 如果参数2为空则在成功获取属性后跳转到默认的[@OnGetEquipProps]
    注意必须配合[@OnGetEquipProps]或[@自定义成功跳转字段]来读取属性,因为物品无效时不会触发字段、调用的EQUIP系列变量可能是上次的!
    非装备类物品也可以触发此字段,但有效属性仅限于上面提及的几个通用属性!该字段下的<$PARAM(n)>变量参考之前说明。

  NPC说话内容支持物品框,格式:		// 仅AC支持此功能
	<ITEMBOX=0~19,prguse,1241,1,0,0,0,8,11,22,100 LABEL=@ItemBox0 HINT=请放上装备>,其中:
	  0~19		// 是物品框序号,范围0~19
	  prguse	// wil文件名
	  1241		// wil图片索引
	  1,0,0		// 图片数,是否循环,是否透明
	  0,8		// 偏移X,偏移Y
	  55,66		// 绝对X,绝对Y(不参与自动换行计算)
	  100		// 帧间隔(毫秒)
	  @ItemBox0	// 放上或取下物品将触发[@ItemBox0]字段(仅限于鼠标操作,直接关闭窗口物品返回背包并不会触发)
  注意:本功能需要配套更新AC游戏网关,防止部分操作被过滤!

  增加变量:<$BoxItemID0~19>		// 物品框0~19的物品ID,当取下物品框物品时,对应物品框的物品ID为0
  增加变量:<$BoxItemName0~19>	// 物品框0~19的物品名,当取下物品框物品时,对应物品框的物品名为空
  增加变量:<$BoxItemCount0~19>	// 物品框0~19的物品数量,当取下物品框物品时,对应物品框的物品数量为0
  增加变量:<$STR(S_RemovedBoxItemID0~19)>		// 移除物品框0~19的物品ID,即时变量,只能在LABEL=@ItemBox0~19里使用
  增加变量:<$STR(S_RemovedBoxItemName0~19)>		// 移除物品框0~19的物品名,同上
  增加变量:<$STR(M_RemovedBoxItemCount0~19)>	// 移除物品框0~19的物品数量,同上
  以上变量可以不通过GetEquipProps而直接使用

  扩展NPC命令:GetEquipProps、UpgradeItem、UpgradeItemEx支持位置20000~20019,可用于操作对应物品框0~19的物品
  增加NPC命令:RetBoxItem 0~19	// 将物品框物品返回背包
  例:
    #SAY
    ITEMBOX:<ITEMBOX=0,prguse,1241,1,0,0,0,8,055,0,100 LABEL=@itembox0 HINT=请放上装备>
    ITEMBOX:<ITEMBOX=1,prguse,1241,1,0,0,0,8,111,0,100 LABEL=@itembox1 HINT=请放上回收物品>\
    
    [@itembox0]
    #if
    ; 是否已放上物品
    CompVal <$BoxItemID0> = 0
    #act
    sendmsg 7 移除的物品ID:<$STR(S_RemovedBoxItemID0)>,物品名:<$STR(S_RemovedBoxItemName0)>,数量:<$STR(M_RemovedBoxItemCount0)>
    #elseact
    GetEquipProps 20000

    [@itembox1]
    #if
    ; 是否已放上物品
    CompVal <$BoxItemID1> = 0
    #act
    sendmsg 7 移除的物品ID:<$STR(S_RemovedBoxItemID1)>,物品名:<$STR(S_RemovedBoxItemName1)>,数量:<$STR(M_RemovedBoxItemCount1)>
    #elseact
    ; 取走物品
    Take <$BoxItemID1> 1
    
    [@OnGetEquipProps]
    #act
    ; $PARAM(3)是位置
    Calc "<$PARAM(3)> - 20000" M_物品框序列号
    sendmsg 7 物品框<$STR(M_物品框序列号)>的物品名:<$STR(S_EQUIP[<$PARAM(3)>]_NAME)>,物品ID:<$STR(S_EQUIP[<$PARAM(3)>]_ID)>

  防止SetItemDesc命令对无效物品添加描述
  修正Hash子命令Clear完全清理所有数据问题
  修正关闭服务器时部分机器不及时保存Hash问题

  修正所有NPC收税的价格bug
  优化游戏数据日志的记录
  启动时增加读取数据表出错的提示


DBS
  64位物品ID适配
  优化sqlite3性能


游戏网关
  64位物品ID适配
  适配物品框功能
  适配人物的符/毒不再需要佩戴到身上的更新,必须配套使用


登录器
  配套更新


客户端
  64位物品ID适配
  购买商店重叠物品默认为最大数量
  提高游戏声音的响应速度
  商铺可以购买、赠送更多数量的物品
  <PIC=...>附带有效的LABEL才可以点击
  配套支持MAIN_FUNC_BTN_TIPS命令
  血石持久为0时显示红色
  OK框跟随窗口右下角
  物品Tips增加拆分快捷键提示
  修正个别情况下拆分重叠物品假象问题
  快捷物品框可以合并、拆分重叠物品
  修正从背包拆分物品的窗口焦点问题
  自动换上有持久的符、毒
  人物符/毒不再需要佩戴到身上;当不使用智能换毒时会优先使用背包前面位置的药粉来释放技能
  增加英雄装备、英雄技能界面的自定义快捷键设置
  引擎设置为免毒时客户端会自动换毒


其他
  数据工具增加64位物品ID的转换支持,转换前注意填写正确的区号,提供变更ID文件目录
  数据工具弃用物品ID合并变更功能,已经不需要
  增加ServerID登记服务器,必要程序,查看更新包【ServerID登记服务器】里的相关说明!
  控制台配置向导会自动配置可用的服务器ID
  控制台配置向导增加读取数据表出错的提示








2021/5/24	全套配套
---------------------------------------------------------------------------
M2
  加强稳定性防止出错,优化性能
  摊位名称不过滤空格
  修正摊位名称过滤提示不正确问题
  !修正01版行会成员退出未更新在线列表导致出错问题,请放弃20210524.01版本
  
  灵气相关NPC命令支持42亿操作
  增加简单的爆率规则检测,错误会出警告提示
  修正近期优化导致的魔血石瞬间用完问题
  完善随机瞬移逻辑
  完善DropItemMap命令的逻辑
  增加出生地图点、应急地图点、红名地图点无效的警告提示
  更严格的物品使用逻辑,防止出错(需要配套客户端更新)
  客户端或使用NPC命令切换时装时触发QF的[@SwitchFashion],$PARAM(0)=0隐藏/1外显,$PARAM(1)=0人物/1英雄

  合击也支持技能触发
  改进普通下属超远飞回主人身边逻辑
  新增二进制位方式的攻击过滤掩码变量:$ATTACKFILTERMASK0~31		// <$ATTACKFILTERMASK8> 将获取掩码第8位的值(0/1)
  ChangeAttackFilterMask命令支持二进制写法: ChangeAttackFilterMask 位(0~31) 开关(0/1)	// ChangeAttackFilterMask 8 1 等效于 ChangeAttackFilterMask = 256,低0~7位暂时保留,不要使用
  !QMapEvent的[@OnMapChanging]改为[@LeaveMap],例:SendMsg 7 "是否英雄:<$PARAM(0)>,原地图:<$PARAM(1)>,即将进入地图:<$PARAM(2)>" // 支持下线和切图触发,<$PARAM(2)>空时表示下线,非空表示切图
  !QMapEvent的[@OnMapChanged ]改为[@EnterMap],例:SendMsg 7 "是否英雄:<$PARAM(0)>,原地图:<$PARAM(1)>,已经进入地图:<$PARAM(2)>" // 支持上线和切图触发,<$PARAM(1)>空时表示上线,非空表示切图
  增加NPC检测命令:CheckApprFilter 位置(0~7) 开关(隐藏0/显示1) // 检测某个外观是否开启显示,位置信息参考ChangeApprFilters
  增加地图参数:MonAttackFilterMaskMethod(1~3),双方都带掩码情况下,1怪物不能攻击掩码匹配的目标,2怪物只能攻击掩码匹配的目标(默认),3怪物不能攻击带有攻击掩码的目标;如果设置了有效参数,将优先于!setup.txt的monAttackFilterMaskMethod设置
  增加地图参数:HumAttackFilterMaskMethod(1~3|1~3),双方都带攻击过滤掩码情况下,攻击者是人物,以下9种方式分别攻击有效:	// 注:人物包含下属
    1|1掩码不匹配或目标是怪物  1|2掩码不匹配或目标是人物  1|3掩码不匹配生物
    2|1掩码匹配并且目标是人物  2|2掩码匹配并且目标是怪物  2|3掩码匹配的生物(默认)		// 跟第1行情况相反
    3|1目标是怪物(忽略掩码)  3|2目标是人物(忽略掩码)  3|3所有攻击无效

  增加简单的伤害统计功能:
    怪物数据表增加“统计ID”字段:StatId,StatId在1~10000之间是个人伤害统计,10001~20000是行会伤害统计,设置了StatID的怪物会自动统计伤害,如果某个统计24小时内不活跃,会自动重置
    统计相关的变量,每秒输出伤害:<$STAT(统计ID).DPS>,输出伤害总量:<$STAT(统计ID).TOTAL>
    增加NPC命令:NewStat 统计ID	// 创建一个自定的统计信息
    增加NPC命令:Stat 统计ID 数字	// 针对指定的“统计ID”进行手动统计
    增加NPC命令:ResetStat 统计ID all(可选)	// 重置统计信息,参数2为空重置执行者所属的统计信息,参数2为“all”则重置该统计ID下所有的统计信息
    增加NPC命令:ExportStat 统计ID 导出数量 导出模式(STR/JSON) 排序(0=DPS升序/1=DPS降序/2=总伤害升序/3=总伤害降序)	// 导出模式为STR将导出统计信息到<$CALCRESULT>中,格式:数量,角色名1|DPS1|伤害值1,角色名2|DPS2|伤害值2...,模式为JSON时将导出到Key为“STAT_统计ID”的JSON中:<$JSON(STAT_统计ID)JSON>
  !废弃,见下面无线嵌套变量更新:带圆括号的动态变量支持内嵌固定变量写法,例如:<$STAT($TARINFO_STATID).DPS>,其中$TARINFO_STATID是固定变量,不支持类似$STR(M1)的动态变量
  攻击触发增加伤害值变量:$ATTINFO_DAMAGE,被攻击者StatID:$TARINFO_STATID

  修正上个版本[@UnderAttack]失效问题
  加强英雄对目标的锁定
  十步一杀界面增加距离调节

  QM增加加载人物数据触发字段[@LoadData]和保存数据触发字段[@SaveData],不支持英雄,单纯用于数据存于操作,最好别用于其他用途,也不要在这两个字段写一些繁重的脚本
  添加HASH系列NPC命令,参考附件:HASH系列NPC命令.txt
  更新合区工具支持合并Hash保存的数据
  [@StdModeFuncXX]中新增<$PARAM(1)>物品名,<$PARAM(2)>AniCount,<$PARAM(2)>Reserved
    修改Reserved=255的为独占类型,使用后不消失不减少持久,注意如果现有用到Reserved=255的物品请改到其他数字
    Reserved=99时执行的是[@StdModeFunc+AniCount],一直如此

  本次更新(07版)支持大背包(仅限AC版),需要使用【数据工具】转换数据,全套配套更新

  !修正清理背包过期物品可能导致错误问题
  !修正全身宝石等级的技能威力重复叠加问题
  修正上版NOTALLOWUSEITEMS物品带圆括号失效问题

  优化队列性能
  防止在[@OnInlayingGemstone]字段中删除背包物品导致镶嵌流程被扰乱、破坏
  !宝箱使用权重算法,物品几率设置为0则为展示品不可获取,物品最大几率支持到亿亿,物品几率设置得越大越容易获得,禁止设置为全0!!!

  修正自从增加攻击统计后的被攻击触发变量不正确问题
  激活套装时只提示当前穿戴的装备套装信息
  修正MapQuest触发引起当前NPC对话框点击失效问题
  机器人脚本文件如果未变动,重新加载不重置计时
  修正上版更新导致换毒、符也触发套装特效问题
  防止自由加点计算溢出
  修正GM列表操作可能出错问题
  引擎去掉无用的商铺赠送开关(在游戏网关限制)

  修正人形怪名带"\"读取不到配置文件问题
  英雄死亡更容易触发[@HeroDie]
  交易重叠物品数量显示不同步问题
  人物死亡掉落记录物品(物品表的RareItem包含8)将触发QF的[@DropItem],注:死亡掉落物品$PARAM(0)=0,手动丢掉物品$PARAM(0)=1	// 禁止实时HardDisk操作
  人形怪不消耗装备持久,但复活装备除外

  修正爆率文件的检测条件不支持纯文字问题
  支持PlaySound Stop写法(原写法:PlaySound 0 0 Stop)
  <$ITEM(物品ID)>支持展示穿戴的装备
  修改%d,%s,%x,%y,%n,%m...等字符串替换定义必须小写
  添加英雄变量$H.ITEM(物品ID),用法如同$ITEM(物品ID)
  MapMove、GroupMapTing、GuildMapMove、RecallGroupMembers的第4参数,GroupMapMove的第7参数,数值大于等于2并且非99时,可以指定瞬移的随机范围
  修正对存在多个重叠物品的交易,取消交易时返回多出一个重叠物品的假象
  增加获取背包物品数量变量<$ITEMCOUNT(物品名)>和<$H.ITEMCOUNT(物品名)>
  怪物爆物限制增加时间单位选择:天、小时、分钟,默认天,清零时可选择是否输出日志
  增加设置参数:MaxAvailableEquipSetsCount	// 最大生效的套装数。默认为最大穿戴装备数量,不大于100
  优化动态变量的获取
  修正一处访问无效内存bug
  stdmode=7/25类物品归类为装备,GetEquipProps可以获取到属性,注意装备属性也将变得有效!
  UpgradeItem等NPC命令将刷新个人属性
  修正首次攻城部分沙城相关NPC命令可能出错的问题
  !setup增加野蛮冲撞间隔时间参数:RushRushTime=3(默认3秒,至多120秒),游戏网关、客户端必须配套!
  !setup增加血魂一击(法)威力比率:ssPowerRate_116=100(默认100),血魂一击(道)威力比率:ssPowerRate_117=100(默认100),注:技能威力通常可以通过Skill表调节
  删除技能时也会清理客户端残存技能效果

  英雄/人物丢掉或掉落物品之前(物品表的RareItem包含8)将触发QF的[@DroppingItem]		// 禁止实时HardDisk操作
    $PARAM(0)等于1000	// 死亡掉落背包物品
    $PARAM(0)等于2000	// 手动丢弃背包物品
    $PARAM(0)在0~16之间	// 死亡掉落身上装备的位置
    $PARAM(9)是否装备(0/1)
    其他$PARAM(XX)参数同[@DropItem]
    例:
    [@DroppingItem]		// 如果不需要此功能删除掉QF的[@DroppingItem]字段即可
    #if
    IsAdmin
    #act
    ; 阻止物品丢弃或掉落,默认允许掉落
    Approve 0

  NPC商店买/卖商品之前(物品表的RareItem包含32)将触发QF的[@DealingGoods]
    $PARAM(0)=0/1	// 0购买物品,1出售物品
    $PARAM(8)		// 价格
    $PARAM(9)		// NPC商店名称
    其他$PARAM(XX)参数同[@DropItem]
    例:
    [@DealingGoods]		// 如果不需要此功能删除掉QF的[@DealingGoods]字段即可
    #if
    CompVal <$PARAM(1)> = 开天 str
    #act
    ; 阻止操作
    Approve 0

  仓库存/取物品之前(物品表的RareItem包含64)将触发QF的[@StorageItem]
    $PARAM(0)=0/1	// 0存储物品,1取回物品
    其他$PARAM(XX)参数同[@DropItem]
    例:
    [@StorageItem]		// 如果不需要此功能删除掉QF的[@StorageItem]字段即可
    #if
    IsAdmin
    #act
    ; 阻止操作
    Approve 0

  增加获取地图怪物数量的NPC命令:GetMapMonCnt 地图名 怪物名1|怪物名2|怪物名3... 返回怪物数量的变量1|变量2|变量3...,例:
    GetMapMonCnt d605 黑色恶蛆|蜈蚣|邪恶钳虫 M_黑色恶蛆|M_蜈蚣|M_邪恶钳虫
    SendMsg 6 黑色恶蛆:<$STR(M_黑色恶蛆)>,蜈蚣:<$STR(M_蜈蚣)>,邪恶钳虫:<$STR(M_邪恶钳虫)>

  增加变更商人NPC名称的NPC命令:ChangeMerchantName 地图名 X Y 新名称 S_返回原名称(可选),例:
    ChangeMerchantName 3 335 335 新NPC名称\NPC描述 S_原名

  增加变更商人NPC存活时间的NPC命令:ChangeMerchantTTL 地图名 X Y 存活时间(秒),例:
    ChangeMerchantTTL 3 335 335 30		// 30秒后消失,消失后使用“@reloadnpc all”命令会重新刷出

  扩展NPC命令:MobNpc第9参数为存活时间,到期将自动消失,默认0不自动消失
  扩展Merchant.txt配置格式:第13参数为存活时间,到期将自动消失,默认0不自动消失

  扩展SetAbility的ID到599,其中0~499为个人ID,500~599为全局ID,不支持特效,可以配合Hash命令、[@OnStart]、[@OnStop]存档!
  扩展SetAbility cleanup 1,1表示清理“全局”ID;SetAbility cleanup 0(可不写) 则表示清理所有“个人”ID
  扩展SetAbility ID 0 -1,秒数为-1时表示暂停或恢复倒计时,暂停将触发QF的[@SuspendAbility_ID],恢复将触发QF的[@ResumeAbility_ID],
    $PARAM(0)=0玩家触发,1英雄触发(执行脚本主体仍然是英雄主人),使用SetAbility调整时间或数值也会从暂停中恢复运行!
  增加获取SetAbility的存活时间变量:$ABILTTL0~599,$H.ABILTTL0~599,值为0表示不存在,小于0表示暂停中的剩余时间,大于0表示运行中的剩余时间	// 注:SetAbility可用作高效的倒计时触发系统
  增加客户端解析变量:<ACD=ID>,用于解析SetAbility的剩余时间,例:
    #say
    ; 其中的45是SetAbility的ID,需配套更新!
    攻速有效剩余时间:<ACD=45{ax=66,ay=0}>
    #act
    SendMsg 6 攻速有效剩余时间:<ACD=45{ax=66,ay=0}>

  增加预备合击的NPC命令:PrepareUniteHit,需英雄在线并且有合击技能,预备后如果有目标会立即释放合击

  支持高效的无限嵌套变量解析,同时“带圆括号的动态变量支持内嵌固定变量写法”此条更新废弃!!!,例:
    #act
    ; 注意Mov的参数2是字符串,不是变量
    Mov S_变量1 S_变量2
    Mov S_变量2 变量值1
    Mov S6 S5
    Mov S5 S4
    Mov S4 变量值2
    SendMsg 6 "【<$STR(<$STR(S_变量1)>)>】中间【<$STR(<$STR(<$STR(S6)>)>)>】结尾"

  去掉GM调级命令对[@PlayLevelUp]、[@HeroLevelUp]的触发

  优化安全区识别,优化封包系统性能
  防止角色下线收摊可能出错问题
  CheckItemW支持使用位置检测是否穿戴了装备,例:CheckItemW 0~16
  优化劈星斩、雷霆一击打击感
  调整人物运行逻辑,防止出现下线后死亡情况
  添加获取普通技能等级变量:<$MAGICLEVEL(1~255)>,括号内是技能ID,返回-1表示技能未学习或其他错误

  添加获取地图怪物数量变量:<$MapMonCnt(地图名.怪物名)>,地图无效返回-1,怪物无效或不参与数量统计返回-2,
    注意只有怪物表的StatMask包含1,才会统计该怪物的数量,需要才加,例:
    [@KillPlayMonXXX]
    #act
    SendMsg 7 <$MapMonCnt(<$CurrentMap>.<$Param(0)>)>

  增加算术运算NPC命令:Calc "算术表达式" 返回结果的变量(默认是整数/后缀+1是四舍五入整数/后缀+2是浮点数),
    支持:+加、-减、*乘、/除、%取模,()将优先计算,例:
    #act
    ; 如果表达式错误将会在引擎提示,并返回空内容,下面运算的浮点数结果是:2899.82636363636
    Calc "(0.3 + (0.4 + 88 * 77) / 1.5 / 3.3 + 11.6 % 1000) * 2.1" S_结果
    SendMsg 7 默认整数:<$STR(S_结果)>,四舍五入整数:<$STR(S_结果1)>,浮点数:<$STR(S_结果2)>

  扩展DelayCall命令,支持5个上下文参数传输,防止参数被覆盖
    错误用例:
    [@重复执行]
    #act
    Mov S_暂存变量 xxxxx
    DelayCall 1000 @delayCall
    [@delayCall]
    #act
    ; “S_暂存变量”此时很可能已被其他用到“S_暂存变量”的操作所覆盖(特别是对于重复执行的字段),造成错误结果
    MapMove <$STR(S_暂存变量)>

    扩展后的正确用例:
    ; 随后<$STR(S_CONTEXT[0~4])>可以取得参数的内容,此组变量用于传输参数内容,此变量为固定变量,仅可修改[0-4]获取内容
    DelayCall 1000 @delayCall <$STR(S_暂存参数0)> 参数1 参数2 参数3 参数4	// 参数0~4为可选项,可以是任意变量
    [@delayCall]
    #act
    ; <$STR(S_CONTEXT[0])>此时等于“<$STR(S_暂存参数0)>”,<$STR(S_CONTEXT[1])>等于“参数1”...
    MapMove <$STR(S_CONTEXT[0])>

  优化行会成员列表
  修正在14版后GM命令ClearMon清理指定怪物失效问题
  刺杀时非刺杀位的伤害等同于普攻
  StatusRate命令支持小数倍数写法
  增加英雄的怒气值变量$H.UnityEnergy

  首次自动扩展monster.db出错问题(之前版本的引擎,多次运行也可以完成自动扩展)
  修正部分技能不进行攻击触发问题(比如疾光电影)
  大幅度减少生物对消息的响应时间,提高游戏体验
  飞行类魔法伤害生效时间更准确

  增加NPC脚本的循环支持,#for和#~for,配对使用,循环内部支持完整的#if,#act,#elseact...流程,
    注意此次更新需要重新上传远程脚本数据,远程脚本数据和之前的版本数据也不兼容!
    配套NPC变量<$LoopCursor>,为当前循环游标变量,获取效率比自定义的游标变量稍高
    配套NPC执行命令:BreakLoop,用于中断当前的循环层,并非整个字段中断;整个字段中断仍然使用Break
    支持多层次的循环嵌套(见下发自定义技能示例)
    格式:
    #for (游标变量 = 初始值表达式, 游标变量 < 检测值, 游标变量 + 步进值)		// 循环开始和声明
      ; 中间是完整的#if/#act/#elseact原脚本流程
      #if
      ; ...
      #act
      ; ..
      #elseact
      ; ...
    #~for		// 循环结束标识
    ; 初始声明:即【游标变量 = 初始值表达式】部分,“游标变量”的初始化,“初始值表达式”支持单个整数或变量,或者一个运算表达式,如:游标变量 = M_SPLIT_CNT - 1(注意写法,中间留有空格)
    ; 条件声明:即【游标变量 < 检测值】部分,循环条件限制,“游标变量”小于“检测值”会继续循环,否则将终止循环,“检测值”可以是只读的整数或整数变量,比较符号支持:<小于、>大于、=等于、!不等于、?大于等于
    ; 步进声明:即【游标变量 + 步进值】部分,游标步进方法,“步进值”支持整数或整数变量,运算符号支持:+加、-减、*乘、/除、%取模、=等于
    ; “游标变量”建议实用D0~99,M0~99这种非自由定义的整数变量,效率较好

    例:
    [@loopex]
    ; 这里没有写#if true,不需要,程序会自动识别
    #act
    ; 分解出阿拉伯数字,剩余部分是中文汉字
    RegExSplitCapture 一1二2三3四4五5六6七7八8九 [0-9]+
    SendMsg 7 剩余字的符串数量:<$STR(M_SPLIT_CNT)>
    SendMsg 7 阿拉伯数字的数量:<$STR(M_MATCHED_CNT)>

    ; 循环游标D99从0初始化,至M_SPLIT_CNT - 1取S_SPLIT_STRS[n]的值,每次步进1
    #for (D99 = 0, D99 < M_SPLIT_CNT, D99 + 1)
    #if
    ; 此次更新同时会自动补全true,可以忽略
    ; true
    #act
    SendMsg 5 S_SPLIT_STRS步进1:<$STR(S_SPLIT_STRS[<$STR(D99)>]>
    #~for

    ; 循环游标D99从0初始化,至M_MATCHED_CNT - 1取S_SPLIT_STRS[n]的值,每次步进1
    #for (D99 = 0, D99 < M_MATCHED_CNT, D99 + 1)
    #if
    #act
    SendMsg 6 S_MATCHED_STRS步进1:<$STR(S_MATCHED_STRS[<$STR(D99)>]>
    #~for

    ; 倒退循环,初始D99 = M_SPLIT_CNT - 1,D99 大于等于 0,每次步退1
    #for (D99 = M_SPLIT_CNT - 1, D99 ? 0, D99 - 1)
    #if
    #act
    ; 这里使用<$LoopCursor>变量,效率稍高些,等同于<$STR(D99)>
    SendMsg 7 S_SPLIT_STRS步退1:<$STR(S_SPLIT_STRS[<$LoopCursor>]>
    #if
    ; 游标到6后中断掉循环,会跳出循环继续执行(#~for之后),如果使用Break,则后续不再执行
    CompVal <$LoopCursor> = 6
    #act
    BreakLoop
    #~for
    ; 上个循坏之外继续执行
    SendMsg 7 上个循坏之外继续执行...
  
    ; 自己定义跳出循环变量
    Mov M99 1
    ; 先定义一个无限循环(不建议,除非你熟悉脚本的写作)
    #for (D99 = 0, D99 < 1, D99 - 0)
    ; 运算M99
    #if
    #act
    Inc M99 10
    ; 循环10万次后中断循环
    #if
    Equal M99 100000
    #act
    SendMsg 7 循环中断于<$STR(M99)>...
    BreakLoop
    #~for
    #if
    #act
    SendMsg 7 循环结束<$STR(M99)>...

  增加NPC脚本的区间选择支持,#case和#~case,配对使用,内部支持的#if,#act,#elseact...流程,仅单层
    格式和示例:
    [@TestCase]
    #act
    ; 产生一个0~99之间的随机数字
    SetRandomNO 100
    Mov M99 <$RANDOMNO>
    
    #case (M99)				// case开始,括号里的声明仅一个整数变量(Mxx,Dxx...等或此类自定义变量)
      #0:					// 选择器常量声明,“#”开头,后面是单个数字,以“:”结束
        #if					// 一个普通的#if/#act/#elseact流程
        #act
        SendMsg 5 命中:<$STR(M99)>
      #1~9:					// 选择器常量声明,“#”开头,后面可以是数字区间,以“:”结束,下同
        #if
        #act
        SendMsg 5 <$STR(M99)>在1~9之间
      #10~89:
        #if
        #act
        SendMsg 5 <$STR(M99)>在10~99之间
      #86,88,91~93:			// 以“,”分开多个数字区间的写法
        #if
        #act
        SendMsg 5 <$STR(M99)>在86,88,91~93之间
      #def:					// 默认选择,如果上面的数字区间均未命中,则默认选择此流程;可以不写,但是都未命中则不执行任何流程
        #if
        #act
        SendMsg 5 <$STR(M99)>其他数字,默认执行此选择
    #~case					// case结束标识
    注意:不允许在#case里执行#for循环,但是允许在#for里包含#case
    注意:数字区间禁止重叠,如果重叠加载NPC脚本时会提示,同时重叠的数字区间将失效!

  攻击触发里增加目标坐标变量:<$TARINFO_CX>,<$TARINFO_CY>
  技能触发[@MagSelfFuncXX]是,<$PARAM(1)>是目标X坐标,<$PARAM(2)>是目标Y坐标
  增加释放魔法NPC命令:MagicFire 1技能ID 2等级(0~15) 3显示技能效果(0/1) 4方式(-2链式 -1溅射 0自己,1当前目标,自定义坐标X) 5自定义坐标Y[可选] 6技能延迟(毫秒)[可选] 7自定义坐标强显效果(0/1)
    注:支持普通魔法技能和合击技能,不包含战士技能,不支持技能触发,不支持攻击触发,无举手动作,需配套客户端更新!
      当参数4为-1时,参数5为溅射技能半径,建议使用T.MagicFire方式
      当参数4为-2时,参数5为链式技能半径,建议使用T.MagicFire方式
      当使用自定义坐标时,X和Y支持批量方式,如:11|22|33 44|55|56
      当自定义坐标有效且参数7不为0是,将不检测目标有效性,强制显示技能效果
    例1:
    [@attack]
    #act
    SetRandomNO 60 65
    #if
    CompVal <$ATTINFO_ISHERO> = 1
    #act
    h.MagicFire <$RANDOMNO> 5 1 1
    #elseact
    MagicFire 13 11 1 1
    MagicFire <$RANDOMNO> 15 1 1

    例2:
    [@MagSelfFunc11]
    #act
    ; 暂存技能ID
    Mov M97 11
    goto @CustomMagic
    
    [@MagSelfFunc13]
    #act
    ; 暂存技能ID
    Mov M97 13
    goto @CustomMagic
    
    [@CustomMagic]
    #act
    ; 存放XY坐标组,使用“|”间隔
    Mov S98 ""
    Mov S99 ""

    ; 多层循环,M0/M1分别从-2至+2,构成一个5x5的攻击范围方格
    #for (M0 = -2, M0 < 3, M0 + 1)
      #for (M1 = -2, M1 < 3, M1 + 1)
        #if(1)
        ; 过滤掉中间的重合点
        CompVal <$STR(M0)> ! 0
        CompVal <$STR(M1)> ! 0
        #act
        ; 将计算得出24个坐标放置在S98和S99
        Calc "<$PARAM(1)>+0<$STR(M0)>" M98
        Calc "<$PARAM(2)>+0<$STR(M1)>" M99
        Inc S98 <$STR(M98)>|
        Inc S99 <$STR(M99)>|
      #~for
    #~for
    
    #if
    CompVal <$PARAM(0)> = 0
    #act
    MagicFire <$STR(M97)> <$MAGICLEVEL(<$STR(M97)>)> 1 <$STR(S98)> <$STR(S99)> 500 1
    #elseact
    h.MagicFire <$STR(M97)> <$MAGICLEVEL(<$STR(M97)>)> 1 <$STR(S98)> <$STR(S99)> 450 1
    
    例3:
    [@Attack]
    #act
    Mov M99 <$ATTINFO_SKILLID>
    #case (M99)
      #1, 5, 13, 104, 105, 107~110:
        #if
        CompVal <$ATTINFO_ISHERO> = 1
        #act
        ; 以怪物为中心发出溅射技能
        T.MagicFire <$ATTINFO_SKILLID> <$H.MAGICLEVEL(<$ATTINFO_SKILLID>)> 1 -1 3
        ; 以怪物为主逐次发出链式技能
        ; T.MagicFire <$ATTINFO_SKILLID> <$H.MAGICLEVEL(<$ATTINFO_SKILLID>)> 1 -2 4
        #elseact
        T.MagicFire <$ATTINFO_SKILLID> <$MAGICLEVEL(<$ATTINFO_SKILLID>)> 1 -1 3
        ; T.MagicFire <$ATTINFO_SKILLID> <$MAGICLEVEL(<$ATTINFO_SKILLID>)> 1 -2 4
    #~case

  增加正则匹配检测NPC命令:RegExMatch 源字符 匹配表达式	// S1是需要检测的字符串,可以到https://www.jyshare.com/front-end/854/验证
    例:
    ; "1[34578]\d{9}"		// 手机号码
    ; "\$[0-9A-Fa-f]+"		// NPC说话内容里的16进制颜色
    ; 检测查源字符中是否包含有URL
    #if
    ; 检测到内容里有网址
    RegExMatch 源字符 "[a-zA-Z]+:\/\/"
    #act
    
  增加正则替换字符NPC命令:RegExReplace S1 查找表达式 替换字符 替换次数(默认1次)	// 使用正则表达式方式,在S1中按“查找表达式”查找,找到后替换为“替换字符”,结果还是在S1中		// 相关资料可参考https://www.runoob.com/regexp/regexp-tutorial.html
    见下面例子

  增加正则分解捕获NPC命令:RegExSplitCapture 源字符 查找表达式
    匹配的字符串数量在:<$STR(M_MATCHED_CNT)>
    匹配的字符串保存在:<$STR(S_MATCHED_STRS[n]>	// n是数字,在0至“<$STR(M_MATCHED_CNT)> - 1”之间
    分解后剩余的字符串数量在:<$STR(M_SPLIT_CNT)>		// “分解后剩余的字符串”指不包含匹配字符串的剩余部分,比如源字符是:左中右,按表达式“中”分解后,剩余字符串是:左和右(数量2),匹配字符串是:中(数量1)
    分解后剩余的字符串保存在:<$STR(S_SPLIT_STRS[n]>	// n是数字,在0至“<$STR(M_SPLIT_CNT)> - 1”之间
    例:
    #act
    ; <$STR(M_MATCHED_CNT)>将等于2
    ; <$STR(S_MATCHED_STRS[0])>将等于:123
    ; <$STR(S_MATCHED_STRS[1])>将等于:456
    ; <$STR(M_SPLIT_CNT)>将等于3
    ; <$STR(S_SPLIT_STRS[0])>将等于:左
    ; <$STR(S_SPLIT_STRS[1])>将等于:中
    ; <$STR(S_SPLIT_STRS[2])>将等于:右
    RegExSplitCapture 左123中456右 [0-9]+
    

  item数据表中的物品,RareItem字段包含128才可以设置物品描述,在出产时将触发QF的[@ProduceItem],其中:
  不要大量设置物品的RareItem包含128,防止系统压力过大!
    $PARAM(0)	// 来源
    $PARAM(1)	// 物品ID
    $PARAM(2)	// 时间
    $PARAM(3)	// 物品名
    $PARAM(4)	// 地图
    $PARAM(5)	// 出产者
    $PARAM(6)	// 物主
    $PARAM(7)	// 是否装备类物品(0/1)
    $PARAM(8)	// 物品的looks
  增加设置物品描述NPC命令:SetItemDesc 物品ID 描述 0前缀/1中间/2后缀	// 不支持重叠物品!当“描述”为空时将删除对应物品ID的描述;需要客户端配套,仅AC客户端支持该功能!
  增加设置物品属性NPC命令:SetEquipProp 物品ID 属性类型(1~31) 属性值 过期秒数(可选,默认-1永久,大于0为过期秒数) @过期触发(可选)	// 类型对应的属性参考鉴定属性,过期触发QF的[@过期触发]
    例:
    ; QM
    [@OnStart]
    #act
    ; 服务器启动时,加载物品描述数据并设置后台自动保存
    ; 注意“H_ItemPreDesc”(前缀)、“H_ItemMidDesc”(中间)、“H_ItemSufDesc”(后缀)为系统保留标识,请勿占用
    ; 注意引擎开启后,不要去读写下列数据文件,防止文件占用冲突导致存取失败
    Hash H_ItemPreDesc Load ..\ItemData\ItemPreDesc.csv
    Hash H_ItemPreDesc BGSave ..\ItemData\ItemPreDesc.csv
    Hash H_ItemMidDesc Load ..\ItemData\ItemMidDesc.csv
    Hash H_ItemMidDesc BGSave ..\ItemData\ItemMidDesc.csv
    Hash H_ItemSufDesc Load ..\ItemData\ItemSufDesc.csv
    Hash H_ItemSufDesc BGSave ..\ItemData\ItemSufDesc.csv

    ; 服务器启动时,加载装备属性数据并设置后台自动保存
    ; 注意“H_ItemProp_1~31”为系统保留标识,请勿占用
    ; 注意引擎开启后,不要去读写下列数据文件,防止文件占用冲突导致存取失败
    #for (M_cur = 1, M_cur < 32, M_cur + 1)
    #if
    #act
    ; <$STR(M_cur)>等同于<$LoopCursor>
    Hash H_ItemProp_<$STR(M_cur)> Load ..\ItemData\ItemProp_<$STR(M_cur)>.csv
    Hash H_ItemProp_<$LoopCursor> BGSave ..\ItemData\ItemProp_<$LoopCursor>.csv
    #~for

    ; 脚本示例
    [@ProduceItem]
    #act
    ; 装备名称下加几个星星
    SetItemDesc <$PARAM(1)> "<u~|I=754><u~|I=754><u~|I=754><u~|I=754><u~|I=754><u~|I=754>" 0
    
    ; 设置来源
    ; 注意物品的描述文字里不要带逗号“,”,消耗品不建议添加物品描述
    ; <字符串|c=clRed>,“字符串”是红色,没有在尖括号内的字符为普通白色
    ; <u~magic5|I=0 N=8 X=70 Y=90 W=60 H=140 F=160>,调用magic5.wzl索引位置0的图片(magic5不写默认为ui1),可选项:N=帧数,X=偏移X,Y=偏移Y,W=指定宽度,H=指定高度,F=帧间隔(默认125毫秒,N>1有效)
    ; 类似上面的图片,可以手动编辑一个静态表,物品名做键,值则是对应的图片数据,在服务器启动时实用Hash加载,之后在脚本中根据名字来快速取得应用数据
    ; FormatStr "<u~magic5|I=0 N=8 X=70 Y=90 W=60 H=140 F=160>\来源:<%s|c=clRed>\地图:<%s|c=$4AD663>\产者:<%s|c=$E9A000>\<物主:|c=clSkyBlue><%s|c=$5CF4FF>\<时间:%s|c=clLime>" <$PARAM(0)> <$PARAM(4)> <$PARAM(5)> <$PARAM(6)> <$PARAM(2)>
    FormatStr "来源:<%s|c=clRed>\地图:<%s|c=$4AD663>\产者:<%s|c=$E9A000>\<物主:|c=clSkyBlue><%s|c=$5CF4FF>\<时间:%s|c=clLime>" <$PARAM(0)> <$PARAM(4)> <$PARAM(5)> <$PARAM(6)> <$PARAM(2)>
    SetItemDesc <$PARAM(1)> <$CALCRESULT> 2

    #if
    ; 判断是否是装备类
    CompVal <$PARAM(7)> ! 1
    #act
    break

    #if
    #act
    ; 设置装备攻击、魔法、道术都+1万,且为不同的过期时间
    SetEquipProp <$PARAM(1)> 1 10000 10 @属性过期_AC
    SetEquipProp <$PARAM(1)> 2 10000 15 @属性过期_MC
    SetEquipProp <$PARAM(1)> 3 10000 20 @属性过期_SC
    ; 设置属性描述
    ; 每种属性的倒计时格式:<T~装备ID|P=1~31>,其中:T~装备ID,P=是装备属性类型,仅用于物品描述中
    FormatStr "%-13s <剩余|c=clLime>%s\%-13s <剩余|c=clLime>%s\%-13s <剩余|c=clLime>%s" "攻击 10000" "<T~<$PARAM(1)>|P=1 c=clLime>" "魔法 10000" "<T~<$PARAM(1)>|P=2 c=clLime>" "道术 10000" "<T~<$PARAM(1)>|P=3 c=clLime>\"
    ; 设置此物品在中间位置的属性描述
    SetItemDesc <$PARAM(1)> <$CALCRESULT> 1

    ; QF
    [@属性过期_AC]
    #act
    ; 先获取物品属性描述到S_tmp
    Mov S_tmp <$HASH(H_ItemMidDesc)<$PARAM(1)>>
    ; 然后清理属性
    SetEquipProp <$PARAM(1)> 1 ""
    ; 去掉对应的属性描述		// 比如去掉:“攻击 12345  <剩余|c=clLime><T~54321>|P=1 c=clLime>\”
    RegExReplace S_tmp "攻击 [0-9]+.*?\\" ""
    ; 更新修改后的属性描述
    SetItemDesc <$PARAM(1)> <$STR(S_tmp)> 1
    
    [@属性过期_MC]
    #act
    Mov S_tmp <$HASH(H_ItemSufDesc)<$PARAM(1)>>
    SetEquipProp <$PARAM(1)> 2 ""
    RegExReplace S_tmp "魔法 [0-9]+.*?\\" ""
    SetItemDesc <$PARAM(1)> <$STR(S_tmp)> 1
    
    [@属性过期_SC]
    #act
    Mov S_tmp <$HASH(H_ItemSufDesc)<$PARAM(1)>>
    SetEquipProp <$PARAM(1)> 3 ""
    ; 去掉前两个汉字包含:攻击|魔法|道术...的属性描述
    RegExReplace S_tmp "(攻击|魔法|道术) [0-9]+.*?\\" ""
    SetItemDesc <$PARAM(1)> <$STR(S_tmp)> 1

  优化Hash容器的存盘时间
  优化人物读档、物品批量下发等
  修正脚本中带有#case导致其他字段下的命令加载不全问题!
  大幅度提高远程脚本上传、下载性能
  大幅度优化Json、CheckJson命令的性能,Json命令现在较全面,使用方式也有较大变动,参考下面的说明!
  Calc命令使用传统的四舍五入
  服饰、武器的外观、翅膀特效、装备发光 支持到6.5万,全套配套更新!
  OpenBox命令的第1参数为有效宝箱名称会打开宝箱,第2参数非空可以自动转宝箱,第3参数非空可以在转完宝箱自动获取物品
  防止宝箱物品权重为0时仍然有很小几率获得问题
  修正上版下属攻击不触发问题
  修正上版镖车被攻击不反馈问题(实际有效)
  修正[@SetAbility_xx]识别英雄错误问题
  修正商铺购买重叠物品触发数量为1问题
  人物的下属会自动赋予攻击触发
  优化NPC触发参数传输
  优化NPC命令参数


DBS
  修正启动失败时关闭错误
  启动会提示最大物品ID


游戏网关
  对引擎的ConvertMagic命令提供支持,防止转换技能后释放技能卡帧
  减少内存占用,优化性能
  适配服饰、武器外观的扩展


登录器
  防止snappy32.dll被误报并优化(这是google开源的压缩算法库)
  登录器不再列出超出屏幕范围的分辨率


客户端
  更严格的物品使用逻辑(需要配套引擎更新)
  修正十步一杀会导致他人重新追击上次飞走目标的问题
  去掉英雄连续锁定功能(已经没有必要,因为服务器端已能稳定锁定目标)
  挂机时英雄自动回收功能可用,见内挂保护标签页
  天地结晶的经验条偶尔出界问题
  修正自更新大背包后快捷物品栏不保存状态问题
  防止切换简装导致武器的临时加速参数丢失
  补全装备套装属性的显示
  <PIC=...>增加帧播放间隔时间设置,见下方的:PIC=功能扩展2
  NPC对话、聊天栏、任务栏、跑马灯、自定按钮标题,支持SetAbility的倒计时变量:<ACD=ID>
  修正掉线一段时间后游戏无声问题
  优化劈星斩、雷霆一击打击感
  输入框支持键盘组合键:Ctrl+[Back/Delete/Left/Right]
  重构声音系统,略微调大合击声音

  修正编辑框光标定位问题
  修正快捷键控件文字居中问题
  支持自定义物品附加描述,配套引擎更新
  物品描述的图片支持更多选项
  大幅度提升Json的性能
  服饰、武器的外观、翅膀特效、装备发光 支持到6.5万,全套配套更新!
  首饰内观支持特效(stditems.xml)


其他
  优化性能
  优化微端服务器性能,增加简单命令行参数可指定参数文件
  修正合区工具未改名的文件没有复制到主区问题,佣兵角色有极小几率合并失败问题,主区合并文本不存在时未将副区文件合并过去问题
  修正合区工具对合并文本列表只能合并一个文件的问题
  优化微端服务器、登录器配置服务器
  修改控制台程序服务器外部IP控件的Tips
  合区工具支持基于Hash命令保存的物品ID数据文件
  合区工具日志搜索改用简单实用的表达式方式
  合区工具调整UI
  控制台清理支持csv、ini、json等扩展名



2021/5/23	全套配套
---------------------------------------------------------------------------
M2
  完善下属传送回主人身边的位置获取
  完善TakeW后的外观刷新和属性
  商铺购物货币不足时触发数量不正确问题
  命令ClickNPC可以点击摆摊中的角色名称
  根据英雄技能开关,赋予英雄分身的使用技能
  优化NPC点击流程
  防止重载NPC出错
  封刷NPC标签漏洞(不包含QC)!注意使用任何说话的“@xxx命令”后,$PARAM会被清理!
  增加NPC标签过滤列表,在列表信息-其他功能列表-文本字符过滤(不包含QC)
  修正CHECKCONTAINSSTR、CHECKCONTAINSTEXT第1参数为空时返回True问题
  修正上个版本关闭引擎异常导致ini不自动保存问题
  修改MoveToCell没有第三参数也可以执行,近距离NPC也会触发点击
  完善SetAbility 38(隐身)
  !setup增加普通下属是否跟随英雄锁定非人目标开关:SlaveLockTargetMode=0,默认0关闭,不跟随英雄锁定
  时装支持普通鉴定
  支持范围写法:MovR M1 3 5,SetRandomNO 5 11
  改善战士英雄被怪包围时的战斗逻辑
  H.Kick报错问题
  面板人数计数可能显示负数问题
  去掉释放副本时,删除人形怪下属的提示信息
  佣兵契约信息增加背包、仓库物品查询
  NPC命令MapMove不带坐标时真随机移动
  释放雷霆剑法可能出错问题
  修正穿装备可能出错问题
  英雄死亡记录日志
  修正增加经验溢出问题
  人形怪支持全套装属性,自身属性计算修改为在DB基础上根据装备、等级等进行叠加
  部分怪物多次重刷后怕火问题
  修正NPC命令获取宝石的名称和属性数值未强制刷新问题
  解散行会的GM命令现在可以强制执行
  修正[@PickupItem]无法触发GetEquipProps(位置10000)、UpgradeDlgItem等命令问题
  防止设定英雄升级经验最大值溢出
  防止CheckRangePlayerCount、CheckRangeMonCountEx命令参数错误内存报错
  防止部分NPC执行类命令因参数错误而中断后续命令的执行
  完善inc、div、mod、percent等NPC命令,防止除0错误
  单个物品情况下,NPC命令:Give第6参数、GiveEx第5参数,GM命令:make的第4参数;SendMail每个物品的第3个“&”号后;填写上数字可以强制赋予装备ID,注意不要人为制造出重复ID物品(复制品)!
  完善145、146蛇王怪物,“深渊毒蛇王”被攻击会召唤“深渊毒蛇王1”,被麻痹会随机飞,数据表中DC是近攻攻击力,MC是远攻攻击力:
    深渊毒蛇王1	145	59	233	55	0	99	11000	0	55	66	77	88	55	66	111	222	0	0	15	15	700	3	0	1500	10000	0	0	0	2	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
    深渊毒蛇王	146	59	233	55	0	99	11000	0	55	66	77	88	55	66	111	222	0	0	15	15	700	3	0	1500	10000	0	0	0	2	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
  可以交易多个同样的满堆叠物品
  NPC命令INI_SORT_READ_SECTION_VALUES支持对键按整数方式进行排序
  修正NPC命令UpgradeItem可能会导致装备被绑定的问题
  NPC命令UpgradeItem、UpgradeItemEx支持位置10000(表示对当前非空的DlgItemID物品进行操作)
  去掉[@GetButchItem]触发,增加挖取物品对[@PickupItem]的触发,其中$PARAM(0)=0非背包掉落,1背包掉落,2挖取
  增加NPC命令:AddShowItem 背包/身上某物品ID或者留空	// 留空表示使用当前的DlgItemID,作用:添加/刷新某物品ID展示物品,之后可以实时使用$ITEM(物品ID)来展示物品,比如可用于装备属性变更后展示新属性的物品);注意:单独使用$ITEM(XX)只会在首次使用该物品ID时添加展示物品,不会强制刷新
  鉴定装备成功触发QF的[@EvalEquipSucceed],可临时使用GetEquipProps、UpgradeDlgItem(位置10000)等命令,注意用法,防止死循环!
  !修正14、15版G变量Inc操作重复计算问题,请弃用14、15版!
  权重掉落配置增加无效物品提示,同时会忽略错误的物品,防止出现不爆物品的情况
  修正完善NPC命令ConvertSkill的逻辑,防止出错!
  EnableCharacter命令增加操作结果于QF的[@EnableCharacterResult],示例见:EnableCharacterResult示例.txt
  增加NPC检测命令:CopyMapExists 副本地图	// 检测副本是否存在
  扩展Goto命令:goto @xxx 1 "" 参数4 参数5 参数6 参数7 参数8 参数9	// 参数4~9非空时,传输参数4~9内容到队员(包括自己)的$PARAM(4~9),参数2的用法请查阅之前更新内容
  挖物品的日志放到拾取分类,同时记录被挖怪物名
  技能设置面板增加全局魔法躲避调节,鼠标移至控件查看说明(配套客户端更新)
  押镖中不能执行改名操作
  !修正执行MapQuest脚本可能导致程序出错问题,完善组队处理逻辑
  完善DelayGoto逻辑防止出错
  地图配置信息中带空格的空行不再提示为无效门点
  ISATTACKALLYGUILD、ISDEFENSEALLYGUILD、ISDEFENSEGUILD支持使用参数1(行会名)检测
  储存可堆叠到仓库不再改变物品ID
  仓库取回一个完整的重叠物品后,不再自动堆叠背包物品
  英雄、主人交换物品增加包满提示和物品回归处理(配套网关、客户端更新)
  修正17~19版取下附带技能的装备时未删除掉技能问题,用到此功能请及时更新至最新版本
  加强过图、瞬移逻辑,防止死循环和出错,加强稳定性
  修正DropItemMap命令可能报错问题

  增加NPC命令:ChangeAttackFilterMask +/-/= 数字,修改攻击过滤掩码,可结合SetBit、UnsetBit等二进制操作命令使用
  增加变量:$ATTACKFILTERMASK,显示当前攻击过滤掩码
  扩展怪物DB的AttackFilterMask字段,将某个怪物此字段设置大于255的值(255及以下数值保留),比如设置:256(二进制),常规情况下玩家对此怪物攻击无效,只有使用ChangeAttackFilterMask=256命令设置了等位值才能有效攻击。
  增加开关:monAttackFilterMaskMethod=0,默认0不开启,怪物攻击不参与掩码计算,1怪物不攻击掩码匹配的目标,2怪物只攻击掩码匹配的目标,3怪物不攻击带有攻击掩码的目标

  修正NPC命令InsertLine多出1空行问题
  修正NPC触发标签不存在导致已打开的NPC对话框点击无效问题
  修正召唤巨魔无限制召唤问题,英雄支持召唤巨魔技能
  修正镖车被劫不小退再次押镖,没有镖车问题(脚本不严谨造成)
  人形怪物配置文件名(MonUseItems目录)也支持使用“-”号代替“\”号
  死亡不再可以使用传送戒指
  默认过滤字符增加+/-/=三个字符
  他人丢掉的物品不再支持批量拾取
  满的聚灵珠会带闪耀效果(配套客户端更新)
  !setup.txt去掉无效参数ItemOwnershipHints,增加参数:PetPickItemDropFromBag=0	// 下属是否自动拾取从背包丢掉的物品,默认不拾取
  !setup.txt增加参数CommitMurderMakeWeaponUnluckRate=20,杀人武器增加诅咒几率,默认20(百分比)
  支持英雄用的$H.ABILITIES0~500变量
  扩展[@MagSelfFuncXX],[@MagTagFuncXX],[@SetAbility_XX],[@ResetAbility_XX]支持英雄,如果$PARAM(0)=0表示触发的是玩家,1表示触发的是英雄(执行脚本主体仍然是英雄主人)
  英雄支持使用StdMode=31的非药品类物品(配套客户端更新),[@StdModeFuncXX]中如果$PARAM(0)=0表示使用物品的是玩家,1表示是英雄(执行脚本主体仍然是英雄主人)
  主菜单【物品数据库和爆率】同时会重新加载手动修改的套装列表设置
  每间隔45分钟会自动保存全局变量
  摊位名称现在通过GuildRankNameFilter.txt中的字符检测过滤
  扩展QueryValue命令,增加第7参数为点击【取消】按钮时执行的NPC标签(配套客户端更新)
  扩展RefItemShape命令,参数2为-1时忽略更改,第3参数(数字)可以设置装备的光效,-1时忽略
  重叠物品(overlap=1)减轻负重,重量=重叠数量*单物品重量/10,修改为:重量==重叠数量*单物品重量/50
  十步一杀调节面板增加麻痹高等级人物几率控制,并适当减少最大麻痹时间
  英雄在安全区附近打架回城后,不再自动锁定刚刚的目标
  宝箱物品几率最大支持1000万并优化算法,加载配置时增加错误物品的提示,[@OpenTreasureChest]触发增加<$PARAM(4)>:物品ID(如果有多个物品,指向最后一个物品的ID;给重叠物品不会有物品ID)
  扩展NPC命令:PlayEffect的X/Y坐标有效并且第10参数为1时,会以背景方式播放效果(配套客户端更新),例:
    PlayEffect Prguse2/333/333 110 15 80 3 Wav\powerup.wav 0 "" 0 1
  增加NPC命令:StartGuildWar 行会1 行会2 时间(分钟) // 开启行会战
  增加NPC命令:ChangeApprFilters 位置1(0~7)=显示(0/1),位置2(0~7)=显示(0/1)...	// 外观过滤,位置0=时装,1=衣服,2=武器,3头发/斗笠,结果存库(MySQL版本需要配套更新DBS)
  增加NPC命令:MoveBagItem 物品名或物品ID 数量	// 玩家执行则将物品移动到英雄背包,英雄执行(H.MoveBagItem)则将物品移动到玩家背包(重叠物品被认为是一整个物品)
    #if
    CheckHeroOnline
    #act
    MoveBagItem 随机传送石 2	// 主人背包物品移动到英雄背包
    H.MoveBagItem 随机传送石 2	// 英雄背包物品移动到主人背包
  扩展怪物爆率配置文件写法,支持调用QMapEvent脚本,例:
    1/1  金条|22,祝福油|33,力量戒指|44,麻痹戒指|55,复活戒指|66  1  #CALL  @爆出条件检测  @爆出物品执行标签
    [@爆出条件检测]
    #if
    CheckGameGold < 10
    #act
    ; 执行APPROVE 0,即是检测不通过,不会爆出物品;注意默认的APPROVE结果为允许!
    APPROVE 0
    [@爆出物品执行标签]
    ; <$PARAM(1)>物品名,$PARAM(2)>Looks,<$PARAM(3)>怪物名,<$PARAM(4)>地图名,<$PARAM(5)>X坐标,<$PARAM(6)>Y坐标
    #act
    GAMEGOLD - 10

  优化释放技能性能
  修正英雄锁定出错问题


DBS
  修正英雄排行榜等级最高只能255问题

登录器/客户端
  登录器配置推送完善,减少更新超时时间,防止异常弹窗
  微端支持多端同步,微端对于相同的图片素材不再重复请求
  修正批量拾取时检测包满、负重的逻辑
  佣兵契约信息增加背包、仓库物品的查询
  登录时一路按住回车键客户端闪退问题
  释放野蛮期间立即移动导致卡位回弹问题
  英雄经验值较高时经验条不显示问题
  1.76版客户端也支持自定义NPC对话框背景图
  补全145、146蛇王怪物效果(配套引擎更新)
  添加更多的同类可堆叠交易物品时不再自动堆叠(配套引擎更新)
  修正退回重叠类交易物品消失的假象
  时装+魔法值错误显示为体力值问题
  内挂技能面板增加英雄连续锁定功能开关(配套引擎更新)
  拾取极品开关切换即时刷新物品
  英雄、主人交换物品增加包满提示和物品回归处理(配套网关、引擎更新)
  储存重叠物品不再给拆分
  扩展QueryValue第7参数为点击【取消】按钮时执行的NPC标签(配套引擎更新)
  宝箱优化(配套引擎更新)
  !解决战士合计可能出现卡位拉回假象
  PlayEffect的X/Y坐标有效并且第10参数为1时,会以背景方式播放效果(配套客户端更新)
  MainWidgetCfg文件增加部件的字体颜色定义,NormalColor常态字体颜色,HoverColor鼠标经过颜色,PressColor按压颜色,支持clXXXXX、#nnnnn格式、0~255的256位颜色表

登录网关
  细分防爆破策略,更严格;如遇到被爆破情况,最好将参数调整为严格些

游戏网关
  英雄、主人交换物品增加包满提示和物品回归处理(配套引擎、客户端更新)






2021/5/22	全套配套
---------------------------------------------------------------------------
M2
  修正挖东西可能出错问题
  有护身属性也显示伤害值
  SetAbility的禁止跑步现在有效
  优化动作包的下发延迟,提高游戏体验
  提高网关下发性能,通讯结构优化,M2/游戏网关需要配套!
  衣服、武器外观支持到255,引擎、游戏网关、客户端必须配套!
  @DeleteHeroOK、@CreateingHero字段下$PARAM(0)是英雄名,删除英雄时可以结合“EnableCharacter $PARAM(0) 0”命令使用
  扩展SetAbility的ID支持到500;增加特殊ID:400最大HP、401最大MP、402防御、403魔防、404攻击、405魔法、406道术、407暴伤	// 例:SetAbility 404 10000 10 附加攻击+10000到期!,其他空余ID可以用作计时器触发各种脚本
  修正十步一杀有可能导致引擎崩溃问题
  防止称号变更触发造成死循环
  修改MobFireBurn命令只能在当前地图使用
  修改THROUGHHUM修改穿人模式后会同步到客户端
  多线路服务器诱惑怪物计数问题
  金币日志记录剩余数量
  鉴定属性增加31类型:合计伤害减少
  下属叛变不限于49天的限制
  批量挖东西问题
  补全使用随机消失时得效果
  修正服务器关闭时可能执行代码异常问题
  增加宝石系统(合击、连击版本),见:宝石系统说明.txt
    注意:此版需要使用数据工具对已经扩展到大仓库版本的Mir.DB进行扩展,以支持宝石镶嵌数据(mysql版本不需要扩展),
    更新程序后,需要删除引擎下所有的商店缓存数据,不兼容!

  扩展[@PickupItem]触发,$PARAM(9)是否装备类(0~1),可临时使用GetEquipProps、UpgradeDlgItem(位置10000)等命令
  ChangeCharName 第二参数为1,则第1参数不取自@@InputStringXX的内容,可以自由搭配变量
  浏览别人摊位时,增加可能是黑摊的提示
  人形怪过滤掉护身属性(人形怪无限蓝,不要给带护身戒指)
  老分身术分身不放技能问题
  禁止交易时使用物品等动作
  带人形怪版本,重新加载怪物数据库导致批量挖出东西问题

  !setup增加衣服、20/21类项链、24类手镯的AC、MAC极品设置参数
    DressACAddRate: 30;		// 衣服AC的属性几率
    DressACAddValueRate: 15;	// 衣服AC的点数几率
    DressACAddValueMaxLimit: 6;		// 衣服AC的最高点数
    DressMACAddRate: 30;		// MAC
    DressMACAddValueRate: 15;
    DressMACAddValueMaxLimit: 6;
    
    Necklace202124ACAddRate: 60;		// 20/21类项链、24类手镯AC的属性几率
    Necklace202124ACAddValueRate: 30;		// 20/21类项链、24类手镯AC的点数几率
    Necklace202124ACAddValueMaxLimit: 6;		// 20/21类项链、24类手镯AC的最高点数
    Necklace202124MACAddRate: 60;		// MAC
    Necklace202124MACAddValueRate: 30;
    Necklace202124MACAddValueMaxLimit: 6;

DBS
  制作佣兵时过滤掉标记为禁用或删除的英雄
  增加多线路回城路由检测,防止死亡后上线黑屏

游戏网关
  适配衣服、武器外观支持到255的修改,必须配套使用!
  支持宝石镶嵌数据物品,兼容以前数据,注意配套更新!

登录器
  增加DNS缓存,加速解析速度

客户端
  完善人、怪的简装功能
  修正大退网络没有正确关闭问题
  优化挂机时的缓存管理,防止多开白屏
  提示列表粘贴不生效问题
  野蛮冲撞的间隔时间计算冲突问题
  优化延迟,减少撞人、撞怪的回弹
  修正使用物品情况下穿装备可能导致装备内观混乱的假象
  补全使用随机消失时得效果
  查看他人宝石信息完善,需要配套引擎更新






2021/5/22	全套配套,第6版起防攻击效果好,建议更换
---------------------------------------------------------------------------
M2
  修正上个版本引擎有可能导致卡角色问题
  严格管理地图角色坐标,防止不同步导致出错
  修正噬魂沼泽、火龙气焰不计算套装技能威力问题
  优化日志写入效率
  完善内功信息和客户端的同步,客户端需要配套更新!
  不要在脚本中#DEFINE $(XXXXX) 这种命名方式的常量,会引起冲突导致出错,建议命名方式:DEF_XXXXX
  修正改名提示在线问题,修正改名导致幽灵角色问题
  改名如果新名字的角色在线,也会触发@chgname_fail_name_used
  修正启用战斗小退有可能导致出错的bug
  DataTable_HeroDB.db支持中文路径
  防止被封包攻击导致无响应
  修正完善IOCP下发动态缓存逻辑
  PlayEffect预增加参数,客户端需要配套!
  装备类物品的种族、体型伤害支持在db填写生效,
    需要再次使用新的HeroDBConvertor和DataTable_HeroDB.db转换HeroDB以支持新字段,
    具体说明查看:DataTable_HeroDB字段说明.txt

  Sabukw.txt配置不随刷新而变更保存
  修正02版重新加载怪物数据库会导致怪物特殊技能混乱问题
  修正怪物权重随机掉落、ReadRandomStr权重计算模式,少计算1个随机点的问题
  修正SetAbility 31仓库存取同步问题,补全取回禁用
  修正SetAbility 46点不了NPC问题
  增加SetAbility 47也将不能购买摆摊物品
  带护身戒指也会执行攻击触发
  重新加载参数设置不对QuestParams操作!
  浑水摸鱼模式不屏蔽怪物名字颜色
  挂机时只有被玩家或者玩家的随从攻击才会收英雄或小退,需要配套更新客户端!
  地图参数:NOTALLOWUSEITEMS 允许物品带圆括号
  解释NPC变量时<COLOR=XXX>不列入计数
  时装护身属性等属性等同衣服的设置,不受是否外显的影响
  英雄可以通用死亡之眼、冰霜群雨、十步一杀
  英雄锁定目标时,下属也攻击同目标
  修改并刷新monster表后,重新刷出的怪物属性也随之变更生效
  原有功能补充说明:SENDMSG NN 文字 FF BB 30 @本NPC触发	// 30秒后执行[@本NPC触发],注意次时间内NPC不能消失或释放
  扩展NPC命令:ClientFeatures 1 开始或停止(0/1) 条件(all/地图/空)	// 客户全开放挂机功能前提下,开始或停止客户端所有角色挂机,all=所有在线角色,地图=地图上的角色,空=当前执行角色

  增加属性获取变量:
    获取英雄忠诚度变量:$H.LOYALTY
    是否有鉴定基础属性:M_EQUIP[n]_HAS_EVAL_BASE_PROPS			// =0没有,>0有
    是否有鉴定神秘属性:M_EQUIP[n]_HAS_EVAL_MYST_PROPS			// =0没有,>0有

  地图禁用的技能对英雄也有效
  野蛮冲撞封锁移动特性英雄有效
  NPC命令CompVal现在支持负数,扩展第四参数:int/str/tm,指定比较类型,防止混乱,int=数字,str=字符串,tm=日期
  修正诱惑的怪物切图后可能造成假象问题

  修正保存沙城配置有可能出错问题
  修正上个版本切图神秘人未刷新问题
  防止读取sqlite数据表db占用冲突
  修正挖矿默认设置出错问题
  离线登录,如果之前英雄也在线,补发英雄状态
  注意点:物品表的RareItem细分:1=怪物掉落通知 2=拾取触发 4=商铺购买通知 8=人物丢弃/死亡掉落触发 16=队伍拾取通知 32=NPC商店买/卖商品触发 64=仓库存/取物品触发,要开启多项,将前面的值相加即可
  修正怪物切图问题
  检测攻击目标优化
  英雄、假人增加禁魔检测和特殊技能的距离检测
  基于06版的稳固

  引擎启用允许网关连接的IP列表!RunAddr.txt,修改后在主界面重新加载->允许连接的网关IP列表即可
  控制台程序更新,支持配置允许网关连接的IP列表
  修正网络底层一处被攻击会造成宕机的漏洞

  修正设置GM说话前缀问题
  修正NPC命令CheckItemAddValue缺参数报错
  修正副本释放出错的严重错误!
  修正召唤英雄有时英雄状态栏看不到问题
  增加关闭服务器时下发通知消息
  NPC脚本错误提示内容
  如果DB设置了神圣,不再显示武器的强度,但如果武器极品属性带了强度,客户端不会显示,实际有效
  增加NPC命令:ChangeEvalPropAddRate +/-/= 数值(0~65535)	// 鉴定普通属性数值附加百分比,存库,DBS、客户端需配套!

  支持H.GetEquipProps
  条件爆率对限制爆出物品的扣除问题
  下属飞主人身边算法调整
  下属违规攻击别人,主人会灰名
  违规攻击假人也会变灰名
  假人善恶攻击模式问题
  腰带、靴子极品点数可以设置为0
  赤狐掉血不刷新问题
  最后一次复活的僵尸有可能隐身问题
  重新加载所有NPC菜单恢复包含:MapQuest、QMapEvent、QChatMission
  提高CompVal第四参数为str时的优先级
  假人回城后如果安全区的守护点被占用不再来回走动
  扩展NPC命令:INSAFEZONE X Y,检测角色当前地图的X、Y点是否属于安全区
  增加假人功能设置掩码参数:DummyOptionMask=1假人被打回击,3假人回击并锁定目标,默认0不回击
  释放唯我独尊技能及时解除石化状态
  允许[雷击]状态下释放魔法盾、道力盾、护体神盾
  修正上个版本引擎武器强度没有发送给客户端问题
  武器的第7位极品属性可以覆盖DB中的神圣或强度设置
  英雄会根据召唤技能-基本设置-召唤数量来召唤下属
  制造满聚灵珠:@Make 聚灵珠 1 满,Give 聚灵珠 1 满,GiveEx 聚灵珠 1 满,SendMail ... 聚灵珠&满
  体力、魔法恢复属性现在对空闲恢复、吃普通药品恢复有作用
  优化怪物视觉相关算法
  攻城期间的边界移动、区域瞬移现在能及时正确地刷新名字颜色
  攻城期间攻击攻城区域内的对象不灰名
  优化封包的下发
  淬炼极品属性扩展:普通属性配置(0~25)|鉴定属性配置(0~19)(扩展部分涉及二进制计算,如若不懂建议别用),成功触发QF的[@RefineItem_Succeed]可临时使用GetEquipProps、UpgradeDlgItem等...
  怪物设置增加开关:宠物拾取小极品,默认关闭。开启表示即使物品不设置自动拾取,但是如果是小极品,也会自动拾取
  
  修正KILLSLAVENAME错误信息
  修正过早连接账号服务器的出错问题
  增加清理仓库物品NPC命令:CLEARSTORAGE
  修正上个版本僵尸不复活问题

  修正地图边界的生物视觉问题!
  增加战斗小退期间也可以限制回收英雄的开关、只计算人物的战斗开关,参数设置-时间控制面板
  及时清理下属,防止出错
  离线、下线取消交易
  修正偶尔大小腿不触发问题
  扣点模式下对限爆物品列表多次计算问题
  修正下属对复活僵尸的视觉问题
  多次刷新商人NPC后,药品刷新时间变长问题
  人形怪不释放野蛮
  召唤的人形怪不显示主人名称问题
  多次执行QUERYVALUE默认为确定问题(客户端)

  重写视觉算法,减少CPU占用率
  修正切换线路问题
  修正多线切换后偶尔不能移动问题
  黑暗之爪可以吸人形怪
  强行离婚问题
  修正NPC命令出错:CheckDearOnMap、CheckMasterOnMap
  完善DropItemMap坐标-1时的随机性
  系统刷怪位置有更好的随机性,mongen刷怪条目中的范围要合理,否则只会造成怪物位置不准确和增加服务器压力
  QM增加服务器关闭时的触发@OnStop,和@OnStart是一对触发标签
  扩展Take命令,第5参数为触发的字段,非空时物品会临时放在自定装备框,$PARAM(7)角色名,$PARAM(8)物品名,$PARAM(9)物品ID
    触发支持GetEquipProps、DLGITEM系列NPC命令的操作,例如:Take 物品名 1 "" 0 ~OnTakeItem		// 不要对物品有延时操作,因为物品对象随后会销毁掉


客户端
  集市增加搜索模糊匹配选单,选单可以使用上、下方向键选择,回车将搜索选中条目
  神圣属性不显示为负数(负数其实攻击力更高)
  修正完善UI控件
  挂机会使用独尊技能解除石化状态
  解毒术效果:SkillID=34 EffectType=2 Effect=52,需要更新客户端
  英雄内功技能面板显示问题
  增加右键菜单切换攻击模式
  内挂物品选项卡增加拾取极品开关,默认开启
  
  优化小退读条体验
  完善友方血条颜色
  改善魔法举手卡帧问题
  改善寻路中瞬移经常反弹情况
  完善格子物品渲染
  内挂的数字漂血过滤开启,只显示自己相关的
  跑动中更容易释放技能
  释放十步一杀后会继续追踪目标
  优化合击流畅性,不卡帧

  增加【登录器远程配置服务器】,用于新版的登录器
  服务器修改服务器列表等信息,会实时推送给登录器
  对于此版登录器,生成的登录器dat配置条目中,只有更新列表链接有效,用于连接配置服务器
  登录器增加简单的多开限制
  其他说明参考文本:登录器远程配置服务器说明.txt



HeroDB改用sqlite驱动,不再使用BDE:
-------------------------------------------
开启前需要使用HeroDBConvertor转换HeroDB,步骤:
1、保持游戏版本完整性
2、M2、DBS、HeroDBConvertor,合区工具 需要调用到sqlite3.dll,在程序目录下放上sqlite3.dll,或者一次性复制到C:\Windows\SysWOW64\目录
3、将HeroDBConvertor、sqlite3.dll、DataTable_HeroDB.db放到\Mud2\DB\目录下
4、开启程序,切换到【转换到sqlite】开始转换
5、转换完成使用控制台程序(GameCenter.exe)配置一次,确保DBS得到正确的DataTable_HeroDB.db路径
6、转换后数据的默认文件名:DataTable_HeroDB.db,里面包含3个表,新老表名对照:magic -> skill、stditems -> item、monster -> monster
7、注意,物品数据表的 宠物拾取列表(PetPickItem.txt)、拾取规则列表(PickItemRule.txt)、极品提示列表(HintItemList.txt)、
   光柱定义列表(CustomItemNameColors.txt)、禁止鉴定的物品列表(DisTIList.txt)
   的功能都已集成到sqlite3数据库的item表中,以上文本弃用!
   
   攻击触发列表(MonAttackTrigger.txt)、怪物技能列表(MonSpAbilList.txt)、
   怪物名字颜色列表(CustomMonNameColors.txt)、假人不攻击怪物列表(BotNoAttackList.txt)
   也都集成到sqlite3数据库的monster表中,以上文本弃用!

8、建议使用navicat软件编辑数据库,navicat也可以将数据库导出为csv文件,自行编辑后再重新导入即可
   csv建议使用vscode+csv插件编辑,也可以使用其他办公软件
   注意编辑的数据文件编码必须为:UTF-8,否则乱码
9、各个表字段说明参考文档:DataTable_HeroDB字段说明.txt


RunGate
-------------------------------------------
  优化性能
  防止封包攻击
  限制下发流量参数:MaxSendCackeSize=1048576				// 限制单玩家下发缓存1M(可达到100M的下发流量),正常情况下完全到不到此流量
  达到限流是否封IP参数:BlockHighTraffic,默认开启=1






2021/5/21	全套配套
---------------------------------------------------------------------------
M2
  机器人支持DelayCall,RUNONDAY、RUNONWEEK可以精确到秒,格式:HH:MM:SS、WW:HH:MM:SS
  远程NPC脚本支持商品列表
  修正一个可导致引擎出错的封包漏洞
  扩展NPC命令ReadRandomStr的参数1可使用权重模式格式(原为文件路径),权重模式的计算更合理,例:
    ReadRandomStr 字符串1|权重1,字符串2|权重2,字符串3|权重3...		// 权重为数字,数值越大,对应的字符串获取到的几率就越大,注意:所有权重总和不要超过21亿!
  解决!setup文件偶尔出现重复项问题
  开启引擎会检测!setup是否有重复项(ini配置重复会引发奇怪bug),有的话会弹窗提示,不手动确认会延迟5秒执行自动修复
  增加加载单个假人命令:LOADDUMMY 账号 角色名,或者只有一个参数:账号|角色名,或账号:角色名,别再用FakePlayer加载200个假人再踢掉199个的方式!
  增加门开关状态下发
  加快NPC加载速度
  整数是否记录日志与元宝分开,默认不记录,需要请修改日志过滤列表,增加:整数 即可
  修正部分AMD CPU运行异常问题
  增加NPC命令:OutputMessage 文字信息,将文字信息输出到引擎日志
  被顶号触发QF的:@KickDoubleConnect
  自动检测防止脚本死循环,并删除不必要的ResetLoopCounter命令,多数情况下不超过500次不会被判别为死循环
  修正20版checkmonmap等几个命令出错问题
  修正21版技能触发需要手动加载才生效问题
  T操作符对可执行命令增加过滤,防止乱套导致出错,参考:T操作符可用NPC命令说明.txt
  修正一处释放NPC对象访问异常






2021/5/20	全套配套
---------------------------------------------------------------------------
M2
  英雄纯数字名称问题
  神秘人切换地图名字不还原问题
  禁止交易,别人依旧可以发起交易和购买物品问题
  刺杀空降问题
  优化场景底层效率,优化地图关门处理流程
  优化字符串分割处理、字符串格式化效率
  优化自动拾取功能
  优化角色名字更新、在线人数获取等
  优化大封包下发(技能、存库、背包等)
  优化SetAbility命令逻辑
  优化变量转换流程
  优化底层功能函数
  修正安全区变更后重新加载可能出错问题
  修正地图变量、全局自由扩展变量赋值不能覆盖问题
  修正施毒术灰名计算错误问题
  多少秒后可以复活变量$REVIVALDURATION,秒,-1表示不能复活,0可以立即复活,其他正数表示n秒后被杀可以复活,在对方没有反复活技能的情况下
  战斗状态持续时间变量$BATTLEMODEDURATION,毫秒
  增加掉落装备NPC命令:DropEquip 0|1|3 提示掉落(0/1),参数1指装备位置,可以指定多个位置,使用“|”间隔,或者使用all指定全部,参数2掉落是否提示
  优化DelayCall命令
  修正重新加载MapQuest可能导致引擎出错问题(包括菜单“以上所有NPC”)
  支持使用4G内存
  优化Event管理
  优化副本管理
  修正副本刷角蝇有可能导致出错问题
  尝试修正脱机人数计算不对问题
  添加将<$DATETIME>分离的变量:<$DATE>、<$TIME>
  添加唯一ID的变量:<$UID>,确保ID唯一的前提是:不同的服务器,setup参数中的serverid唯一
  !setup的[server]下ViewWhisper=1时,引擎会显示聊天信息(原默认),
    当ViewWhisper=2时,可触发QChatMission的[@OnMonitorChatMessage],
    <$CHATMSG>是此字段【专用】获取聊天信息变量,此触发字段禁止使用文本操作,否则将引发引擎崩溃,可参考:记录聊天日志示例.txt

  增加NPC命令:StrCap S1 S2 ( )		// 捕获字符串S1中“()”内的内容到S2,S1返回剩余部分
  扩展NPC命令:UpgradeItem			// 第5参数设置为99时,忽略普通属性的升级,只升级神秘属性;第4参数为鉴定属性,格式:普通鉴定属性|神秘鉴定属性|特殊属性|神技|几鉴,类似Give命令的格式,留空则不起作用
  扩展NPC命令:UpgradeItemEx		// 第5参数设置为99时,忽略普通属性的升级,只升级神秘属性;第8参数为鉴定属性,同UpgradeItem的第4参数
  扩展NPC命令:UpgradeItemEx		// 第4参数如果是1=5,3=5,28=7,28=8这样的“位置=数值”批量格式,则直接按第4参数修改装备普通属性,不会失败
  扩展NPC命令:UpgradeDlgItem		// 第4参数设置为99时,忽略普通属性的升级,只升级神秘属性;第6参数为鉴定属性,同上
  增加NPC命令:GetEquipProps 		// 身上装备位置(0~16或10000),装备位置为10000时,获取的是自定装备框的装备属性,即DlgItem
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  作用:获取装备属性值到一组变量中,n=身上装备位置0~16或10000,p=普通属性0~30,i=鉴定属性1~30,注意下面的n、p、i都是变量
  		普通属性:M_EQUIP[n]_NORM_PROPS{p}
  		有效的普通属性总字符串:S_EQUIP[n]_NORM_PROPS				// 数值格式:1=5,3=5,28=7,28=8,等于号左边是属性位置0~30,右边是数值
  		一组鉴定基础属性:S_EQUIP[n]_EVAL_BASE_PROPS				// 数值格式:1=5,3=5,28=7,28=8,等于号左边是鉴定属性1~30,右边是数值,结合StrTok命令使用,鉴定属性1~30可参考以前的更新说明
  		一组鉴定神秘属性:S_EQUIP[n]_EVAL_MYST_PROPS				// 数值格式:1=5,3=5,28=7,28=8,等于号左边是鉴定属性1~30,右边是数值
  		单条鉴定基础属性:S_EQUIP[n]_EVAL_BASE_PROP_SLOT{1~4}		// 数值格式:1=5,SLOT范围1~4,表示第几条属性,属性值非0才有效
  		单条鉴定神秘属性:S_EQUIP[n]_EVAL_MYST_PROP_SLOT{1~4}		// 数值格式:1=5,SLOT范围1~4,表示第几条属性,属性值非0才有效
  		单条鉴定基础属性:M_EQUIP[n]_EVAL_BASE_PROPS{i}				// 按鉴定属性1~30得到基础属性数值,如果有重复的属性,不能使用此变量
  		单条鉴定神秘属性:M_EQUIP[n]_EVAL_MYST_PROPS{i}				// 按鉴定属性1~30得到神秘属性数值,如果有重复的属性,不能使用此变量
  		鉴定特殊属性:M_EQUIP[n]_EVAL_SPEC_PROPS					// 可以使用IsBitSet,SetBit,UnsetBit命令比较计算
  		鉴定神技:M_EQUIP[n]_EVAL_SKILL_PROPS						// 可以使用IsBitSet,SetBit,UnsetBit命令比较计算
  		鉴定次数:M_EQUIP[n]_EVAL_TIMES_PROPS
  		
  		是否有鉴定基础属性:M_EQUIP[n]_HAS_EVAL_BASE_PROPS			// =0没有,>0有
  		是否有鉴定神秘属性:M_EQUIP[n]_HAS_EVAL_MYST_PROPS			// =0没有,>0有
  		
  获取到属性会触发本NPC的[@OnGetEquipProps]字段,附带返回变量如下,其他请查看附带示例:GetEquipProps.txt
		$PARAM(0)	// 物品ID
		$PARAM(1)	// stdmode
		$PARAM(2)	// looks
		$PARAM(3)	// 装备位置

  特殊属性对应数字说明,不同数字相加可以得到多个属性:
    1 八卦护身
    2 战意麻痹
    4 复活
    8 探测
    16 传送
    32 麻痹
    64 魔道麻痹

RunGate
  优化加速控制,增加操作码间隔过滤(FilterOpcodes.txt),防止部分封包攻击

DBS-MySQL版
  修正回城坐标存取错误
  支持使用4G内存






2021/4/17	全套配套
---------------------------------------------------------------------------
M2
  修正因怪物复活有几率出现报错问题
  优化自动拾取
  !去掉镜像地图,删除ADDMIRRORMAP、DELMIRRORMAP、MIRRORMAPTIME命令
  换成NewCopyMap命令,格式:NewCopyMap 源地图名 副本地图标题 有效时间(秒) 是否刷怪(0/1) 结果跳转字段,返回副本地图名在:<$PARAMSTR(0)>
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  [@副本测试]
  #act
  NewCopyMap d717 猪七副本 45 1 @CreateCopyMapResult
  [@CreateCopyMapResult]
  #if
  CompVal <$PARAMSTR(0)> ! ""
  #act
  map <$PARAMSTR(0)>
  mov A副本地图名称 <$PARAMSTR(0)>
  SendMsg 7 创建副本成功,进入副本:<$PARAMSTR(0)>
  #elseact
  SendMsg 7 创建副本失败

  英雄跟随更及时
  英雄显示主人名称问题
  修正上个版本消耗修复神水出错问题
  修正刷一些无效怪物导致引擎出错问题
  优化MapEvent触发,配置地图名称不区分大小写
  修正鉴定属性的合击威力未能生效问题,测试使用:Give 装备名称 1 0 0 24=15|24=15|0|0|1
  套装属性值可根据设置显示百分比符号(配套更新)
  !吃药间隔控制去掉,请在网关进行控制
  !多次重新加载怪物DB后,怪物上不了毒问题
  !MapEvent不建议在大地图每次移动都触发,否则可能会有性能问题
  火龙神拾取触发获取不到名字问题
  怪物掉落触发参数不显示为具体怪物名
  PlayEffect 第8参数增加Self模式,不广播,只发送给自己,去掉@OnPlayEffect触发
  套装增加战士技能等级效果未体现效果问题
  中毒恢复能减少中毒时间
  产出腰带、靴子有几率带极品属性


游戏网关
  细化物品使用控制
  英雄死亡再次召唤可能不会自动吃药问题

客户端
  四格版本装备界面支持称号
  内挂增加快速开盾开关(可防止卡盾)
  内挂增加淡化火墙效果开关
  套装属性值可根据设置显示百分比符号(配套更新)
  挂机被人攻击不小退
  挂机死亡不关闭客户端
  挂机道士可以边砍边放魔法,法师优化走位
  挂机寻路内存泄漏问题
  挂机路点模式适合多墙地图,解决发呆问题
  挂机不断拾取他人物品问题
  优化普通寻路,不走X型路线
  修正小地图(小)边缘坐标获取错误
  优化自动吃药规则,不卡药
  优化快速攻击、魔法,提高精度
  修正摆摊素材缺图报错
  修正挂机自动拾取步伐问题
  修正内挂保护小退认证服务器失败问题
  修正一时播放太多声音导致卡盾问题
  挂机目标瞬移之后空砍问题






2021/4/4	全套配套
---------------------------------------------------------------------------
M2
  优化mysql功能模块线程
  优化地图后台管理逻辑
  优化玩家视觉事物逻辑
  修正引擎启动有概率出错问题
  读、写玩家存档限流(大概每秒2000存档),防止DBS用爆内存
  单个引擎人数限制修改为:15000->65536
  性能更好的地面物品管理
  优化自动拾取逻辑
  商铺可批量购买
   
  NPC、怪物名字长度扩展为:14->32
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1、使用DBCommander先把monster.db数据导出备份到文本
  2、使用工具HeroDBConvertor.exe转换新monster.db(扩展名字长度)
  3、使用DBCommander清空新的monster.db,并导入步骤1备份的数据文本,这时怪物名称就扩展到最长32字节
  4、NPC名称更改直接在npcs.txt、merchant.txt文本编辑
  5、比如“稻草人”变更为:这是名字很长的稻草人\<不死系>
  6、如果怪物带换行符,爆率文件需要将对应的“\”变更为“-”
  7、CustomMonNameColors.txt自定义名字颜色的怪物会全名显示(需更新客户端)
  
客户端
  增加隐藏尸体时的渐隐效果
  修正查看他人发型显示错误问题
  修正死亡时的翅膀渲染顺序
  时装内发光:stditems.db中时装的shine>=100,对应data\~wfashionshine.wzl文件,每50张图一个效果,有效图片的请保持连续,例:shine=100调用0~49的图片,shine=101调用50~99的图片
  战士也可以自动开盾
  商铺可批量购买






2021/3/14	全套配套
---------------------------------------------------------------------------
M2
  修正因为扩展包裹,引擎和DBS通讯数据量变大,在大量保存数据时可能发生丢包问题
  套装技能属性增加抵抗他人技能伤害设置(百分比),必须和客户端配套!
  修正关闭服务器时多次释放Acceptor完成端口句柄的错误
  优化网络测试、邮件、金币交易市场模块后台线程的效率
  !去掉NPC元宝寄售系统
  英雄分身不使用全技能模式
  增加!setup参数:StrictWeaponUpgradeResult=1时,严格限制升级武器的最高点数,默认0
  增加!setup参数:MultipleTitleProperties=1时,只要激活一个称号,其他称号属性都能生效,默认0
  游戏网关解决被雷霆剑法麻痹后释放魔法的误封
  修改killSlaveName为强制杀死随从
  解决偶尔还有个别假怪问题,需配套更新!

  技能优化
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  设置随机释放连击NPC命令:RANDSERIESSKILL		// 主要给假人用
  修正特殊技能减少CD时间溢出问题
  修正连击技能间隔时间不正确问题
  完善十步一杀技能效果,需要配套客户端
  十步一杀、冰霜群雨支持强化技能效果
  野蛮冲撞带残影效果,以区分普通跑动
  修正完善雷霆剑法效果
  修正三焰咒技能效果
  优化战士英雄连击的起手时机
  修正英雄群攻目标不全问题

  英雄支持3个技能:英雄十步一杀、英雄冰霜群雨、英雄死亡之眼
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  在magic.db复制对应的三个人物技能,名称前面加上“英雄”,并将descr填写上“英雄”即可
  客户端可以通过 内挂->技能->英雄特殊技能不打怪 选项不打怪,有利于PK。
  
  斗笠扩展,需要配套客户端,db中斗笠的AniCount对应资源:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4..11:	普通读取hair2.wzl、连击读取cbohair.wzl
  12..14:	普通读取hair3.wzl、连击读取haircbo3.wzl
  15..62:	普通读取hair4.wzl、连击读取haircbo4.wzl
  63..127:	普通读取~hair5.wzl、连击读取~cbohair5.wzl		// 以“~”开头的自定义资源

DBS
  修正在大量保存数据时可能发生丢包问题,提高网络性能

登录器、客户端
  配套支持抵抗技能伤害功能
  完善部分技能特效
  配套支持斗笠扩展
  修正完善登录器读取列表,当2个列表都读取不到时,将尝试读取登录器目录下的主列表文件名文件(支持之前的加密)
  登录器配置的物品规则列表只有1条时,客户端将不释放lsDefaultItemFilter.txt列表,可以自定义此文本
  解决偶尔还有个别怪物假象问题,需配套更新!






2021/2/21	全套配套
---------------------------------------------------------------------------
M2
  优化IOCP逻辑,减少内存占用
  去掉M2的封加速功能
  套装支持斗笠、军鼓、马牌、时装位置,需要配套更新客户端
  恢复MapEvent移动触发(在一月份版本去掉此功能)
  添加随机进入权重掉落模式,格式:1/3 物品名1|权重1,物品名2|权重2... 1 $GAMEGOLD ? 1 -1		// 1/3机会进入权重掉落计算,参考之前的权重掉落更新说明
  提高和DBS的通讯效率,减少内存占用
  假人、英雄的流星火雨技能支持使用magic.db的delay(毫秒)控制释放间隔,人物原本已支持
  优化集体瞬移散开的效率
  摆摊时CheckItem有效
  补全购买重叠物品的日志和使用重叠物品的日志
  英雄使用物品优化,记录日志主体修改为英雄
  修正物品日志列表修改后不能实时生效问题
  修正技能套装刷新产生的内存泄漏
  在Npcs.txt、MerChant.txt添加新NPC后重新加载可实时生效
  扩展仓库大小为原来的3倍(135个),mir.db数据需要使用合并工具转换后使用,全套配套更新(包括lui.pkg)!MySQL版本不需要转换数据。
  
  新聚怪技能:79;黑暗之爪;4;42;3;15;4;20;0;0;0;42;50;44;100;46;200;50;400;55;800;60;1600;66;3200;72;6400;79;12800;86;25600;94;51200;103;102400;113;204800;124;409600;136;819200;15;550;0;0;
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  !setup参数MagAssemblyMonsTime是技能释放间隔时间,默认15秒
  
  
  equal、large、small、isbitset支持解释嵌套变量,例如:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  #act
  mov M80 12345
  mov S14 M80
  #if
  equal <$STR(S14)> 12345
  #act
  SendMsg 7 正确结果
  #elseact
  SendMsg 7 错误结果
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  添加检测是否正在摆摊的NPC命令:IsMarketStallOpened
  #if
  IsMarketStallOpened
  #act
  sendmsg 7 摆摊中...

DBS
  提高和M2的通讯效率,减少内存占用

客户端
  支持套装位置的扩展
  补全传送、瞬移的特效
  优化第三人移动动作体验

微端服务器
  减少缓存内存占用,提高效率






2021/1/29	全套配套
---------------------------------------------------------------------------
M2 优化部分逻辑
客户端
  微端下快速并显示小地图
  打开仓库物品列表后,可以使用Ctrl+鼠标右键快速存、取仓库物品






2021/1/13	全套配套
---------------------------------------------------------------------------
M2 技能ID=72,是否允许飞到物品上开关DoFlyOnItem=0,默认0关闭,1开启
   修正1229更新造成SetAbility的GM隐身不恢复问题
   修正MonGen.txt集中点刷法,在新的刷怪模式下失效问题
   去掉五行阵法功能!
   添加幸运值变量,人物$LUCKPOINT,英雄$H.LUCKPOINT
   远程脚本插件安全更新:
   1) 上传远程脚本时,需要验证密码,避免捣乱,此功能需要一个正确的授权码,需要请联系工作人员免费获取(提供机器码、自定义密码),引擎和远程脚本插件需配套更新。
   2) 添加脚本上传过滤列表RemoteScriptFilters.txt,修改此文本后重新加载所有NPC即可,用法:在RemoteScript.ini中的
      BlacklistMode=true	// 黑名单模式(默认)	列表中的NPC将使用【本地】方式加载,非列表中的NPC使用【远程】方式加载。
      BlacklistMode=false	// 白名单模式		列表中的NPC将使用【远程】方式加载,非列表中的NPC使用【本地】方式加载。
      列表条目的格式:NPC基本目录_NPC名称-地图号,默认会生成几个例子,请打开列表参考。
   3) 远程脚本服务器更新,支持用户访问控制,格式和编写方式请参阅“远程脚本服务器和插件.7z”的“说明.txt”
   4) RemoteScript.ini添加用户名参数UserName,配合用户访问控制,格式:
      Host=127.0.0.1
      Port=8800
      # 默认用户名default,拥有最大权限,示意请设置比较复杂的密码
      UserName=default
      # 默认密码bluem2
      Password=bluem2
      # 远程读取的版本
      ServerVersion=热血传奇_V1.0
   5) 远程脚本服务器、远程脚本插件需要配套更新!






2021/1/1	全套配套
---------------------------------------------------------------------------
M2 修正重新加载NPC后城堡标志设置错误问题
   Npcs.txt也可以修改后重新加载(之前只支持Merchant.txt)
   全局字符串限制长度为1024
   添加变量$CURITEMINDEX,当前将出产物品的ID
   添加变量$ITEM(NN),主要用于展示背包的物品,NN为物品的ID,客户端鼠标指向物品图标有属性展示,下面有例子,需要同时更新客户端
   [@PickupItem]触发的<$PARAM(3)>修改为掉落者名称
   主菜单添加重新加载MapQuest脚本功能
   修正少数情况下NPC脚本参数个数识别错误问题
   改善法师英雄
   魔法设置面板添加:忽视护体神盾、忽视强化骷髅伤害减免、忽视内功伤害减免 开关,默认关闭,开启则在忽视几率触发的情况下起作用

客户端
   修补NPC对话框处理部分图片类对象
   完善聊天栏、对话框等的装备显示
   支持SetAbility动画效果,需要定义好效果文件AbilityEffects.txt,并将文件放到data目录,聊天栏打:~ReloadAE 命令可重新加载文件
   聊天栏、对话框、跑马灯修正装备显示位置,支持[Ctrl+鼠标中键]查看佣兵契约纸

NPC脚本会自动补全#IF,比如:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[@测试]
;会自动再内存补全下面2条语句,不修改脚本文件,之前下面的例子不会执行SetRandomNO这句
;#if
;true
#act
SetRandomNO 10000

#if
compval <$RANDOMNO> < 1000
#act
sendmsg 3 特等奖<$RANDOMNO>
#elseif
compval <$RANDOMNO> < 7000
#act
sendmsg 7 鼓励奖<$RANDOMNO>
#elseact
sendmsg 7 谢谢参与<$RANDOMNO>



扩展SetAbility,第5参数是自身效果id,id对应AbilityEffects.txt的条目效果,
参考附件AbilityEffects.txt,此文件需要放在客户端的data目录,格式:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;ID(1~65535不要重复) WIL名称 起始图片 帧数 帧间隔 声音 声音循环(0/1) 特效模式(0/1)
1 Prguse2 110 15 80 Wav\powerup.wav 1 1
2 Prguse2 90  19 80 Wav\powerup.wav 1 1

脚本示例:	// 一个Ability带三个动画效果
SetAbility 51 80 15 "" 1
SetAbility 51 80 15 "" 2
SetAbility 51 80 15 某buffer恢复正常 3


QF添加怪物掉落极品触发:[@MonDropItemDown],极品指HintItemList.txt中存在的物品,需要同时更新客户端
触发时支持的变量:<$PARAM(0)>:手动丢弃(0/1) <$PARAM(1)>:物品名 <$PARAM(2)>:Looks <$PARAM(3)>:掉落者名称,<$PARAM(4)>:地图名,
<$PARAM(5)>:X坐标 <$PARAM(6)>:Y坐标 <$PARAM(7)>:物品ID <$PARAM(8)>:掉落者Race(人物1,英雄60) <$PARAM(9)>:是否装备(0/1)
例1:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[@MonDropItemDown]
#act
mov M_DropItemID <$PARAM(7)>
; 聊天框展示掉落物品
SENDMSG 0 <$PARAM(4)>的<$PARAM(3)>掉落:<$ITEM(M_DropItemID)>
; SendScrollMsg的漂移有点慢,可以去掉
;SendScrollMsg <$PARAM(4)>的<$PARAM(3)>掉落:<$ITEM(M_DropItemID)>(点击物品可暂停漂移) 151 16


例2:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[@吆喝]
#say
先放上你要吆喝的物品,放置完成后点击<开始吆喝/@开始吆喝>开始叫卖。\ \<返回/@back>   <关闭/@exit>
#act
QueryItemDlg 放上吆喝的物品 @ShowMyItem 0

[@ShowMyItem]
#act
GetDlgItemId MShowItemID
inc SShowItems <$ITEM(MShowItemID)>
delaygoto 100 @吆喝

[@开始吆喝]
#if
compval <$STR(SShowItems)> ! ""
#act
SendScrollMsg 【<$USERNAME>】出售物品:<$STR(SShowItems)>(点击物品可暂停漂移) 151 16
mov SShowItems ""
close

例3:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[@showItems]
#act
SetDlgItem 屠龙
FormatStr %s <$DLGITEMSHOW>
SetDlgItem 怒斩
FormatStr "%s   %s" <$CALCRESULT> <$DLGITEMSHOW>
SetDlgItem 龙牙
FormatStr "%s   %s" <$CALCRESULT> <$DLGITEMSHOW>
SetDlgItem 逍遥扇
FormatStr "%s   %s" <$CALCRESULT> <$DLGITEMSHOW>
#say
装备:<$CALCRESULT>\ \<返回/@back>   <关闭/@exit>



MapQuest添加拾取触发,文件MapQuest.txt,
触发时支持的变量:同上
掉落物品的角色,如果下线或消失,角色名将为空,一般设置物品消失的时间比怪物消失的时间长
例:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;地图	变量	判断	角色名			物品名		执行文件名
3		[123]	0		蛤蟆/玩家名		乌木剑		QPickup1			// QPickup1指向MapQuest_def目录下的QPickup.txt脚本
3		[123]	0		*				屠龙		QPickup2



添加远程脚本功能
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) 引擎成功加载RemoteScript.dll,可以使用远程脚本功能,
   RemoteScript.ini是参数设置文件,其中:
     Host=127.0.0.1					// 远程NPC脚本服务器的IP地址
     Port=8800						// 远程NPC脚本服务器的端口
     Password=bluem2				// 连接密码
     ServerVersion=热血传奇_V1.0	// 服务器的版本,会以此标识上传、加载远程脚本数据,可动态修改
   要加载远程NPC脚本:勾选 引擎主菜单-管理-使用远程脚本,勾选后,重新加载NPC或开启引擎会加载远程服务器的NPC脚本数据
   最好要保证远程脚本服务器能和引擎服务器通讯够顺畅,否则远程加载NPC脚本速度会变慢。
   启用远程加载脚本后,本地脚本文件的内容可以清空

2) 远程脚本服务器参见附件:RemoteScriptServer.7z
   修改参数文件config.conf,以达到自己的要求,主要修改其中的端口和连接密码,参考压缩包中的“说明.txt”
   修改完,运行:启动.bat 即可

3) 引擎成功加载RemoteScript.dll,适当修改脚本之后,可以点击 引擎主菜单-管理-上传脚本数据,
   可以使用专门的测试服务器修改、上传脚本,其他连接同一远程脚本服务器的引擎,只需要重新加载所有NPC即是最新状态。

4) 涉及文件在压缩包目录:通用-远程NPC脚本 中,注意连接设置正确性,否则将导致引擎卡顿






2020/12/17	全套配套
---------------------------------------------------------------------------
M2 修正摆摊集市有概率出现错误信息问题
   修正上个版本玩家技能名称串到英雄技能名称问题
   UPGRADEITEMEX 的第7参数是1时,点数几率参数将不随机,直接赋予点数






2020/12/15	全套配套
---------------------------------------------------------------------------
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 表示使用权重模式
  2) 权重是非0数字,衡量在一个物品在此条目所有物品中的掉落占比,数字越大几率越大
  3) 此模式必定且只掉落一件物品
  4) 不适合掉落金币


添加NPC命令JSON,操作JSON的字符串,格式:JSON 标识|存活时间 子命令 名称 数值
!可以使用VSCode(安装json扩展插件,json格式化插件)查看编辑json文件。
!资料参考:https://www.runoob.com/json/json-tutorial.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各个参数意义:
1) 标识,类似自由变量,指定一个唯一标识,“|”号后面是此对象的存活时间(秒),-1表示永久,
不写存活时间默认是180秒,即180秒后,此标识的JSON对象会被释放。

2) 子命令,有以下几种:
InitJsonFromFile 文件名			// 从Json文件初始化
SaveToJsonFile 文件名			// 保存到Json文件
InitJson Json字符串				// 从给定的Json字符串初始化
InitFrom 其他标识.路径			// 从其他标识.路径下的Json初始化,相当于复制,“.路径”可选
InitArrayFromCsv Csv字符串		// 从给定的Json字符串初始化为Json数组,字符串分隔符可以是:制表符、“;”、“,”
InitArrayFromCsvFile 文件名		// 从给定的Csv文件初始化为Json数组,注意csv第一行是字段/列的名称
ToCsv S变量						// 保存Csv字符串到S变量中,只能是数组对象才能保存为Csv字符串
SaveToCsvFile 文件名			// 保存到Csv文件,只能是数组对象才能保存为Csv文件
SortByName  0/1(1反序)		// 按名称排序,反序参数为1,默认正序
SortByValue  0/1(1反序)		// 按数值排序,反序参数为1,默认正序
Clear							// 清理
DeleteByName 名称				// 按名称删除
DeleteByPath 路径				// 按路径删除
AddValue 名称 数值				// 添加数值,数值可以是普通的字符串、整数、浮点数等,或者是一个标准的Json对象或数字(字符串形式)
AddOrUpdateValue 名称 数值		// 添加或更新数值(存在则更新,否则添加),其他同上,默认正序,写上标志Desc为反序
SetValueByPath 路径 数值		// 按路径设置数值(不存在则创建,否则更新)
AddOrUpdateObject 源标识 0/1	// 从其源标识添加或更新到目标标识(参数2)的Json中,0只添加目标标识不存在的项,1目标标识里存在则会更新该项
GetCountByPath M变量 路径		// 获取节点数量,当路径为空时,获取标识下的json的基层节点数到M变量,否则获取路径下对象或数组的节点数到M变量

3) 名称,类型是字符串

4) 数值,有以下几种类型:
整数		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个参数

5) JSON专用变量:
<$JSON(标识.路径)J>				// 可读性差的单行JSON字符串,“.路径”为可选项,下同
<$JSON(标识.路径)H>				// 格式化后的可读性高的多行JSON字符串
<$JSON(标识.路径)C>				// 获取路径下对象或数组的数量
<$JSON(标识.路径)T.路径>		// 获取类型,0未定义,1对象,2数组
<$JSON(标识.路径)N.索引>		// 根据索引位置获取名称,索引依据上面获取的数量循环读取即可,索引是数字
<$JSON(标识.路径)V.名称或索引>	// 根据索引位置或节点名称取值,有2种方法:1根据索引位置取值;2省略索引,直接用路径取值

例:
#act
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"}
sendmsg 7 Json:<$JSON(myjson)H>

; 第一个位置以0开始,<$JSON(myjson.数组.1)V>等同于<$JSON(myjson.数组)V.1>
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>

; 保存到文件
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>

; 合并例子
JSON dst InitJson {a:10000,b:200,c:"id"}
JSON src InitJson {a:"str",d:500,e:7002}
; 只添加不存在的项目
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 0
sendmsg 7 合并结果0:<$JSON(tmp)JSON>
; 不重复,重复项目将以“源标识”为准
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 1
sendmsg 7 合并结果1:<$JSON(tmp)JSON>

; 赋值
JSON myjson SetValueByPath object.赋值.int 87654321
JSON myjson SetValueByPath object.赋值.float 5.76
JSON myjson SetValueByPath object.赋值.string abcdefg...
JSON myjson SetValueByPath object.赋值.datetime "2022-11-22 11:22:33.123"
JSON myjson SetValueByPath object.赋值.子对象.int 12345678
JSON myjson SetValueByPath object.赋值.子对象.ishum true
JSON myjson SetValueByPath object.赋值.子对象.float 5.76
JSON myjson SetValueByPath object.赋值.子对象.array [12345,1.76,false,string,2022-11-22T11:22:33.123]
sendmsg 7 赋值结果<$JSON(myjson)J>

; 其他测试例子
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

; 另一种写法
; 将“myjson.对象”初始化到tmp中
JSON tmp InitFrom myjson.对象	// 等同于 JSON tmp InitJson <$JSON(myjson.对象)V>

Mov D98 <$JSON(tmp)C>
sendmsg 7 类型值:<$JSON(tmp)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
  #if
  #act
  ; 取节点称
  Mov S99 <$JSON(tmp)N.<$STR(D99)>>
  ; 不同于上面的索引位置取值,这里使用的是路径取值的方法
  sendmsg 7 “对象”的值是:<$JSON(tmp.<$STR(S99)>)V>
#~for

; 排序例子
#act
JSON myjson Clear

#for (D99 = 0, D99 < 10, D99 + 1)
  #if
  #act
  SetRandomNO 1000
  JSON myjson AddOrUpdateValue 用户<$STR(D99)> <$RANDOMNO>
#~for

#if
#act
JSON myjson SortByValue
sendmsg 7 数值正序结果:<$JSON(myjson)J>

JSON myjson SortByValue 1
sendmsg 7 数值反序结果:<$JSON(myjson)J>

JSON myjson SetValueByPath ChartsDesc <$JSON(myjson)J>
sendmsg 7 插入一个排行榜:<$JSON(myjson)J>


; 从csv文件加载,注意csv第一行是字段/列的名称
JSON J_CsvData InitArrayFromCsvFile ..\QuestDiary\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 7 行<$STR(D99)>数据:<$JSON(J_CsvData)V.<$STR(D99)>>
  JSON J_Temp InitJson <$JSON(J_CsvData)V.<$STR(D99)>>
  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


添加NPC检测命令CheckJson,格式:CheckJson 标识 子命令 标识/名称/路径 选项
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各个参数意义:
1) 标识,类似自由变量,指定一个唯一标识

2) 方法,有以下几种:
X  判断是否包含指定路径的子结点	// 用法:CheckJson myjson X path
N  判断当前层是否有指定的名称	// 用法:CheckJson myjson N name
V  判断当前层是否有指定的数值	// 用法:CheckJson myjson V value
E  判断JSON内容是否相同			// 用法: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
#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)不等





2020/11/19	全套配套
---------------------------------------------------------------------------
M2
   修正个别NPC命令对变量的识别问题
   修正法师英雄持续开盾问题
   修正54-58的NPC不能穿越的问题		// 54-58的NPC不可点击,可在MapInfo.txt添加门点,走上去直接移动到其它地图 
   怪物设置面板,添加怪物被魔法攻击时停顿参数调节
   增加修改合击怒气值NPC命令:UnityEnergy +/-/= 数值,怒气值满值是200
   增加修改合击威力倍率NPC命令:UnityPowerRate +/-/= 数值,百分比,默认100,$UNITYPOWERRATE 可以显示当前值

客户端
   修正完善传送门类NPC的效果,54-58类NPC可以显示名字

合区工具
   优化合并速度,支持多区合并





2020/11/09	全套配套
---------------------------------------------------------------------------
m2 允许英雄在安全区内锁定安全区外的目标
   不开启英雄锁定瞬移至目标身边情况下,英雄先瞬移到主人身边后再锁定目标

登录器、客户端
   登录器列表、更新下载等支持HTTPS协议
   修正登录器可能不断更新问题
   修正登录器更新进度条可能显示不正确问题
   客户端去掉一条调试信息的输出,防止卡顿




2020/11/03	全套配套
---------------------------------------------------------------------------
M2
  角色死亡后,不可范围拾取
  菜单可重加载NPC,机器人NPC
  野蛮冲撞补偿时间也对假人生效
  修正角色上线刚好附近物品消失,会出现物品假象问题
  修正升级武器+2、+3几率太低问题
  修正上个版本小怪被打后移动速度变快问题
  重新加载怪物数据库,即可刷新掉落列表(之前版本的引擎也可以)
  修正个人爆率叠加目标爆率计算错误
  修正玩家随从安全区攻击他人随从问题		// 触发条件:安全区外攻击目标,目标进安全后还会继续攻击
  增加参数:BulkPickupDieDropItems=0		// 是否可以批量拾取他人死亡掉落物品,默认0不可以
  扩展拾取物品规则列表PickItemRule.txt,规则2表示不可以使用范围拾取,例如:木剑 3  // 即表示只能队长拾取,而且不可使用范围拾取
  优化提高引擎内部消息系统性能				// 体现为流畅的集体传送、大场面PK
  修正1025版Rece=174的怪物被麻痹不恢复问题
  优化发现可视物品代码性能
  法师、道士英雄走位优化
  修正人形怪再次刷新技能丢失问题

客户端
  内挂添加人、怪简装开关
  改善内挂自动技能顺畅度
  提高有攻击速度情况下Shift+鼠标操作体验
  修正连击技能效果丢失问题

RunGate
  修正上个版本瞬移后攻击速度限制失效问题
  修正上个版本一个处理服务器封包的小bug






2020/10/18	全套配套	注意:本次更新,游戏网关封加速设置需要重新调整!
---------------------------------------------------------------------------
M2
  1、放开武器攻击速度,武器最大攻击速度数值可达到117,建议最大到80,接近满速,最大速度可以在Rungate限制。
  2、英雄、假人攻击速度倍率:游戏参数->游戏速度->装备速度,建议60
  3、英雄、假人最大武器攻击速度限制:功能设置->英雄设置->英雄武器加速,建议80
  4、修正法师、道士英雄躲避bug
  5、修正战士英雄在杀死目标后的连贯性,提高法师、道士杀怪连贯性,相对之前打怪升级效率有较大提升
  6、提高玩家操控英雄的响应

Rungate
  1、判断带武器攻击速度、魔法速度、移动速度更精确
  2、调节的攻击速度,每3点的速度等于+1武器速度,会和武器攻击速度叠加!
  3、调节攻击速度,不需要重新调整攻击间隔
  4、调节魔法速度,不需要重新调整魔法间隔
  5、调节移动速度,不需要重新调整魔法间隔,并且将原来每2点生效修改为每1点生效
  6、增加一个参数:ClientMoveFrameTime,客户端每帧的间隔,默认95,复古建议调节为120,移动起来相对缓慢,
       参数改变则标准的移动间隔就是:ClientMoveFrameTime * 6,
       建议弃用移动速度调节,即ClientMoveSpeedRate=0,改用单个ClientMoveFrameTime来改变移动速度。
  7、添加一个参数:OpenSpellSpeedRate=1时,武器的攻击速度也可以在使用魔法时起加速作用,加速效果没有普通攻击明显,0关闭
  8、如果启用武器加速,ItemSpeedCompensate=1最好开启,能更好配合组合速度的计算
  9、游戏全局速度调节包含几个参数:		// 这些参数影响所有的玩家,会和攻击速度叠加
       OpenClientSpeedRate=1
       ClientAttackSpeedRate=0
       ClientMoveSpeedRate=0
       ClientSpellSpeedRate=0
       ClientMoveFrameTime=100
  10、附带参考文件:游戏网关速度控制参考.txt

客户端
  修正技能释放太快有几率卡在举手动作的问题
  放开攻击速度,配套本次所有程序更新






2020/10/10	全套配套
---------------------------------------------------------------------------
M2
  新增NPC命令:ClientFeatures 序号(0~99) 关闭或开启(0/1)	// 序号0:开启或关闭客户端自动挂机功能,目前只有序号0有作用,客户端需配套

  扩展:使用个人M、S变量在超出常规范围(0~99)时会自动扩展,M、S后面可以是任意字符,字符的长度最好保持在20字节以内,注:SUM命令对于自由扩展的M变量,结果放在:M99999999。
  例如:Mov M测试整数1 12345,Mov S测试字符1 字符串1,显示:<$STR(M测试整数1)>,<$STR(S测试字符1)>
  
  扩展:使用全局G、A变量在超出常规范围(0~99)时会自动扩展,服务器关闭可保存,注:SUM命令对于自由扩展的G变量,结果放在:G99999999,用法同上。

  增加:属于地图的整数变量E、字符串变量F,地图指向执行命令玩家所在的地图,服务器关闭不保存,注:SUM命令对于E变量,结果放在:E99999999,用法同上。

  全局变量不再保存在!setup.txt,改为保存到QuestParams.ini

GameCenter
  清理全局变量适配以上更新

客户端
  支持ClientFeatures命令		// 必须配套此版本引擎






2020/9/24	全套配套
---------------------------------------------------------------------------
M2
  参数设置-游戏选项2-交易控制增加禁止交易/丢弃金币开关
  重叠物品自动设置最高重叠数,防止出错
  扩展 DropItemMap 地图号 X Y 范围 物品 数量 秒数 归属(0/1)	// X=-1时随机丢物品;秒数非0且归属=1时物品归属于执行脚本的玩家
  扩展 PetPickupItemRange Self 范围(0-15)	// 非挂机时(OfflinePlayEx),可以按设定范围拾取片区,客户端必须配套!

客户端
  支持PetPickupItemRange设置的范围拾取		// 必须配套此版本引擎





2020/9/16	全套配套
---------------------------------------------------------------------------
M2
  扩展:Take 物品1|物品2|物品3... 数量 P0 1	// 第四参数=1时,不取走极品装备,第三参数P0不需要时可以用""代替
  QChatMission脚本支持仓库操作
  修正英雄处理必定掉落物品的bug






2020/9/2	全套配套
---------------------------------------------------------------------------
M2
   修正上个版本刚开启引擎的快速刷怪失效问题
   修正网关服务错误:setsockopt error
   MonGen.txt 条目增加集中点X/集中点Y,结合集中刷几率使用,作用类似MobPlace命令,格式:地图 x y 名称 范围 数量 时间 集中刷几率(0~100) 刷新模式(0~1) 集中点X 集中点Y

LoginSrv
   主菜单添加重新加载服务配置功能,有多条路由时,不要使用相同的title






2020/8/30	全套配套
---------------------------------------------------------------------------
M2 交易重叠物品会日志中记录数量
   道士召唤技能排除Race=211的怪物计数
   中绿毒不影响战斗小退
   使用强化卷后可能导致召唤骷髅速度变慢问题
   优化生物对象移动效率






2020/7/30	全套配套
---------------------------------------------------------------------------
M2 修正使用@mapinfo没有检测GM权限问题
   多线徒弟出师问题

客户端 
   修正内挂设置不保存问题

登录器
   配置的主图大小限制从1M修改为16M






2020/7/22	全套配套
---------------------------------------------------------------------------
m2 添加禁用、启用角色名NPC命令:EnableCharacter 角色名 0/1		// 0禁用,1启用
   创建佣兵角色需要一个佣兵令牌,DB数据:Name=佣兵令牌,StdMode=41,Shape=35,Looks=1132		// 引擎、客户端、lui.pkg配套更新






2020/7/15	全套配套
---------------------------------------------------------------------------
RunGate 加速判断时将转身封包从动作封包中分开
dbs 创建角色提前分配地图(优化多引擎负载)
m2 修复城门状态改变可能会导致客户端崩溃问题
   恢复goto死循环检测
   SendMsg 8-10行会聊天,11黄字喊话,12队伍聊天,13私聊信息
   多线切上线时,自动随机附近位置;参数ChangeServerRandPos=0时关闭此功能
   添加几个账号信息变量:
     $EMAIL				// 邮箱
     $BIRTHDAY			// 生日
     $PHONE2			// 电话
     $MOBILEPHONE		// 手机号码
     $QUIZ				// 问题1
     $ANSWER			// 答案1
     $QUIZ2				// 问题2
     $ANSWER2			// 答案2

   扩展:MOD			// 取模计算,同属INC、DEC、DIV系列命令
         calcval 增加取模计算,符号%
         ints 修改为无符号整数,没有负数,最大至42亿多
         take 将物品名写成物品id,可以取走该id号的物品
   
   添加获取当前Unix时间戳变量:		// Unix时间戳请自行到百科了解
     $UNIXTIME,例:
     #act
     ints 22 = $UNIXTIME
     ints 22 + 600				// 第4参数1表示无符号计算,无符号32位整数最大值大约是42亿,而有符号(正负数)32位整数最大值大约是21亿

     #if
     compval $INTS22 > $UNIXTIME
     #act
     calcval $INTS22 - $UNIXTIME
     sendmsg 7 将在$CALCRESULT秒后过期
     calcval $INTS22 ~ 0			// ~符号,表示将$INTS22转换为普通的时间格式,专用符号
     sendmsg 7 将在$CALCRESULT过期
     #elseact
     sendmsg 7 已过期

     添加NPC命令FormatStr,格式化字符串,结果返回于$CALCRESULT,例:
     #act
     ; 双引号一般用在参数包含有空格的情况下,这样即使参数中带了空格,也会被认为是一个参数
     ; 参数1有多少个%s,后面就需要带对应个数的参数,最多9个%s
     ; 对齐格式:%-32s,其中,-表示左对齐,不带-号默认右对齐;32表示字符的宽度,-号在%号的后面、32前面
     FormatStr "%32s 参数:%-5s %s %s %s %s %s %s %s" 右对齐 一 二 三 四 五 六 七 八
     mov s1 $CALCRESULT
     FormatStr "%-32s 参数:%5s %s %s %s %s %s %s %s" 左对齐 一 二 三 四 五 六 七 八
     #say
     <$STR(S1)>\<$CALCRESULT>\<关闭/@exit>   <返回/@main>


!setup.txt补全几个极品属性控制参数
19类项链
  necklace19SpecAddRate				// 属性几率
  necklace19SpecAddValueRate		// 点数几率
  necklace19SpecAddValueMaxLimit	// 最高点数

23类戒指
  ring23ACAddRate
  ring23ACAddValueMaxLimit
  ring23ACAddValueRate
  ring23MACAddRate
  ring23MACAddValueMaxLimit
  ring23MACAddValueRate

头盔
  helmetACAddRate
  helmetACAddValueMaxLimit
  helmetACAddValueRate
  helmetMACAddRate
  helmetMACAddValueMaxLimit
  helmetMACAddValueRate






2020/7/9	全套配套
---------------------------------------------------------------------------
m2 修正重新加载脚本的内存泄露
   集市、佣兵功能需要在脚本头加上:(@@StallMarket或@@CreateMercenary),并添加相应标签[@@CreateMercenary]或[@@StallMarket]
   例如:[@@StallMarket]
         欢迎使用摆摊集市!\ \<返回/@main>   <关闭/@exit>

         [@@CreateMercenary]
         请放上已签约的佣兵契约纸。\ \<返回/@main>   <关闭/@exit>
         
   改进金币交易行检测严谨性(mysql版本功能)
   
   QF增加金币交易行操作的检测(mysql版本功能)
   [@OnUsingCoinMarket]
   #if
   checklevelex < 10
   #act
   APPROVE 0		// 0拒绝 1批准,默认批准使用金币交易行
   MESSAGEBOX 10级后才能使用金币交易行。






2020/7/6	全套配套
---------------------------------------------------------------------------
M2 补全英雄对SetAbility 24、26、27、44的支持
   增加NPC命令:VerifyKeyCode <$TOTPKEY> <$STR(M5)>		// 验证两步验证码,参数1是两步验证密钥,参数2是输入的验证码,用法可以参考:佣兵示意脚本.txt
   修正集市报错
   
LoginSrv 基本设置-系统设置 增加:
   新建、修改密码,新建密保问答的策略限制
   增加无需验证两步验证选项
   时间设置面板的解锁时间生效,建议值:90

LoginGate
   空闲连接超时可以超过90秒
   爆破密码、密保限制等级描述错误修正
   爆破密码、密保被临时封的IP,可以在一定时间后自动解封

登录器配置器、客户端
   登录器更换新的默认UI
   配置器、登录器支持不规则的png图片作为主图,可制作出漂亮的非四方形登录器
   优化加快登录器搜索目录速度
   升级列表中服务器列表和按钮链接的自定义:		// 需要放在文本的行首
     ;主要列表 http://www1.xxxx.com/logintool/serverlist.txt
     ;后备列表 http://www2.xxxx.com/logintool/serverlist.txt
     ;论坛链接 http://www.xxxx.com/bbs.html
     ;客服链接 http://www.xxxx.com/kf.html
     ;支付链接 http://www.xxxx.com/pay.html
     ;注册账号链接 http://www.xxxx.com/newid.html
     ;修改密码链接 http://www.xxxx.com/chgpwd.html

   脚本、聊天栏支持网址二维码,例如:		// 下面例子中,后面的888是识别用,可以是任意整数,用法参考之前的PIC功能扩展
     扫描下载iPhone平台的微软两步验证器APP:\<pic=https://apps.apple.com/cn/app/microsoft-authenticator/id983156458,888>\ \
     安卓版的微软验证器放在本次更新的附件中,文件名:com.azure.authenticator.apk,自己可以放上网站,提供下载链接的二维码
     注:微软验证器有个好处,可以选择云备份,手机重装系统或者丢了,之前备份在云端的信息都在,可以在新手机重新下载原来的备份






2020/6/28	全套配套
---------------------------------------------------------------------------
M2 !setup.txt添加参数:ItemOwnershipHints,拾取的物品属于他人时,是否提示角色名,默认关闭
   已签约契约书可查看装备和技能等信息
   摊位物品数量由10个扩展到15个
   扩展制作佣兵命令:QUERYMERCENARIES 5 1 0		// 参数3为1时表示过滤掉隐藏角色
   增加摊位集市系统:
     摆摊物品汇总、分类、排序等功能,可以在界面上搜索、购买摊位物品,
     开启UI的脚本:<打开摆摊集市/@@StallMarket>
     !setup.txt参数StallMarketCharge,可修改上架摊位集市时每件商品的手续费,默认100金币

DBS 多角色创建
  集市、佣兵系统的支持

客户端
   增加摊位集市功能,需更新lui.pkg并配套M2
   已签约契约书可按Ctrl+鼠标中键查看装备和技能等信息
   最多创建的角色由2个变更为8个






2020/6/18	全套配套
---------------------------------------------------------------------------
M2 佣兵通讯消息修改,需要和客户端配套更新
   修正MAIN_FUNC_BTN_SHOW只能执行序号0-10问题
   修正引擎部分地方经验超过21亿后显示为负数问题
   @StdModeFuncXX,XX可以超过255,公式:XX = Reserved * 256 + AniCount,Reserved=99已经被占用(使用一次掉一点持久),不要使用该值即可
   有几率导致物品不显示问题,实际已经掉落
   交易时不允许被赠送
   NPC命令:MAIN_FUNC_BTN_CAPTION 序号 按钮标题
   雷炎洞效果失效问题
   沙巴克城门显示问题
   攻沙期间NPC不消失问题
   
客户端
   内力条0值显示修正
   ListView控件显示修正完善
   佣兵通讯消息修改,需要和引擎配套更新
   有几率导致物品不显示问题
   因神兽变身有几率导致崩溃bug
   雷炎洞效果声音错误问题
   城墙、城门不作为尸体隐藏






2020/6/13	全套配套
---------------------------------------------------------------------------
M2 BotAutoWearEquipments.txt	// 简单的假人拾取后自动穿戴列表,首次运行后查看文本说明
   继续修正假怪问题
   优化部分广播消息
   合区工具合并时支持给从区设置Ints的值
   
   添加佣兵系统功能:
     可以将角色压成签约状态的契约纸,已签约的契约纸可以用于创建新角色,详见示意脚本:佣兵示意脚本.txt	// 需要配套程序:M2、DBS、客户端、lui.pkg,合区工具
     契约纸DB数据:xxxx,佣兵契约纸,49,0,1,0,0,0,1581,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
     日志查询工具可以查询此类操作的记录
     @make 佣兵契约纸 1 id    // 用于补偿佣兵契约纸丢失,id指制作佣兵契约时记录的M_xxx中的xxx(数字序号)






2020/6/9	全套配套
---------------------------------------------------------------------------
M2 修正SetAbility引起的内存泄露问题!
   合击击中效果补全和一些效果修正,需要配套客户端更新
   使用隐身术后再带隐身戒指无效问题
   修正假人招出的英雄升级后有几率收回问题
   增加BotNoAttackList.txt,设置挂机假人不攻击列表,格式:怪物名 1	// 1挂机假人不攻击
   假人可以触发:[@PickupItem]、[@HeroLogin]
   增加被英雄目标锁定的提示,可以在英雄设置面板开关,默认开启
   部分地图随机飞有几率进入黑点导致动不了问题
   尝试减少假怪现象
   取消存重叠类物品存仓时的自动重叠
   英雄被刺杀会回击
   SetAbility 49 1 99999999	// 禁止使用商铺
   野蛮冲撞麻痹效果可以在界面修改为0秒
   [@KillPlayXX]、[@KillPlayMonXX] 支持变量:
     $PARAM(0) 杀死的怪物名字
     $PARAM(1) 地图编号
     $PARAM(2) 地图名字
     $PARAM(3) 怪物X坐标
     $PARAM(4) 怪物Y坐标
     $PARAM(5) 怪物等级

客户端
   合击击中效果补全和一些效果修正,需要配套M2更新
   客户端因为退出慢,导致人物有可能延迟下线问题
   修正DBS未开启情况下,重复连接角色网关问题
   移动后翅膀隐藏问题
   取消存重叠类物品存仓时的自动重叠






2020/6/8	全套配套
---------------------------------------------------------------------------
M2 增加NPC命令:DELFIREBURN 地图名 X Y 类型(1-8)		// 删除光圈,用于删除MobFireBurn刷出的光柱(MobFireBurn刷非类型5的光柱不会消失)
   修正上个版本刷光圈一定时间后报错
   由于补全了部分技能ID的攻击触发,导致【劈星斩】因穿透起作用变成威力异常,将技能DB中【劈星斩】的Penetrate设置为0即可恢复原威力,同时注意是否有脚本触发该技能的减血效果。
   
客户端
   头发、斗笠不支持微端问题
   客户端路径下的client.ini可以定义NPC名字是否为粗体,内容:	// 用登录器自动更新client.ini到客户端目录下即可,默认非粗体
   [setup]
   BoldNpcName=1
   ; 是否默认显示称号
   ShowUserTitle=1
   ; 注册按钮账号的网站
   NewIDUrl=https://www.xxxxx.com






2020/6/1	全套配套
---------------------------------------------------------------------------
M2 添加变量:$MAPWIDTH,$MAPHEIGHT		// 当前地图的宽、长
   添加NPC命令:GuardPos x y 范围		// 设置假人的守护点和范围(不小于Setup中的maxViewRangeX),x为-1时取消守护
   例子:
   ;随机地图点守护
   MAP $CURRENTMAP
   GuardPos $CURRENTX $CURRENTY 30
   $ATTINFO_SKILLID 部分技能ID获取不到问题
   降低重伤状态伤害
   修复上个版本行会战双方名字颜色问题
   镖车名字显示问题






2020/5/31	客户端+引擎配套
---------------------------------------------------------------------------
M2 1、SetAbility 赋值时会触发QF的[@SetAbility_XX],属性过期后将触发[@ResetAbility_XX]	// 参考之前SetAbility的更新说明
   2、添加NPC命令:PetPickupItemRange 宠物名字 范围(0-15)		
      宠物自动拾取范围,宠物名字为“H”时指英雄,宠物名字为“Self”时指自己(挂机用),“*”指非英雄的所有宠物,范围0时关闭自动拾取,可结合上条更新进行定时。
   3、添加NPC命令:Lockdown 1		// 锁定,不可攻击、移动、魔法等,Lockdown 0是解锁
   4、重点的性能优化,在玩家/怪物/物品集中情况下,引擎CPU占用率有大改善,改善人怪假象,
      适当调整!Setup.txt的maxviewrangex、maxviewrangey,以便适应大分辨率的客户端,建议分辨设置为16、15,无需适应大屏幕设置12、12即可,较小的值可以节约CPU占用。
   5、添加NPC命令:FakePlayer 0/1	// 0踢假人,1加载假人
   6、添加NPC命令:GuildStat 行会名 统计玩家等级 过滤同机器码(0/1) P1	// 统计行会在线玩家数,数量返回P1,行会名为Self时指自己行会,可结合IsGuildMaster使用。
   7、行会成员超过一定数量编辑不了封号问题
   
客户端
  英雄不能在死尸上进行守护bug
  修正微端因拉取大文件丢包问题
  优化网络接发能力,优化性能
  提高后台FPS,改善体验
  修正连续多次弹出消息窗口bug
  行会成员超过一定数量编辑不了封号问题
  被顶号,网络异常断开等情况下,可以选择返回登录界面再次进游戏(带防护盾的登录器可能不支持)
  聊天栏命令:~history		// 历史记录,Ctrl+L
              ~clear		// 清理聊天栏,Ctrl+K






2020/5/17
---------------------------------------------------------------------------
M2 1、添加NPC命令:EndGuildWar 行会名1 行会名2	// 结束行会战,两个参数可以使用通配符*
   2、添加条件判断:
   #if
   true		// 代替checklevelex >= 0之类的语句
   #act
   ...
   3、修正上个版本对MonDropRate的改进,导致爆率计算有可能因计算溢出而造成掉落概率错乱问题
   4、优化部分逻辑代码






2020/5/2
---------------------------------------------------------------------------
M2 命令扩展:Kick 1	// 让在线玩家执行小退
   killSlaveName *	// 杀死所有随从;可以放在[@OnLogout_OffLinePlaying]执行,实现离线挂机再次登录的免踢功能
   修改 MonDropRate 对于爆率文件中 1/xxx 的写法也起作用,计算公式:xxx/yyy / 100 * MonDropRate,假如MonDropRate=200,即在原来爆率基础上提高一倍
   附带条件的爆率条目,有所有权才会爆出






2020/4/13	全套程序配套更新
---------------------------------------------------------------------------
M2/Client 增加战斗中小退时间限制,默认0秒,在参数设置-时间限制面板调节		// 限于PK,打怪不受限制
Client 修正自动挂机自定义怪物过滤列表位置不正确问题
添加变量$TIMESTAMP,获取当前时间,格式:年-月-日 时:分:秒,CompVal增加对此时间格式的比较支持,
   添加NPC指令:CalcVal 数值1 操作符(+-*/=) 数值2,结果返回在变量$CALCRESULT中,对于字符串和时间的操作,只支持+-,
   例如:CalcVal $TIMESTAMP + 1,返回结果在$CALCRESULT,对于时间计算单位为秒,
   此条更新主要时为了支持自定义数据表中时间格式字段的运用,也适用于非MySQL版本的引擎。
M2 修正刀刀刺杀非刺杀位也有忽视防御效果bug
Client Tiles,SmTiles,Objects支持到255






2020/3/27	客户端+微端服务器
---------------------------------------------------------------------------
M2 屏蔽掉护体神盾的释放动作
微端 启用参数:expiry_time		// 连接空闲超时(秒),默认43200






2020/3/27	客户端+微端服务器
---------------------------------------------------------------------------
优化微端速度,解决微端小黑块问题
修正微端服务器有几率因包未发送完连接被掉导致崩溃bug
M2 修正武器+诅咒卖商店价格异常问题
M2 修正召唤英雄时,自己偶尔不能及时看到英雄问题
M2 战士英雄技能释放时机更准确
M2 扩展 Take/TakeW 物品1|物品2|物品3|物品4... 数量 P0	// P0返回删除的数量,TAKE物品不要和金币混用
--------------------------------------
M2 细化英雄处理粒度;改进英雄组合速度,开启可以细调英雄各种组合动作
之间的间隔,让英雄的动作看起来更合理、更像玩家的动作;
不开启,则英雄各种组合动作有点不均匀,看起来像使用了加速。






2020/3/20	配套更新
---------------------------------------------------------------------------
DBServer去掉对dbserver.dll的调用
M2 修正怪物设置可挖,导致怪物的爆率扩展检测失效问题
M2 会导致ini文件产生重复项问题
M2/Client 修复城墙状态和特效显示问题
修复客户端物品管理有几率崩溃问题
修正客户端显示+HP/MP与实际不符问题
客户端可以自动解包自定义的可吃物品包
--------------------------------------
DBServer 增加文件缓冲开关,默认开启
  开启此项,将大幅度提高数据文件的读写性能,但在大多数时刻外部程序
  对DB文件不能操作:即无法复制DB文件,GameCenter也无法实现自动备份。
  如过想通过GameCenter自动备份,可以关闭此选项,但最好开启角色数据缓存,
  既能保证性能,也可以实现自动备份。






2020/3/19	登录器 + 客户端
---------------------------------------------------------------------------
登录器的服务器列表支持加密






2020/2/28	全套程序配套更新
---------------------------------------------------------------------------
登录器/客户端 
   改进搜索传奇目录方式
   默认分辨率修改为1024*768(原800*600)
   修正英雄频繁使用物品导致主人使用物品也受限制问题			// M2/RunGate/客户端 需配套更新
   修正频繁使用药品时手动使用其他物品导致物品消失假象		// M2/RunGate/客户端 需配套更新
   修正智能双龙斩识别bug
M2 极品几率还原为原先多加1点的方式,但是不会超过最高点数限制;
   合计命中微调;
   套装数最多支持到2048套(原255套)
   修正人物打出的龙影剑法/双龙斩可能他人看不到效果bug
   优化封包下发效率
合区工具 还原重命名规则






2020/2/20	全套程序配套更新
---------------------------------------------------------------------------
M2 爆率变量检测扩展爆出才扣代币参数:
	1/x 装备名称 数量 $变量 检测符(><=!?) 检测数值 扣除(负数扣除,正数增加) 爆出才扣代币(默认0爆出才扣,1未爆出也扣)
M2 修正Give未刷新角色负重问题,修正技能面板调节[流星火雨]范围失效问题
M2 db数据的AC可以设置聚灵珠使用最大等级限制,AC=0不限制最大使用等级,AC不应该小于NeedLevel的值
客户端 优化微端速度

PLAYEFFECT 扩展修改:	// 需要M2/客户端配套
--------------------------------------
PLAYEFFECT WIL名称 X Y 起始图片 帧数 间隔 循环次数 声音 声音循环(0/1) 对象(""/Self/All/Guild/地图名)	
修改为
PLAYEFFECT WIL名称/X/Y 起始图片 帧数 间隔 循环次数 声音 声音循环(0/1) 对象(""/Self/All/Guild/地图名)	特效模式(0/1)
注意:WIL名称 X Y -> WIL名称/X/Y;特效模式:0普通,1技能特效模式(默认);可以利用微端模式下的~cui.txt自定义资源






2020/2/16	全套程序配套更新
---------------------------------------------------------------------------
客户端支持png制作的wzl,!注意:大量使用png作为图片素材可能会导致客户端因显存不足而崩溃
1、增加制作wzl文件的WzlMaker工具,支持导入png文件,使用png制作出来的wzl只有对应的新客户端才兼容
	制作png的wzl,最好使用此工具,效率最佳,其他工具制作的wzl,客户端读取效率差,会导致性能不强的机器卡顿。
2、增加自定义素材列表文本,放在传奇目录\data\~cui.txt,格式:	// 目前暂应用于物品特效
	;ID(1~100)	文件名
	1		.\data\~beam.wil
	2		.\data\~beam_png.wil
	可以用登录器自动更新功能自动更新~cui.txt至data目录,
	然后使用微端即可,微端服务器data目录需要放相应的wzl文件。
3、物品特效设置的CustomItemNameColors.txt格式扩展为:	// !注意:物品特效设置图片不再在lui.pkg里调用,因为不支持微端,图片也没有偏移设置
	;自定义物品名字颜色和地面物品特效
	;格式:物品名字 颜色(1..255) 特效图片索引 特效图片数量 自定义素材ID(对应~cui.txt中定义的ID)
	魔杖 0 90 10 2
	命运之刃 0 90 10 1
4、更新微端支持png格式的wzl
5、GameCenter 支持定时开/关服务器;定时开服之前会执行GameCenter所在目录下BeforeStartGame.bat






2020/2/11	全套程序配套更新
---------------------------------------------------------------------------
M2 英雄支持双龙斩/龙影剑法,保存龙影剑法剑气值;改善合击体验
Client 支持智能双龙斩/龙影剑法
LoginSrv 两步验证码错误累计3次才踢下线,配套客户端有提示
Launcher 首次运行提示否直接在当前目录以微端模式运行游戏,需要配套此版本的客户端
DataTool 支持师徒和结婚数据修正






2020/2/10	全套程序配套更新
---------------------------------------------------------------------------
Client 主界面自定义按钮扩展为40个,@MainBtnFunc_40 变成主按钮触发
M2 人物设置为免毒/符释放技能时,英雄也将免毒/符放技能
M2 修复英雄PowerRate时间到了不清理问题
------------------------------------------
M2 添加针对A/S字符变量的NPC命令:INS S1 位置(1~S1的长度+1) 插入字符 重复次数(默认1)
M2 添加针对P/G/D/M/I/H等整数型变量的NPC命令:
   AND,OR,XOR,NOT运算,CompVal支持与运算(&号)比较,这组操作相比下面的命令会比较晦涩难懂,但是一次可以批量开关;
   针对0~31位的操作和比较:SetBit,UnSetBit,FlipBit,IsBitSet,第二参数表示第几位(0~31)
   结合以上命令可以给一个int类型的整数设置32个开关,节省变量的开销,有关操作请上网查阅。
// AND,OR,XOR,NOT,CompVal 例子:
[@OR]
#act
OR P1 5				// 或运算,1位和3位设置为1(1是低1位,4是低3位,可以用计算器查看BIN数据)
SendMsg 7 <$STR(P1)>

[@XOR]
#if
  CompVal <$STR(P1)> & 1
#act
  XOR P1 1			// 异或运算,1位设置为0

#if
  CompVal <$STR(P1)> & 4	// 异或运算,3位设置为0
#act
  XOR P1 4

[@CheckSwitchState]
#if
  CompVal <$STR(P1)> & 1	// 于运算 比较
#act
  SendMsg 7 P1低1位二进制数值为1
#elseact
  SendMsg 7 P1低1位二进制数值为0

#if
  CompVal <$STR(P1)> & 2
#act
  SendMsg 7 P1低2位二进制数值为1
#elseact
  SendMsg 7 P1低2位二进制数值为0

#if
  CompVal <$STR(P1)> & 4
#act
  SendMsg 7 P1低3位二进制数值为1
#elseact
  SendMsg 7 P1低3位二进制数值为0


// SetBit,UnSetBit,FlipBit,IsBitSet 例子:
[@SetBit]
#if
  !IsBitSet P1 22		// 第22位是否关闭
#act
  SetBit P1 22
  SendMsg 7 P1的22位现在处于开启状态

#if
  IsBitSet P1 22		// 第22位是否开启
#act
  UnSetBit P1 22
  SendMsg 7 P1的22位现在处于关闭状态

[@FilpBit]
#if
  checklevelex > 0
#act
  FlipBit P1 31			// 切换状态,开<->关来回切换

#if
  IsBitSet P1 31		// 第31位是否开启
#act
  SendMsg 7 P1的31位现在处于开启状态
#elseact
  SendMsg 7 P1的31位现在处于关闭状态


------------------------------------------
M2 添加NPC命令:MakePoison 类型(0~11) 秒数 点数,第一参数为cleanup时,清理掉状态;类型:0绿毒/1红毒/3雷击/4冰冻/5石化/6禁锢(同石化)/7重伤(丧失防御)
M2 添加获取SetAbility数值变量:$ABILITIES0~500;增加$TARINFO_ISSLAVE变量,是否是随从
例子:
[@SetAbility]
#act
SetAbility 50 20 900 石化技能恢复正常
SendMsg 7 获得20%几率的石化技能,持续15分钟

QF:
[@Attack]
#if
  CompVal <$TARINFO_RACE> ! 1		// 非人物
  CompVal <$TARINFO_ISSLAVE> = 0	// 非随从
  CompVal <$ABILITIES50> > 0		// Abilities的50位置有数值
#act
  SetRandomNo 100			// 按100随机
#elseact
  break

#if
  CompVal <$ABILITIES50> > <$RANDOMNO>	// 命中触发
#act
  T.MakePoison 5 5

------------------------------------------
M2/Client 扩展CustomItemNameColors.txt,格式:物品名字 颜色(1..255) 特效图片索引 特效图片数量
  其中特效图片放在lui.pkg中,文件名格式为:beam_xxxxx.png,x为0~9的阿拉伯数字;
  例如文件中定义:法杖 254 200 10,则lui.pkg中应该放上:beam_00200.png~beam_00209.png等文件
  批量图片重命名可以使用everything,搜到所有用到的图片按F2操作即可;
  png文件制作有一定规格,中心点需要按像素对齐。
------------------------------------------






2020/2/7	全套程序配套更新
---------------------------------------------------------------------------
M2 修正SetAbility隐身不恢复正常问题;武器减速问题;其他极品属性的地面物品也闪绿光
M2 修正在[@Pickup]触发字段里删除拾取的物品出现物品假象问题;攻击触发T.操作只触发一个问题
M2 QueryValue 命令增加对QChatMission的支持,第6参数为:QC
M2 限制爆出数量物品规则代码优化
Client 客户端内挂修改物品规则及时更新地面物品显示,优化战士隔位刺杀走位
Client 修正浏览他人摊位时,有几率被关闭问题,需要同时更新M2和客户端
Rungate 修正一处可导致崩溃的漏洞






2020/2/3	全套程序配套更新
---------------------------------------------------------------------------
M2/Rungate 增强稳定性,需要配套使用
M2/Client 在英雄控制面板可以开关【人物免药粉/护身符释放相应技能】
DBServer 禁用角色:玩家不可恢复角色,不能登录,可以在角色管理界面恢复启用;删除角色数据:不可恢复,不能登录。
DataTool 提高性能,添加ini重复项清理功能,恢复装备说明导出功能






2020/1/29	全套程序配套更新
---------------------------------------------------------------------------
M2 修正魔龙教主/火龙的特殊攻击可以对死亡角色有效bug
M2 修改物理攻击打不到城墙bug
M2 优化角色下线/上线地图管理对象处理,减少假人假怪现象
M2 优化CHECKUSERDATE的兼容性
Rungate 解决因为封加速计算bug可能导致卡住几秒
Client 大幅度减少假怪现象,优化物品管理,解决26号版本因物品系统优化引起卡死bug
Client 两步验证二维码添加当前服务器名为提供者,解决不同服同账号扫描二维码被覆盖问题,现在两步验证使用
  也方便,可在手机上搜索安装APP或微信小程序:二次验证器、TOTP、动态验证、两步验证、Authenticator等等...
  别再使用微信公众号那种文本读写的方式去验证,使用久了文本体积变大会导致游戏卡顿!






2020/1/18	全套程序配套更新
---------------------------------------------------------------------------
M2 去掉部分加载/保存角色数据日志;修正SetAutoGetExp命令第三参数为空时出错bug
DBS 优化代码






2020/1/15	全套程序配套更新
---------------------------------------------------------------------------
修正DBS使用缓存情况下,因关闭保存缓存间隔太长,导致被GameCenter强制关闭而导致回档问题






2020/1/14	全套程序配套更新
---------------------------------------------------------------------------
M2 修正装备单独爆率设置读取不到问题
M2 优化角色DB存取逻辑,释放主线程压力
RunGate 优化ClientSocket,提高稳定性
DBS 优化角色数据的存取IO性能;优化读写逻辑,防止文件读写失败问题






2020/1/13	全套程序配套更新
---------------------------------------------------------------------------
M2/DBS 优化角色数据的存取逻辑






2020/1/9	全套程序配套更新
---------------------------------------------------------------------------
!重要: M2修因角色数据个别错误可能导致登录黑屏问题
!重要: DBS修正可能死锁问题
M2优化角色数据的存取逻辑
DBS允许将缓存数量设置为0






2020/1/6	全套程序配套更新
---------------------------------------------------------------------------
!重要: 修正DBServer未能正确处理[创建英雄/改名/英雄改名]和其他存储问题
!重要: 修正因底层函数优化引起的各种小bug,比如微端部分资源更新不了...
修正拾取规则未加载bug
自定义怪物名字颜色,Envir目录的CustomMonNameColors.txt,动态修改文本后重新加载怪物数据库生效,格式:怪物名字 颜色(1..255),客户端会默认显示自定义怪物的名字,可在内挂选择关闭
自定义物品名字颜色,Envir目录的CustomItemNameColors.txt,动态修改文本后重新加载物品数据库生效,格式:物品名字 颜色(1..255)	// 非176版本才有此功能
M2修正死亡之眼技能能打到非本地图怪物问题
M2修正聚灵珠不能在DB设置爆出为满经验问题






2019/10/22	!全套程序配套使用
---------------------------------------------------------------------------
M2加入自动更新功能,可在关于菜单设置是否自动检测更新
M2可储存ints从0~9扩展到0~29,尽量使用此变量,避免使用直接读写文本的自定义变量
M2每1开网关端口的人数限制从6000提高到8000
提高M2处理游戏流量的能力
修正上个版本可能存在跑位空气墙问题
游戏网关接收缓冲区大小自适应,增加发送缓存以提高处理流量能力(内存相对上个版本会多一些)
游戏网关修正关闭程序时的一个bug
M2/DBS改写人物数据存取逻辑,大幅度提高存取数据的效率
修正很小的可能造成个别玩家数据存储错误bug,需要配套更新M2和DBServer
修正挂机假人会攻击人物下线时刻的英雄
扩展NPC命令:compval <$USERID> ^ "userid"	// $USERID是否以userid开头
扩展NPC命令:compval <$USERID> ` "userid"	// $USERID是否以userid结尾
登录器支持自配置自动刷新服务器列表
登录器配置器可自定义客户端Logo,png格式,可利用登陆器更新功能下载至传奇目录,留空使用默认logo(建议使用PS裁剪掉透明部分以减少文件大小)
KillMonGetFullExp +/-/= 秒数				// 高等级杀怪获取全部经验时间(秒),存库
REFITEMSHAPE 位置 数值						// 引用某同类型物品外观,位置:0衣服 1武器,数值参考stditems.db中的物品idx,存库,(连击合击版本才支持)


---------------------------------------
增加角色改名功能,详见附件示意脚本,改名之前,如果有武器正在升级,需要取回



---------------------------------------
推广ID功能
登录器配置器增加“推广ID”的填写,最多14字节(7个汉字)
游戏内获取推广ID的脚本变量:<$ADID>



---------------------------------------
增加NPC命令:SetAbility 位置(0~500) 数值 持续秒数 结束时的提示字符(留空不提示)
其中有如下49个固有属性,其他的50-100可以用作临时计时变量,也可以作为计时器使用。

[@SetAbility]
#ACT
SetAbility 10 15 30 暴击附加属性恢复正常。
SENDMSG 5 获得暴击附加属性15点,持续30秒。
;SetAbility 10 0 0 暴击附加属性恢复正常。  // 立即清理位置10的属性
;SetAbility cleanup // 清理所有属性

位置对应属性:
  0 // 腕力
  1 // 负重
  2 // 背包重量
  3 // 准确
  4 // 敏捷
  5 // 魔法躲避 每一点代表10%,10点即为100%。
  6 // 毒物躲避 每一点代表10%,10点即为100%。
  7 // 中毒恢复 每一点代表10%,10点即为100%。
  8 // 生命恢复 每一点代表10%,10点即为100%。
  9 // 魔法恢复 每一点代表10%,10点即为100%。
  10 // 暴击
  11 // 目标爆率
  12 // 防爆
  13 // 忽视 属性为百分比,最大为100。
  14 // 增伤 属性为百分比,最大为100。
  15 // 反射 属性为百分比,最大为100。
  16 // 物减 属性为百分比,最大为100。
  17 // 魔减 属性为百分比,最大为100。
  18 // 吸血
  19 // 幸运
  20 // GM隐身(观察模式)
  21 // GM无敌
  22 // 禁止使用物品
  23 // 禁止丢弃
  24 // 禁止移动
  25 // 禁止跑步
  26 // 禁止物理攻击
  27 // 禁止魔法攻击
  28 // 稳如泰山(不可被野蛮推动)
  29 // 禁止召唤英雄
  30 // 禁止修改攻击模式
  31 // 禁止使用仓库
  32 // 麻痹模式
  33 // 魔道麻痹
  34 // 复活
  35 // 护身
  36 // 传送
  37 // 探测
  38 // 隐身
  39 // 破麻
  40 // 防毒
  41 // 破复活
  42 // 破护身
  43 // 背包不掉
  44 // 装备不掉
  45 // 攻击加速(10点以下为减速度,10点以上为加速度,与武器一致)
  46 // 禁止交易
  47 // 禁止摆摊
  48 // 禁止出售物品

---------------------------------------
新增爆率文件引入用法,可以和以前的爆率混搭使用,支持多个文件被同时调用,方便编辑爆率
  比如在 白野猪.txt 写入如下内容:	// MonDropItems目录位于MonItems目录下
  #CALL [MonDropItems\药品爆率.txt]
  #CALL [MonDropItems\衣服爆率.txt]

---------------------------------------
支持爆率变量检测,兼容老格式,满足指定条件,物品才会爆出:
1/x 装备名称 数量 $检测变量 检测符(><=!?) 检测数 扣除“$检测变量”的数量(负数扣除,正数增加) 普通随机掉落是否必定扣除(0/1),设置1即使没有掉落也扣除,默认关闭
检测符: ?表示>=,^和`用于字符串检查
扣除: 和爆率没有关系,只关联检查条件,设置数值为0不进行扣除
例子:
1/1 强效太阳水 1 $GOLDCOUNT ? 0 100000		// 增加10万金币
1/3 强效太阳水 1 $GAMEGOLD ? 100 -100		// 元宝>=100时,有1/3几率计算掉落物品,否则不掉;元宝>=100时,扣除100元宝
1/8 某区物品   1 $SERVERNAME = XX传奇1区	// XX传奇1区 才有可能爆出
1/8 某物品     1 $USERID ^ head				// 账号以head开头 才有可能爆出
1/8 某物品     1 $USERNAME ` tail			// 角色名以tail结尾 才有可能爆出

支持变量:
  $SERVERNAME
  $SERVERIP
  $WEBSITE
  $BBSSITE
  $CLIENTDOWNLOAD
  $QQ
  $PHONE
  $BANKACCOUNT0
  $BANKACCOUNT1
  $BANKACCOUNT2
  $BANKACCOUNT3
  $BANKACCOUNT4
  $BANKACCOUNT5
  $BANKACCOUNT6
  $BANKACCOUNT7
  $BANKACCOUNT8
  $BANKACCOUNT9
  $GAMEGOLDNAME
  $GAMEPOINTNAME
  $USERCOUNT
  $MACRUNTIME // 服务器开启天数
  $SERVERRUNTIME // 引擎开启分钟数
  $DATETIME:  // 当前日期,格式:2019-11-12
  $CURRENTMAPDESC // 地图名
  $CURRENTMAP  // 地图文件名
  $CURRENTX
  $CURRENTY
  $GENDER  // 0,1
  $JOB  //0,1,2
  $ABILITYADDPOINT0..ABILITYADDPOINT6
  $ABILITYADDTIME0..ABILITYADDTIME6
  $USERNAME
  $USERID
  $CURITEMID
  $ATTINFO_SKILLID
  $ATTINFO_RACE
  $ATTINFO_ISHERO
  $ATTINFO_NAME
  $ATTINFO_FNAME
  $ATTINFO_MNAME
  $CURTITLENAME
  $MEMBRETYPE
  $MEMBRELEVEL
  $RANDOMNO
  $RELEVEL
  $GUILDHUMCOUNT
  $GUILDNAME
  $RANKNAME
  $LEVEL
  $COLLECTEXP
  $COLLECTIPEXP
  $HP
  $MAXHP
  $MP
  $MAXMP
  $AC
  $MAXAC
  $MAC
  $MAXMAC
  $DC
  $MAXDC
  $MC
  $MAXMC
  $SC
  $MAXSC
  $HIT
  $SPD
  $BONUSPOINT
  $BONUSABIL_AC
  $BONUSABIL_MAC
  $BONUSABIL_DC
  $BONUSABIL_MC
  $BONUSABIL_SC
  $BONUSABIL_HP
  $BONUSABIL_MP
  $BONUSABIL_HIT
  $BONUSABIL_SPD
  $BONUSABIL_X2
  $EXP
  $MAXEXP
  $PKPOINT
  $HW
  $MAXHW
  $BW
  $MAXBW
  $WW
  $MAXWW
  $HUNGER
  $CREDITPOINT  // 支持扣除操作
  $GOLDCOUNT // 支持扣除操作
  $GAMEGOLD // 支持扣除操作
  $NIMBUS // 支持扣除操作
  $GAMEPOINT // 支持扣除操作
  $GAMEDIAMOND // 支持扣除操作
  $GAMEGIRD // 支持扣除操作
  $INTS0..INTS30  // 支持扣除操作
  $LOGINLONG // 登录时长,分钟
  $DRESS	// 衣服名
  $WEAPON	// 武器名
  $RIGHTHAND
  $HELMET
  $NECKLACE
  $RING_R
  $RING_L
  $ARMRING_R
  $ARMRING_L
  $HELMETEX  // 非176版本
  $BUJUK  // 非176版本
  $BELT  // 非176版本
  $BOOTS  // 非176版本
  $CHARM  // 非176版本
  $DRUM  // 非176版本
  $HORSE  // 非176版本
  $FASHION  // 非176版本
  $HWID
  $YEAR
  $MONTH
  $DAY
  $HOUR
  $MINUTE
  $SECOND
  $MILLISECONDS
  $MONDROPRATE
  $IPADDR
  $IPLOCAL
  $GUILDBUILDPOINT
  $GUILDAURAEPOINT
  $GUILDSTABILITYPOINT
  $GUILDFLOURISHPOINT
  $STR(XX) // 支持扣除操作,其中的全局变量不要频繁使用,否则造成服务器卡顿
  $H.STR(XX) // 支持扣除操作,其中的全局变量不要频繁使用,否则造成服务器卡顿
  $HUMAN(XX) // 支持扣除操作,定义为内存操作将会自动保存,否则不自动保存;此变量不要高频使用,否则有效率问题
  $H.HUMAN(XX) // 支持扣除操作,定义为内存操作将会自动保存,否则不自动保存;此变量不要高频使用,否则有效率问题
  $GUILD(XX) // 支持扣除操作,定义为内存操作将会自动保存,否则不自动保存;此变量不要高频使用,否则有效率问题
  $GLOBAL(XX) // 支持扣除操作,定义为内存操作将会自动保存,否则不自动保存;此变量不要高频使用,否则有效率问题
  $PARAM(0..7)



攻击触发:
---------------------------------------
!setup.txt AttackTrigger=0	// 攻击触发总开关,默认0关闭,1开启触发QF的[@Attack]
Envir\MonAttackTrigger.txt	// 可以被攻击触发的怪物名称列表,每行一个

// 下列为[@Attack][@UnderAttack]攻击触发字段的【专属】变量,不能用于其他字段,否则引擎会发生崩溃
$TARINFO_RACE		// 目标Race
$TARINFO_ISHERO		// 目标是否英雄 {'0', '1'}
$TARINFO_NAME		// 目标名称
$TARINFO_FNAME		// 目标全名
$ATTINFO_SKILLID	// 攻击使用技能ID
$ATTINFO_RACE		// 攻击者Race
$ATTINFO_ISHERO		// 攻击者是否英雄
$ATTINFO_NAME		// 攻击者名称
$ATTINFO_FNAME		// 攻击者全名

// 目标变量
$T.CURRENTMAPDESC
$T.CURRENTMAP
$T.CURRENTX
$T.CURRENTY
$T.USERNAME
$T.MONKILLER
$T.KILLER
$T.LEVEL
$T.HP
$T.MAXHP
$T.MP
$T.MAXMP
$T.AC
$T.MAXAC
$T.MAC
$T.MAXMAC
$T.DC
$T.MAXDC
$T.MC
$T.MAXMC
$T.SC
$T.MAXSC
$T.HIT
$T.SPD

// QF例子
[@Attack]				// 人或随从攻击列表指定怪物,会触发
#IF
COMPVAL <$TARINFO_FNAME> = 蜈蚣
COMPVAL <$T.HP> > 50
#ACT
T.HUMANHP - 50
SENDMSG 7 目标【<$TARINFO_NAME>】血量<$T.HP>

#IF
COMPVAL <$ATTINFO_RACE> ! 1		// Race=1 是玩家,这里就是非玩家(即随从)
#ACT
SENDMSG 7 你的随从<$ATTINFO_NAME>正在攻击<$TARINFO_NAME>


[@UnderAttack]						// 被人或随从或列表指定怪物攻击,会触发
#IF
COMPVAL <$ATTINFO_FNAME> = 蜈蚣				// 蜈蚣打随从或自己
#ACT
HUMANHP - 50						// 主人扣血

#IF
COMPVAL <$ATTINFO_MNAME> ! ""				// 攻击者主人名称不为空
#ACT
SENDMSG 7 【<$ATTINFO_MNAME>】的随从<$ATTINFO_NAME>正在攻击你
#ELSEIF
COMPVAL <$TARINFO_RACE> ! 1					// 自己的随从
#ACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你的随从【<$TARINFO_NAME>】
#ELSEACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你



---------------------------------------
主界面自定义按钮,最多20个,参考附件,可利用登陆自动更新配置
客户端data目录下增加配置文件:MainWidgetCfg.ini		// 主界面自定义按钮,最多20个,参考附件,可利用登陆自动更新配置
MainWidgetCfg.ini的wmlib=Lui时,会调用Lui.pkg的图片,图片名为lui.pkg内的文件名,非lui库的图片索引大于0才生效
MainWidgetCfg.ini LoginShowChildButton=0/1 字段,登陆是否显示各个子按钮

点击按钮会根据按钮序号执行QChatMission-0.txt脚本对应的[@MainBtnFunc_0至20]字段,[@MainBtnFunc_20]是显示开关的触发
相应的NPC控制脚本命令如下:
MAIN_FUNC_BTN_SHOW 序号 0/1				// 显示或隐藏
MAIN_FUNC_BTN_FLASH 序号 0/1				// 按钮是否闪烁
MAIN_FUNC_BTN_POS 序号 X Y				// 调整按钮位置,当X或Y数值在5000~15000是居中对齐,偏移量=X-10000;当X或Y数值在15000~25000是右对齐,右边偏移量=X-20000
!Setup.txt OpenMainFuncBtns=0/1				// 开启或关闭主界面功能按钮功能,默认关闭






2019/9/29
---------------------------------------------------------------------------
!setup.txt参数,MagicHitRateCompensate	// 对奔跑的目标魔法命中率调节,默认0,数字越大命中越高,设置3基本可以达到100%命中;可以设置负数来减少命中率,-1大概相当于复古参数
修正偶尔出现被攻击21E问题
英雄守护模式:HeroGuardMode=1		// 默认1可以飞到目标点,0则是飞到主人身边再跑往目标点
修正21E版DBServer第一个角色读取不到问题






2019/9/16		!引擎和DBS需要配套
---------------------------------------------------------------------------
优化DBS,避免因为一些删除操作造成数据混乱
INI_RENAME_SECTION	文件 节名	新节名	// 重命名Ini的节点名
StringsReplace 文件名 原字符 新字符 1 HardDisk	// 将文本中的原字符替换为新字符;其中的1表示忽略大小写,0不忽略大小写;
					// HardDisk表示直接使用文本读写模式(强烈建议内存模式操作,直接读写文本严重降低引擎性能)

RenameFile 源文件名 新文件名			// 重命名文件名,支持内存中的文件操作,例如:
-----------------------------------
mov S1 <$PARAMSTR(1)>
inc S1 ".txt"
mov S2 <$PARAMSTR(2)>
inc S2 ".txt"
RenameFile <$STR(S1)> <$STR(S2)>







2019/9/07
---------------------------------------------------------------------------
使用聚灵珠触发QF的[@OnUseExpBall] [@OnHeroUseExpBall] <$PARAM(1)>:物品名 <$PARAM(2)>:价格 <$PARAM(3)>:价格类型(0-4) 
购买摆摊物品触发QF的[@OnBuyItemFromStall] <$PARAM(1)>:物品名 <$PARAM(2)>:价格 <$PARAM(3)>:价格类型(金币/元宝) <$PARAM(4)>:卖家名






2019/9/06	!RunGate/DBS/M2/客户端 需要配套使用
---------------------------------------------------------------------------
修正一个怪物攻击力计算不准确问题
修正部分几率计算溢出问题
修复极品属性多出1点bug,对此项要求严格的请重新调节极品属性的最高点数
普通属性支持21亿,RunGate/DBS/M2/客户端 需要配套使用(测试)






2019/9/04
---------------------------------------------------------------------------
!修正丢金币方式来刷金币的漏洞
现在英雄守护可以直接飞到目标点
设置SearchTargetWhenIdle=1自动打怪空闲时随机搜寻,否则停留原地等待刷怪
设置SkillMedusaEyeEffectPlayer=0【美杜莎之瞳】不对玩家起作用,默认设置=1可以起作用;SkillMedusaEyeUseInterval=45技能间隔时间(秒)
修复商店价格问题






2019/9/01
---------------------------------------------------------------------------
!封交易重叠物品的漏洞
修正战士连击导致对方持续不可移动状态(测试)
优化地图对象转移处理流程
优化地图单元处理流程,少占用点内存
普通药品回血速率规范化
注意:没有鉴定次数的物品不会有实际属性






2019/8/12
---------------------------------------------------------------------------
修正GM命令失效:@DelDenyIPLogon
开放OfflinePlayEx(测试版)
隐身技能可能出现时间计算错误
优化部分代码
添加ProcessHurryMsg开关,默认开启能优化消息延迟,提高PK体验,但能耗会稍微增加






2019/7/30
---------------------------------------------------------------------------
尝试修复人物变黑问题
增加地图参数:NoHeroGuard,禁止英雄守护






2019/7/28
---------------------------------------------------------------------------
提高大/小火球,雷电术,灵魂火符等魔法对奔跑对象的击中率
提高[道战合击]道术对伤害加成的比例,输出和之前版本比较有差异,请自定调节威力比例
修改[法战合击]的输出计算,输出和之前版本比较有差异,请自定调节威力比例
尝试修复status混乱问题






2019/7/21
---------------------------------------------------------------------------
修正受攻击触发bug

提示:如果要让战士技能(不包含普攻)发挥最高幸运攻击,编辑magic.db的穿透属性,阅读以往穿透的相关更新,
刺杀默认应该是Penetrate=3 PenetrateRate=100,其他技能自行发挥设置





2019/7/19
---------------------------------------------------------------------------
修正拾取物品触发获得的makeIndex为0的bug
修正中毒状态混乱bug

攻击触发:
---------------------------------------------------------------------------
!setup.txt AttackTrigger=0	// 攻击触发总开关,默认0关闭,1开启触发QF的[@Attack]
Envir\MonAttackTrigger.txt	// 可以被攻击触发的怪物名称列表,每行一个

// 攻击触发专属变量
$TARINFO_RACE		// 目标Race
$TARINFO_ISHERO		// 目标是否英雄 {'0', '1'}
$TARINFO_NAME		// 目标名称
$TARINFO_FNAME		// 目标全名
$ATTINFO_SKILLID	// 攻击使用技能ID
$ATTINFO_RACE		// 攻击者Race
$ATTINFO_ISHERO		// 攻击者是否英雄
$ATTINFO_NAME		// 攻击者名称
$ATTINFO_FNAME		// 攻击者全名

// 目标变量
$T.CURRENTMAPDESC
$T.CURRENTMAP
$T.CURRENTX
$T.CURRENTY
$T.USERNAME
$T.MONKILLER
$T.KILLER
$T.LEVEL
$T.HP
$T.MAXHP
$T.MP
$T.MAXMP
$T.AC
$T.MAXAC
$T.MAC
$T.MAXMAC
$T.DC
$T.MAXDC
$T.MC
$T.MAXMC
$T.SC
$T.MAXSC
$T.HIT
$T.SPD

// QF例子
[@Attack]				// 人或随从攻击列表指定怪物,会触发
#IF
COMPVAL <$TARINFO_FNAME> = 蜈蚣
COMPVAL <$T.HP> > 50
#ACT
T.HUMANHP - 50
SENDMSG 7 目标【<$TARINFO_NAME>】血量<$T.HP>

#IF
COMPVAL <$ATTINFO_RACE> ! 1		// Race=1 是玩家,这里就是非玩家(即随从)
#ACT
SENDMSG 7 你的随从<$ATTINFO_NAME>正在攻击<$TARINFO_NAME>



[@UnderAttack]						// 被人或随从或列表指定怪物攻击,会触发
#IF
COMPVAL <$ATTINFO_FNAME> = 蜈蚣				// 蜈蚣打随从或自己
#ACT
HUMANHP - 50						// 主人扣血

#IF
COMPVAL <$ATTINFO_MNAME> ! ""				// 攻击者主人名称不为空
#ACT
SENDMSG 7 【<$ATTINFO_MNAME>】的随从<$ATTINFO_NAME>正在攻击你
#ELSEIF
COMPVAL <$TARINFO_RACE> ! 1					// 自己的随从
#ACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你的随从【<$TARINFO_NAME>】
#ELSEACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你






2019/7/15
---------------------------------------------------------------------------
优化游戏PK体验
修正仓库存取重叠物品严重漏洞!及时更新至此新版本。
修正上个版本怪物会有几率变人形的bug
调整忽视防御优先于技能穿透的计算(注:忽视防御属性不作用于魔法盾的抵御,要忽视魔法盾请在magic.db配置技能的穿透属性)

增加地图参数:SensitiveCreature,作用:(已废弃)
一旦人物/宠物进入怪物视觉范围,怪物马上有反应,表现上怪物更为灵活,例如随机到怪物旁边,怪物不会再像以前一样反应迟钝
在开启了SensitiveCreature参数的地图上,道士的隐身技能更能凸显作用。

合区工具日志查询功能增加【沙城收入/沙城提取/升级武器取回】的日志查询,修正【武器升级成功/失败】查询不到bug






2019/6/13
---------------------------------------------------------------------------
添加两步验证Key的获取,引擎 + LoginSvr配套,应用例子:
--------------------------------------------------
[@main]
<获取两步验证绑定状态/@GetTotpKey>\ \<关闭/@exit>

[@GetTotpKey]
#act
GetTotpKey	// 请求状态,成功后将回调[@OnGetTotpKey]标签

[@OnGetTotpKey]
#act
GetStrLenght <$TOTPKEY> M0
goto ~OnGetTotpKey

[~OnGetTotpKey]
#if
equal M0 16
#say
你的账号已经绑定两步验证, <解除绑定/@@totp>\ \<关闭/@exit>
#elsesay
你的账号还没有绑定两步验证, <进行绑定/@@totp>\ \<关闭/@exit>
--------------------------------------------------
死亡取消交易
离线数据修改记录日志(注:即使玩家不存在也记录)
小优化






2019/4/28
---------------------------------------------------------------------------
游戏网关添加喊话过滤:ChatCmds.txt,在此列表的命令,喊话内容会进行脏话检测过滤,每行一个命令,默认只有一条:“@传 ”(不包含双引号,注意后面有空格)
Abusive.txt 格式修改为:过滤字符 规则(0全部替换 1命中字符替换为* 2踢下线),例如:操 1;每行一条规则
引擎自定义命令参数也采用GuildRankNameFilter.txt中的字符进行过滤

修复仓库存储【重叠物品】的严重漏洞

增加拾取物品规则列表PickItemRule.txt,格式:物品名称 1,物品为队伍打怪产出,只有队长可以拾取

LoginSvr完善两步验证

LoginGate	// 用 登陆器配置器.exe 生成新的LoginGate(注:登录器和客户端没有更新)
同一IP在一定时间内,连续密码错误,累计到指定数量会加入临时封IP列表,参数可以在[安全过滤-新建账号过滤]面板调节

LoginServer
两步验证版本,密码错误累计禁止登录的时间大幅度缩减

M2Server
增加参数
SaveDataTimeoutMs=10000	// 保存数据超时(毫秒),超时后会中断保存数据循环,给加载数据时间片。注:M2压力大时人物登陆会黑屏,设置10000即等10秒左右会进游戏,较短的设置值,黑屏时间更短,但不能太短,否则保存数据效率变低,默认10000即可
DBSvrConnections=16	// M2和DBServer的连接数,默认16,较多的连接对数据保存/加载有效率加成,一般设置8-64之间,建议16-32。(假如设置为32,相比未扩展此参数之前,效率提升大概有15倍)
KeepSaveDataCache=1	// 人物保存数据缓存是否保留,默认1,不保留可能会引起回档,保留则引擎的保存列队有可能出现比较多的情况(关系不大),请保持默认值,除非用于测试。
以上三个参数,一般只调节DBSvrConnections即可,其他保持默认。

DBServer
主界面显示更多的连接信息




2018/8/15
---------------------------------------------------------------------------
聚灵珠增加使用等级限制,设置db的needLevel
修正loginsvr写日志奔溃bug
$CURTITLENAME 当前使用称号

!setup.txt ShowQueryStateInfoTips=1	// 别人查看自己装备信息时,是否提示

[@PickupItem] [@DropItem] 支持第七参数,参数值为物品ID
增加[@HeroDie] 英雄死亡,<$PARAM(0)>:主人角色名 <$PARAM(1)>:英雄角色名 <$PARAM(2)>:地图名 <$PARAM(3)>:X坐标 <$PARAM(4)>:Y坐标
记录 金刚石/灵符 的 获取/消耗 日志,合区工具支持查询
NPC命令:TakeOff 位置	// 脱下装备,连击版本位置:0..16,176/四格位置:0..13,TakeOff All 全身脱下
HUMANHP 减血有飘血效果
引擎设置需要蜡烛时,内挂禁止免蜡开关(基本没什么用)
客户端窗口层叠关系优化
重叠物品操作优化
黑夜模式下,技能亮光补全

--------------------------------------
PLAYEFFECT WIL名称 X Y 起始图片 帧数 间隔 循环次数 声音 声音循环(0/1) 对象(""/All/Guild/地图名)	
// X=-1则跟随人物坐标播放,否则固定坐标;
// 对象:空字符("")自己和周围的人,all在线所有人 guild行会在线的人 地图给某指定地图发送
// 执行效果并触发当前脚本的[@OnPlayEffect]
例:
<播放特效/@PlayEffect>\
[@PlayEffect]
#act
PLAYEFFECT Prguse2 -1 -1 110 15 80 1 Wav\powerup.wav 0 ""
[@OnPlayEffect]
#act
SENDMSG 3 播放了一个动画效果

--------------------------------------
新加QF触发标签:
[@BuildGuild]		// 创建行会,<$PARAM(0)>行会名
[@JoinGuild]		// 加入行会,<$PARAM(0)>行会名
[@LeaveGuild]		// 退出行会,<$PARAM(0)>行会名
[@KickOutOfGuild]	// 踢出行会,<$PARAM(0)>行会名
[@DismissGuild]		// 解散行会,<$PARAM(0)>行会名

--------------------------------------
技能基础面板增加:技能升级威力附加万分比参数,比值越高,技能级别差体现的攻击力差别越大,目的是为了改善变态版本(自身高攻击力)各职业的技能
升级后攻击力增加不明显的问题,默认为0,不附加威力,请根据版本自行测试调节。

--------------------------------------
防盗号加强:去掉二级密码,换为两步验证,需要【引擎/LoginSvr/客户端】配套。
同时修改MD5密码版的LoginSvr支持合区,不兼容之前的MD5版本数据;明文密码版本的LoginSvr数据兼容。
#SAY
<绑定或解绑两步验证/@@totp>\\

修改LoginSvr对密码错误的临时冻结更加严格;密码/验证码错误次数越多,临时冻结越长,基本呈指数级增长。

--------------------------------------
合区工具增加清理账号二级密码功能
两步验证是二级密码的升级版,不兼容原来的二次密码数据,
想要使用新的两步验证功能,请先清理原先的二级密码,再让用户到游戏里的NPC处自行绑定两步验证。




2018/7/01
---------------------------------------------------------------------------
英雄锁定范围检测更严格
客户端显示武器强度,调节武器属性位置7可以获得强度
修改SETRANDOMNO:可以指定范围参数		// SETRANDOMNO 1000000
NPC检测命令:COMPVAL 数值1 >/</=/! 数值2,比较数值1和数值2		//例如:COMPVAL <$USERNAME> = 名称,COMPVAL $STR(N1) > 50
增加 #ELSEIF #ELSEIFSAY #ELSEIFACT(或#ACT)		// 成对编写,例:
------------------------------------
[@test]
#ACT
SETRANDOMNO 1000000		// 0~999999

#IF
COMPVAL <$RANDOMNO> < 100
#ACT
SENDMSG 3 特等奖<$RANDOMNO>
#ELSEIF
COMPVAL <$RANDOMNO> < 1000
#ACT
SENDMSG 5 一等奖<$RANDOMNO>
#ELSEIF
COMPVAL <$RANDOMNO> < 2000
#ACT
SENDMSG 6 二等奖<$RANDOMNO>
#ELSEIF
COMPVAL <$RANDOMNO> < 4000
#ACT
SENDMSG 7 三等奖<$RANDOMNO>
#ELSEIF
COMPVAL <$RANDOMNO> < 8000
#ACT
SENDMSG 7 鼓励奖<$RANDOMNO>
#ELSEACT
SENDMSG 7 谢谢参与<$RANDOMNO>





2018/6/15	引擎和客户端需要配套更新
---------------------------------------------------------------------------
修复多引擎负载过图有几率造成随从丢失bug
修正客户端频繁向微端服务器发送请求bug
修正聚灵珠摆摊价格显示错误bug
时间使用类的物品计时更准确,stdmode=2 shape=18类物品在客户端可显示剩余时间
修复多引擎负载过图后法师召唤下属属性不对应bug
修复多引擎负载过图后蓝量异常bug
修复多引擎负载有概率小退黑屏bug (复活地图所属的引擎与死亡地图所属引擎不同)
修复多引擎负载出生点新角色登陆黑屏bug
优化日志处理
可以重新加载动态创建的NPC(之前有bug才去掉?)
NPC命令:GOHOME			// 回安全区
NPC条件命令:FINDDELETELINE		// 检测文本行并删除保存
---------------------------------------
#IF
FINDDELETELINE 文本路径 <$USERID>	// 充值提取专用,避免文本写入冲突造成刷元宝bug
#ACT
GAMEGOLD + XX
#ELSESAY
操作失败,稍等片刻再操作






2018/5/13
---------------------------------------------------------------------------
客户端修正使用部分远程攻击类新怪物引起出错bug
客户端支持24/32位的wil/wzl
ChangeExp/ChangeIPExp 第三参数不为空时,聚灵珠不会聚集经验
英雄支持必定掉落的物品
修正授予英雄称号不激活称号bug
拾取HintItemList.txt中的物品触发QF的[@PickupItem] <$PARAM(1)>:物品名 <$PARAM(2)>:Looks <$PARAM(3)>:角色名 <$PARAM(4)>:地图名 <$PARAM(5)>:X坐标 <$PARAM(6)>:Y坐标 <$PARAM(7)>:物品ID <$PARAM(8)>:种族ID(玩家1,英雄60) <$PARAM(9)>:是否装备(0/1)
丢弃HintItemList.txt中的物品触发QF的[@DropItem] <$PARAM(1)>:物品名 <$PARAM(2)>:Looks <$PARAM(3)>:角色名 <$PARAM(4)>:地图名 <$PARAM(5)>:X坐标 <$PARAM(6)>:Y坐标 <$PARAM(7)>:物品ID <$PARAM(8)>:种族ID(玩家1,英雄60) <$PARAM(9)>:是否装备(0/1)
修正上个版本怪物移动/攻击速度异常
QM增加[@OnInit],执行时机优先于[@Login],用于初始化人物私有变量(注:[@Login]初始化变量时机不够早,会造成一些的脚本变量应用报错)






2018/4/5
---------------------------------------------------------------------------
聚灵珠金币/元宝消耗记录日志
客户端修正鼠标乱移动bug
NPC检测命令增加取反支持: !CHECKLEVELEX > 10  // 检测等级是否小于等于10






2018/2/4	!需要修改脚本
---------------------------------------------------------------------------
自定义变量Var相关操作去掉HardDisk操作,统一为在声明变量是确定是否为实时硬盘读写,例如:
[@login]
VAR INTEGER HUMAN player_level "" hardDisk				// "" 表示第四参数为空参数
LOADVAR GUILD player_level ..\QUESTDIARY\UserData\PlayerData.txt

[@dynvar_human_level]
#act
CALCVAR HUMAN player_level = <$LEVEL>
SAVEVAR HUMAN player_level ..\QuestDiary\UserData\PlayerData.txt force	//force 耗时操作的实时保存,操作频繁游戏卡顿

对于以上例子,如果PlayerData.txt已经使用hardDisk参数操作,所有其他读写于PlayerData.txt的变量都要统一为hardDisk
注:hardDisk 是非常耗时的操作,非必要的情况下,不要使用,否则只会造成游戏卡顿

修正部分会使用技能的怪物追击目标逻辑,完善一些新怪。
开箱子得到存在于HintItemList.txt的物品,触发:QFunction的[@OpenTreasureChest],<$PARAM(1)>:物品名 <$PARAM(2)>:数量 <$PARAM(3)>:Looks






2018/1/29
---------------------------------------------------------------------------
修正部分Win10版本客户端Alt+Enter切换窗口/全屏模式bug
商铺购买,并列入HintItemList.txt的物品,触发QFunction的[@shopping],<$PARAM(1)>:物品名 <$PARAM(2)>:价格 <$PARAM(3)>:Looks
客户端兼容win10秋季创意版(属于windows10FCU的bug)
修正174 129 4116 怪物普通攻击无效bug







2018/01/10
---------------------------------------------------------------------------
修正一个严重bug,可能导致出现变态装备
去掉实验性封包优化模块,略减少内存占用







2017/12/28	测试版引擎,测试用
---------------------------------------------------------------------------
优化封包接收/发送流程,测试:一次刷12000只怪(怪会暴出物品),火墙烧,对比优化前后烧完怪的时间,还有卡顿对比情况
[@HeroTakeOn+位置] [@HeroTakeOff+位置] 					// 英雄穿戴/取下装备触发,参考人物的穿戴触发
IsNearby H/人物名							// 检测指定角色名玩家/怪物等是否在附近,H指自己的英雄
修正内存池申请bug
修正NPC商店物品处理可能导致引擎崩溃bug







2017/12/10
---------------------------------------------------------------------------
客户端新功能修正完善
客户端消息处理优化
客户端渲染优化
修正完善1208增加的新功能







2017/12/08
---------------------------------------------------------------------------
增加NPC命令:
KillMonGetFullExp +/-/= 秒数						// 高等级杀怪获取全部经验时间(秒),存库
REFITEMSHAPE 位置 数值							// 引用某同类型物品外观,位置:0衣服 1武器,数值参考stditems.db中的物品idx,存库,(连击合击版本才支持)

修正游戏网关可能丢包,造成卡包,或其登陆黑屏问题
修正游戏网关CD版本 下发较大的包可能出现丢失BUG,比如卡包
引擎修正完善内存池的应用
MonSpAbilList.txt 第13项,破盾修改为几率(0~100)

PIC=功能扩展2:								// 配置后面增加两项:绝对X,绝对Y(不参与自动换行计算)
	<PIC=items,55,1,0,0,0,8,11,22,100 LABEL=@execlab HINT=裁决>	//items=wil文件名,索引,图片数,循环,透明,偏移X,偏移Y,绝对X,绝对Y(不参与自动换行计算),帧间隔(毫秒)

NPC文字信息配置新用法:
----------------------------------------
文字{X=2,Y=3,C=clBlue,T=tips,AX=11,AY=22}				// X,Y偏移,C颜色,T提示,AX绝对X,{}内的系列配置会覆盖掉color=,hint=等的参数
									// AX/AY为绝对值(不参与自动换行计算,最终坐标Y=Y+AY)
颜色用法可以这样:
  color=#321321 或 color=$321321,{c=#321321} 或 {c=$321321} 可以用吸色器获取各种颜色的数值
例如:
  <color=clgreen 文字{X=11,Y=22,AX=11,AX=22} HINT=tips>   <PIC=items,55,1,0,0,-40,8,0 LABEL=@execlab HINT=裁决>裁决图片{c=cllime}</>   <脚本标签{c=cllime,T=tips}/@execlab> \ \
  “<color=clgreen 文字{X=11,Y=22} HINT=tips>” 等同于 “文字{X=11,Y=22,c=clgreen,T=tips}”
----------------------------------------

SETMERCHANTDLGIMGNAME 图片名 索引					// 索引不为0,图片名为有效素材文件名,会调用素材指定索引的图片

增加NPC命令:
----------------------------------------
NPC_DLG_OPTIONS 地图 NPC名字 参数 排列 对话框图片名 索引			// 可以在登陆脚本定义,只需要定义一次,除非参数改变

地图:NPC所在地图号(土城就是3),地图为""时,会根据NPC名字搜索
参数:1隐藏拉条,2对话框可移动,4闪烁,是复合参数,例如:1 + 2 = 3 表示可移动并隐藏拉条
排列:0或1默认,2居中,3右上,4左下,5右下
对话框图片名:空默认,索引不填写或等于0,调用lui.pkg图片,索引有效,调用素材文件的指定索引图片(素材文件名不要写扩展名)

一些特殊NPC名字和所属地图:QFunction/0,QMapEvent/0,QManage/0,RobotManage/0,QChatMission/0

建议:
不要再使用SETMERCHANTDLGIMGNAME,而使用NPC_DLG_OPTIONS代替,能有更好的体验

例子:
QManage.txt 中的
[@login]
#act
NPC_DLG_OPTIONS 0149 盟重张家布衣 7 2 MerchantDlg.png
NPC_DLG_OPTIONS 0149 盟重手套店 3 3 ui1 2731
NPC_DLG_OPTIONS 0149 盟重老张头盔店 3 4 ui1 2924
NPC_DLG_OPTIONS 0 QFunction 3 4 ui1 3020
----------------------------------------






2017/11/27
---------------------------------------------------------------------------
处理引擎和网关因通讯丢包引起个别玩家登陆黑屏(测试)






2017/11/16
---------------------------------------------------------------------------
修正#IF(X)多条件判断
优化性能,负载能力应该提升不少






2017/9/19
---------------------------------------------------------------------------
修正NPC获取
修正挖肉卡顿
修正完善内存池调用






2017/9/9
---------------------------------------------------------------------------
修正掉线重新召唤的随从行走速度异常
优化NPC获取
修正技能等级变化没有刷新技能套装威力
修正游戏网关停止服务发生崩溃,优化性能
引擎加载脚本检测到存在重复标签时增加提示(重复标签只会执行其中一条,是错误写法)






2017/8/21
---------------------------------------------------------------------------
以下脚本提供是否实时读写硬盘操作的参数,默认不写InTime参数,都是内存操作方式,
除非需要外部操作特定的文本去实现某些功能,才依据情况去添加InTime参数。
为什么要更新这个功能,因为实时硬盘操作文本数据效率特别低;特别是文本到一定大小以后,很容易造成游戏卡顿。
注:UnMarry.txt 为内存操作;之前针对以下命令的更新被此次更新覆盖
    !setup.txt UseFastTextFile=0,可以恢复到全硬盘读写模式(旧模式),但是不建议这样做。
    只需要对特性的文件做HardDisk操作就可以,这样能提升游戏的性能。

//第2参数为:HardDisk,实时读写硬盘数据,否则在内存操作
ADDNAMELIST
ADDGUILDLIST
ADDACCOUNTLIST
ADDIPLIST
DELNAMELIST
DELGUILDLIST
DELACCOUNTLIST
DELIPLIST
CHECKNAMELIST
CHECKACCOUNTLIST
CHECKIPLIST
CHECKGUILDLIST
AddNameDateList
DelNameDateList
ClearNameList
CheckAccountIPList
CheckNameIPList
CheckCodeList
AddUseDateList
DelUseDateList

//第3参数为:HardDisk,实时读写硬盘数据,否则在内存操作
CHECKSTRINGLIST		
ReadRandomLine
ReadRandomStr
DelCodeList
WriteLineList
DeleteLineList

//第4参数为:HardDisk,实时读写硬盘数据,否则在内存操作
ReadLine
DeleteLine
WriteLine
InsertLine
CheckNameListPostion

//第6参数为:HardDisk,实时读写硬盘数据,否则在内存操作
CheckUserDateType


//第7参数为:HardDisk,实时读写硬盘数据,否则在内存操作
CheckNameDateList






2017/7/01	此次更新引擎+网关需要配套,否则会造成下发流量增加
---------------------------------------------------------------------------
修正2017/6/20版出现随机卡顿bug
游戏网关CD版优化封包下发
游戏网关增加 “@传 文字”,可以脏话过滤
优化NPC命令:MOVETOCELL X Y NPC名称	//X和Y等于0,取人物当前坐标,如果有“NPC名称”,此命令功能相当于点击人物可视范围内的指定NPC。
增加单独点击NPC命令:CLICKNPC NPC名称	//引擎客户端都需要更新
客户端修正连击补丁失效问题(类似:~hum_she75.wil 的文件)
ClearNameList 第二参数不为空,则清理内存中的文本数据。默认为空,清理硬盘上的文本数据。

以下更新适用于外部程序修改硬盘文件数据
----------------------------------------
LoadVar		第4参数为:InTime,实时读写硬盘数据
SaveVar		第4参数为:InTime,实时读写硬盘数据
		第4参数为:Force,将实时保存内存数据至硬盘;即使不使用force参数,引擎也会每间隔1分钟自动存盘
CalcVar		第5参数为有效的文件名时,将保存到该文件内存中,并且第6参数为:InTime时,还将实时读写硬盘数据

之前的更新:magic.db的Power/MaxPower/DefPower/DefMaxPower魔法输出计算修改为受个人的幸运值影响,
现为以上更新增加开关:!Setup.txt增加开关(默认关闭):CalcDBPowerWithLuck=0,开启则攻击输出受个人的幸运值影响
物理攻击现在可以使用Power/MaxPower调节威力,一般情况下,此2项的值都是0

优化游戏网关
穿戴龙神装备现在需要激活龙神状态才会增加攻击输出(原来不需要激活龙神状态也能获得输出增益)






2017/6/20	此次更新引擎+网关需要配套,否则会造成下发流量增加
---------------------------------------------------------------------------
移动时撞到人或怪物反弹后,下次移动不列入加速检测(引擎+游戏网关配套)
优化游戏网关,修正网关启动服务时立即有连接接入时崩溃bug






2017/5/2
---------------------------------------------------------------------------
优化微端功能,提升效率,需要同时更新登录器、客户端和微端服务器
修正客户端连击扩展补丁读取bug
<$USERID>  用户账号
优化攻击模式检测
优化日志的管理
注意:
--------------------------------------
文本操作NPC命令路径统一为NPC当前路径,
写法:	addLineList QuestDiary\rolelist.txt <$USERNAME> 需要修改为:
	addLineList ..\QuestDiary\rolelist.txt <$USERNAME>	// “..\”表示上一目录
--------------------------------------
修正NPC命令参数为变量时,可能获取错误bug
增强引擎IOPS能力
修正游戏网关停止服务时,可能出现崩溃的bug
Ini系列NPC操作命令增加自动保存功能


--------------------------------------
<$CURITEMID>						//Give,GiveEx,GiveOK,GM制造物品时,可以使用<$CURITEMID>得到当前物品的ID
GETDLGITEMID P/G/D/M/H				//获取物品ID值到变量P/G/D/M/H (P0~9,其他0~99)
CHECKDLGITEMID 123456				//检测物品框力的物品ID是否等于123456

例:
Give 物品名
INI_WRITE_INTEGER 文件名 <$USERNAME> 某任务_物品名 <$CURITEMID> 	//记录物品ID,下次需要校验时,可以用 INI_READ_INTEGER 读取
sendMsg 1 <$CURITEMID>


INI_READ_INTEGER 文件名 <$USERNAME> 某任务_物品名 P0
#if
CHECKDLGITEMID P0
--------------------------------------






2017/4/12
---------------------------------------------------------------------------
mysql版本引擎增加金币交易行,参数设置-游戏参数二可以调节相关参数
优化mysql版本引擎,dbserver的数据存取效率
优化LoginGate,SelGate,LoginSvr_mysql版,mysql表结构改变!!!
--------------------------------------
优化NPC文本操作命令,文本会载入到内存中操作,直接修改文本操作现在不会生效。
恢复旧模式:!setup.txt UseFastTextFile=0,不建议
NPC文本操作命令非常消耗资源,特别时文本较大、操作频繁或脚本不合理时,服务器会严重卡顿。
!!! 强烈建议使用UseFastTextFile=1下的模式,如果你有大量的这类文本操作,可能会导致引擎内存不足,那么请设置UseFastTextFile=0
!!! 合理设计好版本,滥用文本操作容易导致游戏卡顿

AddAccountList,AddNameList,AddIPList,AddGuildList 
DelAccountList,DelNameList,DelIPList,DelGuildList 
CheckAccountList,CheckNameList,CheckIPList,CheckGuildList 等...保持不变,兼容充值系统(文本稍微大点会严重影响效率,造成游戏卡顿)
--------------------------------------

---------------------------------------
增加个人打怪爆率控制变量:	
	数值操作NPC命令:MonDropRate +/-/= 数值,默认值100,越小打怪爆率越低,设置为0将不爆物品,挖取和带有“;GETITEMFLAG”的爆率控制不受影响
	条件检测NPC命令:CheckMonDropRate >/</= 数值
	对应显示变量:<$MONDROPRATE>
---------------------------------------
称号计时间隔减少,更准确
优化游戏网关






2016/8/28
---------------------------------------------------------------------------
修正引擎手动关闭或开启网关服务报错
完善合区工具对文本的分析添加
道道合击伤害计算不再受地钉攻击调节影响
治愈术:目标无效时,自动治愈自己
流星火雨增加范围调节
完善心灵召唤,并修改为达到4级下属才会飞到目标进行攻击
客户端暂时去掉小退/大退保护
客户端修正集体隐身术释放效果
客户端修正黄泉教主效果
客户端ObjectsX.wzl支持到60
增加新怪物...参考monster.txt


GameCenter可以配置CastleFile和DBServer的MapFile
英雄守护距离限制为15格
修正重新加载物品提示列表 无效问题
登录脚本支持ISCASTLEMASTER
行会联盟增加刷新
道力水和无极真气修改为独立计算
修正淬炼物品叠加材料消失问题
增加地图参数:NOSHOPPING		//禁止商铺购物和赠送
		NORECOVERINGSTONE	//使用魔血石失效

优化M2使登陆游戏过程更顺畅
参数设置-环境设置,物品怪物数据库倍率 增加物品+HP/MP 倍数调节
小bug修正

英雄自由加点准确和敏捷现在有效
英雄参数调节面板增加开关:允许[英雄锁定目标]后瞬移至目标身边,默认关闭了;英雄守护需要英雄在视野外才可以瞬移
修复挖怪物尸体获得物品可能导致引擎无响应BUG
增加race=211怪物,不攻击人物,不受攻击,可以攻击怪物


装备,套装经验吸收百分比属性 生效
setup.txt 增加参数:TaosNomAtkDiffLvVal=0,非0时,道士英雄比怪物多X级时,只使用普通攻击,精神力战法开关可以控制
QF加入组队触发:[@JoinGroup] 离开组队触发:[@LeaveGroup]
增加地图参数:HERONOATTACKHUMAN				//英雄不攻击人物,包含人物的随从
MonSpAbilList.txt 保留1修改为:攻击特点,值为1时不攻击人物及其随从
飘血能超过65535
增加NPC命令:
	#IF(3)						//扩展,如果众多条件中只要满足3条件,即可执行#ACT,#SAY...等
	StringReplace S1 $STR(S2) $STR(S3)		//替换字符串,S1源字符串,搜索S2->替换为S3
	CHECKCONTAINSSTR 字符串 符			//检测“字符串”是否包含“符”,大小写敏感
	CHECKCONTAINSTEXT 字符串 符			//检测“字符串”是否包含“符”,不区分大小写
	CHECKRANGEPLAYERCOUNT 地图 X Y 范围 >/</= 数量 包含死亡(0不包含 1包含)	//检测指定地图 指定范围内 玩家数量
	GOTO LABEL 模式(1,2,3,4) 参数2			//扩展
		模式=1 小组成员触发
		模式=2 行会成员触发
		模式=3 当前地图的人物触发
		模式=4 以自己坐标为中心指定范围人物触发,参数3指定范围


减少登录器/客户端误报情况
登录器配置器支持对lui.pkg设置密码(lui.pkg使用的压缩密码)

Var相关操作优化,性能提升幅度非常大:
-----------------------------------------
SaveVar 参数1 参数2 文件名 Force	//第四参数字符为Force,将实时保存数据至硬盘;即使不使用force参数,引擎也会每间隔1分钟自动存盘
					//等介于:Ini_Save 文件名。
					//Var系列相关操作,也可以适当修改后,使用INI_系列命令代替。
CalcVar 第五参数为有效的文件名时,变更将自动保存到内存中


鉴定系统改进:
-----------------------------------------
鉴定不再出现多项相同属性
鉴定可以设置最多的出属性的条数

鉴定师处,可以进行装备属性转移:
-----------------------------------------
允许普通属性转移列表(指目标装备):AllowInheritItemList.txt,格式:装备名称 需要元宝数量 需要装备碎片数量(装备碎片stdmode=41)  允许保留高数值属性(0/1 需要传承精华stdmode=41)
允许鉴定属性转移列表(指目标装备):AllowInheritTIItemList,格式:装备名称 需要元宝数量 需要卷轴碎片数量(卷轴碎片stdmode=41) 允许保留高数值属性(0/1 需要传承精华stdmode=41)
修改以上列表,新加载列表配置生效
允许保留高数值属性:指相同的2项属性,都存在数值,并且被转移装备的属性高于将要转移的装备属性值,才生效
允许5分钟内掉线重连,自动召唤出掉线前的属下,同批属下只能自动召唤一次,怪物设置面板可以开关,默认关闭
ReadRandomStr,ReadRandomLine,ReadLine 文件路径参数支持NPC所在路径
修正stringreplace S变量操作失效bug
增加NPC指令:StrTok S1 S2 |, 以“|”为分隔符,分解字符串,S1源字符串,S2存放分解子字符串,S1存放分解剩余部分;第三参数为空代表空格,“#9”代表Tab;第一、二参数支持S,A变量
优化NPC参数解释

大幅度提升mysql版本数据存取效率






2016/8/25	更新:引擎
---------------------------------------------------------------------------
修正8月份引擎大型活动场面卡问题
护体神盾的敏捷附加可以在魔法设置面板调节;抵挡伤害计算略微调整,最多抵挡1/3伤害
修正护体神盾,护身戒指作用下引起飘血数字不正确问题
完善伤害反射的计算
修正购买重叠物品数量可能都是1的问题
LoginSrv支持二级密码(md5)
客户端修正下属血条不按百分比显示问题,WebBrowser打开的网页内置于游戏窗口






2016/8/15	更新:引擎 + 客户端
---------------------------------------------------------------------------
SendScrollMsg 文字内容不可过长,否则会导致客户端在部分XP系统运行出现异常!
客户端完善一些细节,如套装的技能要学习了才显示为激活颜色...
修正0806英雄安全区不穿人
减少下发流量
性能参数面板增加防T心跳包时间调节,默认60秒,使用鼠标移动到控件查看说明
增加<$NPCEXECUTECOUNT>,用于显示NPC被执行的次数
Give 不限制上限个数,原来是1-50
PIC=功能扩展:			
	<PIC=items,55,1,0,0,0,8 LABEL=@execlab HINT=裁决>		//items=wil文件名,索引,图片数,循环,透明,偏移X,偏移Y
	<PIC=magic,1630,6,1,1,0,8 LABEL=@execlabfirecross HINT=火墙>
	SendScrollMsg <$DLGITEMSHOW>`PIC=magic,0,10,1,1,0,-33&LABEL=@xxxxx~




增加简单的物品展示功能:	//需要引擎和客户端配套使用
-----------------------------------------
(@@inputstring)
[@main]
<执行脚本/@ExecuteLabel>\ \
<我要查询物品/@@inputstring1>   <展示我的物品/@@inputstring2>\ \<关闭/@exit>

[@@inputstring1]
#ACT
SETDLGITEM <$STR(S1)>
#SAY
物品信息:\ \        <$DLGITEMSHOW>\ \<返回/@back>   <关闭/@exit>

[@@inputstring2]
#SAY
请放上你要展示的物品。\ \<返回/@back>   <关闭/@exit>
#ACT
QUERYITEMDLG 放上展示的物品 @showMyItem 0

[@showMyItem]
#SAY
我的物品:<$DLGITEMSHOW>\ \<返回/@back>   <关闭/@exit>
#ACT
SENDMSG 1 <$USERNAME>:<$DLGITEMSHOW>...<$STR(S2)> 255 241 65000
SendScrollMsg `NAME=%s:~<$DLGITEMSHOW>...<$STR(S2)>
CLOSE

[@ExecuteLabel]
#SAY
<CMD=@ExecNPCLabel HINT=提示...\第二行提示...>执行当前NPCLabel</>
#ACT
SendScrollMsg <PIC=DscStart0.bmp&LABEL=@qclabel&HINT=提示...>执行QChatMission</>

[@ExecNPCLabel]
#ACT
SENDMSG 5 @Label_executed...  255 168
-----------------------------------------






2016/8/10	更新:引擎 + 客户端
---------------------------------------------------------------------------
客户端普通下属和友军下属的血条颜色显示为粉紫色
客户端内挂的回城/下线保护优先于吃药
修正心灵召唤,达到3级可以使用鼠标指向怪物设定目标
修正英雄怪迟钝问题
修正服务器开启一段时间后,96怪物复活立即死亡bug
修正NPC对话内容加:HINT=提示信息... 后点击失效bug
减少引擎和网关的空包通讯间隔,可防止引擎网关分机情况下被机房防火墙踢掉






2016/8/08	更新:引擎 + 客户端
---------------------------------------------------------------------------
客户端刷新包裹后物品会排列
客户端挂机功能更好用
客户端输入用户密码可以一路回车进游戏,确认框确认可以按回车或空格
客户端修正套装宝石位置显示不正确问题
客户端可以自定义部分技能是否锁定,按F11技能面板设置,是否开放该功能可在新版本登录器配置器中设置
客户端修正在部分XP系统运行一段时间后会出现按钮消失问题(滚动公告不可过长)
登录器可自定义服务器里列表,可自定义调用的客户端名称,看登录器配置器下的"说明.txt"
客户端普通下属和友军下属的血条颜色显示为粉紫色
客户端内挂的回城/下线保护优先于吃药

修正心灵召唤,达到3级可以使用鼠标指向怪物设定目标
变量迁移
修正带升级武器标识的武器,砍下报错
修正几处内存泄漏_724
减少内存占用
英雄使用火墙更灵活
InputInteger/InputString 不再需要使用DelayGoto,需要修改脚本
简单增加摆摊交易税,功能设置可以调节,0不收税
商人商品数据保存时自动创建相关文件夹,关闭引擎自动保存商人商品数据
stditem.db扩展DropRatePlus字段,死亡掉落该物品附加机率:比如原来身上某件装备掉落几率为1/30,DropRatePlus非0时,掉落几率变为:1/(30+DropRatePlus)
中毒身亡,<$KILLER>等变量有效显示
h.takeon 会刷新英雄装备内观
修正@ReloadMonItems 报错
修正淬炼扣除重叠材料造成材料消失假象
修正NPC定时器BUG
怪物魔法躲避%10变更为%0
修正被怪物被召唤,该地方不会再刷出bug
修正96怪物不复活
增加开关:只让道士对中了红毒的对象产生加攻效果
增加装备无持久损毁提示,衣服武器无持久损毁外观修正
OffLine 命令:参数3<=0时,无限时间脱机挂着,否则为脱机的时间限制(分钟),超过该时间踢下线
pk控制面板增加人物登陆和切换地图的保护时间调节,默认3秒,建议调节到2.5秒
升级经验面板增加一直保留聚灵珠经验开关,默认关闭。聚灵珠吸收经验比率也迁移到升级经验面板
修正护体神盾不及时刷新属性,减少护体神盾增加的敏捷



增加简单搜索最低价的摆摊物品NPC条件命令:
----------------------------
SEARCHONSALEITEM 物品名 出售类型(元宝/金币) 返回最高个数(1-10)	//返回信息自动以sendmsg形式发送给玩家
例子:
#IF
CHECKGAMEGOLD ~ 1
SEARCHONSALEITEM 开天 元宝 3
#ACT
GAMEGOLD - 1
#ELSEACT
SENDMSG 5 找不到指定的物品
----------------------------


客户端素材文件扩展的应用:
----------------------------
装备内发光:
    shine>=100 对应 data\~witemsshine.wil 文件,每50张图一个效果,有效图片的请保持连续,例:shine=100调用0~49的图片,shine=101调用50~99的图片

衣服:
    shape>=75 对应 data\~hum_shape的数字.wil 文件,例:shape=75 对应~hum_75.wil,连击~hum_s75.wil
翅膀:
    anicount>=75 对应 data\~hum_he+anicount的数字.wil 文件,例:anicount=75 对应~hum_he75.wil,连击~hum_she75.wil

武器:
    shape>=100 对应 data\~weapon_shape的数字.wil 文件,例:shape=105 对应~weapon_105.wil,每1200张图一个武器(男+女),连击~weapon_s105.wil
武器外发光:
    shine>=100 对应 data\~weapon_we+shine的数字.wil 文件,例:shine=105 对应~weapon_we105.wil,每1200张图一个武器(男+女),连击~weapon_swe105.wil

怪物:
    Appr>=5000的,读取:data\~mon_(Appr 整除 100).wil,例:appr=5005 对应~mon_50.wil,每360张图片为一只怪,支持一个文件99只怪

NPC:
    Appr>=1000的,读取:data\~npc_(Appr 整除 100).wil,例:appr=1005 对应~npc_10.wil,每60张图片为一个NPC

背包物品:
    Looks>=20000,读取:data\~item_bg+(looks 整除 10000).wil,例:looks=20005 对应~item_bg2.wil 索引5的图
身上物品:
    Looks>=20000,读取:data\~item_st+(looks 整除 10000).wil,例:looks=20005 对应~item_st2.wil 索引5的图
地面物品:
    Looks>=20000,读取:data\~item_dn+(looks 整除 10000).wil,例:looks=20005 对应~item_dn2.wil 索引5的图

如果加了新怪,声音文件可以自行编辑,然后使用自动更新,声音文件:\Wav\sound2.lst
发现怪物	200 + Appr * 10;
怪物行走	200 + Appr * 10 + 1;
怪物攻击	200 + Appr * 10 + 2;
武器发声	200 + Appr * 10 + 3;
受攻击		200 + Appr * 10 + 4;
死亡		200 + Appr * 10 + 5;
特殊攻击	200 + Appr * 10 + 6;
一般情况下,只增加“发现怪物”和“怪物攻击”和“死亡”的声音
----------------------------






2016/7/23	更新:引擎 + 客户端
---------------------------------------------------------------------------
祝福油控制面板增加+幸运的模拟计算
修正上版本#define失效问题
修正个别怪物报错,需测试
Race:60/61 人形怪物使用英雄创建(注:62是带连击的人形怪)
修正176版合区工具问题,重要!
合区工具的【数据维护-查询】增加金币/元宝/金刚石/灵符等的统计
减少客户端/CD客户端的CPU占用
完善装备限制爆出功能
假如怪物被重叠,现在可以攻击周围目标
SETSCTIMER 扩展到15个,原来是10个
优化英雄技能判别
优化物品规则列表
优化物品引用
优化走路/跑步/广播/搜寻...
怪物不再受HM/MP恢复速率调节的影响
优化怪物/人物流程,现在占用更少的CPU资源






2016/07/08	更新:引擎
---------------------------------------------------------------------------
更好用的英雄守护模式
英雄设置二:增加老的工作速度模式开关
旗舰版网关/CD网关 魔法ID范围检测由1~127修改为1~254,关闭时间精度开关
优化延迟脚本






2016/07/05	更新:引擎
---------------------------------------------------------------------------
修正装备限制爆出系统bug
修正寒冰掌技能bug
修正个别怪物报错
优化人物数据读写
道道合击提高命中率
更好用的英雄守护模式
英雄设置二:增加老的工作速度模式开关
旗舰版网关/CD网关 魔法ID范围检测由1~127修改为1~254,关闭时间精度开关






2016/07/01	更新:引擎
---------------------------------------------------------------------------
修正0628道道合击放不出bug
修正NPC执行bug,重要!
修正优化其他代码






2016/6/28	更新:引擎 + StdItemConverter
---------------------------------------------------------------------------
修正 INI_SORT_READ_SECTION_VALUES 节名下数据为空时不读取问题
增加 INI_SORT_DELETE 保存到内存的标识名(All=删除所有)	//删除对应内存标志名的列表信息
修正 TUserEngine::ProcessHumans -> Ready, Save, Load...报错
修正可能出现物品显示假象
NPC命令:DropItemMap 增加参数7,为物品可拾取的倒计时秒数,0立即可以拾取
修正reloadnpc all 可能引起一系列奇怪报错的问题
引擎修正变异骷髅攻杀报错,客户端修复变异骷髅攻杀效果
magic.db的Power/MaxPower/DefPower/DefMaxPower魔法输出计算修改为受个人的幸运值影响
magic.db增加Penetrate,PenetrateRate字段,使用stditemConverter工具进行扩展,Penetrate的值:1忽视防御,2忽视魔法盾,4忽视魔御,1+2=3则忽视防御和魔法盾;PenetrateRate为穿透几率(百分比)
优化魔法
CHECKITEMDURACOUNT 物品名 是否聚满(0=未满的,1=已满的) >/</= 数量	//检测包裹指定物品名是否满持久数量(可用于聚灵珠等...)
TakeDuraItem 物品名 是否聚满(0=未满的,1=已满的) 数量			//拿走背包指定条件物品(三个参数)(可用于聚灵珠等...)






2016/6/12	更新:引擎 + 控制台 + 客户端 + 合区工具
---------------------------------------------------------------------------
控制台增加保存插件目录
套装增加保留兼容模式开关,按原来计算方式计算属性
修正扩展套装功能引起的内存泄漏
修正带了附加套装技能效果后,更换为无效果装备,自身魔法举手效果依然存在的问题,虽然其他人看到的是正常效果
修正刺杀不忽视魔法盾情况下的伤害错误计算
修正个别版本会报"%d ..."的错误
优化限制物品曝出功能,并改为保存相关数值
临时取消老的物品绑定账号/IP/角色功能,效率太低;建议在DB设置物品绑定,同时在功能设置-全局功能页面调节绑定相关设置
客户端增加套装技能威力显示
客户端增强反外挂
stditem.db增加MaxOverlap参数,允许重叠最高数量,使用最新的StditemConvert.exe扩展下stditem.db
give,giveex后自动重叠
优化性能
修正合区工具日志分析查不到泡点
补充:
READLINE 文件 行数 S10 						//获取指定行数的一行字符到S10,或A10(全局)
DELETELINE 文件 行数 S10 					//获取指定行数的一行字符到S10,或A10(全局),并删除该行
WRITELINE 文件 行数 S10/文字/变量 				//写文字到指定行数,覆盖方式
INSERTLINE 文件 行数 S10/文字/变量 				//插入文字到指定行数,非覆盖

高效率的Ini文件NPC操作命令:
-----------------------------------------------------------
INI_READ_STRING		文件 节名 键名 S/A 			//从Ini的【文件-节-键】获取字符串值到S/A
INI_WRITE_STRING	文件 节名 键名 S/A/文字/变量 		//写入字符串值到Ini的【文件-节-键】
INI_READ_INTEGER	文件 节名 键名 P/G/D/M/H		//从Ini的【文件-节-键】获取整数值到P/G/D/M/H
INI_WRITE_INTEGER	文件 节名 键名 P/G/D/M/H/整数 		//写入整数值到Ini的【文件-节-键】
INI_WRITE_INTEGER_EX	文件 节名 键名 +/-/= P/G/D/M/H/整数 	//按操作符写入整数值到Ini的【文件-节-键】
INI_DELETE_KEY		文件 节名 键名				//删除Ini的【文件-节-键】
INI_SECTION_COUNT	文件 节名 P/G/D/M/H			//获取Ini的【文件-节】下的键值数量到P/G/D/M/H
INI_CLEAR_SECTION	文件 节名				//清理Ini的【文件-节】下的键值
INI_ERASE_SECTION	文件 节名				//删除Ini的【文件-节】,包括键值
INI_SAVE		文件					//保存到文件,上面的操作不自动保存,保存频繁会消耗比较多的CPU资源
INI_RELOAD		文件					//重新加载文件,可以用于手动修改了文本文件的情况下。

INI_SORT_READ_SECTION_VALUES	文件 节名 排序键或值(0=键/1=值) 排序类型(0=字符串/1=整数) 升序降序(0/1) 保存到内存的标识名 保存到文件(0/1)
INI_SORT_SECTION_VALUES_COUNT	保存到内存的标识名 P/G/D/M/H		//获取指定标识名的列表数量到P/G/D/M/H(包含了节,在列表第一个)
INI_SORT_GET_SECTION_STRING	保存到内存的标识名 S/A			//获取指定标识名的字符串“节名”到S/A
INI_SORT_GET_IDENT_STRING	保存到内存的标识名 索引 S/A		//获取指定标识名和指定索引的字符串“键”  到S/A
INI_SORT_GET_VALUE_STRING	保存到内存的标识名 索引 S/A		//获取指定标识名和指定索引的字符串“值”  到S/A
INI_SORT_GET_IDENT_VALUE_STRING	保存到内存的标识名 索引 S/A		//获取指定标识名和指定索引的字符串“键值”到S/A
INI_SORT_GET_VALUE_INTEGER	保存到内存的标识名 索引 P/G/D/M/H	//获取指定标识名和指定索引的整数  “值”  到P/G/D/M/H
INI_SORT_DELETE			保存到内存的标识名(All=删除所有)	//删除对应内存标志名的列表信息
-----------------------------------------------------------
上述NPC命令使用可以参考:INI_SORT 脚本例子.txt






2016/4/18
---------------------------------------------------------------------------
修正上个版本英雄休息状态失效问题,改变跟随路径规则,英雄流程小优化
对可以挖的怪物,死亡3秒后挖取动作才有效,游戏网关挖取间隔建议设置为900
套装修改:
----------------------------
编辑套装可以设置激活提示为空,即可以隐藏套装属性,最多同时激活5套
套装现在可以选择【按百分比】或【按点数】
多套装激活现在修改为独立计算属性,原先是合并后计算属性,计算后属性和原来算法有小差别
套装增加技能支持,可以调节技能效果和技能威力,一个套装最多可以支持30个技能	//+效果不参与攻击输出计算,+威力具体多少需要自行测试,会受幸运和对方防御的影响

淬炼功能扩展:
配置中的条目,增加2个参数,第一个:最多只能炼出N条极品属性,第一个:成功提示自定义,例如:
------------------------------------------------------------
[火云石碎片+魔龙冰晶+弩牌]										;禁止极品属性装备淬炼	;最多2个附加属性	;成功的弹窗提示
光芒项链	70    100    0    70    1-5,1-5,0-5,0-5,1-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,	1			2			成功附加了属性|成功但是未附加属性|淬炼失败
烈焰项链	70    100    0    70    1-5,1-5,0-5,1-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,	1			2 			123456|654321
雷霆项链	70    100    0    70    1-5,1-5,1-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,0-5,	1			2 
------------------------------------------------------------
淬炼开始时清理的属性现在只限在0~13的位置,原来是所有属性都清理。






2016/3/26
---------------------------------------------------------------------------
CHECKMAPMONCOUNT 地图名可以是Self,表示当前地图
增加:CHECKMAPRANGEMONNAMECOUNT 地图名(Self指当前地图) X Y 范围 怪物名字(*指所有) >/</=/? 数量	//检测指定地图坐标范围内的怪物数量
优化聊天处理
优化消息列队和发送
物品规则列表增加【死亡消失】选项
英雄得到其他经验可以设置为0%
法师英雄现在修改为跟随状态也可以持续开盾
修正GM命令调整元宝不刷新BUG
修正英雄有几率在安全区攻击bug






2016/3/19
---------------------------------------------------------------------------
---------------------------------------
发型,性别,职业,等级,金币,元宝,泡点,整数0~9的对应GM命令支持离线修改,
即人物不在线时直接修改数据,需要更新M2和DBServer,建议使用,少用文本操作的NPC命令,以提高效率
---------------------------------------
增加7级GM命令:@ints 0~9 角色名 +/-/= 数值,可以修改上个版本增加的10个整数变量,支持离线修改
loginsvr_mysql修正注册ID可能出错问题






2016/3/14
---------------------------------------------------------------------------
---------------------------------------
增加NPC命令:INTS 0~9 +/-/= 数量
提供对十个整数操作,记录日志在元宝类型中,搜索日志以关键字“整数”进行过滤,
可以使用<$INTS0~9>获取和显示,英雄以<$H.INTS0~9>获取和显示
MYSQL版本需要更新数据库的TBL_ADDON表和DBServer,以读取和保存新数据,最新数据库结构参考legendofmir.sql
如果需要把当前版本的普通数据转换到MYSQL数据,同样需要使用本次更新的DB2MySQL.exe
增加NPC检测命令:CHECKINTS 0~9 >/</= 数量
---------------------------------------
修正全局变量操作(Var/CheckVar/LoadVar等...)的严重BUG,并大幅度提高此等操作的效率
增加稳定性






2016/3/09
---------------------------------------------------------------------------
修正带有;GETITEMFLAG运行数天后,偶尔出现爆不出物品问题
修正几个小bug






2016/1/20
---------------------------------------------------------------------------
修正上个版本(2016/01/11~13)报错
修正引擎开启超过29天后,多进程之间的行会战消息整数越界问题






2016/1/13
---------------------------------------------------------------------------
减少英雄飞到主人身边的检测距离
加快英雄远程锁定目标的攻击反映
包裹不存在聚灵珠情况下,人物不再一直积累聚灵珠的经验
连击引擎的怪物被召唤后,可以再次刷新(176引擎不会,除非怪物死亡或消失)
优化微端内存申请释放,修正出现死锁情况;微端修改为需要激活使用。
修正引擎,三个网关刚开启时遇到接入连接的出错Bug
改善数据读取和保存线程逻辑






2016/1/2
---------------------------------------------------------------------------
英雄远程锁定目标可以飞到目标身边进行攻击
解决引擎,网关下发封包顺序BUG
优化微端服务器读取性能和下发带宽
改善英雄对目标的锁定
设置英雄杀人增加主人PK值时,武器增加诅咒也作用在主人身上
完善连击的释放和攻击
完善英雄对目标的锁定
MonSayMsg.txt 支持以下变量:SERVERNAME,SERVERIP, WEBSITE 等全局变量
CURRENTMAPDESC, CURRENTMAP, CURRENTX, CURRENTY, USERNAME, MONKILLER, KILLER
HP, MAXHP, MP, MAXMP ... MAXSC, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECONDS
改进客户端的隔位刺杀
客户端增加角色(人物、怪物、NPN等)提示列表,适用于BOSS提示,PK目标人物更醒目等
完善属下对友军的识别






2015/12/31	全套更新!!!
---------------------------------------------------------------------------
改善法师/道士职业英雄
改善英雄回到主人身边的反映
改善丢包被T
修正英雄有时动作速度异常问题,增加英雄野蛮时间补偿,现在看起来更接近于玩家的动作
修正客户端使用微端时,个别资源因解压校验错误而未能显示问题
修正几个怪物重刷后不能移动问题
修正合区工具问题






2015/12/18	M2 + RunGate配套使用
---------------------------------------------------------------------------
将mCryptModule.dll分别复制到M2,LoginGate,Rungate目录下,会加密保存激活码。
客户端增加极品物品的坐标和方向提示
客户端修正怪物出现时,声音调节失效问题
修正类似虎卫被召唤,无限刷新问题
修正客户端对NPC:WebBrowser命令部分网页打不开问题
mysql版本的dbserver,loginsvr的配置文件中,如果LoginPrompt=1,则每次开启都需要输入密码,这时ini中不要保存sql密码。
优化LogServer






2015/12/12
---------------------------------------------------------------------------
取消任务导航支持执行QF脚本功能,取消聊天栏支持执行QF脚本功能,存在漏洞!!!
并改为执行独立脚本:QChatMission-0.txt,因为客户端可以直接执行该脚本的任意标签,要注意脚本写法,防止漏洞。
------------------------
优化NPC执行流程
优化修正引擎接收封包处理封包的bug,大幅度提升引擎对客户端封包处理效率
客户端自定义输入字符默认过滤“@<>/\”5个字符,防止标签被非法执行

修正2015/11/30修改引起的杀怪触发脚本报错
取消金币交易市场






2015/11/30
---------------------------------------------------------------------------
优化客户端纹理加载和管理
优化客户端操作体验
修正物品被拾取后偶尔留下的物品假象
被登陆脚本踢下线后不再接受客户端封包
优化引擎IOCP封包处理部分的性能
优化客户端聊天栏字体渲染效率
优化客户端数字飘血和数字显血
提高火球术,大火球,灵魂火符对移动目标的命中率
增加释放魔法触发QFunction的[@MagSelfFuncXX]和[@MagTagFuncXX]的开关,默认关闭
引擎修正火墙假象

现在[@KillPlayXX][@KillPlayMonXX]触发时,可以使用KILLERTYPE区分杀怪/人的主体
比如:
[@KillPlay1]
#IF
KILLERTYPE = 1  //1人物,2英雄,3宝宝
#ACT
SENDMSG 5 人物杀死






2015/11/10
---------------------------------------------------------------------------
修复上个版本客户端运行片刻会出现崩溃退出bug
修复游戏网关一个严重的死循环漏洞,会导程序致崩溃退出
修复上个版本引擎因优化地图管理器引起脚本缓存不能读取问题,如:升级武器记录文件,已卖商店的物品不加载等...

提高数据工具的日志查询效率
怪物设置增加开关:所有怪物使用新的刷新模式;如果开启,相当于MonGen.txt下所有怪物都使用新的刷新模式(重启生效)
修正LoginSvr找回密码bug,修正LoginSvr一个封包漏洞
LoginSvr找回密码修改为:问题1答案1,问题2答案2都正确才能成功找回,修正账号的创建日期和更新日期错乱bug。
LoginSvr mysql版本优化语句,完善防注入检测
LoginSvr mysql版本增加二级密码,密码现在使用MD5密文
优化怪物运行管理,修正上个版本的引擎会出现怪物迟钝BUG,
提高引擎启动速度,提高动态变量(LoadVar,SaveVar)效率






2015/10/25
---------------------------------------------------------------------------
改进刷怪和怪物运行管理,现在由地图管理器接管
改进,优化镜像地图功能
修正完善英雄怪
客户端增加拒绝全服喊话开关(@传 之类的喊话信息),需配合最新引擎;同时引擎有控制开关,游戏参数-信息控制-允许屏蔽全局喊话
简单增加好友上线提示,私聊字体个性颜色等
添加黑名单会在服务器上禁止私聊
将simli.ttf更新至客户端data目录下,可以启用个性化NPC名字字体
提高客户端对Wzl的读取效率






2015/10/14
---------------------------------------------------------------------------
修正师傅不在线情况下,记录徒弟出师文档BUG
修正跨服属下属性异常问题
连续申请行会战,最高可持续12小时
完善客户端细节

刷怪文件增加一个参数,现在格式如下:
	;代码 x y 名称 范围 数量 时间 任务几率(0~100) 刷新模式(0~1)
	-------------------------------------------------------------------
	刷新模式=0时,刷怪模式不变,和以前一样,可能boss刚被杀死,未到间隔时间会重新刷一只。	//不添“刷新模式”参数,默认为0
	刷新模式=1时,假设怪物刷新间隔时间是1小时,杀死怪物后,经过1小时才会再次
刷出该怪物。 
		      

建议boss类的怪物开启新的刷怪模式,更加合理。

增加几个变量:
	$YEAR		//年
	$MONTH		//月
	$DAY		//日
	$HOUR		//时
	$MINUTE		//分
	$SECOND		//秒
	$MILLISECONDS	//毫秒

增加NPC命令:		//因为需要申请和释放比较大的内存,不建议频繁使用
AddMirrorMap 源地图 镜像地图 镜像地图描述 小地图编号 使用期限(分钟) 刷怪(0,1)
DelMirrorMap 镜像地图
MirrorMapTime 镜像地图 +/-/= 时间(分钟)	//MirrorMapTime 镜像地图,直接获取剩余使用时间
在镜像地图中可以使用<$MIRRORMAPTIME>查看剩余使用时间,新客户端可以直接右上角显示

MobNpc 地图名 X Y NPC名称 脚本文件名 外观 属沙城(0/1) 脚本文件不带地图名(0/1) 存活时间(默认0秒不自动消失)	// 脚本文件不带地图名=1时脚本文件名不需要带地图名
DelNpc 地图名 X Y // 删除指定地图位置的NPC


脚本示例:
----------------------------------------
[@AddMirrorMap]
#ACT
AddMirrorMap D71615 MRD71615 [D71615]的镜像 0 2 1

[@AddMirrorMap_Success]
#ACT
SENDMSG 5 创建镜像地图成功。 255 168
AddMapRoute 3 333 333 M71615 22 33 0
AddMapRoute M71615 21 33 3 332 333 0

[@AddMirrorMap_Failed_SourceMapNotExists]
#SAY
创建镜像地图失败,源地图不存在!\ \
<返回/@main>

[@AddMirrorMap_Failed_MirrorMapExists]
#SAY
创建镜像地图失败,镜像地图已经存在!\ \
<返回/@main>



[@DelMirrorMap]
#ACT
DelMirrorMap MRD71615

[@DelMirrorMap_Success]
#ACT
SENDMSG 5 删除镜像地图成功。 255 168

[@DelMirrorMap_Failed_MirrorMapNotExists]
#SAY
删除镜像地图失败,镜像地图不存在!\ \
<返回/@main>

[@DelMirrorMap_Failed_NotMirrorMap]
#SAY
删除镜像地图失败,目标非镜像地图!\ \
<返回/@main>


[@MirrorMapTime]
#ACT
;;MirrorMapTime MRD71615
MirrorMapTime MRD71615 + 1

[@MirrorMapTime_Success]
#SAY
镜像地图使用剩余时间:<$STR(M98)>分钟<$STR(M97)>秒\ \
<返回/@main>

[@MirrorMapTime_Failed_NotMirrorMap]
#SAY
目标非镜像地图!\ \
<返回/@main>

[@MirrorMapTime_Failed_MirrorMapNotExists]
#SAY
目标镜像地图不存在!\ \
<返回/@main>
----------------------------------------






2015/10/10
---------------------------------------------------------------------------
修正浑水摸鱼模式名字显示问题
修正几个封包漏洞,会可能导致物品属性混乱。
修正登录可能出现串号问题
修正LoginGate有大量连接时会出现错误并不能接受连接BUG
引擎启动后,执行QManageNPC [@OnStart]
修正绿毒的爆出物品占有权过大问题
跨服系统喊话
跨服行会传送GM命令和NPC命令
跨服跟踪
跨服传唤
跨服夫妻传送
跨服夫妻上线提示
跨服行会战
跨服全局变量同步
修正可能同时爆出多个装备极品属性的问题






2015/9/30
---------------------------------------------------------------------------
暂时去掉部分分线程,保证稳定性
更改英雄攻击模式的限制时间调整为200ms
修复神兽有大量目标仍边攻击边回头走问题(包括其他怪物属下)
修复属下远离情况下,CTRL+A切换攻击模式,属下不回到身边问题
增加NPC命令:MOVETOCELL X Y NPC名称	//自动移动到坐标点,并点击NPC;“NPC名称”可忽略。
怪物设置面板增加怪物灵敏度调节
修正关闭M2加速功能不完善问题
优化人物流程
修正英雄组合速度难调节问题
修正怪物过于灵敏问题并完善怪物灵敏度调节

客户端:
修正按住施毒术会导致毒药消失假象问题
输入法使用Windows的原始界面
全角输入法状态下,可以按1~6吃药,使用字母释放魔法,以及使用如~!@等快捷字符
包裹界面增加刷新包裹按钮
增加安全区右上角标识






2015/9/24
---------------------------------------------------------------------------
修正2015/9/23因改进英雄流程引起召唤不出英雄的问题
怪物设置增加是否可以立即拾取大刀杀怪物爆出的物品
修正属下的反应比较慢的问题
Logingate将现在起需要引擎的激活码,Confing.ini [Strings] ActivateCode=激活码
登陆网关和客户端的登陆流程修改


客户端:
增加音量调节
中文状态可以按“`”或“~”建拾取物品
修正按住施毒术会导致毒药消失假象问题
增加使用字母自定义技能快捷键,并且修改原先快捷键为(防冲突):
CTRL+Z	-> ALT+A	自动挂机
V	-> ALT+V	隐藏怪物尸体
O	-> CTRL+O	查看任务
P	-> CTRL+P	查看组队
T	-> CTRL+T	交易






2015/9/23
---------------------------------------------------------------------------
开启引擎后,自动开始2分钟时长的快速刷怪
改善英雄和怪物的运行效率
修正上个版本可能出现药品不自动解包问题(注:红药包Anicount=1,蓝药包Anicount=2, 特殊药包药包Anicount=3)
修正地狱雷光/瞬息移动之类的魔法,超过魔法距离释放失败问题
改进英雄的群体技能的释放
修正提交镖车,镖车不消失bug
优化多线程下物理地图对象存取






2015/9/20
---------------------------------------------------------------------------
修复一个严重bug,特定情况下会消耗大量的流量和CPU
多线程处理人物/英雄/怪物/通讯等流程,流畅度是否提升,需测试!
修正行会时,攻击模式计算缓慢问题
噬魂沼泽释放后,在释放地面范围内将中毒,5秒持续时间(如果使用新客户端0920以上,可将Magic.DB中噬魂沼泽释的EffectType=2,这样毒雾不会随目标移动)。

客户端:
走路判断更灵活,内挂细节修正,隐藏尸体修正,优化CPU开销






2015/9/12
---------------------------------------------------------------------------
修复一处可导致引擎自动关闭的溢出漏洞
修复客户端飘血与实际掉血量不相等BUG
大量减少引擎下发流量
修正快速使用物品可能导致内存溢出bug
修正特性情况下交易物品消失bug






2015/8/22	引擎+客户端 需要配套
---------------------------------------------------------------------------
将获得的激活码填写在!Setup.txt的
[Server]
ActivateCode=激活码
第一次激活比较久,稍等3分钟左右,重新开启程序即可。

修正NPC下发脚本小bug
修正挖肉品质bug,修正肉品价格错误
修正丢物品到地面偶尔看不到bug(客户端)
地面极品装备会闪烁,选项-物品装备-有开关设置
修正引用时间函数的错误运算
修正偶尔出现GM隐身被看见bug
客户端修正部分素材看不到bug(客户端)
--------------------
MonItems目录下的爆率文件,第一行增加标志:;GETITEMFLAG(3),数字3,表示将随机必爆爆率为1/99999999的其中3样物品
白野猪.txt 爆率文件内容格式如下:
;GETITEMFLAG(3)  
1/5 金币 200
1/2 强效魔法药
1/2 强效金创药
1/5 太阳水
1/5 强效太阳水
1/99999999 上古神甲
1/99999999 上古宝甲
1/99999999 上古披风
1/99999999 上古羽衣
1/99999999 上古道袍
1/99999999 上古长袍
--------------------






2015/8/11
---------------------------------------------------------------------------
MapInfo.txt的地图增加参数:OPTI,带有该参数的地图,会提前申请需要的部分内存进行优化。PS:适合用于怪多,人经常去升级,或PK多的地图,建议使用。
网关封掉利用部分技能制造类似“暗杀”的效果
完善个别脚本命令

任务导航支持执行QF脚本:
-------------------------
[1-1]	任务1
移动到<英雄特使(比奇城)(334,270)/@_automove 334:270:比奇省>\脚本执行方式1<LABEL=@QFLabel>执行脚本</>\脚本执行方式2<执行脚本/@QFLabel>...\脚本执行方式3<PIC=DscStart0.bmp&LABEL=@QFLabel>普通文字




2015/8/7
---------------------------------------------------------------------------
优化部分封包,减少引擎下发流量
优化封包模块,性能有比较大的提升(影响所有服务器程序)
改进新刷怪模式,刷怪速度几乎等同老模式,性能更好刷怪更合理!同时增加回老的刷怪模式提供选择
改善怪物流程稳定性
修正挖动物获取到的物品看不见bug
性能设置增加怪物灵活度兼容开关,开启后,怪物灵活度等同于以前版本引擎的。
优化聊天处理代码
增加稳定性


2015/7/30
---------------------------------------------------------------------------
修正周围有人取消摆摊失败bug
修正账号在其他地方登录时,偶尔不提示信息bug
修正有时怪物不显示名字
修正偶尔出现个别怪物报错
修正发现死亡人形怪/人物时外观不正确显示bug
增加视觉范围控制,在参数设置,坐标范围,建议X=18 Y=16
DBS修正当前使用称号和显示时装开关不保存bug (MySQL版本)

SENDMSG 5 普通文字1<LABEL=@QFLabel&HINT=点击运行脚本功能>[执行脚本]</>普通文字2 255 168 65000	//聊天栏置顶文字+执行脚本
SENDMSG 5 普通文字1<PIC=DscStart0.bmp&LABEL=@QFLabel>普通文字2 255 168 65000	//聊天栏置顶文字+按钮执行脚本,DscStart0.bmp必须存在lui.pkg中
SENDMSG 5 <URL=www.XXXXX.com&HINT=点击打开网站>访问官方网</> 255 168
聊天栏置顶文字需要最新客户端支持。



2015/7/19
---------------------------------------------------------------------------
引擎:
修正上个版本引擎一个比较大的内存泄漏
修正加载脱机人物地图对象重复bug
修正镖车可能引起的内存错误
修正偶尔出现怪物假象
修正ReQuestBuildGuild bug...
优化ReGetHumanName,HumamOperation...
优化地图对象流程,增加地图对象内存管理
网关通讯采用多线程IOCP模式,提高数据吞吐量
改进地图对象架构,提高性能,减少内存碎片
增加地图对象管理,减少内存开支
修正火龙之心bug
db里,称号的 weight = 1,图片和名字分为上下显示
性能设置增加了快速刷怪开关
优化全局变量相关应用部分

服务器数据存取方式采用MySQL(MySQL版本)
m2 改进怪物内存流程,提高怪物灵敏度,降低CPU使用率,改善其他部分代码的性能
m2和dbs数据存取部分改用多线程模式,性能提升大(MySQL版本)
GameCenter增加‘最高服务器上线人数’设置,支持MySQL备份与恢复(压缩备份与恢复需要在MySQL的bin目录下放上gzip.exe)(MySQL版本)




登陆排队功能:(网关 + 引擎 + 客户端 配合)
---------------------------------------------------------------------------
MaxUserForLoginWait=8000			实际在线人数超过此数量,登陆游戏会排队,赋值0将关闭登陆排队功能。
LoginWaitTimeRate=0.800000			登陆等待时间 = (实际在线人数 - MaxUserForLoginWait) * LoginWaitTimeRate
OnlinePlayerCountRate=13.240000			排队时报告的在线人数倍数,报告数量 = 实际在线人数 * OnlinePlayerCountRate




连击:
---------------------------------------------------------------------------
增加种族伤害属性
首先扩展HeroDB数据库,使用StditemConvert工具,然后设置数值,
Monster.DB的:
RaceEx		0=未定义,1=人族,2=兽族,3=无生命,4=不死族,5=恶魔族
ShapeEx		0=未定义,1=小型,2=中型,3=大型(注:目前未启用)

Stditem.DB的:
RaceDamage  种族伤害值 0~255
ShapeDamage 体型伤害值 0~255

@supermake 1 24 0~255	//种族伤害值,调整所有种族伤害的伤害值.如果当前武器有3种种族伤害,则3种种族伤害的伤害值同时调整一致
@supermake 1 25 1~31	//种族伤害针对的种族,1=人族,2=兽族,4=无生命,8=不死族,16=恶魔族,可以多个并存,将对应的数值相加即可,如果该值不正确或未设置,客户端显示附加种族伤害 +xx%(未激活)字样
			//比如要人族和兽族2种属性共存就@supermake 1 25 3
			//如果要人族,兽族,无生命三种属性共存就@supermake 1 25 7
脚本命令:GIVE,GIVEEX,UPGRADEITEM,UPGRADEITEMEX 同样可以调整








1、装备的PK目标爆率 修改为 击杀爆率,使用百分比计算,现在不止对人有效,对怪物也有效。
   公式:爆率 = 原爆率 + ((击杀爆率 - 防爆) / 100 * 原爆率);
   注:爆率/原爆率/击杀爆/防爆 都是百分比, 
   比如原来爆率是10%,击杀爆率 50%,防爆0%,根据公式:10 + (( 50 - 0) / 100 * 10) = 15,最终爆率就是15%
   比如原来爆率是10%,击杀爆率100%,防爆0%,根据公式:10 + ((100 - 0) / 100 * 10) = 20,最终爆率就是20%

2、防爆 修改为使用百分比计算

3、改善英雄类怪物的灵敏度,RECE=61人形怪支持连击

4、改进刷怪机制(复活模式),大幅度提高性能,减少服务器内存碎片,更准确的刷怪时间

5、HGE客户端优化,即使用火墙同时烧2000怪,CPU基本也保持为0~1%

6、大量性能优化,在服务器硬件配备够好情况下,经测试,万人在线不卡(3000人同时参与沙战不卡)

MonSpAbilList 增加 防红毒 防绿毒 破盾
菜单-怪物设置-基本参数:增加怪物死亡重新计算刷新时间 开关,默认关闭
菜单-物品装备-基本设置:增加装备持久0是否消失 开关,选择不消失则属性失效
修改赋予称号时自动激活



HGE客户端支持怪物:(附加)
瘟疫毒牙;81;124;360;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫金蟾;81;124;361;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫鱼人;81;124;362;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫蛋;115;124;363;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫使者;81;124;364;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫长老;81;124;365;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
瘟疫统帅;81;124;366;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
醉拳熊猫;210;124;367;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
邪恶沙虫;127;125;370;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
秃鹫;81;125;371;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1250;0;0;0;
掷刀兽人;87;125;372;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
矿工兽人;81;125;373;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
梭镖兽人;87;125;374;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
大刀兽人;128;125;375;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
训狼兽人;81;125;376;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
坐骑兽人;81;125;377;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
巫师兽人;129;125;378;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;2000;1;0;2050;0;0;0;
厨师兽人;81;125;379;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
流星锤兽人;159;125;3710;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
m38_11;160;125;3711;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
m38_12;160;125;3712;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;
m38_13;160;125;3713;50;1;30;16000;6000;0;80;80;88;99;0;0;30;30;1000;1;0;1050;0;0;0;