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




2021/5/25	全套配套
---------------------------------------------------------------------------
M2
  修正完善怪物重刷逻辑，防止大量怪物重刷可能出错的情况
  下线自动去掉SetAbility—38的隐身效果
  增加吃聚灵珠金币等不足的提示
  主人可以感知宠物血量变化
  修正GM命令清除地图固有怪物不爆出物品情况
  出售给商店的无持久商品现在不直接销毁
  修正战士人形怪部分技能没有伤害问题
  扩展SetAbility的第6参数为1时，特效只发送给自己
  修改SetAbility，当第3参数的秒数为0时，不更新现有设置也不执行@SetAbility_xx触发，等待自然结束
  修正强化骷髅攻杀准确率问题
  控制台支持清理寄售行数据
  淬炼出新物品记录日志
  

  增加寄售行（仅限于AC）：
  ---------------------------------------
  setup参数：OpenConsignmentSystem			// 是否开放寄售系统，默认1
  setup参数：ConsignStoreMinCharge			// 寄售行最低上架手续费，默认1
  setup参数：ConsignStoreChargeRate			// 寄售行上架手续费万分比，默认5
  setup参数：ConsignmentExpirationDays		// 寄售物品过期天数，默认2
  NPC执行命令：OpenConsignStore 0/1			// 关闭或打开客户端寄售行UI界面
  NPC执行命令：GetConsignmentCount @回调 角色名[可选]	// 获取当前寄售的物品数量（包含过期/已售）
    #act
    GetConsignmentCount ~GetConsignmentCallback
    [~GetConsignmentCallback]
    #act
    SendMsg 5 当前寄售物品数量：<$PARAM(0)>

  NPC执行命令：ChangeConsignmentCharName 原角色名 新角色名		// 变更寄售数据中的角色名，可用于改名成功对寄售数据修正
    [@chgname_success]
    #act
    ChangeConsignmentCharName <$PARAMSTR(1)> <$PARAMSTR(2)>

  最多寄售30个物品
  需要更新~ui_1.wzl，自定义ui配置文件
  物品到期或成交后，MySQL版引擎会利用邮件系统发送附件，非MySQL版本引擎需要到寄售行UI进行结算/取回操作，聊天栏有提示


客户端
  增加[自动挂机]自定义快捷键
  完善红/蓝药等用完回城的逻辑
  支持长下拉列表点击
  辅助挂机增加自动切换安全模式开关，默认未开启


其他
  合区工具支持寄售行数据








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
  优化游戏数据日志的记录
  启动时增加读取数据表出错的提示

  修正修复神水用完删除，客户端仍有假象问题
  背包物品被删除时，对应的BoxItemID将被清零

  修正上版TAKEDLGITEM命令出错问题
  修正上版吃药自动解包失效问题
  修正多次重载NPC可能出错问题
  QF的[@shopping]增加参数$PARAM(4)：数量，$PARAM(5)：最大持久
  NPC命令GetEquipProps增加参数：
    物品持久：M_EQUIP[n]_DURA		// 对于重叠物品，就是数量
    HeroDB价格：M_EQUIP[n]_PRICE
    向商店购买物品的价格：M_EQUIP[n]_BUYING_PRICE		// 执行NPC需要是商人（可带价格倍率调整），才能获取到正确的价格，否则为0
    出售物品给商店的价格：M_EQUIP[n]_SELLING_PRICE		// 同上

  公告Notice.txt支持颜色COLOR=、图片PIC=等				// 不支持鼠标事件，需要更新客户端支持
  NPC命令MESSAGEBOX发送字符支持颜色、图片等，例如：		// 同上
    SetRandomNO 5592405 16777215
    MESSAGEBOX "常规文字，<COLOR=clSkyBlue 天蓝色文字，><COLOR=#<$RANDOMNO> 随机颜色文字>"
  修正在特定条件装备交换卷轴碎片出错问题
  物品规则列表的禁止寄售（废弃）改为禁止摆摊
  物品规则修改-保存后没有自动重载物品DB问题（原增加、删除操作之后保存会自动重载物品DB）

  掉落权重物品时，优先触发脚本
  修正神秘地图被锁定仍然提示真实名称问题
  防止游戏网关小概率登录黑屏，引擎+游戏网关优化，需要配套使用！
  更加稳当健全的角色存档逻辑，防止在特定条件下关闭引擎时卡存档数，需要引擎和DBS配套使用！
  引擎大幅度提升与DBS之间读/存档的速度
  EnableCharacter命令对正在存档的角色将不生效
  全局数据面板增加存档请求操作，可防止较老版本程序卡存档请求导致关闭不了问题
  现在每镶嵌一颗吸血宝石或增加一项吸血鉴定属性，吸血几率+8%（之前不增加吸血几率，需配合吸血装备套装才会有效）
  修正技能消耗的法术点数（现在消耗会根据技能最高等级计算，对于最高等级>4级的技能，消耗比之前要少）
  增加摆摊价格限制，更新并运行引擎后，物品数据表会自动扩展如下字段：		// 客户端需要匹配更新
    MinStallGoldPrice		// 最低金币价格，默认0不限制，要限制请自行编辑
    MaxStallGoldPrice		// 最高金币价格，同上
    MinStallYuanbaoPrice	// 最低元宝价格，同上
    MaxStallYuanbaoPrice	// 最高元宝价格，同上
  防止卡魔法盾（客户端需要配套）
  增加各个属性比率变量：<$PropRate[0~6]>，各个属性比率剩余秒数变量：<$PropRateSecs[0~6]>	// 对应StatusRate命令
  增加攻击力百分比率变量：<$PowerRate>，攻击力倍率剩余秒数变量：<$PowerRateSecs>
  增加杀怪经验百分比率变量：<$KillMonExpRate>，杀怪经验倍率剩余秒数变量：<$KillMonExpRateSecs>
  SetAbility增加破盾支持：SetAbility 50 88	// 50是破盾ID，88%的几率
  CompVal命令第4参数为f时，支持浮点数比较，例：CompVal <$PropRate[3]> > 1.5 f

  商铺物品列表支持模糊搜索
  战斗状态增加宽松模式（不会连续进入战斗状态），可在参数设置-时间设置调整
  修正CheckJson的子命令X有时检测无效问题
  怪物名字限制长度扩展到40字节
  启动加载怪物数据表时，对名称超长（限制40字节）的怪物增加提示
  MagicFire增加参数8，可用于设定链式、溅射方式下的最多目标数（不设定则默认根据技能等级内部自动计算）
  扩展Goto命令第4参数：1=QM，2=QF，3=机器人脚本，4=QMap，5=QChat，其他为NPC自身；注意之前传输参数是从参数4开始，现在变成从参数5开始！
  增加设置参数：DamageEquipRate		// 装备掉持久百分比率，默认100
  增加设置参数：SoftClosedResetRevivalTime	// 小退登录初始化复活时间（不能立即复活），默认0关闭
  增加设置参数：ShowPoisonDamage	// 下发显示绿毒伤害，默认0关闭
  增加设置参数：RemoveInvalidDisplayItem	// 物品销毁时将删除展示品（指AddShowItem物品）开关，默认0不开启
  施毒术、幽灵盾、隐身术等技能现在参与幸运计算
  攻击触发增加攻击类型变量：$ATTINFO_HITTYPE	// 攻击类型，0普通，1暴击
  Take命令第6参数为1时，将作用于仓库物品
  重生神技将恢复满蓝，使用间隔时间为复活时间间隔的5倍
  SendMsg支持类型：15~17（左下角），类型：25~27（右下角）
  修正携带大量金币情况下，不带金币交易也提示金币超过问题
  Give、UpgradeItem等NPC命令现在不限制部分装备的属性鉴定
  重要：防止利用@@InputInteger、@@InputString修改封包篡改M/S变量！
  重要：修正特定条件下交易，提示交易对方的背包空间不够问题，如果使用大背包功能，请及时更新至此版本及以上！
  现在重新刷怪的时间会更准确一些
  怪物说话暂时对人形怪开放
  不允许英雄通过SetAbility进行GM隐身
  现在倚天劈地可以攻击触发
  补全几个怪物的攻击触发
  现在人形怪能否看破隐身由数据表的cooleye配置决定
  人形怪不受SECRET地图参数影响
  优化分身术动作，防卡帧
  修改展示物品保留时间1->24小时
  无极真气道术附加计算放到最后
  修正看不到他人摆摊物品的附加描述问题
  防石化完善
  冰冻会行动缓慢
  完善护身、八卦护身特性，被攻击会飘蓝色伤害值
  优化各种飘血效果
  防止重复加载相同装备套装，加载时会提示并自动删除重复条目
  RefItemShape命令支持时装
  改进自定义字符串过滤功能
  补全解毒术类型
  重构优化生物状态系统（红毒、绿毒、隐身、冰冻等状态）
  重构优化AbilityAdd能力系统
  苹果类的物品支持超过65535限制
  野蛮冲撞不可移动时间支持毫秒级别
  近战技能支持忽视护体神盾
  技能设置面板的十步一杀增加是否可重叠玩家和玩家下属选项
  人形怪ini配置增加参数：NoQueryState=0/1，是否禁止查看装备信息，默认0允许；DamageEquipDura=0/1，是否掉装备持久，默认0不掉
  添加变量：<$ChangingName>			// 0/1，是否改名中
  添加变量：<$ClientSwitches[0~7]>	// 客户端开关，0目前是客户端自动挂机复选框状态，其他暂未用到
  添加变量：<$TARINFO_ISHUMAN>		// 查看下发说明
  添加变量：<$ATTINFO_ISHUMAN>		// 查看下发说明
  优化字符串相关的函数
  放宽检测鉴定属性转移同类装备的要求
  战斗小退限制支持毫秒，更新后及时修改数值，需要全套配套更新！
  武器的DB速度设置一致才可以对速度数据进行鉴定转移
  扩展NPC命令：OpenItemBox，参数5为数量，默认1；参数6是否设置经验所属(0/1)；参数7是否隐藏死亡动画(0/1)，默认不隐藏
  修复已知问题

  扩展AbilityAdd命令：
    支持怪物
    突破65535限制
    支持变量：$T.ABILITYADDPOINT0~31、$T.ABILITYADDTIME0~31
    类型16：增加攻击（与增加攻击的食品冲突，如苹果）
    类型17：增加魔法（类上）
    类型18：增加道术（类上）
    类型19：增加攻击速度（类上）
    类型20：增加HP（类上）
    类型21：增加MP（类上）
    类型22：减少攻击

  扩展MakePoison命令
    类型6：禁锢，轻量麻痹
    类型7：重伤，失去防御力
    类型13：神龙附身
    类型14：龙化
    类型15：滴血，数值可以指定基础掉血量，默认50，再按一定百分比掉血
    类型16：诅咒，丧失防御，数值小于100时，按百分比减少攻击（100-数值），数值大于100时，按百分比增加攻击（数值-100），状态存档

  SetAbility的AID在601~855时，可以用于设置技能附加威力	// 对应的技能ID=AID-600
    例：SetAbility 611 999 10 雷电术附加威力消失了！

  增加NPC命令：
    CliProgBar 6500 这是提示信息	// 在客户端显示简单的进度条，参数1是倒计时时间(毫秒)，参数2是提示文字
    CliProgBar 0	// 关闭进度条
  
  增加NPC命令：
    ClientPressKey 常规键 状态键		// 让客户端模拟按下键盘键
      常规键：0~9，A-Z，F1~F24，~!@*...，ESC、UP、DOWN、HOME、END...等等
      状态键：0=无，1=Shift，2=Alt，4=Ctrl，复合键位将数字相加即可

  QF的[@PickupItem]增加参数：$PARAM(10)=0/1，1表示英雄拾取到英雄背包中
    例：
    [@pickupitem]
    #if
    CompVal <$PARAM(9)> ! 1
    #act
    break
    #if
    CompVal <$PARAM(10)> = 0
    #act
    GetEquipProps 10000
    #elseact
    ; 临时放回主人背包以便使用GetEquipProps
    H.MoveBagItem <$PARAM(7)>
    GetEquipProps 10000
    ; 用完，放回英雄背包
    MoveBagItem <$PARAM(7)>

  增加刷怪预告触发，MonGen.txt的条目增加第12参数，格式：@QM标签1,怪物刷新前秒数1|@QM标签2,怪物刷新前秒数2|...
    注意：不适用于老的刷新模式！秒数+引擎设置的怪物消失时间必须小于刷怪间隔时间！
    触发参数：$PARAM(0)=秒数，$PARAM(1)=分钟数，$PARAM(2)=怪物名，$PARAM(3)=地图名，$PARAM(4)/$PARAM(5)=中心坐标X/Y（非准确坐标）
    例：3 333 333 蜈蚣 6 1 2 0 0 0 0 @PrespawnAlert,60|@PrespawnAlert,10
    ; QMapEvent-0.txt文件对应触发，注意此处非个人触发
    [@PrespawnAlert]
    #act
    SendScrollMsg "<$PARAM(3)>的<COLOR=clRed <$PARAM(2)>>将在<COLOR=clLime <$PARAM(0)>秒>后刷出！"

  DropItemMap命令支持第9参数：怪物名称
    当参数9是有效的怪物名，将按怪物信息掉落物品，支持多个物品名（以“|”分割）
    例：DropItemMap Self "" "" "" 开天|屠龙|匕首 1 "" 1 蜈蚣
    
  杀人武器诅咒时将触发QF的[@OnCursingWeapon]
    $PARAM(0)		// 武器名称
    $PARAM(1)		// 武器当前幸运点
    $PARAM(2)		// 武器当前诅咒点
    $PARAM(3)		// 角色名（英雄或玩家）
    $PARAM(4)		// Race，1是玩家，60是英雄
    例：
    [@OnCursingWeapon]
    #if
    CompVal <$PARAM(1)> > 0 i
    #act
    ; 阻止武器被扣幸运诅咒
    Approve 0

  人物及下属被攻击触发怪物技能例子：
    [@UnderAttack]
    #if
    Random 3
    ; 怪物
    CompVal <$ATTINFO_ISHUMAN> = 0 s
    ; 静态怪物技能表有此怪物（提前编辑，引擎启动加载，不要动态读写）
    HashExists H_怪物技能XX <$ATTINFO_NAME>
    #act
    T.MagicFire 62 15 1 -2 6 550 0 3

  摆摊物品上架集市手续费增加日志
  防止脚本中的变量写法不规范导致NPC操作有几率出错问题
  修正因上版重构状态系统导致美杜莎之瞳技能时间太短问题
  修正自由加点附加的HP/MP刷新被扣除问题
  修正上版优化刷怪后GM清理地图后无法自动重刷怪物问题
  由于上版重构了状态系统，身体变色功能不再支持（存在冲突）
  由于上版优化后，地图的SECRET不再支持HP百分比方式
  防止PK中不断小退重置复活时间，包含英雄，需开启SoftClosedResetRevivalTime参数
  MobNPC命令允许重叠创建NPC
  还原攻击时优先计算最后叠上来的人
  被噬魂沼泽攻击时，不再轻易切换英雄锁定的目标
  允许队长直接退组，队伍多于2人时自动由其他人接任队长
  增加组队开关NPC命令：AllowGroup 0/1
  增加变量：$AllowGroup	// 允许组队
    $BanShout			// 允许群聊
    $HearWhisper		// 允许私聊
    $AllowDeal			// 允许交易
    $AllowGuild			// 允许加入行会
    $HearGuildChat  	// 允许行会聊天
    $AllowGroupRecall	// 允许天地合一
    $AllowGuildRecall	// 允许行会合一
    $AttackMode			// 攻击模式变量（0~6）
  修正查看佣兵信息出错问题
  修正血魂技能的双倍伤害或附加5%血量伤害可能在下次被伤害时才生效问题


DBS
  64位物品ID适配
  优化sqlite3性能
  MySQL版修正角色ID超过一定值存档异常问题


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


登录器
  配套更新


客户端
  64位物品ID适配
  购买商店重叠物品默认为最大数量
  提高游戏声音的响应速度
  商铺可以购买、赠送更多数量的物品
  <PIC=...>附带有效的LABEL才可以点击；同时不设置HINT和LABEL时将不响应鼠标事件
  配套支持MAIN_FUNC_BTN_TIPS命令
  血石持久为0时显示红色
  OK框跟随窗口右下角
  物品Tips增加拆分快捷键提示
  修正个别情况下拆分重叠物品假象问题
  快捷物品框可以合并、拆分重叠物品
  修正从背包拆分物品的窗口焦点问题
  自动换上有持久的符、毒
  人物符/毒不再需要佩戴到身上；当不使用智能换毒时会优先使用背包前面位置的药粉来释放技能
  增加英雄装备、英雄技能界面的自定义快捷键设置
  引擎设置为免毒时客户端会自动换毒
  弹框面板文字支持颜色、图片写法
  修正上个版本关闭后进程残留问题（尽快更新到新版本客户端！）
  防止卡魔法盾
  AbilityEffects.txt条目格式最后增加一列为：背景模式（类似PlayEffect命令），可查看下面的更新说明
  内挂【基本】页面增加：隐藏播放特效和隐藏物品光柱复选框
  升级武器显示(*)不对问题
  首次打开内挂物品页面无法使用拉条问题
  双击摆摊物品将弹出购买确认界面（原来需要按住Ctrl+双击）
  修正包满购买商铺物品的提示
  优化各种飘血效果
  防止背包在一定条件下看不见问题
  HP自动换算显示，防止数字过长
  部分文字渲染缺最后1个像素问题
  支持非战士技能的挂机过滤，鼠标右键点击技能图标设置；注意：群体技能是否锁定改为中键
  增加挂机时是否自动召唤英雄开关
  增加部分DeBuffer效果
  修正完善龙化效果
  修正自定义滚动条图片问题
  修正内功经络标识线错位问题
  完善强化骷髅效果
  lui.pkg支持加密文件名，支持格式：7z、winrar、zip-aes256、gzip，bzip2 等...

  修正自身隐身效果不突出问题
  防止撞人反弹有几率造成状态不正确问题
  修正卧龙古书NPC无法传送到卧龙山庄问题
  特殊情况下重叠物品不显示数量问题


其他
  数据工具增加64位物品ID的转换支持，转换前注意填写正确的区号，提供变更ID文件目录
  数据工具弃用物品ID合并变更功能，已经不需要
  增加ServerID登记服务器，必要程序，查看更新包【ServerID登记服务器】里的相关说明！
  控制台配置向导会自动配置可用的服务器ID
  控制台配置向导增加读取数据表出错的提示
  LoginSrvMySQL版屏蔽日志的中的明文密码
  数据工具改名支持：角色名,其他1,其他2,...的格式文本
  数据工具的日志分析现在不加载过多日志，防止内存不足
  数据工具修正服务器ID>100后分析后分类错误问题








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)  8链式、溅射方式下攻击的最多数量[可选]
    注：支持普通魔法技能和合击技能，不包含战士技能，不支持技能触发，不支持攻击触发，无举手动作，需配套客户端更新！
      当参数4为-1时，参数5为溅射技能半径，建议使用T.MagicFire方式
      当参数4为-2时，参数5为链式技能半径，建议使用T.MagicFire方式
      当使用自定义坐标时，X和Y支持批量方式，如：11|22|33 44|55|56
      当自定义坐标有效且参数7不为0是，将不检测目标有效性，强制显示技能效果
      当参数8不指定时，默认根据技能等级去计算可攻击的最多数量
    例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	// 参数5~9非空时，传输参数5~9内容到队员（包括自己）的$PARAM(5~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减少合击伤害(1~100)	// 例：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) 背景模式(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 // 禁止出售物品
  49 // 禁用商铺
  50 // 破盾

---------------------------------------
新增爆率文件引入用法，可以和以前的爆率混搭使用，支持多个文件被同时调用，方便编辑爆率
  比如在 白野猪.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_ISHUMAN	// 目标是否人物（包含英雄和下属） {'0', '1'}
$TARINFO_NAME		// 目标名称
$TARINFO_FNAME		// 目标全名
$ATTINFO_SKILLID	// 攻击使用技能ID
$ATTINFO_RACE		// 攻击者Race
$ATTINFO_ISHERO		// 攻击者是否英雄
$ATTINFO_ISHUMAN	// 攻击者是否人物（包含英雄和下属） {'0', '1'}
$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 字段 模式(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;




