Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
cs_packet.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Chat.h"
7#include "ObjectAccessor.h"
8#include "ObjectMgr.h"
9#include "PacketLog.h"
10#include "Player.h"
11#include "ScriptMgr.h"
12#include "WorldSession.h"
13
14#include <string>
15#include <vector>
16
17namespace
18{
19 std::string TrimCommandText(std::string text)
20 {
21 std::string::size_type first = text.find_first_not_of(" \t\r\n");
22 if (first == std::string::npos)
23 return "";
24
25 std::string::size_type last = text.find_last_not_of(" \t\r\n");
26 text = text.substr(first, last - first + 1);
27
28 if (text.size() >= 2 && text[0] == '"' && text[text.size() - 1] == '"')
29 text = text.substr(1, text.size() - 2);
30
31 first = text.find_first_not_of(" \t\r\n");
32 if (first == std::string::npos)
33 return "";
34
35 last = text.find_last_not_of(" \t\r\n");
36 return text.substr(first, last - first + 1);
37 }
38
39 std::string GetPacketCommandName(char const* args)
40 {
41 return TrimCommandText(args ? args : "");
42 }
43}
44
46{
47public:
48 packet_commandscript() : CommandScript("packet_commandscript") { }
49
50 std::vector<ChatCommand> GetCommands() const OVERRIDE
51 {
52 static std::vector<ChatCommand> packetCharCommandTable =
53 {
56 };
57
58 static std::vector<ChatCommand> packetCommandTable =
59 {
62 { "char", rbac::RBAC_PERM_COMMAND_PACKET_CHAR, false, NULL, "", packetCharCommandTable },
63 };
64
65 static std::vector<ChatCommand> commandTable =
66 {
67 { "packet", rbac::RBAC_PERM_COMMAND_PACKET, false, NULL, "", packetCommandTable },
68 };
69
70 return commandTable;
71 }
72
73 static bool HandlePacketStartCommand(ChatHandler* handler, char const* /*args*/)
74 {
75 sPacketLog->EnableGlobalLogging();
76 handler->PSendSysMessage("Packet logging enabled for all sessions.");
77 return true;
78 }
79
80 static bool HandlePacketStopCommand(ChatHandler* handler, char const* /*args*/)
81 {
82 sPacketLog->DisableAllLogging();
83 handler->PSendSysMessage("Packet logging disabled.");
84 return true;
85 }
86
87 static bool HandlePacketCharStartCommand(ChatHandler* handler, char const* args)
88 {
89 std::string characterName = GetPacketCommandName(args);
90 if (characterName.empty() || !normalizePlayerName(characterName))
91 {
92 handler->PSendSysMessage("Usage: .packet char start \"name\"");
93 handler->SetSentErrorMessage(true);
94 return false;
95 }
96
97 sPacketLog->EnableCharacterLogging(characterName);
98
99 if (Player* target = sObjectAccessor->FindPlayerByName(characterName))
100 if (WorldSession* targetSession = target->GetSession())
101 targetSession->LogPacketMarker("Packet logging enabled for this character.");
102
103 handler->PSendSysMessage("Packet logging enabled for character %s.", characterName.c_str());
104 return true;
105 }
106
107 static bool HandlePacketCharStopCommand(ChatHandler* handler, char const* args)
108 {
109 std::string characterName = GetPacketCommandName(args);
110 if (characterName.empty() || !normalizePlayerName(characterName))
111 {
112 handler->PSendSysMessage("Usage: .packet char stop \"name\"");
113 handler->SetSentErrorMessage(true);
114 return false;
115 }
116
117 sPacketLog->DisableCharacterLogging(characterName);
118 handler->PSendSysMessage("Packet logging disabled for character %s.", characterName.c_str());
119 return true;
120 }
121};
122
#define OVERRIDE
Definition Define.h:60
#define sObjectAccessor
bool normalizePlayerName(std::string &name)
#define sPacketLog
Definition PacketLog.h:47
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
Definition Chat.cpp:221
void SetSentErrorMessage(bool val)
Definition Chat.h:114
CommandScript(const char *name)
Player session in the World.
std::vector< ChatCommand > GetCommands() const OVERRIDE
Definition cs_packet.cpp:50
static bool HandlePacketStartCommand(ChatHandler *handler, char const *)
Definition cs_packet.cpp:73
static bool HandlePacketStopCommand(ChatHandler *handler, char const *)
Definition cs_packet.cpp:80
static bool HandlePacketCharStartCommand(ChatHandler *handler, char const *args)
Definition cs_packet.cpp:87
static bool HandlePacketCharStopCommand(ChatHandler *handler, char const *args)
void AddSC_packet_commandscript()
@ RBAC_PERM_COMMAND_PACKET_CHAR_START
Definition RBAC.h:707
@ RBAC_PERM_COMMAND_PACKET_START
Definition RBAC.h:704
@ RBAC_PERM_COMMAND_PACKET_STOP
Definition RBAC.h:705
@ RBAC_PERM_COMMAND_PACKET_CHAR
Definition RBAC.h:706
@ RBAC_PERM_COMMAND_PACKET
Definition RBAC.h:703
@ RBAC_PERM_COMMAND_PACKET_CHAR_STOP
Definition RBAC.h:708