跟逆向的協同是制定標準交互接口
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