1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
#ifndef TIBIA_QUERY_HH_
#define TIBIA_QUERY_HH_ 1
#include "common.hh"
#include "threads.hh"
enum : int {
QUERY_OK = 0,
QUERY_ERROR = 1,
QUERY_FAILED = 3,
};
struct TQueryManagerConnection{
TQueryManagerConnection(void) : TQueryManagerConnection(KB(16)) {}
TQueryManagerConnection(int QueryBufferSize);
~TQueryManagerConnection(void);
void connect(void);
void disconnect(void);
int write(const uint8 *Buffer, int Size);
int read(uint8 *Buffer, int Size, int Timeout);
bool isConnected(void){
return this->Socket != -1;
}
void prepareQuery(int QueryType);
void sendFlag(bool Flag);
void sendByte(uint8 Byte);
void sendWord(uint16 Word);
void sendQuad(uint32 Quad);
void sendString(const char *String);
void sendBytes(const uint8 *Buffer, int Count);
bool getFlag(void);
uint8 getByte(void);
uint16 getWord(void);
uint32 getQuad(void);
void getString(char *Buffer, int MaxLength);
void getBytes(uint8 *Buffer, int Count);
int executeQuery(int Timeout, bool AutoReconnect);
int checkAccountPassword(uint32 AccountID, const char *Password, const char *IPAddress);
int loginAdmin(uint32 AccountID, bool PrivateWorld, int *NumberOfCharacters,
char (*Characters)[30], char (*Worlds)[30], uint8 (*IPAddresses)[4],
uint16 *Ports, uint16 *PremiumDaysLeft);
int loadWorldConfig(int *WorldType, int *RebootTime, int *IPAddress,
int *Port, int *MaxPlayers, int *PremiumPlayerBuffer, int *MaxNewbies,
int *PremiumNewbieBuffer);
int loginGame(uint32 AccountID, char *PlayerName, const char *Password,
const char *IPAddress, bool PrivateWorld, bool PremiumAccountRequired,
bool GamemasterRequired, uint32 *CharacterID, int *Sex, char *Guild,
char *Rank, char *Title, int *NumberOfBuddies, uint32 *BuddyIDs,
char (*BuddyNames)[30], uint8 *Rights, bool *PremiumAccountActivated);
int logoutGame(uint32 CharacterID, int Level, const char *Profession,
const char *Residence, time_t LastLoginTime, int TutorActivities);
int setNotation(uint32 GamemasterID, const char *PlayerName, const char *IPAddress,
const char *Reason, const char *Comment, uint32 *BanishmentID);
int setNamelock(uint32 GamemasterID, const char *PlayerName, const char *IPAddress,
const char *Reason, const char *Comment);
int banishAccount(uint32 GamemasterID, const char *PlayerName, const char *IPAddress,
const char *Reason, const char *Comment, bool *FinalWarning, int *Days,
uint32 *BanishmentID);
int reportStatement(uint32 ReporterID, const char *PlayerName, const char *Reason,
const char *Comment, uint32 BanishmentID, uint32 StatementID,
int NumberOfStatements, uint32 *StatementIDs, int *TimeStamps,
uint32 *CharacterIDs, const char (*Channels)[30], const char (*Texts)[256]);
int banishIPAddress(uint32 GamemasterID, const char *PlayerName, const char *IPAddress,
const char *Reason, const char *Comment);
int logCharacterDeath(uint32 CharacterID, int Level, uint32 Offender,
const char *Remark, bool Unjustified, time_t Time);
int addBuddy(uint32 AccountID, uint32 Buddy);
int removeBuddy(uint32 AccountID, uint32 Buddy);
int decrementIsOnline(uint32 CharacterID);
int finishAuctions(int *NumberOfAuctions, uint16 *HouseIDs,
uint32 *CharacterIDs, char (*CharacterNames)[30], int *Bids);
int excludeFromAuctions(uint32 CharacterID, bool Banish);
int transferHouses(int *NumberOfTransfers, uint16 *HouseIDs,
uint32 *NewOwnerIDs, char (*NewOwnerNames)[30], int *Prices);
int cancelHouseTransfer(uint16 HouseID);
int evictFreeAccounts(int *NumberOfEvictions, uint16 *HouseIDs, uint32 *OwnerIDs);
int evictDeletedCharacters(int *NumberOfEvictions, uint16 *HouseIDs);
int evictExGuildleaders(int NumberOfGuildhouses,
int *NumberOfEvictions, uint16 *HouseIDs, uint32 *Guildleaders);
int insertHouseOwner(uint16 HouseID, uint32 OwnerID, int PaidUntil);
int updateHouseOwner(uint16 HouseID, uint32 OwnerID, int PaidUntil);
int deleteHouseOwner(uint16 HouseID);
int getHouseOwners(int *NumberOfOwners, uint16 *HouseIDs,
uint32 *OwnerIDs, char (*OwnerNames)[30], int *PaidUntils);
int getAuctions(int *NumberOfAuctions, uint16 *HouseIDs);
int startAuction(uint16 HouseID);
int insertHouses(int NumberOfHouses, uint16 *HouseIDs,
const char **Names, int *Rents, const char **Descriptions,
int *Sizes, int *PositionsX,int *PositionsY,int *PositionsZ,
char (*Towns)[30], bool *Guildhouses);
int clearIsOnline(int *NumberOfAffectedPlayers);
int createPlayerlist(int NumberOfPlayers, const char **Names,
int *Levels, const char (*Professions)[30], bool *NewRecord);
int logKilledCreatures(int NumberOfRaces, const char **Names,
int *KilledPlayers,int *KilledCreatures);
int loadPlayers(uint32 MinimumCharacterID, int *NumberOfPlayers,
char (*Names)[30], uint32 *CharacterIDs);
int getKeptCharacters(uint32 MinimumCharacterID,
int *NumberOfPlayers, uint32 *CharacterIDs);
int getDeletedCharacters(uint32 MinimumCharacterID,
int *NumberOfPlayers, uint32 *CharacterIDs);
int deleteOldCharacter(uint32 CharacterID);
int getHiddenCharacters(uint32 MinimumCharacterID,
int *NumberOfPlayers, uint32 *CharacterIDs);
int createHighscores(int NumberOfPlayers, uint32 *CharacterIDs,
int *ExpPoints, int *ExpLevel, int *Fist, int *Club, int *Axe,
int *Sword, int *Distance, int *Shielding, int *Magic, int *Fishing);
int createCensus(void);
int createKillStatistics(void);
int getPlayersOnline(int *NumberOfWorlds, char (*Names)[30], uint16 *Players);
int getWorlds(int *NumberOfWorlds, char (*Names)[30]);
int getServerLoad(const char *World, int Period, int *Data);
int insertPaymentDataOld(uint32 PurchaseNr, uint32 ReferenceNr,
const char *FirstName, const char *LastName, const char *Company,
const char *Street, const char *Zip, const char *City, const char *Country,
const char *State, const char *Phone, const char *Fax, const char *EMail,
const char *PaymentMethod, uint32 ProductID, const char *Registrant,
uint32 AccountID, uint32 *PaymentID);
int addPaymentOld(uint32 AccountID, const char *Description,
uint32 PaymentID, int Days, int *ActionTaken);
int cancelPaymentOld(uint32 PurchaseNr, uint32 ReferenceNr,
uint32 AccountID, bool *IllegalUse, char *EMailAddress);
int insertPaymentDataNew(uint32 PurchaseNr, uint32 ReferenceNr,
const char *FirstName, const char *LastName, const char *Company,
const char *Street, const char *Zip, const char *City, const char *Country,
const char *State, const char *Phone, const char *Fax, const char *EMail,
const char *PaymentMethod, uint32 ProductID, const char *Registrant,
const char *PaymentKey, uint32 *PaymentID);
int addPaymentNew(const char *PaymentKey, uint32 PaymentID,
int *ActionTaken, char *EMailReceiver);
int cancelPaymentNew(uint32 PurchaseNr, uint32 ReferenceNr,
const char *PaymentKey, bool *IllegalUse, bool *Present,
char *EMailAddress);
// DATA
// =================
int BufferSize;
uint8 *Buffer;
TReadBuffer ReadBuffer;
TWriteBuffer WriteBuffer;
int Socket;
bool QueryOk;
};
struct TQueryManagerConnectionPool{
TQueryManagerConnectionPool(int Connections);
void init(void);
void exit(void);
TQueryManagerConnection *getConnection(void);
void releaseConnection(TQueryManagerConnection *Connection);
// DATA
// =================
int NumberOfConnections;
TQueryManagerConnection *QueryManagerConnection;
bool *QueryManagerConnectionFree;
Semaphore FreeQueryManagerConnections;
Semaphore QueryManagerConnectionMutex;
};
struct TQueryManagerPoolConnection{
TQueryManagerPoolConnection(TQueryManagerConnectionPool *Pool);
~TQueryManagerPoolConnection(void);
// TODO(fusion): I don't know if this was the indended way to access this
// structure but it is only a small wrapper and accessing members directly
// would be too verbose, specially when it is also named `QueryManagerConnection`.
TQueryManagerConnection *operator->(void){
return this->QueryManagerConnection;
}
operator bool(void) const {
return this->QueryManagerConnection != NULL;
}
// DATA
// =================
TQueryManagerConnectionPool *QueryManagerConnectionPool;
TQueryManagerConnection *QueryManagerConnection;
};
void SetQueryManagerLoginData(int Type, const char *Data);
#endif //TIBIA_QUERY_HH_
|