aboutsummaryrefslogtreecommitdiff
path: root/src/writer.hh
diff options
context:
space:
mode:
authorfusion32 <marcopuzziello@gmail.com>2025-06-30 19:23:09 -0300
committerfusion32 <marcopuzziello@gmail.com>2025-06-30 19:23:09 -0300
commit6c8aa85b8b578db03a8c5f0dc0b7e80605592d45 (patch)
tree6734cf3d3c0e318a139f7d15d9a524c423833e22 /src/writer.hh
parentc09d30cb144ce421ef0e1a786d2965f9abcde0aa (diff)
downloadgame-6c8aa85b8b578db03a8c5f0dc0b7e80605592d45.tar.gz
game-6c8aa85b8b578db03a8c5f0dc0b7e80605592d45.zip
`writer.cc`
Diffstat (limited to 'src/writer.hh')
-rw-r--r--src/writer.hh155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/writer.hh b/src/writer.hh
new file mode 100644
index 0000000..8c87c0f
--- /dev/null
+++ b/src/writer.hh
@@ -0,0 +1,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_