跟逆向的協(xié)同是制定標(biāo)準(zhǔn)交互接口
gtr_api.h
1 /*
2 gtr_api.h
3 ========================
4 定義與游戲邏輯交互的接口
5 2009.12.12 zhangbin created
6 1. 修改二進(jìn)制圖片的傳輸方式,通過(guò)context完成
7 2. 定義輸出接口 init()/cleanup(),其他函數(shù)通過(guò)內(nèi)部登記來(lái)實(shí)現(xiàn)
8 2009.12.13 zhangbin
9 1.添加日志回調(diào)
10
11 2010.3.25 zhangbin
12 1.添加 auth() 密保認(rèn)證回調(diào);captureImage()抓屏幕回調(diào)
13 3.添加 Gt_CallContext.id字段
14 2010.3.29 zhangbin
15 1.修正部分聲明的錯(cuò)誤
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, //無(wú)法連接
27 GT_PASSWORDERROR, //賬號(hào)密碼錯(cuò)誤
28 GT_PLAYERINLINE, //玩家在線
29 GT_VERSIONERROR, //版本錯(cuò)誤
30 GT_UNABLEGETINFO, //無(wú)法獲得
31 GT_VERIFYCODEERROR, //驗(yàn)證碼錯(cuò)誤
32 GT_ROLELOCK, //角色被封
33 GT_MBERROR, //密保卡錯(cuò)誤
34 GT_ROLENEEDCHANGENAME, //角色需要修改名字(DNF合服)
35 GT_ROLEKICK, //角色被踢下線
36 //GT_NOROLE, //角色名不存在
37 //GT_NOBUYERROLE, //買(mǎi)家不存在
38 GT_SECONDPWDERROR, //二級(jí)密碼或者倉(cāng)庫(kù)密碼錯(cuò)誤
39 GT_UNABLEMOVETO, //無(wú)法到達(dá)
40 GT_UNABLETALKTO, //無(wú)法對(duì)話
41 GT_TIMEOUT, //超時(shí)
42 GT_PlAYERNOFEE, //賣(mài)家游戲點(diǎn)卡不足
43 GT_CONNECTBREAK, //連接中斷
44 GT_NOTEXISTED, //訪問(wèn)對(duì)象不存在 2010.3.27
45 GT_SKIP_PASS, //此調(diào)用無(wú)需判斷,直接忽略
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 調(diào)用超時(shí)
74 void* cookie; // 外部使用
75 void* cookie2; // 游戲內(nèi)部使用,可用于保持狀態(tài)
76 char* xdata; // 數(shù)據(jù)交換地址,數(shù)據(jù)必須立刻復(fù)制
77 int xsize; // 數(shù)據(jù)交換大小
78 int xtype; // 交換數(shù)據(jù)類(lèi)型
79 Gt_ApiList* apilist; //函數(shù)入口表 游戲dll內(nèi)部維持接口表,在初始化時(shí)賦值給此變量
80 void (*log)(Gt_CallContext* ctx,char* msg); //游戲邏輯運(yùn)行時(shí)日志輸出
81 void (*log2)(Gt_CallContext* ctx,char* data,int size); //游戲邏輯運(yùn)行時(shí)日志輸出
82 char* (*auth_coords)(Gt_CallContext* ctx,char* coords); //坐標(biāo)認(rèn)證
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*); //選大區(qū) 訂單中大區(qū)信息 OK 無(wú)法連接 SelectServer char*
91 GT_RESULT (*SelectArea)(char*,CALLCTX*); //選小區(qū) 訂單中小區(qū)信息 OK 無(wú)法連接 SelectArea char*
92 // null 自動(dòng)選擇線路
93 GT_RESULT (*SelectLineByName)(char* line,CALLCTX*); // 選線路 Ping值較低 OK 無(wú)法連接 SelectLine void
94 // -1 自動(dòng)選擇線路
95 GT_RESULT (*SelectLineByIndex)(int line,CALLCTX*); // 選線路 Ping值較低 OK 無(wú)法連接 SelectLine void
96 GT_RESULT (*Login)(char* usr,char* passwd,CALLCTX*); // 賬號(hào)密碼輸入 訂單中賬號(hào)密碼信息 OK 賬號(hào)密碼錯(cuò)誤 玩家在線 版本錯(cuò)誤 Login char* account, char* pwd
97 GT_RESULT (*IsExistDynMB)(CALLCTX*); // 查詢動(dòng)態(tài)密保 有 無(wú) IsExistDynMB void
98 GT_RESULT (*IsRightClass)(int,CALLCTX* ); // 查詢角色陣營(yíng) 訂單中賣(mài)家陣營(yíng) 是 否 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*); // 查詢賣(mài)家角色等級(jí) OK 失敗 QuerySellerLevel char*, int*
104 GT_RESULT (*SelectRoleByName)(char*,CALLCTX*); // 角色選擇 訂單中的角色名信息 OK 角色名不存在 角色需要修改名字(DNF合服) SelectRoleByName char*
105 GT_RESULT (*SelectRoleByIndex)(int,CALLCTX*); // 序號(hào)選擇 訂單中的角色序號(hào)信息 OK 無(wú)法登陸該序號(hào)角色 SelectRoleByIndex int
106 GT_RESULT (*IsExistRoleByName)(char* ,CALLCTX*); // 查詢買(mǎi)家角色名 訂單中買(mǎi)家角色名信息 有 無(wú) IsExistBuyerByName char*
107 GT_RESULT (*AddRoleToFriend)(char*,CALLCTX*); // 加買(mǎi)家為好友 訂單中買(mǎi)家角色名信息 OK 無(wú)該玩家 AddBuyerToFriend char*
108 GT_RESULT (*QuerySafeTime)(POUT int* ,CALLCTX*); // 獲取安全時(shí)間 安全時(shí)間 QuerySafeTime int*
109 GT_RESULT (*IsExistNPC)(Gt_NPCID ,CALLCTX*); // 判定指定NPC是否在附近 NPCID 是 否 IsExistNPC int
110 GT_RESULT (*OpenWarehouse)(char* passwd,CALLCTX*); // 打開(kāi)倉(cāng)庫(kù) 訂單中的倉(cāng)庫(kù)密碼信息 OK 密碼錯(cuò)誤 OpenWarehouse char*
111 GT_RESULT (*OpenMailBox)(char* passwd,CALLCTX*); //郵箱 二級(jí)密碼
112 GT_RESULT (*OpenBank)(char* passwd,CALLCTX*); //銀行 二級(jí)密碼
113 GT_RESULT (*OpenExchange)(char* passwd,CALLCTX*); //交易所 二級(jí)密碼
114 GT_RESULT (*OpenGrocer)(char* passwd,CALLCTX*); //雜貨商 二級(jí)密碼
115
116 GT_RESULT (*MoveToByNpcID)(Gt_NPCID,CALLCTX*); // 跑地圖 NPCID OK 無(wú)法到達(dá) MoveToByNpcID int NPCID
117 GT_RESULT (*Talk)(Gt_NPCID,CALLCTX*); // 與郵箱N(xiāo)PC對(duì)話 NPCID OK 無(wú)法對(duì)話 Talk int NPCID
118 //查詢物品數(shù)量 , item - 具體的游戲可交易的對(duì)象(金幣、元寶、金磚。。。)
119 GT_RESULT (*QueryItemsInBag)(Gt_GameItemT item,POUT INT64*,CALLCTX*); //背包
120 GT_RESULT (*QueryItemsInWarehouse)(Gt_GameItemT item,POUT INT64*,CALLCTX*); //倉(cāng)庫(kù)
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 //獲得指定物品數(shù)量
126 GT_RESULT (*WithdrawItemsInWarehouse)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 獲取倉(cāng)庫(kù)金幣信息 返回倉(cāng)庫(kù)中金幣數(shù)額 無(wú)法獲取 QueryGoldsInWarehouse int64*
127 GT_RESULT (*WithdrawItemsInBank)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 獲取倉(cāng)庫(kù)金幣信息 返回倉(cāng)庫(kù)中金幣數(shù)額 無(wú)法獲取 QueryGoldsInWarehouse int64*
128 GT_RESULT (*WithdrawItemsInExchange)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 獲取倉(cāng)庫(kù)金幣信息 返回倉(cāng)庫(kù)中金幣數(shù)額 無(wú)法獲取 QueryGoldsInWarehouse int64*
129 GT_RESULT (*WithdrawItemsInMailbox)(Gt_GameItemT item,PINOUT INT64*,CALLCTX*); // 郵箱金幣是否滿足差額
130 //發(fā)送郵件
131 GT_RESULT (*SendMail)(char* reciever,char* title,char* content,INT64,CALLCTX*);
132 //兌換給Npc
133 GT_RESULT (*SellItem)(int item,int itemNum,CALLCTX*); // 兌換銀票,金磚 金幣數(shù)額 返回兌換后金幣數(shù)額 無(wú)法獲取 SellItem int64
134
135
136 GT_RESULT (*Begin)(CALLCTX*); //開(kāi)單
137 GT_RESULT (*End)(CALLCTX*); //結(jié)單
138
139 //GT_RESULT (*QueryBuyerLevel)(char*,POUT int * ,CALLCTX*); // 查詢買(mǎi)家等級(jí) 訂單中買(mǎi)家角色名信息 買(mǎi)家角色等級(jí) QueryBuyerLevel char*
140 //GT_RESULT (*IsExistSecondPwd)(CALLCTX*); // 查詢二級(jí)碼 是 否 IsExistSecondPwd void
141 //GT_RESULT (*InputSecondPwd)(char* ,CALLCTX*); // 輸入二級(jí)碼 訂單中的二級(jí)碼信息 OK 密碼錯(cuò)誤 InputeSecondPwd char*
142 //GT_RESULT (*IsExistVerifyCode)(CALLCTX*); // 是否有驗(yàn)證碼 是 否 IsExistVerifyCode void
143 //GT_RESULT (*GetVerifyCode)(CALLCTX*); // 獲取驗(yàn)證碼 驗(yàn)證碼圖片 無(wú)法獲得 GetVerifyCode char** buf, int* // 通過(guò)ctx::xdata,xsize進(jìn)行數(shù)據(jù)交換
144 //GT_RESULT (*InputeVerifyCode)(char* ,CALLCTX*); // 驗(yàn)證碼輸入 答題器中的驗(yàn)證碼信息 OK 驗(yàn)證碼錯(cuò)誤 InputeVerifyCode char*
145 //GT_RESULT (*IsExistMB)(CALLCTX*); // 是否有密保卡 是 否 IsExistMB void
146 //GT_RESULT (*GetMBCord)(CALLCTX*); // 獲取密保坐標(biāo) OK 無(wú)法獲得 GetMBCord char** buf, int* // 通過(guò)ctx::xdata,xsize進(jìn)行數(shù)據(jù)交換
147 //GT_RESULT (*InputMBInfo)(char* ,CALLCTX*); // 密保卡輸入 答題器中的密保卡信息 OK 密保卡錯(cuò)誤 InputeMBInfo char*
148
149 };
150
151 //////////////////////////////////////////////////////////////////////////
152 //game-dll必須導(dǎo)出以下函數(shù)即可
153 GT_BOOL Init(char * gamedir,CALLCTX* ctx);
154 void CleanUp(CALLCTX* ctx);
155
156
157
158 #endif