更新日志(2019-2020)
PS: 请将VMProtectedSDK32.dll 放到 C:/Windows/System 下 因为没有再使用VMP加壳 程序依赖这个dll (客户端程序加壳 所以发布登录器并不会依赖这个dll)
2021年04月26日更新
- 修正 物品数据库修改职业为0无效的问题。
- 修正 无限刀配置保存失败的问题。
2021年04月25日更新
- 修正 上一版本配置数据不会下发导致客户端物品显示错误的问题
- 增加 M2-选项-游戏参数-客户端控制-禁止使用自动挂机设置
- 增加 登陆器编辑器窗口化组件
- 优化 版本管理器 单元测试 QFunction QManagerNpc 时间过长的问题
2021年04月23日更新
- 修正 火墙持续伤害 无法 通过 QManager.MonitorDamageEx 触发 技能ID总是0的问题。
- 修正 及时雨内挂下物品过滤修改后 保存按钮无法点击 导致无法保存过滤配置的问题
- 增加 选项-游戏参数-游戏速度-无限不卡刀 设置 开启后 客户端的攻击将更流畅,适用于 无限刀版本
- 增加 GameLib.LoadLibrary ,GameLib.GetProcAddress ` GameLib.FreeLibrary 用于版本内可延迟加载DLL
2021年04月19日更新
- 优化 如果微端描述文件MiniVer.91Ver 无法下载会导致一直提示 后台构建微端资源中的问题。
- 增加 生成登陆器增加 客户端推广标识, 在服务端可使用 Player.PromotionFlag 获取对应的推广标识。通过此功能可以实现统计哪些渠道来了多少玩家。(需要重新生成登陆器以及更新内核91Client.dat 以及服务端)
2021年04月15日更新
- 优化 微端下载的data文件无法在版本管理器中打开
- 修正 物品自定义来源中 使用 $CUSTOM0$ 至 $CUSTOM10$ 总是显示0的问题
2021年04月14日更新
- 优化 微端加载速度 速度提升50%以上(登陆器需要重新生成)
- 修正 因91源码泄露导致Data资源格式加密能被第三方工具解密的问题(已经加密过的文件使用重新修改密码即可重新加密)
2021年03月31日更新
- 修正 复活戒指无法复活的问题
- 增加 登录器设计 分辨率下拉框
- 修正 微端不会更新部分非 \data\开头的图片资源
- 修正 DBServer 可能出现 数据库锁表。导致无法存档的问题
2021年03月14日更新
- 修正 UserItem.DisplayName 为 空字符串的问题
- 增加 自定义技能编辑器 目标选中条件 是否死亡
- 增加 自定义编辑器 目标作用 破除目标对自身隐身
- 增加 游戏参数-日志记录-关闭M2日志写入磁盘
2021年03月02日更新
- 修正 微端下载URL中包含中文或者空格会导致无法下载的问题
- 优化 自定义物品名称 ItemNameList.txt 文件大小 防止文件越来越大
- 修正 物品自定义来源中 使用图片或者动图 无法使用 W=0 来控制实际宽度的问题
- 增加 物品自定义来源中 使用 $CUSTOM0$ 至 $CUSTOM10$ 用来格式化输出 UserItem.CustomValue[0..10]对应的内容实现更多自定义化 注意本次更新必须同同时更新服务端和客户端内核 单独更新服务端或者客户端内核 都会导致各种异常问题
2021年01月31日更新
- 修正GameLib.LoadUseItemFromString 和 GameLib.SaveItemToString 有可能会导致物品的自定义属性重复的问题。
- 修正 TUserItem.OutWay2 修改后 OutWay3 如果不进行修改值会变成0的问题。
- 增加 TPlayObject.ForceMapMove(Envir: TEnvirnoment; const MapX, MapY: Integer) 此函数可以使得离线挂机人物可以被执行地图传送。
- 修正 部分技能无法打出超过21亿的伤害。
- 修正 SetBuffIcon Args1 Args2 客户端显示错误的问题。
- 增加 Tbuff.Actor 用于脚本自定义存放 玩家或者怪物对象。(仅用于存放引擎不会对这个值进行任何操作)
- 优化 客户端自动打怪会停止的问题 注意本次更新必须同同时更新服务端和客户端内核 单独更新服务端或者客户端内核 都会导致各种异常问题
2021年01月19日更新
- 优化 网关性能,修正可能黑屏的问题
- 增加 Actor.DenyAutoAddHP 属性 用于禁止引擎对怪物以及人物的自动回血 true 为不使用引擎的自动回血。
2021年01月18日更新
- 修正 网关卡顿导致游戏卡顿的问题
- 增加 Player.RemoveItemFromUIContainer(UniTag:Integer) 用于从UI物品框中移除物品
- 修正 若干小问题
2021年01月06日更新
- 修正 在某些服务器上可能登录网关会一直关闭客户端连接的问题
- 修正 Buff图标在移除Buff后不会删除的问题
- 修正 {S=xxxx;Hint=aaaa} hint 不会显示的问题
- 修正 客户端新增自定义组件在全局窗口列表下可能丢失的问题
- 增加 弓箭手衣服Shape 20-25
2020年12月22日更新
- 修正 调用自定义对话框,图片按钮 不执行脚本的问题
- 增加 登录器列表加密
- 修正 复活BUFF 设置次数不会自动删除的问题
2020年12月20日更新
- 新增 属性 TActor.AlwaysShowHP 使得玩家或者怪物 总是处于心灵启示状态 (掉血始终广播给周围玩家)
- 修改 Buff系统 复活Buff Args1 为复活生效次数,达到指定次数将自动删除buff, 0 表示无限次数
- 修正 TPlayer.Question 点击不执行脚本的问题
2020年12月16日更新
- 增加 物品 TUserItem 扩展 OutWay2 字段类型为 Integer 数组。 增加OutWay3 字段 以便支持 在自定义物品信息中 实现上下限同时显示的功能 例如物品来源配置表中 1=攻击力增加$OUTWAY2$-$OUTWAY3$ 。对应设置OutWay2 和 OutWay3 的值会被格式化为具体值 原来的Value 格式同样支持。但是不建议继续使用.详情查看 TUserItem文档
- 修改 物品来源限制(TUserItem.CustomCaption)条件从仅支持装备 为无限制。
- 新增 GameLib.SaveUserItemToString(UserItem:TUserItem):String 用于将物品转为字符串保存。 以及 GameLib.LoadUserItemFromString(Str:String):TUserItem; 从字符串转化为物品对象。注意:物品序列化为字符串后,再序列化回来会导致一样的物品唯一ID 转化后如果用于保存再转化回来。必须确保转化之前的物品对象已经从人物或者仓库销毁。否则会造成复制装备的风险 慎用!
- 修改 当物品名或者顶部拓展栏 描述为空 依旧会显示空边框的问题。
2020年12月14日更新
- 修正 Buff 系统的一些问题。
- 修正 练功师伤害不对的问题
- 修正 M2逻辑越界导致玩家掉线的问题
2020年12月11日更新
- 修正 DBServer 报异常的问题。
- 增加 QFunction 玩家聊天触发 OnChatMessage(PlayObject:TPlayObject;const Message:String;var Accept:Boolean) 可进行消息过滤和特殊指令实现
- 新增 添加Buff系统 Buff系统文档
2020年11月04日更新
- 修正 TSnowWudu.Run 报错的问题。
- 修正 经验倍率总是显示100%
- 优化 客户端流畅度。
2020年10月27日更新
- 优化 客户端字体绘制性能 降低卡顿。
- 修正 Player.CustomItem 不按照顺序放入导致无法识别物品的问题。
- 修正 多个宝宝打怪可能只有一个宝宝有伤害的问题。
- 优化 套装经验加成显示到人物主界面。
- 优化 怪物重用不在同一地方复活。
- 修改 TActor.Level 修改 如果不是玩家 将不受到 M2设置的最高等级限制。
- 优化 保存摆摊数据导致M2卡顿。
- 修正 win10 1703 1709 长按鼠标右键人物无法一直跑的问题。
2020年10月20日更新
- 修正 会心一击抵抗、 致命一击抵抗 、 以及固定伤害抵抗 无效 的问题。
- 修正 Player.CustomItem 可以放入重复 makeIndex 物品导致被刷的问题。
- 修正 网关可能异常死亡的问题。
- 修正 重载脚本引擎后游戏日志不会记录的问题。
- 修正 摆摊提取金币 StallExtractGold 不执行的问题。
- 增加 版本管理器物品类型对照表 中如果第一个字符为#则表示不显示此类型说明 例如 35=#马牌 则表示 马牌这个类型在物品悬浮提示栏中不会显示类型说明。
- 修正 马牌持久为0的时候会显示魔力的问题。
- 修正 AddItemToBigStorage 调用存入nil 物品会导致引擎报错的问题。
- 修正 M2内存泄漏的问题。
2020年5月3日更新
- 修正人物血量上限不能突破21亿的问题。
- 修正副本地图无法刷出人形怪NPC的问题。
- 修正客户端自定义技能起手特效会保持最后一帧动画的问题。
- 修正 OnBeforeStartStall Accept := false 无法控制不允许摆摊的问题。
- 优化当加载量过多 微端 部分加载会被丢弃的问题。导致需要二次重开客户端。
- 增加 Player.MoveItemToUIContainer(UniTag,物品对象,数量) UniTag 在自定义UI可控道具元素内编辑 唯一值 不可冲突 用于脚本内放置物品到自定义物品框中。
2020年04月27日更新
- 修正 MonitorDamageEx 函数修改Damage后,数值正确,飘血不对.依然是原伤害飘血数值。
- 修正物品极品属性上限为0的问题。
- 老自定技能客户端渲染自定义起手动作 帧间隔时间 增加 0 表示跟随玩家动作帧率 否则为设置的帧率。
- 增加 GameLib.AddMonNpcEx 和 GameLib.RemoveMonNpcEx 意义同 GameLib.AddMonNpc 和 GameLib.RemoveMonNpc 变更处为 地图名称字符串 参数 地图对象 TEnvirnoment 方便在操做同名地图不会冲突(比如副本中)。
- TEnvirmonet地图对象增加 MapWidth 和 MapHeight 字段 用于获取地图对象的坐标数量宽高。
2020年04月22日更新
- 修正上个版本因为因为优化物品流量导致物品相关属性不正常的问题。
- 修正 TSnowyWuDu.Run 报异常的问题。
- 增加 物品MakeString 在对话框显示特效。
2020年04月20日更新
- 修正登录器关闭 还会残留进程的问题。
- 自定义装备内观特效增加是否顶层绘制 用于解决设定特效在人物后面还是前面。(仅对武器和衣服有效)。
- 修正穿戴装备客户端等级面板显示的数据异常的问题。
- 修正物品数据库修改职业为0重新打开版本会被还原为99的问题。
- 修正武僧没有穿戴武器还会显示手中有武器的问题。
- 修正登录器换了文件夹启动登录器 桌面快捷方式指向的路径不会更新的问题。
- 优化物品流量 相比上一个版本 物品流量从 1.74K 降低为 0.3K左右。
- 修正怪物性能排行数据不准确的问题。
- 修正使用mysql 数据库 自动创建的表结构会导致引擎报错的问题。
- 修正AsyncHttpPost取不到返回值的问题
- 修正离线后基本剑术 精神力战法等被动技能技能熟练度不会增加的问题。
2020年02月20日更新
- 增加控制台停止服务器后 清理数据将被被重置为不勾选 防止删除数据。
- 修正盾牌和宝石无法脚本修改 防御和魔法防御的问题。
- 修正Buff图标单位配置错误的问题。
- 修正受到恶意攻击可能导致网关向M2发送垃圾数据导致M2假死的问题
- 移除控制台性能分析模式,将其移动到M2 性能分析选项中。
- 新增M2性能分析功能 其中包含:
1.卡顿分析:开启卡顿分析后,当M2遇到卡顿会自动生成报告文件在M2路径下。利用新增的性能报告查看工具可分析具体问题。(精确到脚本)
2.性能采样:此模式报告不会自动生成,只有当手动停止性能分析后,会生成报告文件在M2路径下.
- 控制台增加M2高性能模式以及普通模式 高性能模式 性能采样 和 卡顿分析将无法被使用,具有更高的性能。
- 修正若干小BUG优化。
2020年1月9日更新
- 增加远程版本服务器程序,便于集中管理 防止版本泄露。
1.启动远程版本服务器 在目录下会生成 Project 目录 将要远程发送的版本放置在这个目录下, 编辑 允许访问IP列表.txt 编辑 允许访问IP列表.txt 文件 增加IP 一行一个
2.编辑Mir200目录 Project.ini 中的FileName 字段 例如@139.126.124.222:1310/版本.m2project 期中IP替换为服务器的外网IP 以及端口。 端口可在 远程版本服务程序的配置文件RemoteM2ProjectSrv.json中修改
3.启动M2 即可。远程版本服务器分为免费版本 和 赞助版。 免费版本每次启动可以允许10次远程加载 超过则需要重启,赞助版本无限制。赞助联系QQ416246292 (影子) 本功能为影子赞助开发。 - 修正背包Alt点击物品触发 QFunction.AltAndLButtonClickBagItem 当物品为可叠加物品时无效的问题。
- 修正勋章会异常显示魔力+10的问题。
- 修正MessageBox 多个一起调用会导致出现多次的问题
- 修正部分无法行动的怪物TActor对象N S运行期变量无效的问题。 例如 触龙神 和千年树妖。
- 修正Player.IPLocal IP地址描述无效的问题。增加GameLib.GetIPLocal(const IP:String):String; 用于查询IP地址信息。
- 修正人形怪宝宝召唤的宝宝 打死怪物爆出东西 玩家无法拾取。
- 添加 GameLib.AsyncHttpGet(Ident:String;URL:String;TimeOut:Cardinal = 5000) 函数,用于支持httpget功能
参数说明:1.ident:请求标志,自定义数据,当httpost 完成或者错误的时候 此数据会原封不动传递到下文的OnAsyncHttpGetResult中 2.URL:远程服务器URL 3.TimeOut: 超时时间 单位秒
同时在 ManangerNpc 添加 结果触发函数 procedure OnAsyncHttpGetResult(Npc: TNormNpc; const Ident:String ; const URL:String; const Response:string ; const ErrorStr:String); 当成功或者失败会调用此函数。(异步模式 同步会导致引擎主线程逻辑卡) 参数说明: 1.Ident : 请求标志 自定义数据 2.URL:远程服务器URL 3.Response : 服务器返回的数据(失败为空字符串,如果服务器返回的就是空串就根据ErrorStr来判定成功与否) 4.ErrorStr : 成功为空字符串 失败为失败的错误描述信息。可以根据是否为空串判定是否成功 - 优化CustomEffect 设置新值 不会重置其他动画重新播放。
- 若干小BUG优化修正。
2020年1月1日跨年更新
- 修复CustomValue 无效。
- 修正 引擎启动第一次判断 Player.Wepon 会为nil 的bug。
- 修正上一版本爆率过高的问题。
- 增加TActor.CustomEffect[1..10] :Integer 自定义特效。可用于实现自定义动态称号 功能。ID 为UI设计中自定义特效ID
- 物品MakeIndex 从 Integer 修改为 int64 (为跨服做准备)。
- 物品增加CustomValue[0..10] 为自定义值 方便对物品做额外标记操作。
- 修正物品打孔一个孔 会显示3个孔的问题。
- 修正上一版本版本管理器修改套装属性报错的问题。
- 修正盾牌外观没有佩戴武器会不显示的问题。
- 修正查看他人首饰盒以及生肖装备UI修改无法保存的问题。(注意自定义UI会升级 注意备份防止出现异常问题导致UI被破坏)。
- 修正角色动画框 偏移X 和Y 无法修改的问题。 (创建角色界面的有一部分设置 在其父节点 "选择角色界面" 中设置)。
2019年12月29日更新
- 优化客户端流畅度。
- 物品附加属性 从word 修改为 int64 。 突破65535限制。
- 物品宝石镶嵌孔 从3个扩充为5个。
- 物品的元素属性值 从word 修改为int64 突破65535限制。
- 物品MakeIndex 从 Integer 修改为 int64 (为跨服做准备)。
- 物品增加CustomValue[0..10] 为自定义值 方便对物品做额外标记操作。
- TPlayObject.N 变量 数量由50个扩展为300个 TPlayObject.P 变量 数量由50个扩展为300个 TPlayObject.S 变量 数量由50个扩展为300个
- 套装属性值从 Word 扩充修改为 int64
- 增加函数 GameLib.RandomRange(const Min,Max:Int64):Int64; 用于获取一个指定范围内的随机数 和random()不一样是 random 返回的是 integer类型 这个返回的是int64。
例: A := GameLib.RandomRange(1000000000000,200000000000); 意思就是从 随机 从 1000000000000 - 200000000000中间取一个数 包含 1000000000000,200000000000
2019年12月13日更新
- [修正]登录时给玩家添加任务 客户端会显示两条的问题。
- [新增]QFunction 添加穿戴装备且属性变化后触发 OnAfterTakeOnItem ,与之前的OnTakeOnItem不同是 OnTakeOnItem 触发执行的时候装备附加的属性没有加到人身上。OnAfterTakeOnItem是属性已经附加到人物身上了。
函数原型
procedure OnAfterTakeOnItem(Player : TPlayObject; TakeOnItem: TUserItem; TakeOffItem : TUserItem; AItemWhere: TItemWhere);
注意当穿戴位置 原先没有装备的时候 TakeOffItem 是为nil 的 请先判断 再做操作。 - [新增]QFunction 添加脱下装备且属性属性变化后触发 OnAfterTakeOnItem . 区别同上
procedure OnAfterTakeOnItem (Player : TPlayObject; TakeOffItem : TUserItem; AItemWhere: TItemWhere); - [新增]增加TActor.IsFrindlyTarget(Actor:TActor) :Boolean; 用于判断对方是否友方单位, 该结果会受到切换攻击模式的影响。
- [修正]物品提示信息栏 宝石镶嵌 增加UI设置修改 是否显示宝石图标 以及 样式
- [修正]完善物品提示信息栏 属性自定义
- [修正]优化客户端流畅度
2019年12月8日更新
- [新增]技能魔法施毒术增加配置 毒死怪物必掉物品
- [新增]UI物品提示框增加 属性自定义以及 属性颜色自定义
- [新增]M2-选项-参数设置 增加怪物简装 和人物简装设置。客户端内挂须为仿及时雨 盛大模式暂未支持
- [新增]开发者客户端增加 实时修改预览物品提示框 和 实时预览修改 物品来源描述。达到实时修改无需重启M2 和版本管理器的功能 提升开发效率
- [修正]若干小bug修正。
2019年12月3日更新
- [新增]物品悬浮提示框 物品产出来源信息 支持图片和文字混排,形如
1={I=12;F=prguse.data}神来之笔{I=13;F=prguse.data}{S=攻击力+;C=123}{S=255;C=#00FFFF}{S=AABBCE;C=#FFFF00}{H=24}{M=163-165;T=200;F=Prguse.data}
这类混排指令已被支持。 - [修正]自定义BUFF 时间和BUFF图标时间显示不对的问题
- [新增]增加网络数据包性能分析报告 将在MIR200下生成91NetMessage*.csv 用于分析流量负载情况。
- [修正]逐日剑法伤害失效的问题
- [新增]自定义技能施法动作增加无动作类型。
- 修正 致命额外伤害 <$PUNCHITAPPENDDAMAGE> 客户端标签显示数值异常
注意 此版本修改了协议封包 必须客户端和服务端同时更新 否则会导致行走卡住
2019年11月25日更新
- [新增]GameLib 增加
QueryPerformanceFrequency 获取CPU每秒震荡次数
QueryPerformanceCounter 获取获取当前震荡总数 (两次震荡总数 相减 就是两次间隔的CPU震荡次数)
用于获取超高精度的时间计算。可用于精确到纳秒的计时器 可以用于脚本中做性能测试分析。具体使用可以百度 QueryPerformanceCounter 以及 QueryPerformanceFrequency - [修正]M2重启游戏网关不会重新连接上来的问题
- [新增]版本管理器刷怪配置增加 重复使用怪物模式,此模式下 怪物死亡后会立即 重新刷新。保证在一些升级地图 玩家始终有怪可打。
- [优化]M2性能 略微提升版本管理器编译效率
2019年11月22日更新
- [新增]控制台增加性能测试模式 开启后可对M2程序以及脚本中的代码进行性能分析,将会在程序关闭的时候生成报告。(无需关闭控制台只需停止M2) Mir200目录下生成 91Prof*.csv(程序性能分析) 91PorfScript*.csv(脚本性能分析) RunGate 下也会生成性能报告 。(生成的csv 可用excel 直接打开 )
性能分析 将会轻微降低M2性能 约5%性能下降 脚本性能将下降15%左右 - [新增]压力测试工具公布 (使用需要M2开启 GM权限 并且控制台开启压力测试 并且网络密码必须为空 )
以及压力测试工具需要使用以下GM命令 如果命令名称不对请自行修改
@Superman 无敌
@Level 调整等级
@MoveMap 随机地图移动
@trainingSkill 学习技能 - [新增]版本管理器批量导出资源增加跳过空图片选项。
- [新增]物品特殊属性脚本化。
2019年11月15日更新
- [修正]网关增加用户Socket用户断线原因日志
- [修正]副本释放可能导致玩家掉线的问题
- [修正]创建角色使用内存类工具修改创建角色名长度可以导致挂机以及在线两个同名角色的问题[严重]
2019年10月21日更新
- [修正]角色顶号会导致数据库报错的问题
- [修正]人形怪无 S 以及 N 运行期变量无效的问题。
- [新增]M2 选项-参数设置-城堡参数 增加是否允许飞行魔法攻击城墙的设置
- [修正]上一版本人物大退实际没有离线的问题。
- [修正]摆摊礼券收益 无法从摊位取回的问题。
2019年10月19日更新
- [修正]禁止穿人的模式下 穿过死亡怪物或者玩家会被弹回的问题。
- [修正]摆摊上架礼券有时候会无法编辑的问题。
- [新增]GameLib.GetGuildCount() 获取服务器上总共的行会数量。
- [新增]GameLib.GetGuildByIndex() 获取具体的行会对象。配合和 GameLib.GetGuildCount() 共同使用 例如
//遍历获取服务器上的所有行会
for i = 0 to GameLib.GetGuildCount() - 1 do
begin
Guild = GameLib.GetGuildByIndex(i)
end - [新增]顶戴静态称号增加 xy偏移调整Player.TitleName={I=1;X=5;Y=10}
- [修正]游戏网关玩家下线还能在在线列表看到的问题
2019年10月14日更新
- [修正]接取任务(AddMissionLink)会导致任务人物数据不保存的问题
- [修正]开启生肖以及首饰盒功能 设置不会被保存的问题。
- [修正]聚灵珠在商城看到是满的 实际买到是空的的问题。
- [修正]自动挂机 战士攻击特效异常的问题。
- [优化]客户端字体绘制性能, 修正因为字体内存泄漏导致客户端会白屏的问题。
- [修正]网关防攻击功能无法关闭导致误封无法解除的问题。
2019年9月26日更新
- [修正]上一版本合区后修改分区数据名字无效的问题
- [新增]添加 GameLib.AsyncHttpPostJson(Ident:String;URL:String;Json:String;TimeOut:Cardinal = 5000) 函数,用于支持http提交json功能。
参数说明:
ident:请求标志 自定义数据 这个当httpost 完成或者错误的时候 此数据会原封不动传递到下文的OnAsyncHttpPostResult 中
URL:远程服务器URL
Json : 要提交的json字符串内容。
TimeOut: 超时时间 单位秒。
同时在 ManangerNpc 添加 结果触发函数
procedure OnAsyncHttpPostResult(Npc: TNormNpc; const Ident:String ;const URL:String; const Response:string ;const ErrorStr:String);
当成功或者失败会调用此函数。(异步模式 同步会导致引擎主线程逻辑卡)
参数说明
Ident : 请求标志 自定义数据
URL:远程服务器URL
Response : 服务器返回的数据(失败 为 空字符串,但是服务器如果返回的就是空串那要根据 ErrorStr来判定成功与否)
ErrorStr : 成功为空字符串 失败为失败的错误描述信息。可以根据是否为空串判定是否成功
- [修正]物品事件触发为拾取时修改物品属性无效的问题。
- [新增]摆摊增加礼券货币。对应的摆摊回调触发函数新添加有GamePoint 函数。 请根据M2报错信息 修改 触发函数声明。(注意更新91自带素材补丁)
- [新增]控制台增加 是否开启异常守护者(不开启的话可以嵌入程序到控制台,开启并且同时嵌入控制台会导致无响应)
- [修正]上一版网关不稳定的问题。
- [修正]武僧天雷阵MP不足不会失效的问题
2019年9月2日更新
- [新增] TActor.TitleEffect 使怪物也可以头顶上有动态称号。
- [修正]十二生肖物品指定了穿戴位置 会导致穿戴不上去的问题。
- [修正]交易物品UI 修改 支持自己名字和金币位置自定义。
- [修正]数据库设置了物品幸运 脚本中获取依旧为0的问题。
- [修正]盾牌自定义特效在装备内观中不显示的问题
- [修正]合区工具没有重复角色名依旧会被识别为重复并且加上1的问题。
- [修正]备份功能不会备份非UTF8编码TXT文件的问题。
- [修正]GameLib.ReNamePlayer修改玩家名称函数在DBServer 开启了非法字符过滤 会总是更名失败的问题。
- [新增]登录器列表编辑器增加复制插入功能。
- [优化]游戏网关性能优化。
- [新增]地图预览增加导出小地图图片功能。
- [修正]数据库导入json不管选什么都会导入到物品数据库的问题。
注意此版本将 摆摊 全局仓库(GameLib.SaveItemToStore) 以及任务数据从二进制修改为了sqlite数据库 这些数据将被丢弃。 有玩家数据的请不要更新到此版本. 新区可以。
2019年8月16日更新
- [新增]日志查看增加目标NPC字段过滤配置。
- [修正]开发者客户端保存过UI到其他目录 会导致 地图以及声音无法读取的问题。
- [优化]M2内存占用 降低怪物内存占用,(优化前 5W怪物占用内存1G,优化后20W怪物占用内存1G)
- [修正]自定义技能使用功能网关会报错的问题。
- [修正]部分地图寻路路径会有问题的bug
- [修正]导入EXCEL数据物品会被清空的问题。
- [新增]物品DropEff属性,属性值为Word,取DropEff.data文件中每10个图片为一组,显示为地面掉落特效 从1开始 0为无特效。
- [修正]若干内存访问BUG
2019年8月3日更新
- [修正]一个一个技能会导致报错的问题。
- [优化]优化合区工具合并自定义物品名称耗时很久的问题(效率提升1000倍以上,原来合并一个小时 优化后只需要 2秒)
- [修正]脚本图片{F}增加可以支持目录结构如{I=55;F= Interface.Data}可修改为:{I=55;F=$Data/Interface.Data} 因为 反斜杠被\识别为换行 所以F支持正斜杠/表示路径分割
- [修正]微端当图片切割部分有空图片会导致该部分所有图片不进行下载的问题,
以及修正微端当91Resource目录下有和盛大目录下相同文件名 导致微端冲突不下载该文件的问题。(需要重新生成登录器 以及更新客户端91Client.dat 微端资源文件 不需要,不需要,不需要 重新构建 ) - [新增]开放自定义游戏启动 LOGO 使用方法 放一张图片名为 91Logo.png放在客户端目录下即可。(建议 搭配登录器强制释放资源 使用)
- [修正]TActor.SearchViewRange 异常的问题。
- [优化]日志服务器SQL插入优化 改为批量INSERT INTO 降低数据库IO 提高性能。
2019年8月1日更新
- [修正]上一版本玩家大退不会大退的问题(修正两次小退触发导致的问题)
- [新增]游戏网关增加连接攻击设置 在设定时间内 同IP 建立连接超过指定次数将被识别为攻击。
2019年7月31日更新
- [修正]上一个版本DBServer 报错的问题
- [新增]版本管理器 资源编辑器 删除图片增加 [空图片微端标记] 模式 . 旨在提供细化到单张图片的微端资源控制 ,以便减少微端客户端的体积。
使用场景,举例说明
在使用微端功能的时候,挑选一部分资源文件打包成一个最小微端客户端,提供给玩家。其中有些图片是可以进行优化到 运行中下载的比如:
Prguse.data 图片中有 300张图片,只有序号0-100是希望集成在最小微端客户端中的。
序号101-299 希望在运行中下载的。 这个时候我们使用这个功能将序号101-299的图片用 [空图片微端标记]删除模式 将其删除,即可。
通过这个功能,可大幅度的优化最小微端客户端体积。 我把一个微端客户端从 100M 优化为了20M 。进行更细化的控制优化到10M以内是没有问题的。
注意:这个删除模式不能用于普通图片编辑.就是说你不能用他来编辑资源文件 后又 用微端资源生成器生成。这个功能是删除图片并且标记 这张图片数据在运行期通过微端获取。
- [新增]版本管理器 数据库增加导入导出到Excel 方便使用Excel 对数据库进行编辑后 再导入到数据库。
- [修正]离线挂机会触发两次 QManager.PlayerReconnection 会执行两次的问题。
- [新增]微端资源构建器增加支持iis mime . web.config 增加对应的mime类型描述信息。
- [修正]远程版本管理不能使用的问题
- [修正]一个导入版本会报错失败的问题。
PS.发现严重的脚本BUG,且修复工程量大,暂时不会修正 请按 下文规避。
1. 当脚本中产生异常的时候全局变量 String 类型会被重置为空值
例:
var
GlobalS : String = ‘元宝’
发生异常时候 GlobalS 会被修改为 空值
建议String 不需要改变的 使用
const
GlobalS : String = ‘元宝’
这样不会被改变。
2.TObject类型如果被赋值有初值则会被初值
例:
var
GlobalList : TStringList = nil;
然后再其他地方
GlobalList := TStringList.Create;
发生异常 GlobalList 会被 重新赋值为nil
建议修改为:
var
GlobalList : TStringList;
然后再其他地方
GlobalList := TStringList.Create;
对于全局String 数组 请用 TStringList进行替代。
2019年7月27日更新
- [修正]OutWay会被识别为未知途径的问题。
- [新增]增加GameLib.ReloadScriptEngine 可以在脚本中重载脚本引擎
- [修正]一些M2稳定性更新。
2019年7月25日更新
- [修正]勋章不显示 刺书 箭术 武术的问题。
- [修正]OutWay 超过255会被阶段为255以下的问题(需要同步更新客户端)
- [修正]脚本刷怪 伤害触发不生效的问题
- [修正]TPlayObject.AddItemToStroage 会报错的问题。
- [修改]物品产出来源修改为默认不显示划分横线 如果要显示那么可以在标题文本中设置为类似的划分: {line}\产出来源
2019年7月22日更新
- [修正]仓库存取日志不正常的问题,修改为:普通仓库日志 为 存仓 取仓 无限仓库为 无限仓库存仓 无限仓库取仓。
- [新增]装备TIPS 增加 是否显示产出途径 标题配置。
- [修正]套装属性攻击倍数增加属性错误以及魔法倍数 和道术倍数无效的问题。
- [修正]套装客户端TIP显示部分属性排版不一致的问题。
- [修正] Npc.GiveItem 会报错的问题。
2019年7月20日更新
- [修正]摆摊元宝溢出导致杯被刷的问题。
- [新增]登录日志增加玩家IP
- [新增]控制台增加封机器码功能。
- [新增]脚本中添加元宝以及给与物品增加记录相应的函数和行号 方便追溯物品的给与。
- [修正]版本管理器修改地图标志 会报错的问题。
- [修正]邮件功能异常的问题。(需要更新客户端)
- [修正]M2修改在线人物货币无效的问题。
2019年7月15日更新
- [修正]M2 监视怪物NPC刷新会报异常的问题。
- [修正]修改版本管理器版本加密方式,防止用泄漏的91代码可以绕过加密破解版本的问题。
2019年7月14日更新
- [重要]因自定义UI中的脚本按钮有安全隐患可以让玩家不经过任何限制执行服务器的脚本函数导致M2崩溃,故将原来脚本按钮中的调用QM脚本函数。
修改为调用固定函数,当脚本按钮被点击 将不在允许调用任意函数,新的方式会执行QManagerNPC 中的 OnScriptButton 函数中。 Flag参数 为 脚本按钮中 设置的 的标志字段。
函数原型:
procedure OnScriptButton(Npc:TNormNpc;Player : TPlayObject ;const Flag:String);
举例说明:
procedure OnScriptButton(Npc:TNormNpc;Player : TPlayObject ;const Flag:String);
begin
Player.SendMessage('你点击了脚本按钮, 按钮标志:' + Flag);
end;
- [新增]增加脚本安全性 防止因为异常导致M2崩溃。
2019年7月3日更新
- [修正]日志服务器记录日志错误的问题。(日志重复并且丢失)
- [修正]脚本中使用 Exit 退出函数会导致异常的问题。
- [新增]开放自动打怪 ctrl + z
- [修正]OutWay Value 没有被 替换格式化为OutWay2 对应的值的问题。 (UserItem.OutWay[i] 中对应的字符串包含 Value 时候 将被替换为 UserItem.OutWay2[i] 中的值,此功能可以做一些物品自定义描述,例如附加属性说明等)
- [新增]UserItem.OutWay 描述增加支持 {Line} 控制符 例如在物品来源描述表中 配置 1= {Line}\分割横线测试。 当UserItem.OutWay = 1 时候 客户端将会显示一条分割的横线 和 一行 分割横线测试。
- [修正]地图配置中设置自动扣减元宝 不管设置多少值 始终只扣减1元宝的问题
2019年6月27日更新
- [新增]ManagerNpc 增加 脚本引擎 启动以及销毁 触发 可用于引擎在启动 或者重载时候 进行一次性或者需要数据持久化的操作。(应当避免在脚本中 使用 finalization initialization 引擎对这类用法的支持有bug)
//当脚本引擎启动时 isReload 表示是否重载脚本
procedure OnScriptEngineInit(isReload:Boolean);
//当脚本引擎销毁时 isReload 表示是否重载脚本
procedure OnScriptEngineFinal(isReload:Boolean);
例如:
procedure OnScriptEngineInit(isReload:Boolean);
begin
if isReload then
begin
Debug('OnScriptEngineInit 重载');
end else begin
Debug('OnScriptEngineInit 启动');
end;
//从硬盘加载数据
end;
procedure OnScriptEngineFinal(isReload:Boolean);
begin
if isReload then
begin
Debug('OnScriptEngineFinal 重载');
end else begin
Debug('OnScriptEngineInit 关闭');
end;
2019年6月26日更新
- [新增]增加 function GameLib.MobPlaceEX (const AEnvir : TEnvirnoment; AMissionX, AMissionY: Integer; const AMonName: String; AX, AY: Integer; ACount: Integer=1; ARange: Integer= 0; ACamp: Byte= 0; ANation: Byte = 0; ATag: Integer = 0; ARevivalEvent: Boolean = 0; ADieEvent: Boolean = 0; AKillerEvent: Boolean = 0; ADamageEvent: Boolean = 0):TActorList;
在指定的地图上刷怪,AEnvir 所在地图对象:TEnvirnoment;并且向AMissionX、AMissionY坐标集中,AMissionX 刷新后自动前往集中坐标X;AMissionY 刷新后自动前往集中坐标Y;AX, AY 刷新坐标X,Y;其他参数与Mongen一样 - [新增]增加 functionGameLib. MonGenEX (const AEnvir :TEnvirnoment;const AMonName: String; AMonCount, AMapX, AMapY, ARange: Integer; ACamp: Byte=0; ANation: Byte=0; ATag: Integer = 0; ARevivalEvent: Boolean = 0; ADieEvent: Boolean = 0; AKillerEvent: Boolean = 0; ADamageEvent: Boolean = 0):TActorList
在指定的地图上刷怪。AEnvir 所在地图对象:TEnvirnoment;AMonName 怪物名称;AMonCount, 刷怪数量;AMapX, AMapY, ARange 刷怪的坐标X ,坐标Y, 刷怪范围;ACamp 阵营ID;ANation 国家ID ;ATag 怪物标记;ARevivalEvent 是否 刷新触发;ADieEvent 是否 死亡触发;AKillerEvent 是否 杀人触发;ADamageEvent 是否 受到伤害触发; - [新增]GameLib.MobPlace 和 GameLib.MonGen 增加 ADamageEvent 是否 受到伤害触发
- [修正]一个会导致游戏网关卡死未响应的问题。
2019年6月24日更新
- [新增]UseItem.outway修改为 array [0..15] of word,取物品自定义备注对照表中的对应数值文字
增加 outway2 = array [0..15]of integer; outway2[0..15]的值必须在物品自定义备注对照表中添加关键字Value才会显示。
举例说明item.outway[0]:=100; 对照表中此处文字为.100= {S=神力附体 HP+:Value;c=251}; 则客户端会自动解析outway2[0]的值替换Value这一关键字给客户端显示 。
如果版本管理器提示OutWay 编译错误 请将UserItem.OutWay 修改为UserItem.OutWay[0] - [修正]绑定绑定物品可以被摊位收购 出售的问题。
- [修正]合区GuildList.txt 行会列表行会名称会被添加两次的问题。以及行会变量没有被复制到主区的问题。
- [修正]网关会断开客户端连接的问题(需要同步更新客户端内核)
2019年6月22日更新
- [修正]游戏流量过大封包无法发送到客户端的问题.(表现为一些版本的可视化仓库无法打开)
- [修正]客户端发送封包可能异常的问题。
- [优化]将游戏网关启动后增加到M2异常守护者列表 用于监视游戏网关是否异常(依赖RunGate.map)
2019年6月21日更新
- [修正]重写网关后游戏速度调整失效的问题。
- [修正]MonitorDamageEx 不能识别自定义技能ID的问题
- [修正]使用瞬回药物血量和蓝量不会立即更新的问题。
2019年6月20日更新
- [修正]登录器释放附加资源有时候会无效的问题。
- [修正]M2一处会导致卡死的问题。
- [修正]上一版本扣减元宝实际扣减的是金币的问题。
- [修正]游戏网关性能优化。
2019年6月19日更新
- [修正]合区工具 账号本身达到10位 账号冲突会把老区账号多加一位变成11位 导致不能登录的问题
- [修正]利用删除人物 再恢复 恢复的时候是从数据库调取人物数据 这样可以导致刷货币 的bug
- [修正]M2稳定性增强
- [修正]因为改封包导致登录器无法注册的问题。
- [修正]RunGate 的一些小BUG
- [重构]重构货币系统以及日志,加上日志消耗的所有可能的渠道,不再建议直接操作TPlayObject.Gold 和 GameGold 以及 GamePoint 等货币类型对象直接修改货币值 未来 这些字段将被移除《点击查看示例 》。
货币类型:
GAME_MONEY_TYPE_GOLD = 1; //金币
GAME_MONEY_TYPE_GAMEGOLD = 2; //元宝
GAME_MONEY_TYPE_GAMEPOINT = 3; //游戏点
GAME_MONEY_TYPE_GAME_GIRD = 4; //灵符
GAME_MONEY_TYPE_DIAMOND = 5; //金刚石 TPlayObject 增加 货币扣减以及检查函数
1.function TPlayObject.GetGameMoney(Type:Byte):Cardinal; //获取对应货币的数量
2.procedure TPlayObject.SetGameMoney(Type:Byte;Value:Cardinal;const Log:String); //设置货币的数量。 Log 为日志描述
3.function TPlayObject.CanTakeGameMoney(Type:Byte;Value:Cardinal):Boolean; //是否可以扣减玩家对应数量的货币 Value 为需要增加货币的数量
4.function TPlayObject.CanAddGameMoney(Type:Byte;Value:Cardinal):Boolean; //是否可以给玩家增加货币 Value 为需要增加的货币数量
5.function TPlayObject.AddGameMoney(Type:Byte;Value:Cardinal; const Log:String):Boolean; //给玩家增加 对应数量的货币 Log 为日志描述 成功则为返回True 失败返回False;
6.function TPlayObject.TakeGameMoney(Type:Byte;Value:Cardinal;const Log:String):Boolean; //扣除玩家对应数量的货币 成功返回True 失败返回False;
示例:
procedure CanTake(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.CanTakeGameMoney(1,100000000) then
Player.SendMessage('可以拿走')
else
Player.SendMessage('不可以拿走');
end;
procedure CanAdd(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.CanAddGameMoney(1,100000000) then
Player.SendMessage('可以给')
else
Player.SendMessage('不可给');
end;
procedure Take(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.TakeGameMoney(1,100000000,'流浪汉拿走') then
Player.SendMessage('扣除成功')
else
Player.SendMessage('扣除失败');
end;
procedure Add(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.AddGameMoney(1,100000000,'流浪汉给与') then
Player.SendMessage('给与成功')
else
Player.SendMessage('给与失败');
end;
2019年6月14日更新
- [修正]TActor.Exp 增加可写 方便动态修改怪物经验 (仅支持非玩家对象 TPlayObject.Exp 修改了也不会有效果的)
- [修正]ManagerNpc.MonitorDamageEx 冰咆哮 爆裂火焰 火龙气焰 技能ID 识别错误的问题
- [修正]M2关闭 游戏网关不会断开客户端链接的问题。
- [新增]QFunctionNPC新增OnSendHotKey函数,用来做自定义热键触发。
procedure OnSendHotKey(Npc: TNormNpc; Player: TPlayObject; Akey:Byte; KeyCtrl,KeyAlt: Boolean; ATargetActor:TActor; X,Y:Integer);
Akey的值代表按下的按键字符值
KeyCtrl,KeyAlt 代表 Ctrl,Alt按键的状态 False为没有按下 True为按下。
ATargetActor代表客户端鼠标指向的TActor,X,Y代表TActor所在位置坐标,如果TActor为nil,则X,Y代表客户端鼠标指向的坐标。
- [新增]QFunctionNpc新增PlayerAction函数,可以用来脚本封挂。Accept值为True 则执行动作,反之则不执行。默认为True。
procedure PlayerAction(Npc: TNormNpc; Player: TPlayObject; Action :Byte; var Accept: Boolean);
Action值代表不同的动作:
1 攻击
2 魔法
3 骑马跑动
4 跑动
5 走路
6 转向
7 挖肉
8 点击脚本
2019年6月13日更新
- [新增]支持最新盛趣传奇归来客户端
- [变更]重新编写跨平台游戏网关, 修改通讯封包。
- [修正]M2稳定性增强 , 修正若干可能造成引擎异常的BUG
- [修正]DBServer会异常卡死的问题。
- [修正]刺客武器没有带武器外观特效不能单独生效的问题。
- [新增]增加压力测试模式,使用压力测试工具可测试引擎的承载量和稳定性(压力测试工具 未完善暂不发布,压力测试模式将 跳过所有的反攻击措施)
- [修正]M2内存增强支持使用到4G的内存。
- [修正]同一个账号可以同时登录的bug
2019年5月27日更新
- [修正]几个会导致玩家游戏中掉线的bug
- [修正]客户端毒符持久显示不正确的bug
2019年5月26日更新
- [修正]客户端 毒符 不显示持久的问题
- [修正]技能编辑器无法打开的问题
- [修正]一个会导致玩家挂机掉线的异常
- [变更]网上有人恶意用泄漏的91代码增加了一个提权后门 版本号为 20180222 重新修改登录器加密方式 不再支持老版本的91Client.dat
2019年5月25日更新
- [修正]M2发送数据到网关会访问非法内存的问题。
- [修正]客户端不会显示持久和重量的问题。
- [修正]改进引擎一些底层函数 性能提升 10%以上。
2019年5月24日更新
- [修正]重新调整怪物 处理方式 , 尝试修正因刷怪导致的死M2.
2019年5月23日更新
- [修正]因为VMP加壳导致的客户端在部分机器上非常卡的问题。
- [修正]控制台正常关闭程序再开启不会注入调试M2的问题。
2019年5月21日更新
- [修正]勾选清理尸体 会导致死亡的名字在屏幕上固定位置的问题。
- [修正]检测扣除金币 实际检测的是元宝数量的问题。(此问题导致检测错误 实际消耗了金币 但是没有扣除的可能 当元宝数量等于需要扣除的金币数量的时候)
- [新增]控制台增加M2异常守护者功能。可以监测M2 所有的线程状态以及异常堆栈 依赖 M2Server.map文件。
- [修正]所有的服务端程序不再加壳,方便查错 (客户端程序 依旧加壳)
PS: 请将VMProtectedSDK32.dll 放到 C:/Windows/System 下 因为没有再使用VMP加壳 程序依赖这个dll (客户端程序加壳 所以发布登录器并不会依赖这个dll)
因为源码曾经泄漏过 修改了程序中用于上报M2异常信息的 邮箱。
引擎官网:www.91M2.com 交流群:5555999 此引擎仅供测试,切勿用于商业用途。如有侵权请立即联系我们,我们将在第一时间删除。