Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
cs_message.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/* ScriptData
7Name: message_commandscript
8%Complete: 100
9Comment: All message related commands
10Category: commandscripts
11EndScriptData */
12
13#include "ChannelMgr.h"
14#include "Chat.h"
15#include "Language.h"
16#include "ObjectMgr.h"
17#include "Player.h"
18#include "ScriptMgr.h"
19
21{
22public:
23 message_commandscript() : CommandScript("message_commandscript") { }
24
25 std::vector<ChatCommand> GetCommands() const
26 {
27 static std::vector<ChatCommand> channelSetCommandTable =
28 {
30 };
31 static std::vector<ChatCommand> channelCommandTable =
32 {
33 { "set", rbac::RBAC_PERM_COMMAND_CHANNEL_SET, true, NULL, "", channelSetCommandTable },
34 };
35 static std::vector<ChatCommand> commandTable =
36 {
37 { "channel", rbac::RBAC_PERM_COMMAND_CHANNEL, true, NULL, "", channelCommandTable },
42 { "notify", rbac::RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "", },
44 { "whispers", rbac::RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "", },
45 };
46 return commandTable;
47 }
48
49 static bool HandleChannelSetOwnership(ChatHandler* handler, char const* args)
50 {
51 if (!*args)
52 return false;
53 char const* channelStr = strtok((char*)args, " ");
54 char const* argStr = strtok(NULL, "");
55
56 if (!channelStr || !argStr)
57 return false;
58
59 Player* player = handler->GetSession()->GetPlayer();
60 Channel* channcel = NULL;
61
62 if (ChannelMgr* cMgr = ChannelMgr::forTeam(player->GetTeam()))
63 channcel = cMgr->GetChannel(channelStr, player);
64
65 if (strcmp(argStr, "on") == 0)
66 {
67 if (channcel)
68 channcel->SetOwnership(true);
70 stmt->setUInt8(0, 1);
71 stmt->setString(1, channelStr);
72 CharacterDatabase.Execute(stmt);
74 }
75 else if (strcmp(argStr, "off") == 0)
76 {
77 if (channcel)
78 channcel->SetOwnership(false);
80 stmt->setUInt8(0, 0);
81 stmt->setString(1, channelStr);
82 CharacterDatabase.Execute(stmt);
84 }
85 else
86 return false;
87
88 return true;
89 }
90
91 static bool HandleNameAnnounceCommand(ChatHandler* handler, char const* args)
92 {
93 if (!*args)
94 return false;
95
96 std::string name("Console");
97 if (WorldSession* session = handler->GetSession())
98 name = session->GetPlayer()->GetName();
99
100 sWorld->SendWorldText(LANG_ANNOUNCE_COLOR, name.c_str(), args);
101 return true;
102 }
103
104 static bool HandleGMNameAnnounceCommand(ChatHandler* handler, char const* args)
105 {
106 if (!*args)
107 return false;
108
109 std::string name("Console");
110 if (WorldSession* session = handler->GetSession())
111 name = session->GetPlayer()->GetName();
112
113 sWorld->SendGMText(LANG_GM_ANNOUNCE_COLOR, name.c_str(), args);
114 return true;
115 }
116 // global announce
117 static bool HandleAnnounceCommand(ChatHandler* handler, char const* args)
118 {
119 if (!*args)
120 return false;
121
122 char buff[2048];
123 snprintf(buff, sizeof(buff), handler->GetSkyFireString(LANG_SYSTEMMESSAGE), args);
124 sWorld->SendServerMessage(SERVER_MSG_STRING, buff);
125 return true;
126 }
127 // announce to logged in GMs
128 static bool HandleGMAnnounceCommand(ChatHandler* /*handler*/, char const* args)
129 {
130 if (!*args)
131 return false;
132
133 sWorld->SendGMText(LANG_GM_BROADCAST, args);
134 return true;
135 }
136 // notification player at the screen
137 static bool HandleNotifyCommand(ChatHandler* handler, char const* args)
138 {
139 if (!*args)
140 return false;
141
142 std::string msg = handler->GetSkyFireString(LANG_GLOBAL_NOTIFY);
143 msg += args;
144
145 WorldPacket data(SMSG_NOTIFICATION, 2 + msg.length());
146 data.WriteBits(msg.length(), 12);
147 data.FlushBits();
148 data.WriteString(msg);
149 sWorld->SendGlobalMessage(&data);
150
151 return true;
152 }
153 // notification GM at the screen
154 static bool HandleGMNotifyCommand(ChatHandler* handler, char const* args)
155 {
156 if (!*args)
157 return false;
158
159 std::string str = handler->GetSkyFireString(LANG_GM_NOTIFY);
160 str += args;
161
162 WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1));
163 data << str;
164 sWorld->SendGlobalGMMessage(&data);
165
166 return true;
167 }
168 // Enable\Dissable accept whispers (for GM)
169 static bool HandleWhispersCommand(ChatHandler* handler, char const* args)
170 {
171 if (!*args)
172 {
174 return true;
175 }
176
177 char* arg = strtok((char*)args, " ");
178 if (!arg)
179 return false;
180
181 std::string argStr = arg;
182 // whisper on
183 if (argStr == "on")
184 {
185 handler->GetSession()->GetPlayer()->SetAcceptWhispers(true);
187 return true;
188 }
189
190 // whisper off
191 if (argStr == "off")
192 {
193 // Remove all players from the Gamemaster's whisper whitelist
195 handler->GetSession()->GetPlayer()->SetAcceptWhispers(false);
197 return true;
198 }
199
200 if (argStr == "remove")
201 {
202 char* nameStr = strtok(NULL, " ");
203 if (!nameStr)
204 return false;
205
206 std::string name = nameStr;
207 if (normalizePlayerName(name))
208 {
209 if (Player* player = sObjectAccessor->FindPlayerByName(name))
210 {
211 handler->GetSession()->GetPlayer()->RemoveFromWhisperWhiteList(player->GetGUID());
212 handler->PSendSysMessage(LANG_COMMAND_WHISPEROFFPLAYER, name.c_str());
213 return true;
214 }
215 else
216 {
217 handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND, name.c_str());
218 handler->SetSentErrorMessage(true);
219 return false;
220 }
221 }
222 }
224 handler->SetSentErrorMessage(true);
225 return false;
226 }
227};
228
@ CHAR_UPD_CHANNEL_OWNERSHIP
@ LANG_ANNOUNCE_COLOR
Definition Language.h:742
@ LANG_CHANNEL_DISABLE_OWNERSHIP
Definition Language.h:1091
@ LANG_GLOBAL_NOTIFY
Definition Language.h:102
@ LANG_GM_NOTIFY
Definition Language.h:1122
@ LANG_COMMAND_WHISPEROFF
Definition Language.h:293
@ LANG_USE_BOL
Definition Language.h:265
@ LANG_OFF
Definition Language.h:52
@ LANG_COMMAND_WHISPERACCEPTING
Definition Language.h:291
@ LANG_ON
Definition Language.h:51
@ LANG_GM_ANNOUNCE_COLOR
Definition Language.h:1123
@ LANG_COMMAND_WHISPERON
Definition Language.h:292
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:487
@ LANG_GM_BROADCAST
Definition Language.h:1121
@ LANG_CHANNEL_ENABLE_OWNERSHIP
Definition Language.h:1090
@ LANG_SYSTEMMESSAGE
Definition Language.h:16
@ LANG_COMMAND_WHISPEROFFPLAYER
Definition Language.h:370
#define sObjectAccessor
bool normalizePlayerName(std::string &name)
void WriteString(std::string const &str)
Definition ByteBuffer.h:578
void WriteBits(T value, size_t bits)
Definition ByteBuffer.h:192
void FlushBits()
Definition ByteBuffer.h:154
void SetOwnership(bool ownership)
Definition Channel.h:173
static ChannelMgr * forTeam(uint32 team)
WorldSession * GetSession()
Definition Chat.h:43
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
Definition Chat.cpp:221
void SetSentErrorMessage(bool val)
Definition Chat.h:114
virtual void SendSysMessage(const char *str)
Definition Chat.cpp:153
virtual const char * GetSkyFireString(int32 entry) const
Definition Chat.cpp:68
CommandScript(const char *name)
uint32 GetTeam() const
Definition Player.h:2527
void SetAcceptWhispers(bool on)
Definition Player.h:1365
void ClearWhisperWhiteList()
Definition Player.h:3144
void RemoveFromWhisperWhiteList(uint64 guid)
Definition Player.h:3153
bool isAcceptWhispers() const
Definition Player.h:1361
void setString(const uint8 index, const std::string &value)
void setUInt8(const uint8 index, const uint8 value)
Player session in the World.
Player * GetPlayer() const
std::vector< ChatCommand > GetCommands() const
static bool HandleChannelSetOwnership(ChatHandler *handler, char const *args)
static bool HandleNameAnnounceCommand(ChatHandler *handler, char const *args)
static bool HandleGMNotifyCommand(ChatHandler *handler, char const *args)
static bool HandleAnnounceCommand(ChatHandler *handler, char const *args)
static bool HandleNotifyCommand(ChatHandler *handler, char const *args)
static bool HandleGMAnnounceCommand(ChatHandler *, char const *args)
static bool HandleGMNameAnnounceCommand(ChatHandler *handler, char const *args)
static bool HandleWhispersCommand(ChatHandler *handler, char const *args)
void AddSC_message_commandscript()
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
Definition Main.cpp:41
@ SMSG_NOTIFICATION
Definition Opcodes.h:835
#define sWorld
Definition World.h:910
@ SERVER_MSG_STRING
Definition World.h:38
@ RBAC_PERM_COMMAND_CHANNEL
Definition RBAC.h:351
@ RBAC_PERM_COMMAND_GMNOTIFY
Definition RBAC.h:356
@ RBAC_PERM_COMMAND_NOTIFY
Definition RBAC.h:358
@ RBAC_PERM_COMMAND_CHANNEL_SET
Definition RBAC.h:352
@ RBAC_PERM_COMMAND_NAMEANNOUNCE
Definition RBAC.h:357
@ RBAC_PERM_COMMAND_GMNAMEANNOUNCE
Definition RBAC.h:355
@ RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP
Definition RBAC.h:353
@ RBAC_PERM_COMMAND_GMANNOUNCE
Definition RBAC.h:354
@ RBAC_PERM_COMMAND_WHISPERS
Definition RBAC.h:359
@ RBAC_PERM_COMMAND_ANNOUNCE
Definition RBAC.h:350