挂机型外挂开发-游戏数据包管理类
来源:互联网 发布:雅可比矩阵的意义 编辑:程序博客网 时间:2024/05/21 15:41
一个外挂能够正常的长时间挂机缺少不了游戏内数据的获取,这里我们就要创建个类用来获取游戏的数据及分发各种数据。
这里只针对利用封包为数据来源,如果是内存方式获取数据的,请无视该类。
unit UPacketManager;interfaceuses Windows, Classes, SyncObjs ,GD_Utils;const C_SEND_PACKET = 1000; C_RECV_PACKET = 1001; C_PACKET_HANDLE_BREAK = -1;type FPacketProc = Procedure (pBuffer:Pointer;Len:Cardinal) of object; TPacketNode = Class HandleName:String; PacketType:Cardinal; Proc:FPacketProc; End; TPacketManager = class private Cri:TCriticalSection; List:TList; Procedure OnPacketHandle(PacketType:Cardinal;pBuffer:Pointer;Len:Cardinal); public constructor Create(); //添加回调 Function AddItem(PacketType:Cardinal;HandleName:string; Proc:FPacketProc):Bool; Procedure OnSendHandle(pBuffer:Pointer;Len:Cardinal); Procedure OnRecvHandle(pBuffer:Pointer;Len:Cardinal); end;var Packet:TPacketManager;implementation{ TPacketManager }function TPacketManager.AddItem(PacketType: Cardinal; HandleName:string; Proc: FPacketProc): Bool;var pNode:TPacketNode;begin try pNode:=TPacketNode.Create; pNode.HandleName := HandleName; pNode.PacketType := PacketType; pNode.Proc := Proc; Dbgprint('Add Packet Handle[Name:%s Proc:0x%X]',[HandleName,Cardinal(@Proc)]); Cri.Enter; List.Add(pNode); Cri.Leave; Result:=True; Except Result:=False; end;end;constructor TPacketManager.Create;begin List:=TList.Create; Cri:=TCriticalSection.Create; end;procedure TPacketManager.OnPacketHandle(PacketType:Cardinal;pBuffer: Pointer; Len: Cardinal);var i:Integer; pNode:TPacketNode;begin Cri.Enter; for i := 0 to List.Count - 1 do begin pNode := List[i]; if pNode.PacketType = PacketType then begin if Assigned(pNode.Proc) then begin // Dbgprint('OnPacket[%s] - %X',[pNode.HandleName,Cardinal(@pNode.Proc)]); pNode.Proc(pBuffer,Len); end; end; end; Cri.Leave;end;procedure TPacketManager.OnRecvHandle(pBuffer: Pointer; Len: Cardinal);begin OnPacketHandle(C_RECV_PACKET,pBuffer,Len);end;procedure TPacketManager.OnSendHandle(pBuffer: Pointer; Len: Cardinal);begin OnPacketHandle(C_SEND_PACKET,pBuffer,Len);end;initialization Packet:=TPacketManager.Create;end.
外部send和recv hook的函数可以直接调用 Packet导出的 OnSendHandle 和 OnRecvHandle传递数据。
这里还要创建的数据包的基类用于注册回调例程
unit UGamePacket;interfaceuses windows;type TGamePacket = class public constructor Create(HandleName:String); Procedure OnSend(pBuffer:Pointer;Len:Cardinal);virtual;abstract; Procedure OnRecv(pBuffer:Pointer;Len:Cardinal);virtual;abstract; end;implementationuses UPacketManager,GD_Utils;{ TGamePacket }constructor TGamePacket.Create(HandleName: String);begin Packet.AddItem(C_SEND_PACKET,'s_' + HandleName,OnSend); Packet.AddItem(C_RECV_PACKET,'r_' +HandleName,OnRecv);end;end.这样数据收发包的获取框架类就完成了,数据会被广播到各个注册的解析回调中去。
0 0
- 挂机型外挂开发-游戏数据包管理类
- 挂机型外挂开发-游戏数据管理类
- 挂机型外挂开发-框架设计
- 挂机型外挂开发-脚本引擎
- Delphi如何开发游戏外挂
- Delphi如何开发游戏外挂
- Delphi如何开发游戏外挂
- 游戏外挂开发系列--游戏喊话器
- 游戏挂机机器人框架
- 神将挂机 一款超好玩的放置类挂机RPG游戏
- 如何用VB开发游戏外挂
- 如何用VB开发游戏外挂
- 游戏茶苑港式五张看牌外挂的开发与演示
- 游戏外挂
- 《挂机游戏制作工具手册》挂机游戏制作工具基础知识
- 挂机游戏隐藏窗口代码
- 游戏外挂反外挂杂谈
- 更新QQ连连看外挂 加入自动挂机多项功能
- struts2 拦截器和actioninvocation
- Python下载文件的方法
- jQuery Event.delegateTarget属性详解
- 可用rtmp 地址
- Android 蓝牙开发(一)蓝牙通信
- 挂机型外挂开发-游戏数据包管理类
- struts2中直接访问没问题但是<jsp:forward>跳转时报404错误的问题
- 【OPENCV笔记】一些总结
- 精简的后台程序代码——DBHelper
- centos6.5下Redis3.2.1安装和配置
- WordPress负载均衡注意事项
- Hibernate中的query.setFirstResult(),query.setMaxResults();
- ZZULI-1182: 按出生日期排序(结构体专题)
- shell中&&和||的使用方法