奇迹Mu分析 - 各种主流BT功能实现
逐一给出主流外挂的功能实现,基地址就不提供了!
一、瞬移
这个功能需要分2个步骤
1、发送移动包
2、修正本地画面同步
procedure TGameFunMgr.Move(x,y:Integer; Way:Byte = 0);
type_Buffer = Packed record_C1:Byte; //C1Len:Byte;cmd:byte; //D7x,y:Byte;setp:Byte;end;
varBuffer:_Buffer;P:TPoint;
beginRole.IsSuperMove :=True;p.X:=x;p.Y:=y;Role.RolePos:=P;Buffer._C1:=$C1;Buffer.Len:=SizeOf(_Buffer);Buffer.cmd:=$D7;Buffer.x:=x;Buffer.y:=y;Buffer.setp:=Way;MyEncode(@Buffer,SizeOf(_Buffer));pNtGameSend(Buffer,Buffer.Len,0,0);//本地画面同步P.X:=x * 100 + 50;P.Y:=y * 100 + 50;Role.MapPos:= P;end;
二、自动拾取/拾取过滤
服务端有对拾取距离的判断,但是配合瞬移就可以做到秒拾取
实现思路
1、拦截返回包,获取到物品掉落的包
2、解析封包是否需要过滤
3、瞬移+拾取 , 发2个包。(这里的瞬移就不需要同步画面,这样看上去就是远程拾取了)
拾取的实现如下:
procedure TGameFunMgr.PickUp(ItemIndex: Word);
typeTBuffer = packed Record_C1:Byte; //C1BufferCount:Byte; //1Cmd:Byte; //22ItemIndex_h:Byte;ItemIndex_l:Byte;end;
varBuffer:TBuffer;
beginBuffer._C1:=$C1;Buffer.BufferCount:=SizeOf(TBuffer);Buffer.Cmd:=$22;Buffer.ItemIndex_h:=ItemIndex shr 8;Buffer.ItemIndex_l:=ItemIndex and $FF;Buffer.ItemIndex_h:=Buffer.Cmd xor $FE xor Buffer.ItemIndex_h;Buffer.ItemIndex_l:=Buffer.ItemIndex_h xor $18 xor Buffer.ItemIndex_l;pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;
返回包的解析:
procedure DropItem(P:Pointer);
type_Buffer = Packed recordId_h:Byte;Id_l:Byte;x,y:Byte;ResId:Array [0..2] of Byte;M_h,M_l:Byte;OtherValue:array [0..6] of Byte;end;
varCount:Byte;I,Base:Cardinal;Buffer:^_Buffer;x,y:Byte;
beginCount:=pByte(P)^;if Count > 0 thenbeginBase:=Cardinal(P)+1;for I:= 0 to Count - 1 dobeginBuffer:=Pointer(Base + i * SizeOf(_Buffer));Dbgprint('ID:%X POS:%d,%d Money:%d',[Buffer.Id_h * $100 + Buffer.Id_l,Buffer.x,Buffer.y,Buffer.M_h * $100 + Buffer.M_l]);if Buffer.Id_h = $80 thenBuffer.Id_h:=0;x:=Role.RolePos.x;y:=Role.RolePos.y;Game.HideMove(Buffer.x,Buffer.y); //无画面同步瞬移Game.PickUp(Buffer.Id_h * $100 + Buffer.Id_l); Game.HideMove(x,y); //归位end;end;
end;
三、吸怪/聚怪/全屏打怪(普通攻击)
这个功能实现有2个方法
方法1:
1、截取返回包(怪物移动的包)
2、修改移动包内的坐标,全部改成固定坐标
3、本地看上去就像吸怪/聚怪效果了,然后角色直接攻击即可
方法2:
1、获取环境列表(怪的列表)
2、一个循环对每个怪发送一个攻击包
3、本地看上去就是周围怪在掉血,即全屏攻击
这个功能代码不提供~
四、多倍攻击/技能更换
这个功能实现效果就是放了个A技能,伤害效果是B技能的。例如:法师放火龙,效果是地狱火的!!
功能思路:
1、奇迹攻击分为2个包, ①攻击包 ②命中包
2、我们只要修改命中包的技能ID即可实现
修改方式:
1、直接改代码(困难,有CRC)
2、修改封包,拦截发包,如果是命中包,直接换了技能ID即可
这里提供一个命中包的构造
procedure TGameFunMgr.BeKill(SkillId: Byte; Tar: TWorldNode);
typeTBuffer = packed Record_C1:Byte; //C1BufferCount:Byte; //1Cmd:Byte; //1Dskill_h:Byte;Count:Byte;skill_l:Byte;x:Byte;way_s:Byte;y:Byte;tar_h:Byte;way_e:Byte;tar_l:Byte;end;
varBuffer:TBuffer;
beginBuffer._C1:=$C1;Buffer.BufferCount:=SizeOf(TBuffer);Buffer.Cmd:=$1D;Buffer.skill_h:= SkillId shr 8;Buffer.Count:=1;Buffer.skill_l:=SkillId and $FF;Buffer.x:=Tar.x;Buffer.y:=Tar.y;Buffer.way_s:=35;Buffer.way_e:=0;Buffer.tar_h:=Tar.Id shr 8;Buffer.tar_l:=Tar.Id and $FF;MyEncode(@Buffer,SizeOf(TBuffer));pBeSkill(Buffer.skill_h,SizeOf(TBuffer) - 3);pNtGameSend(Buffer,SizeOf(TBuffer),1,0);
end;
这个函数还能改造,最后的tar_x的3字节结构,可以支持10个,这就意味着可以同时攻击10个怪,这就是全屏攻击了
五、单体技能群攻效果
这个功能挺方便。
效果:单体的技能释放,可以攻击周围所有怪物
思路:群攻的包内的技能ID改用单体技能ID
给出群攻包的构造
procedure TGameFunMgr.UseRangeSkill(SkillId: Byte; X, Y: Byte);
typeTBuffer = packed RecordHead:Byte; //c1BufferCount:Byte; //1Cmd:Byte; //1Ex:Byte;skill_h:byte;y:byte;skill_l:byte;Def1:Byte; //??? 0Def2:Byte; //ffDef3:Byte; //00Def4:Byte; //ffDef5:Byte; //00Def6:Byte; //00end;
varBuffer:TBuffer;
beginBuffer.Head:=$C1;Buffer.BufferCount:=SizeOf(TBuffer);Buffer.Cmd:=$1E;Buffer.x:=x;Buffer.y:=y;Buffer.skill_h:=skillid shr 8;Buffer.skill_l:=SkillId and $FF;Buffer.Def1:=$9D;Buffer.Def2:=$FF;Buffer.Def3:=0;Buffer.Def4:=$FF;Buffer.Def5:=0;Buffer.Def6:=0;MyEncode(@Buffer,SizeOf(TBuffer));//pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;
六、多重攻击(单体技能)
释放1次技能,有最多5次攻击效果
实现方法挺简单,直接在短间隔内连续发送技能包
这里给出单体技能释放包 构造
procedure TGameFunMgr.UseRangeSkill(SkillId: Byte; X, Y: Byte);
typeTBuffer = packed RecordHead:Byte; //c1BufferCount:Byte; //1Cmd:Byte; //1Ex:Byte;skill_h:byte;y:byte;skill_l:byte;Def1:Byte; //??? 0Def2:Byte; //ffDef3:Byte; //00Def4:Byte; //ffDef5:Byte; //00Def6:Byte; //00end;
varBuffer:TBuffer;
beginBuffer.Head:=$C1;Buffer.BufferCount:=SizeOf(TBuffer);Buffer.Cmd:=$1E;Buffer.x:=x;Buffer.y:=y;Buffer.skill_h:=skillid shr 8;Buffer.skill_l:=SkillId and $FF;Buffer.Def1:=$9D;Buffer.Def2:=$FF;Buffer.Def3:=0;Buffer.Def4:=$FF;Buffer.Def5:=0;Buffer.Def6:=0;MyEncode(@Buffer,SizeOf(TBuffer));//pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;
奇迹Mu分析 - 各种主流BT功能实现相关推荐
- 奇迹MU服务端架设——拓展功能技术分享
奇迹MU游戏爱好者对游戏内容体验感的提升,奇迹MU的商业版本也在跟随着用户的需求不断的进行更新和改进,修复了更多之前旧版本服务端在控制程度上的问题以及游戏内出现的一些小BUG等,并在游戏的内容上进行了 ...
- 奇迹Mu分析 - NPC相关操作
下面的功能都是NPC相关的,一如既往的封包实现: 一.打开银行 procedure TGameFunMgr.OpenBank(Id:Word); type_Buffer = Packed record ...
- 奇迹Mu分析 - 登陆实现
全部使用封包实现,登陆相关的一些功能如下: 一.选择大区 procedure TGameFunMgr.SelectServerArea; type_Buffer = Packed Record_C1: ...
- 奇迹Mu分析 - 封包协议
1.游戏的主协议 所谓主协议也就是主要的协议类别,对于这款游戏来说可以分为4个类别它们的头分别是: 0xC1: * 常用于固定封包格式(例如:移动,NPC对话,使用物品,拾取,普通攻击 等等) * 特 ...
- 奇迹Mu分析 - Bool地图
通过读取游戏内存,绘制角色当前地图 var MapBase:Cardinal = $86E9D78; function TMain.GetMapPointByIndex(n: Cardinal): W ...
- 奇迹mu服务端的常用端口及功能
奇迹mu服务端的常用端口及功能 我是艾西们今天跟大家聊聊奇迹mu服务端常用的端口以及功能都有哪些,我们在开服时需要注意哪些东西今天跟大家一次说明白! 服务器安全问题就得看你个人选的什么服务器,一般开服 ...
- 奇迹MU服务器架设完整教程
MU王国,传说中的王国,拥有巨大的财富,吸引了魔族的入侵,魔族控制了野外的动物,使它们成为怪物,向MU王国发起进攻.王国开始训练自己的军队,无数的勇士诞生,英勇的反击战开始了! 只要大家团结在一起,就 ...
- 奇迹服务器维护,奇迹MU 3月31日服务器维护更新公告
尊敬的用户: 为了奇迹(mu)服务器能够始终保持高效和稳定的运行,使玩家能够在更好的游戏网络环境中享受游戏的乐趣.我们将于2021年3月30日(周二)9:00开始进行游戏服务器的维护工作,维护时间为大 ...
- 奇迹mu服务器架设全教程
奇迹mu服务器架设全教程 我是艾西今天跟大家详细的说下奇迹mu服务器架设全过程 要架设奇迹,首先我们需要知道一个完整的系统组成 网络基础 网游分为服务端和客户端两大部分 两者通过IP地址互相访问,而且 ...
- 奇迹mu登录器工具和网站文件配置
奇迹mu登录器工具和网站文件配置 我是艾西,今天跟大家说说奇迹mu登录器工具以及网站文件配置. 玩过奇迹mu的玩家都知道,需要做奇迹mu,有着几件必备的软件,商业授权的服务端,HE的网站系统,风之恋的 ...
最新文章
- 用“组策略”修改注册表十大个经典范例
- Qt中另一种创建线程的方式
- 大小端模式 判断方法
- 【NLP】情感分析实战:金融市场中的NLP
- 【Python相关】Vaex :突破pandas,快速分析100GB大数据集
- jquery获取html页面参数乱码,JS或Jquery获取浏览器URL的参数值 汉字值乱码 并转码...
- 随机效应估算与固定效应估算_【机器学习】随机生存森林
- Linux系统下修改主机名(CentOS7)
- mysql 独享表空间_Mysql 独享表空间
- 1 Vue的基础语法
- [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.25
- C语言一个简单的贪吃蛇程序
- 优秀Logo设计需要留白
- EverEdit - 值得关注的国产原创开发的免费高效优秀的文本与代码编辑器
- 六种黑客入侵手机的常见方式
- Jetson TX1 /TX2 对比介绍
- 神经网络的三种训练方法,神经网络训练过程详解
- 谭浩强C++ 第十章
- STM8S003F3 使用定时器来计算方波周期的方法
- Iog4j2漏洞相关技术分析