跟逆向的协同是制定标准交互接口
gtr_api.h
1 /*
2 gtr_api.h
3 ========================
4 定义与游戏逻辑交互的接口
5 2009.12.12 zhangbin created
6 1. 修改二进制图片的传输方式,通过context完成
7 2. 定义输出接口 init()/cleanup(),其他函数通过内部登记来实现
8 2009.12.13 zhangbin
9 1.添加日志回调
10
11 2010.3.25 zhangbin
12 1.添加 auth() 密保认证回调;captureImage()抓屏幕回调
13 3.添加 Gt_CallContext.id字段
14 2010.3.29 zhangbin
15 1.修正部分声明的错误
16
17 */
18 #ifndef _GT_API_H
19 #define _GT_API_H
20 #include <windows.h>
21
22
23 enum Gt_ReturnValueT{
24 GT_FALSE=0, //假
25 GT_TRUE, //真
26 GT_UNABLECONNECT, //无法连接
27 GT_PASSWORDERROR, //账号密码错误
28 GT_PLAYERINLINE, //玩家在线
29 GT_VERSIONERROR, //版本错误
30 GT_UNABLEGETINFO, //无法获得
31 GT_VERIFYCODEERROR, //验证码错误
32 GT_ROLELOCK, //角色被封
33 GT_MBERROR, //密保卡错误
34 GT_ROLENEEDCHANGENAME, //角色需要修改名字(DNF合服)
35 GT_ROLEKICK, //角色被踢下线
36 //GT_NOROLE, //角色名不存在
37 //GT_NOBUYERROLE, //买家不存在
38 GT_SECONDPWDERROR, //二级密码或者仓库密码错误
39 GT_UNABLEMOVETO, //无法到达
40 GT_UNABLETALKTO, //无法对话
41 GT_TIMEOUT, //超时
42 GT_PlAYERNOFEE, //卖家游戏点卡不足
43 GT_CONNECTBREAK, //连接中断
44 GT_NOTEXISTED, //访问对象不存在 2010.3.27
45 GT_SKIP_PASS, //此调用无需判断,直接忽略
46 GT_OK = GT_TRUE, //成功
47 GT_UNKNOWN=0xffff
48 };
49
50 typedef int GT_BOOL;
51 #define POUT
52 #define PIN
53 #define PINOUT
54
55 typedef Gt_ReturnValueT GT_RESULT;
56 typedef int Gt_NPCID;
57
58 enum Gt_ImageTypeT{
59 GT_IMAGEJPEG =1,
60 GT_IMAGEPNG,
61 GT_IMAGEBMP
62 };
63
64 enum Gt_GameItemT{
65 GT_ITEM_1, //金币
66 GT_ITEM_2, //金砖
67 GT_ITEM_MAX
68 };
69
70 struct Gt_ApiList;
71
72 typedef struct Gt_CallContext{
73 int timeout ; // msec 调用超时
74 void* cookie; // 外部使用
75 void* cookie2; // 游戏内部使用,可用于保持状态
76 char* xdata; // 数据交换地址,数据必须立刻复制
77 int xsize; // 数据交换大小
78 int xtype; // 交换数据类型
79 Gt_ApiList* apilist; //函数入口表 游戏dll内部维持接口表,在初始化时赋值给此变量
80 void (*log)(Gt_CallContext* ctx,char* msg); //游戏逻辑运行时日志输出
81 void (*log2)(Gt_CallContext* ctx,char* data,int size); //游戏逻辑运行时日志输出
82 char* (*auth_coords)(Gt_CallContext* ctx,char* coords); //坐标认证
83 char* (*auth_image)(Gt_CallContext* ctx,Gt_ImageTypeT imagetype,char* imagedata,int size,int width,int height);
84 void (*capture_image)(Gt_CallContext* ctx,char* excName,char* imagedata,int size,int width,int height);
85 int id; //游戏逻辑使用
86 }CALLCTX;
87
88
89 struct Gt_ApiList{
90 GT_RESULT (*SelectServer)(char *,CALLCTX*); //选大区 订单中大区信息 OK 无法连接 SelectServer char*
91 GT_RESULT (*SelectArea)(char*,CALLCTX*); //选小区 订单中小区信息 OK 无法连接 SelectArea char*
92 // null 自动选择线路
93 GT_RESULT (*SelectLineByName)(char* line,CALLCTX*); // 选线路 Ping值较低 OK 无法连接 SelectLine void
94 // -1 自动选择线路
95 GT_RESULT (*SelectLineByIndex)(int line,CALLCTX*); // 选线路 Ping值较低 OK 无法连接 SelectLine void
96 GT_RESULT (*Login)(char* usr,char* passwd,CALLCTX*); // 账号密码输入 订单中账号密码信息 OK 账号密码错误 玩家在线 版本错误 Login char* account, char* pwd
97 GT_RESULT (*IsExistDynMB)(CALLCTX*); // 查询动态密保 有 无 IsExistDynMB void
98 GT_RESULT (*IsRightClass)(int,CALLCTX* ); // 查询角色阵营 订单中卖家阵营 是 否 IsRightClass int
99 GT_RESULT (*IsExistBackHomeSkill)(CALLCTX*); // 查询回城技能 是 否 IsExistBackHomeSkill void
100 GT_RESULT (*UseBackHomeSkill)(CALLCTX*); // 使用回城技能 OK 失败 UseBackHomeSkill void
101 GT_RESULT (*IsExistBackHomeItem)(CALLCTX*); // 查询是否存在回城物品 是 否
102 GT_RESULT (*UseBackHomeItem)(CALLCTX*); // 使用回城物品 OK 失败
103 GT_RESULT (*QueryRoleLevel)(char* ,POUT int *,CALLCTX*); // 查询卖家角色等级 OK 失败 QuerySellerLevel char*, int*
104 GT_RESULT (*SelectRoleByName)(char*,CALLCTX*); // 角色选择 订单中的角色名信息 OK 角色名不存在 角色需要修改名字(DNF合服) SelectRoleByName char*
105 GT_RESULT (*SelectRoleByIndex)(int,CALLCTX*); // 序号选择 订单中的角色序号信息 OK 无法登陆该序号角色 SelectRoleByIndex int
106 GT_RESULT (*IsExistRoleByName)(char* ,CALLCTX*); // 查询买家角色名 订单中买家角色名信息 有 无 IsExistBuyerByName char*
107 GT_RESULT (*AddRoleToFriend)(char*,CALLCTX*); // 加买家为好友 订单中买家角色名信息 OK 无该玩家 AddBuyerToFriend char*
108 GT_RESULT (*QuerySafeTime)(POUT int* ,CALLCTX*); // 获取安全时间 安全时间 QuerySafeTime int*
109 GT_RESULT (*IsExistNPC)(Gt_NPCID ,CALLCTX*); // 判定指定NPC是否在附近 NPCID 是 否 IsExistNPC int
110 GT_RESULT (*OpenWarehouse)(char* passwd,CALLCTX*); // 打开仓库 订单中的仓库密码信息 OK 密码错误 OpenWarehouse char*
111 GT_RESULT (*OpenMailBox)(char* passwd,CALLCTX*); //邮箱 二级密码
112 GT_RESULT (*OpenBank)(char* passwd,CALLCTX*); //银行 二级密码
113 GT_RESULT (*OpenExchange)(char* passwd,CALLCTX*); //交易所 二级密码
114 GT_RESULT (*OpenGrocer)(char* passwd,CALLCTX*); //杂货商 二级密码
115
116 GT_RESULT (*MoveToByNpcID)(Gt_NPCID,CALLCTX*); // 跑地图 NPCID OK 无法到达 MoveToByNpcID int NPCID
117 GT_RESULT (*Talk)(Gt_NPCID,CALLCTX*); // 与邮箱NPC对话 NPCID OK 无法对话 Talk int NPCID
118 //查询物品数量 , item - 具体的游戏可交易的对象(金币、元宝、金砖。。。)
119 GT_RESULT (*QueryItemsInBag)(Gt_GameItemT item,POUT INT64*,CALLCTX*); //背包
120 GT_RESULT (*QueryItemsInWarehouse)(Gt_GameItemT item,POUT INT64*,CALLCTX*); //仓库
121 GT_RESULT (*QueryItemsInBank)(Gt_GameItemT item,POUT INT64*,CALLCTX*); // 银行
122 GT_RESULT (*QueryItemsInExchange)(Gt_GameItemT item,POUT INT64*,CALLCTX*); //交易所
123 //邮件特例处理
124 GT_RESULT (*IsEnoughItemsInMailbox)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 邮箱金币是否满足差额
125 //获得指定物品数量
126 GT_RESULT (*WithdrawItemsInWarehouse)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 获取仓库金币信息 返回仓库中金币数额 无法获取 QueryGoldsInWarehouse int64*
127 GT_RESULT (*WithdrawItemsInBank)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 获取仓库金币信息 返回仓库中金币数额 无法获取 QueryGoldsInWarehouse int64*
128 GT_RESULT (*WithdrawItemsInExchange)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 获取仓库金币信息 返回仓库中金币数额 无法获取 QueryGoldsInWarehouse int64*
129 GT_RESULT (*WithdrawItemsInMailbox)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 邮箱金币是否满足差额
130 //发送邮件
131 GT_RESULT (*SendMail)(char* reciever,char* title,char* content,INT64,CALLCTX*);
132 //兑换给Npc
133 GT_RESULT (*SellItem)(int item,int itemNum,CALLCTX*); // 兑换银票,金砖 金币数额 返回兑换后金币数额 无法获取 SellItem int64
134
135
136 GT_RESULT (*Begin)(CALLCTX*); //开单
137 GT_RESULT (*End)(CALLCTX*); //结单
138
139 //GT_RESULT (*QueryBuyerLevel)(char*,POUT int * ,CALLCTX*); // 查询买家等级 订单中买家角色名信息 买家角色等级 QueryBuyerLevel char*
140 //GT_RESULT (*IsExistSecondPwd)(CALLCTX*); // 查询二级码 是 否 IsExistSecondPwd void
141 //GT_RESULT (*InputSecondPwd)(char* ,CALLCTX*); // 输入二级码 订单中的二级码信息 OK 密码错误 InputeSecondPwd char*
142 //GT_RESULT (*IsExistVerifyCode)(CALLCTX*); // 是否有验证码 是 否 IsExistVerifyCode void
143 //GT_RESULT (*GetVerifyCode)(CALLCTX*); // 获取验证码 验证码图片 无法获得 GetVerifyCode char** buf, int* // 通过ctx::xdata,xsize进行数据交换
144 //GT_RESULT (*InputeVerifyCode)(char* ,CALLCTX*); // 验证码输入 答题器中的验证码信息 OK 验证码错误 InputeVerifyCode char*
145 //GT_RESULT (*IsExistMB)(CALLCTX*); // 是否有密保卡 是 否 IsExistMB void
146 //GT_RESULT (*GetMBCord)(CALLCTX*); // 获取密保坐标 OK 无法获得 GetMBCord char** buf, int* // 通过ctx::xdata,xsize进行数据交换
147 //GT_RESULT (*InputMBInfo)(char* ,CALLCTX*); // 密保卡输入 答题器中的密保卡信息 OK 密保卡错误 InputeMBInfo char*
148
149 };
150
151 //////////////////////////////////////////////////////////////////////////
152 //game-dll必须导出以下函数即可
153 GT_BOOL Init(char * gamedir,CALLCTX* ctx);
154 void CleanUp(CALLCTX* ctx);
155
156
157
158 #endif