!注意21.05.22-16之后的引擎,登录器不支持老的列表形式。防劫持新列表配置查看上方视频教程。
!如需老列表形式,请使用诸如1129 0129 0611 0522-15-1等正式版引擎登录器。
!微信验证码功能因使用外部文本,当文本达到一定体积(1M以上),会严重影响服务器性能,建议优化思路或者使用两步验证功能替换
!请注意,从2021年开始的程序版本,不再支持windows XP、2003及以下的操作系统
!注意21.05.22-03版及之前的版本,NPC变量用在不合适的字段会导致引擎报错问题,请及时更新。
!不要在游戏服务器上安装搜狗输入法,影响服务器的稳定性
!推荐客户及时升级05.23-18之后的新引擎。
!0524-09以后引擎宝箱使用权重算法,物品几率设置为0则为展示品不可获取,物品最大几率支持到亿亿,物品几率设置得越大越容易获得!!!
!微信验证码功能因使用外部文本,当文本达到一定体积(1M以上),会严重影响服务器性能,建议优化思路或者使用两步验证功能替换
!请注意,从2021年开始的程序版本,不再支持windows XP、2003及以下的操作系统
!注意2021.0522.03版及之前的版本,NPC变量用在不合适的字段会导致引擎报错问题,请及时更新。
!不要在游戏服务器上安装搜狗输入法,影响服务器的稳定性
!注意:启用物品来源的客户建议尽快升级到21.05.25后引擎,以避免各类原因导致的物品ID冲突或错误。升级请仔细查阅 ServerID登记服务器使用说明 及 合区工具注意事项。升级到21.05.25需要拓展角色数据库支持64位物品ID,详情可前往论坛 www.bluem2.cn查看。
2021/5/25 全套配套
—————————————————————————
M2
【引擎版本0525-01】
物品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性能
【引擎版本0525-01-1】
扩展地图参数:SECRET(31|固定角色名|衣服外观|武器外观|衣服外观特效|武器外观特效)
【引擎版本0525-02】
修补套装激活时的光效
英雄会检测十步一杀需要的MP量
修正上版展示品缓存提示错误问题
【引擎版本0525-02-1】
修正因改为64位物品ID可能导致对话框的物品ID获取错误问题
增加变量<$DLGITEMID>,获取对话框的物品ID // 由于P/M…等整数变量为32位,对于GetDlgItemID不足以赋予物品ID!可改用为字符串型的S变量,或者直接使用<$DLGITEMID>
【引擎版本0525-03】
修正@PickupItem可能会出现掉落怪物记录错误问题
【引擎版本0525-03-1】
PetPickupItemRange设置不同数值会刷新视觉,所以不要频繁切换
完善NPC参数的预分析逻辑(类似<COLOR=…<$变量>>)
增加NPC命令:MAIN_FUNC_BTN_TIPS 序号 鼠标提示 // 设置主界面部件的鼠标tips,不要频繁使用,配套客户端更新
允许毒、符、魔血石类物品持久为0时不消失
【引擎版本0525-04】
修正SetAbility 45,10点以下为减速度,10点以上为加速度
NPC命令TakeOff增加取下触发(注意防止死循环)
改名时如果检测在线角色名占用,会触发[@chgname_fail_name_used_0],<$PARAM(0)>等于”[英雄] “是英雄触发,为空是人物触发 // 注:[@chgname_fail_name_used]是通过DBS检测
去掉SetItemDesc的当“描述”为空时将删除对应物品ID的描述功能,防止重复设置一个物品属性造成不刷新问题!
DBS
【引擎版本0525-01】
64位物品ID适配
优化sqlite3性能
游戏网关
【引擎版本0525-01】
64位物品ID适配
【引擎版本0525-03】
1.76性能兼容性优化
登录器
配套更新
客户端
【引擎版本0525-01】
64位物品ID适配
购买商店重叠物品默认为最大数量
提高游戏声音的响应速度
商铺可以购买、赠送更多数量的物品
【引擎版本0525-03-1】
<PIC=…>附带有效的LABEL才可以点击
配套支持MAIN_FUNC_BTN_TIPS命令
血石持久为0时显示红色
【引擎版本0525-04】
OK框跟随窗口右下角
其他
【引擎版本0525-01】
数据工具增加64位物品ID的转换支持,转换前注意填写正确的区号,提供变更ID文件目录
数据工具弃用物品ID合并变更功能,已经不需要
增加ServerID登记服务器,必要程序,查看更新包【ServerID登记服务器】里的相关说明!
控制台配置向导会自动配置可用的服务器ID
2021/5/24 全套配套
————————————————————————
M2
【引擎版本0524-07】 AC功能支持 大背包
加强稳定性防止出错,优化性能
摊位名称不过滤空格
修正摊位名称过滤提示不正确问题
!修正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中
带圆括号的动态变量支持内嵌固定变量写法,例如:<$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版),需要使用【数据工具】转换数据,全套配套更新
【引擎版本0524-08】
!修正清理背包过期物品可能导致错误问题
!修正全身宝石等级的技能威力重复叠加问题
【引擎版本0524-08-2】
修正上版NOTALLOWUSEITEMS物品带圆括号失效问题
【引擎版本0524-09】 AC功能更新装备相关功能 装备评级、装备对比、LOGO徽标、装备指派名称 以及怪物称号功能
优化队列性能
防止在[@OnInlayingGemstone]字段中删除背包物品导致镶嵌流程被扰乱、破坏
!宝箱使用权重算法,物品几率设置为0则为展示品不可获取,物品最大几率支持到1亿,物品几率设置得越大越容易获得!!!
【引擎版本0524-09-2】
修正自从增加攻击统计后的被攻击触发变量不正确问题
【引擎版本0524-10】
激活套装时只提示当前穿戴的装备套装信息
修正MapQuest触发引起当前NPC对话框点击失效问题
机器人脚本文件如果未变动,重新加载不重置计时
【引擎版本0524-10-2】
修正上版更新导致换毒、符也触发套装特效问题
防止自由加点计算溢出
修正GM列表操作可能出错问题
引擎去掉无用的商铺赠送开关(在游戏网关限制)
【引擎版本0524-10-3】
修正人形怪名带””读取不到配置文件问题
英雄死亡更容易触发[@HeroDie]
【引擎版本0524-11】 AC功能更新支持大血条、自定义按钮、货币转区功能
交易重叠物品数量显示不同步问题
人物死亡掉落记录物品(物品表的RareItem包含8)将触发QF的[@DropItem],注:死亡掉落物品$PARAM(0)=0,手动丢掉物品$PARAM(0)=1
触发时支持的变量:<$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)
人形怪不消耗装备持久
修正自更新大背包后快捷物品栏不保存状态问题
【引擎版本0524-12】
修正爆率文件的检测条件不支持纯文字问题
支持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
【引擎版本0524-12-2】
stdmode=7/25类物品归类为装备,GetEquipProps可以获取到属性,注意装备属性也将变得有效!
【引擎版本0524-13】(发布大背包整合素材+大血条定制ui)
1.摆摊名字14字符扩展到30字符,输入框30字符扩展到60字符(需更换cui.cfg)
2.英雄/人物丢掉或掉落物品之前(物品表的RareItem包含8)将触发QF的[@DroppingItem] // 禁止实时HardDisk操作
$PARAM(0)等于1000 // 死亡掉落背包物品
$PARAM(0)等于2000 // 手动丢弃背包物品
$PARAM(0)在0~16之间 // 死亡掉落身上装备的位置
<$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)
其他$PARAM(XX)参数同[@DropItem]
例:
[@DroppingItem] // 如果不需要此功能删除掉QF的[@DroppingItem]字段即可
#if
IsAdmin
#act
; 阻止物品丢弃或掉落,默认允许掉落
Approve 0
3.NPC商店买/卖商品之前(物品表的RareItem包含32)将触发QF的[@DealingGoods]
$PARAM(0)=0/1 // 0购买物品,1出售物品
<$PARAM(1)>:物品名,<$PARAM(2)>:LOOKS,<$PARAM(3)>:触发人名称,<$PARAM(4)>:地图名,<$PARAM(5)>:X坐标,<$PARAM(6)>:Y坐标,<$PARAM(7)>:物品ID
$PARAM(8) // 价格
$PARAM(9) // NPC商店名称
其他$PARAM(XX)参数同[@DropItem]
例:
[@DealingGoods] // 如果不需要此功能删除掉QF的[@DealingGoods]字段即可
#if
CompVal <$PARAM(1)> = 开天 str
#act
; 阻止操作
Approve 0
4.仓库存/取物品之前(物品表的RareItem包含64)将触发QF的[@StorageItem]
$PARAM(0)=0/1 // 0存储物品,1取回物品
<$PARAM(1)>:物品名,<$PARAM(2)>:LOOKS,<$PARAM(3)>:触发人名称,<$PARAM(4)>:地图名,<$PARAM(5)>:X坐标,<$PARAM(6)>:Y坐标,<$PARAM(7)>:物品ID
其他$PARAM(XX)参数同[@DropItem]
例:
[@StorageItem] // 如果不需要此功能删除掉QF的[@StorageItem]字段即可
#if
IsAdmin
#act
; 阻止操作
Approve 0
SQL引擎的极品爆出提示和物品相关触发在物品数据库字段修改,蓝海编辑器打开显示中文,极品提示字段(RareItem)
极品提示 细分:1=怪物掉落通知 2=拾取触发 4=商铺购买通知 8=人物死亡掉落触发 16=队伍拾取通知,32=商店买卖触发,64=仓库存取触发,要开启多项,将前面的值相加即可,全部开启相加为127
【引擎版本0524-14】
UpgradeItem等NPC命令将刷新个人属性
修正首次攻城部分沙城相关NPC命令可能出错的问题
!setup增加野蛮冲撞间隔时间参数:RushRushTime=3(默认3秒,至多120秒),游戏网关(AC网关8.9.5.5-1以后)、客户端必须配套!
!setup增加血魂一击(法)威力比率:ssPowerRate_116=100(默认100),血魂一击(道)威力比率:ssPowerRate_117=100(默认100),注:技能威力通常可以通过Skill表调节
删除技能时也会清理客户端残存技能效果
增加获取地图怪物数量的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”(@重读商人 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}>
关于ACD 可以用于0-499的个人变量和500-599的全局变量【全局变量用发类似G H变量,并加强带时间,执行一次后所有玩家下线上线都可以看到ACD时间,服务器重起后消失】
比如
SetAbility 500 10 300 【意思将全局变量500 调整为10 并持续300秒后恢复为0】可用于装备掉落奖励,等级奖励,活动奖励等等
<ACD=501{C=#$00FC7C}> ID倒计时+颜色
<ACD=501{C=#$00FC7C,ax=50,ay=20}> ID倒计时+颜色+坐标
<ACD=501{C=#$00FC7C,ax=50,ay=20} HINT=注释> ID倒计时+颜色+坐标+注释
增加预备合击的NPC命令:PrepareUniteHit,需英雄在线并且有合击技能,预备后如果有目标会立即释放合击
【引擎版本0524-14-2】
支持高效的无限嵌套变量解析,同时“带圆括号的动态变量支持内嵌固定变量写法”此条更新废弃!!!
例:
#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]
【引擎版本0524-17】
优化安全区识别,优化封包系统性能
防止角色下线收摊可能出错问题
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清理指定怪物失效问题
【引擎版本0524-17】登录器配置器更新(重连性能优化)
StatusRate命令支持小数倍数写法 倍率为支持小数写法,如1.1,1.5,时间的单位为秒) 例:STATUSRATE 5 2.5 60
StatusRate 类别 倍率 时间 。(0:防御力 1:魔御力 2: 攻击力 3:魔法力 4:道术 5:HP 6:MP)
刺杀时非刺杀位的伤害等同于普攻
增加英雄的怒气值变量$H.UnityEnergy
【引擎版本0524-18】
首次自动扩展monster.db出错问题(之前版本的引擎,多次运行也可以完成自动扩展)
修正部分技能不进行攻击触发问题(比如疾光电影)
大幅度减少生物对消息的响应时间,提高游戏体验
飞行类魔法伤害生效时间更准确
增加NPC脚本的循环支持,#for和#~for,配对使用,循环内部支持完整的#if,#act,#elseact…流程,
注意此次更新需要重新上传远程脚本数据,远程脚本数据和之前的版本数据也不兼容!
配套NPC变量<$LoopCursor>,为当前循环游标变量,获取效率比自定义的游标变量稍高
配套NPC执行命令:BreakLoop,用于中断当前的循环层,并非整个字段中断;整个字段中断仍然使用Break
支持多层次的循环嵌套(见下发自定义技能示例)
格式:
#for (游标变量 = 初始值表达式, 游标变量 < 检测值, 游标变量 + 步进值) // 循环开始和声明
; 中间是完整的#if/#act/#elseact原脚本流程
#if
; …
#act
; ..
#elseact
; …
#~for // 循环结束标识
; 初始声明:即【游标变量 = 初始值表达式】部分,“游标变量”的初始化,“初始值表达式”支持单个整数或变量,或者一个运算表达式,如:游标变量 = M_SPLIT_CNT – 1(注意写法,中间留有空格)
; 条件声明:即【游标变量 < 检测值】部分,循环条件限制,“游标变量”小于“检测值”会继续循环,否则将终止循环,“检测值”可以是只读的整数或整数变量,比较符号支持:<小于、>大于、=等于、!不等于、?大于等于
; 步进声明:即【游标变量 + 步进值】部分,游标步进方法,“步进值”支持整数或整数变量,运算符号支持:+加、-减、*乘、/除、%取模、=等于
; “游标变量”建议实用D0~99,M0~99这种非自由定义的整数变量,效率较好
例:
[@loopex]
; 这里没有写#if true,不需要,程序会自动识别
#act
; 分解出阿拉伯数字,剩余部分是中文汉字
RegExSplitCapture 一1二2三3四4五5六6七7八8九 [0-9]+
SendMsg 7 剩余字的符串数量:<$STR(M_SPLIT_CNT)>
SendMsg 7 阿拉伯数字的数量:<$STR(M_MATCHED_CNT)>
; 循环游标D99从0初始化,至M_SPLIT_CNT – 1取S_SPLIT_STRS[n]的值,每次步进1
#for (D99 = 0, D99 < M_SPLIT_CNT, D99 + 1)
#if
; 此次更新同时会自动补全true,可以忽略
; true
#act
SendMsg 5 S_SPLIT_STRS步进1:<$STR(S_SPLIT_STRS[<$STR(D99)>]>
#~for
; 循环游标D99从0初始化,至M_MATCHED_CNT – 1取S_SPLIT_STRS[n]的值,每次步进1
#for (D99 = 0, D99 < M_MATCHED_CNT, D99 + 1)
#if
#act
SendMsg 6 S_MATCHED_STRS步进1:<$STR(S_MATCHED_STRS[<$STR(D99)>]>
#~for
; 倒退循环,初始D99 = M_SPLIT_CNT – 1,D99 大于等于 0,每次步退1
#for (D99 = M_SPLIT_CNT – 1, D99 ? 0, D99 – 1)
#if
#act
; 这里使用<$LoopCursor>变量,效率稍高些,等同于<$STR(D99)>
SendMsg 7 S_SPLIT_STRS步退1:<$STR(S_SPLIT_STRS[<$LoopCursor>]>
#if
; 游标到6后中断掉循环,会跳出循环继续执行(#~for之后),如果使用Break,则后续不再执行
CompVal <$LoopCursor> = 6
#act
BreakLoop
#~for
; 上个循坏之外继续执行
SendMsg 7 上个循坏之外继续执行…
; 自己定义跳出循环变量
Mov M99 1
; 先定义一个无限循环(不建议,除非你熟悉脚本的写作)
#for (D99 = 0, D99 < 1, D99 – 0)
; 运算M99
#if
#act
Inc M99 10
; 循环10万次后中断循环
#if
Equal M99 100000
#act
SendMsg 7 循环中断于<$STR(M99)>…
BreakLoop
#~for
#if
#act
SendMsg 7 循环结束<$STR(M99)>…
增加NPC脚本的区间选择支持,#case和#~case,配对使用,内部支持的#if,#act,#elseact…流程,仅单层
格式和示例:
[@TestCase]
#act
; 产生一个0~99之间的随机数字
SetRandomNO 100
Mov M99 <$RANDOMNO>
#case (M99) // case开始,括号里的声明仅一个整数变量(Mxx,Dxx…等或此类自定义变量)
#0: // 选择器常量声明,“#”开头,后面是单个数字,以“:”结束
#if // 一个普通的#if/#act/#elseact流程
#act
SendMsg 5 命中:<$STR(M99)>
#1~9: // 选择器常量声明,“#”开头,后面可以是数字区间,以“:”结束,下同
#if
#act
SendMsg 5 <$STR(M99)>在1~9之间
#10~89:
#if
#act
SendMsg 5 <$STR(M99)>在10~99之间
#86,88,91~93: // 以“,”分开多个数字区间的写法
#if
#act
SendMsg 5 <$STR(M99)>在86,88,91~93之间
#def: // 默认选择,如果上面的数字区间均未命中,则默认选择此流程;可以不写,但是都未命中则不执行任何流程
#if
#act
SendMsg 5 <$STR(M99)>其他数字,默认执行此选择
#~case // case结束标识
注意:不允许在#case里执行#for循环,但是允许在#for里包含#case
注意:数字区间禁止重叠,如果重叠加载NPC脚本时会提示,同时重叠的数字区间将失效!
攻击触发里增加目标坐标变量:<$TARINFO_CX>,<$TARINFO_CY>
技能触发[@MagSelfFuncXX]是,<$PARAM(1)>是目标X坐标,<$PARAM(2)>是目标Y坐标
增加释放魔法NPC命令:MagicFire 1技能ID 2等级(0~15) 3显示技能效果(0/1) 4方式(-2链式 -1溅射 0自己,1当前目标,自定义坐标X) 5自定义坐标Y[可选] 6技能延迟(毫秒)[可选] 7自定义坐标强显效果(0/1)
注:支持普通魔法技能和合击技能,不包含战士技能,不支持技能触发,不支持攻击触发,无举手动作,需配套客户端更新!
当参数4为-1时,参数5为溅射技能半径,建议使用T.MagicFire方式
当参数4为-2时,参数5为链式技能半径,建议使用T.MagicFire方式
当使用自定义坐标时,X和Y支持批量方式,如:11|22|33 44|55|56
当自定义坐标有效且参数7不为0是,将不检测目标有效性,强制显示技能效果
例1:
[@attack]
#act
SetRandomNO 60 65
#if
CompVal <$ATTINFO_ISHERO> = 1
#act
h.MagicFire <$RANDOMNO> 5 1 1
#elseact
MagicFire 13 11 1 1
MagicFire <$RANDOMNO> 15 1 1
例2:
[@MagSelfFunc11]
#act
; 暂存技能ID
Mov M97 11
goto @CustomMagic
[@MagSelfFunc13]
#act
; 暂存技能ID
Mov M97 13
goto @CustomMagic
[@CustomMagic]
#act
; 存放XY坐标组,使用“|”间隔
Mov S98 “”
Mov S99 “”
; 多层循环,M0/M1分别从-2至+2,构成一个5×5的攻击范围方格
#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 ..ItemDataItemPreDesc.csv
Hash H_ItemPreDesc BGSave ..ItemDataItemPreDesc.csv
Hash H_ItemMidDesc Load ..ItemDataItemMidDesc.csv
Hash H_ItemMidDesc BGSave ..ItemDataItemMidDesc.csv
Hash H_ItemSufDesc Load ..ItemDataItemSufDesc.csv
Hash H_ItemSufDesc BGSave ..ItemDataItemSufDesc.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 ..ItemDataItemProp_<$STR(M_cur)>.csv
Hash H_ItemProp_<$LoopCursor> BGSave ..ItemDataItemProp_<$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
【引擎版本0524-18-1】
优化Hash容器的存盘时间
优化人物读档、物品批量下发等…
修正脚本中带有#case导致其他字段下的命令加载不全问题!
【引擎版本0524-19】
大幅度提高远程脚本上传、下载性能
大幅度优化Json、CheckJson命令的性能,Json命令现在较全面,使用方式也有较大变动,参考下面的说明!
Calc命令使用传统的四舍五入
服饰、武器的外观、翅膀特效、装备发光 支持到6.5万,全套配套更新!
OpenBox命令的第1参数为有效宝箱名称会打开宝箱,第2参数非空可以自动转宝箱,第3参数非空可以在转完宝箱自动获取物品
防止宝箱物品权重为0时仍然有很小几率获得问题
修正上版下属攻击不触发问题
修正上版镖车被攻击不反馈问题(实际有效)
修正[@SetAbility_xx]识别英雄错误问题
修正商铺购买重叠物品触发数量为1问题
人物的下属会自动赋予攻击触发
优化NPC触发参数传输
优化NPC命令参数
【引擎版本0524-19】DBS
修正启动失败时关闭错误
启动会提示最大物品ID
游戏网关
对引擎的ConvertMagic命令提供支持,防止转换技能后释放技能卡帧
减少内存占用,优化性能
【引擎版本0524-19】游戏网关
适配服饰、武器外观的扩展
登录器
防止snappy32.dll被误报并优化(这是google开源的压缩算法库)
登录器不再列出超出屏幕范围的分辨率
客户端
更严格的物品使用逻辑(需要配套引擎更新)
修正十步一杀会导致他人重新追击上次飞走目标的问题
去掉英雄连续锁定功能(已经没有必要,因为服务器端已能稳定锁定目标)
启用挂机时的英雄自动回收功能,见内挂保护标签页
天地结晶的经验条偶尔出界问题
【引擎版本0524-12】客户端更新
修正自更新大背包后快捷物品栏不保存状态问题
防止切换简装导致武器的临时加速参数丢失
补全装备套装属性的显示
【引擎版本0524-14】客户端更新
<PIC=…>增加帧播放间隔时间设置,见下方的:PIC=功能扩展2
NPC对话、聊天栏、任务栏、跑马灯、自定按钮标题,支持SetAbility的倒计时变量:<ACD=ID>
PIC=功能扩展2:// 配置后面增加两项:绝对X,绝对Y(不参与自动换行计算)
<PIC=items,55,1,0,0,0,8,11,22,100 LABEL=@execlab HINT=裁决> //items=wil文件名,索引,图片数,循环,透明,偏移X,偏移Y,绝对X,绝对Y(不参与自动换行计算),帧间隔(毫秒)
【引擎版本0524-17】客户端更新
修正掉线一段时间后游戏无声问题
优化劈星斩、雷霆一击打击感
输入框支持键盘组合键:Ctrl+[Back/Delete/Left/Right]
重构声音系统,略微调大合击声音
修正编辑框光标定位问题
修正快捷键控件文字居中问题
【引擎版本0524-18】客户端更新
支持自定义物品附加描述,配套引擎更新
物品描述的图片支持更多选项
【引擎版本0524-19】客户端更新
大幅度提升Json的性能
服饰、武器的外观、翅膀特效、装备发光 支持到6.5万,全套配套更新!
首饰内观支持特效(stditems.xml)
其他
优化性能
优化微端服务器性能,增加简单命令行参数可指定参数文件
修正合区工具未改名的文件没有复制到主区问题,佣兵角色有极小几率合并失败问题,主区合并文本不存在时未将副区文件合并过去问题
修正合区工具对文本列表只能合并一个文件的问题
优化微端服务器、登录器配置服务器
修改控制台程序服务器外部IP控件的Tips
【引擎版本0524-18】其他更新
合区工具支持基于Hash命令保存的物品ID数据文件
合区工具日志搜索改用简单实用的表达式方式
合区工具调整UI
控制台清理支持csv、ini、json等扩展名
声明:本站资源收集自互联网,仅供学习使用,请勿商业,下载后24小时内删除,否则后果自负。




