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
|
#ifndef TIBIA_WRITER_HH_
#define TIBIA_WRITER_HH_ 1
#include "common.hh"
#include "containers.hh"
#include "operate.hh"
enum TWriterThreadReplyType: int {
REPLY_BROADCAST = 0,
REPLY_DIRECT = 1,
REPLY_LOGOUT = 2,
};
enum TWriterThreadOrderType: int {
ORDER_TERMINATE = 0,
ORDER_LOGOUT = 1,
ORDER_PLAYERLIST = 2,
ORDER_KILLSTATISTICS = 3,
ORDER_PUNISHMENT = 4,
ORDER_CHARACTERDEATH = 5,
ORDER_ADDBUDDY = 6,
ORDER_REMOVEBUDDY = 7,
ORDER_DECREMENTISONLINE = 8,
ORDER_SAVEPLAYERDATA = 9,
};
struct TProtocolThreadOrder{
char ProtocolName[20];
char Text[256];
};
struct TWriterThreadReply{
TWriterThreadReplyType ReplyType;
const void *Data;
};
struct TBroadcastReplyData{
char Message[100];
};
struct TDirectReplyData{
uint32 CharacterID;
char Message[100];
};
struct TWriterThreadOrder{
TWriterThreadOrderType OrderType;
const void *Data;
};
struct TLogoutOrderData{
uint32 CharacterID;
int Level;
int Profession;
time_t LastLoginTime;
int TutorActivities;
char Residence[30];
};
struct TPlayerlistOrderData{
int NumberOfPlayers;
const char *PlayerNames;
int *PlayerLevels;
int *PlayerProfessions;
};
struct TKillStatisticsOrderData{
int NumberOfRaces;
const char *RaceNames;
int *KilledPlayers;
int *KilledCreatures;
};
struct TPunishmentOrderData{
uint32 GamemasterID;
char GamemasterName[30];
char CriminalName[30];
char CriminalIPAddress[16];
int Reason;
int Action;
char Comment[200];
int NumberOfStatements;
vector<TReportedStatement> *ReportedStatements;
uint32 StatementID;
bool IPBanishment;
};
struct TCharacterDeathOrderData{
uint32 CharacterID;
int Level;
uint32 Offender;
char Remark[30];
bool Unjustified;
time_t Time;
};
struct TBuddyOrderData{
uint32 AccountID;
uint32 Buddy;
};
void InitProtocol(void);
void InsertProtocolOrder(const char *ProtocolName, const char *Text);
void GetProtocolOrder(TProtocolThreadOrder *Order);
void WriteProtocol(const char *ProtocolName, const char *Text);
int ProtocolThreadLoop(void *Unused);
void InitLog(const char *ProtocolName);
void Log(const char *ProtocolName, const char *Text, ...) ATTR_PRINTF(2, 3);
void InitWriterBuffers(void);
int GetOrderBufferSpace(void);
void InsertOrder(TWriterThreadOrderType OrderType, const void *Data);
void GetOrder(TWriterThreadOrder *Order);
void TerminateWriterOrder(void);
void LogoutOrder(TPlayer *Player);
void PlayerlistOrder(int NumberOfPlayers, const char *PlayerNames,
int *PlayerLevels, int *PlayerProfessions);
void KillStatisticsOrder(int NumberOfRaces, const char *RaceNames,
int *KilledPlayers, int *KilledCreatures);
void PunishmentOrder(TCreature *Gamemaster, const char *Name, const char *IPAddress,
int Reason, int Action, const char *Comment, int NumberOfStatements,
vector<TReportedStatement> *ReportedStatements, uint32 StatementID,
bool IPBanishment);
void CharacterDeathOrder(TCreature *Creature, int OldLevel,
uint32 OffenderID, const char *Remark, bool Unjustified);
void AddBuddyOrder(TCreature *Creature, uint32 BuddyID);
void RemoveBuddyOrder(TCreature *Creature, uint32 BuddyID);
void DecrementIsOnlineOrder(uint32 CharacterID);
void SavePlayerDataOrder(void);
void ProcessLogoutOrder(TLogoutOrderData *Data);
void ProcessPlayerlistOrder(TPlayerlistOrderData *Data);
void ProcessKillStatisticsOrder(TKillStatisticsOrderData *Data);
void ProcessPunishmentOrder(TPunishmentOrderData *Data);
void ProcessCharacterDeathOrder(TCharacterDeathOrderData *Data);
void ProcessAddBuddyOrder(TBuddyOrderData *Data);
void ProcessRemoveBuddyOrder(TBuddyOrderData *Data);
void ProcessDecrementIsOnlineOrder(uint32 CharacterID);
int WriterThreadLoop(void *Unused);
void InsertReply(TWriterThreadReplyType ReplyType, const void *Data);
void BroadcastReply(const char *Text, ...) ATTR_PRINTF(1, 2);
void DirectReply(uint32 CharacterID, const char *Text, ...) ATTR_PRINTF(2, 3);
void LogoutReply(const char *PlayerName);
bool GetReply(TWriterThreadReply *Reply);
void ProcessBroadcastReply(TBroadcastReplyData *Data);
void ProcessDirectReply(TDirectReplyData *Data);
void ProcessLogoutReply(const char *Name);
void ProcessWriterThreadReplies(void);
void ClearPlayers(void);
void InitWriter(void);
void AbortWriter(void);
void ExitWriter(void);
#endif //TIBIA_WRITER_HH_
|