AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
arena_commandscript Class Reference
Inheritance diagram for arena_commandscript:
CommandScript ScriptObject

Public Member Functions

 arena_commandscript ()
 
ChatCommandTable GetCommands () const override
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 

Static Public Member Functions

static bool HandleArenaCreateCommand (ChatHandler *handler, Optional< PlayerIdentifier > captain, QuotedString name, ArenaTeamTypes type)
 
static bool HandleArenaDisbandCommand (ChatHandler *handler, uint32 teamId)
 
static bool HandleArenaRenameCommand (ChatHandler *handler, QuotedString oldName, QuotedString newName)
 
static bool HandleArenaCaptainCommand (ChatHandler *handler, uint32 teamId, Optional< PlayerIdentifier > target)
 
static bool HandleArenaInfoCommand (ChatHandler *handler, uint32 teamId)
 
static bool HandleArenaLookupCommand (ChatHandler *handler, Tail needle)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ arena_commandscript()

arena_commandscript::arena_commandscript ( )
inline
36: CommandScript("arena_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable arena_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

39 {
40 static ChatCommandTable arenaCommandTable =
41 {
42 { "create", HandleArenaCreateCommand, SEC_ADMINISTRATOR, Console::Yes },
43 { "disband", HandleArenaDisbandCommand, SEC_ADMINISTRATOR, Console::Yes },
44 { "rename", HandleArenaRenameCommand, SEC_ADMINISTRATOR, Console::Yes },
45 { "captain", HandleArenaCaptainCommand, SEC_ADMINISTRATOR, Console::No },
46 { "info", HandleArenaInfoCommand, SEC_GAMEMASTER, Console::Yes },
47 { "lookup", HandleArenaLookupCommand, SEC_GAMEMASTER, Console::No },
48 };
49
50 static ChatCommandTable commandTable =
51 {
52 { "arena", arenaCommandTable }
53 };
54
55 return commandTable;
56 }
@ SEC_ADMINISTRATOR
Definition: Common.h:69
@ SEC_GAMEMASTER
Definition: Common.h:68
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleArenaDisbandCommand(ChatHandler *handler, uint32 teamId)
Definition: cs_arena.cpp:96
static bool HandleArenaCreateCommand(ChatHandler *handler, Optional< PlayerIdentifier > captain, QuotedString name, ArenaTeamTypes type)
Definition: cs_arena.cpp:58
static bool HandleArenaRenameCommand(ChatHandler *handler, QuotedString oldName, QuotedString newName)
Definition: cs_arena.cpp:123
static bool HandleArenaLookupCommand(ChatHandler *handler, Tail needle)
Definition: cs_arena.cpp:223
static bool HandleArenaCaptainCommand(ChatHandler *handler, uint32 teamId, Optional< PlayerIdentifier > target)
Definition: cs_arena.cpp:159
static bool HandleArenaInfoCommand(ChatHandler *handler, uint32 teamId)
Definition: cs_arena.cpp:205

References HandleArenaCaptainCommand(), HandleArenaCreateCommand(), HandleArenaDisbandCommand(), HandleArenaInfoCommand(), HandleArenaLookupCommand(), HandleArenaRenameCommand(), SEC_ADMINISTRATOR, and SEC_GAMEMASTER.

◆ HandleArenaCaptainCommand()

static bool arena_commandscript::HandleArenaCaptainCommand ( ChatHandler handler,
uint32  teamId,
Optional< PlayerIdentifier target 
)
inlinestatic
160 {
161 ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId);
162 if (!arena)
163 {
165 handler->SetSentErrorMessage(true);
166 return false;
167 }
168
169 if (arena->IsFighting())
170 {
172 handler->SetSentErrorMessage(true);
173 return false;
174 }
175
176 if (!target)
177 target = PlayerIdentifier::FromTargetOrSelf(handler);
178
179 if (!target)
180 return false;
181
182 if (!arena->IsMember(target->GetGUID()))
183 {
184 handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_MEMBER, target->GetName().c_str(), arena->GetName().c_str());
185 handler->SetSentErrorMessage(true);
186 return false;
187 }
188
189 if (arena->GetCaptain() == target->GetGUID())
190 {
191 handler->PSendSysMessage(LANG_ARENA_ERROR_CAPTAIN, target->GetName().c_str(), arena->GetName().c_str());
192 handler->SetSentErrorMessage(true);
193 return false;
194 }
195
196 std::string oldCaptainName;
197 sCharacterCache->GetCharacterNameByGuid(arena->GetCaptain(), oldCaptainName);
198 arena->SetCaptain(target->GetGUID());
199
200 handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainName.c_str(), target->GetName().c_str());
201
202 return true;
203 }
#define sArenaTeamMgr
Definition: ArenaTeamMgr.h:67
#define sCharacterCache
Definition: CharacterCache.h:83
@ LANG_ARENA_CAPTAIN
Definition: Language.h:798
@ LANG_ARENA_ERROR_CAPTAIN
Definition: Language.h:794
@ LANG_ARENA_ERROR_NOT_MEMBER
Definition: Language.h:793
@ LANG_ARENA_ERROR_NOT_FOUND
Definition: Language.h:788
@ LANG_ARENA_ERROR_COMBAT
Definition: Language.h:791
Definition: ArenaTeam.h:138
ObjectGuid GetCaptain() const
Definition: ArenaTeam.h:154
bool IsMember(ObjectGuid guid) const
Definition: ArenaTeam.cpp:643
void SetCaptain(ObjectGuid guid)
Definition: ArenaTeam.cpp:295
bool IsFighting() const
Definition: ArenaTeam.cpp:987
std::string const & GetName() const
Definition: ArenaTeam.h:155
uint32 GetId() const
Definition: ArenaTeam.h:149
void SetSentErrorMessage(bool val)
Definition: Chat.h:118
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:103
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition: ChatCommandTags.h:189

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), ArenaTeam::GetCaptain(), ArenaTeam::GetId(), ArenaTeam::GetName(), ArenaTeam::IsFighting(), ArenaTeam::IsMember(), LANG_ARENA_CAPTAIN, LANG_ARENA_ERROR_CAPTAIN, LANG_ARENA_ERROR_COMBAT, LANG_ARENA_ERROR_NOT_FOUND, LANG_ARENA_ERROR_NOT_MEMBER, ChatHandler::PSendSysMessage(), sArenaTeamMgr, sCharacterCache, ChatHandler::SendSysMessage(), ArenaTeam::SetCaptain(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleArenaCreateCommand()

static bool arena_commandscript::HandleArenaCreateCommand ( ChatHandler handler,
Optional< PlayerIdentifier captain,
QuotedString  name,
ArenaTeamTypes  type 
)
inlinestatic
59 {
60 if (sArenaTeamMgr->GetArenaTeamByName(name))
61 {
62 handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, name.c_str());
63 handler->SetSentErrorMessage(true);
64 return false;
65 }
66
67 if (!captain)
68 captain = PlayerIdentifier::FromTargetOrSelf(handler);
69
70 if (!captain)
71 return false;
72
73 if (Player::GetArenaTeamIdFromDB(captain->GetGUID(), type) != 0)
74 {
75 handler->PSendSysMessage(LANG_ARENA_ERROR_SIZE, captain->GetName().c_str());
76 handler->SetSentErrorMessage(true);
77 return false;
78 }
79
80 ArenaTeam* arena = new ArenaTeam();
81
82 if (!arena->Create(captain->GetGUID(), type, name, 4293102085, 101, 4293253939, 4, 4284049911))
83 {
84 delete arena;
86 handler->SetSentErrorMessage(true);
87 return false;
88 }
89
90 sArenaTeamMgr->AddArenaTeam(arena);
91 handler->PSendSysMessage(LANG_ARENA_CREATE, arena->GetName().c_str(), arena->GetId(), arena->GetType(), arena->GetCaptain().GetCounter());
92
93 return true;
94 }
@ LANG_ARENA_ERROR_NAME_EXISTS
Definition: Language.h:789
@ LANG_ARENA_CREATE
Definition: Language.h:795
@ LANG_ARENA_ERROR_SIZE
Definition: Language.h:790
@ LANG_BAD_VALUE
Definition: Language.h:147
bool Create(ObjectGuid captainGuid, uint8 type, std::string const &teamName, uint32 backgroundColor, uint8 emblemStyle, uint32 emblemColor, uint8 borderStyle, uint32 borderColor)
Definition: ArenaTeam.cpp:47
uint32 GetType() const
Definition: ArenaTeam.h:150
LowType GetCounter() const
Definition: ObjectGuid.h:147
static uint32 GetArenaTeamIdFromDB(ObjectGuid guid, uint8 slot)
Definition: Player.cpp:6202

References ArenaTeam::Create(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Player::GetArenaTeamIdFromDB(), ArenaTeam::GetCaptain(), ObjectGuid::GetCounter(), ArenaTeam::GetId(), ArenaTeam::GetName(), ArenaTeam::GetType(), LANG_ARENA_CREATE, LANG_ARENA_ERROR_NAME_EXISTS, LANG_ARENA_ERROR_SIZE, LANG_BAD_VALUE, ChatHandler::PSendSysMessage(), sArenaTeamMgr, ChatHandler::SendSysMessage(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleArenaDisbandCommand()

static bool arena_commandscript::HandleArenaDisbandCommand ( ChatHandler handler,
uint32  teamId 
)
inlinestatic
97 {
98 ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId);
99
100 if (!arena)
101 {
103 handler->SetSentErrorMessage(true);
104 return false;
105 }
106
107 if (arena->IsFighting())
108 {
110 handler->SetSentErrorMessage(true);
111 return false;
112 }
113
114 std::string name = arena->GetName();
115 arena->Disband();
116
117 delete(arena);
118
119 handler->PSendSysMessage(LANG_ARENA_DISBAND, name.c_str(), teamId);
120 return true;
121 }
@ LANG_ARENA_DISBAND
Definition: Language.h:796
void Disband(WorldSession *session)
Definition: ArenaTeam.cpp:383

References ArenaTeam::Disband(), ArenaTeam::GetName(), ArenaTeam::IsFighting(), LANG_ARENA_DISBAND, LANG_ARENA_ERROR_COMBAT, LANG_ARENA_ERROR_NOT_FOUND, ChatHandler::PSendSysMessage(), sArenaTeamMgr, ChatHandler::SendSysMessage(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleArenaInfoCommand()

static bool arena_commandscript::HandleArenaInfoCommand ( ChatHandler handler,
uint32  teamId 
)
inlinestatic
206 {
207 ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId);
208 if (!arena)
209 {
211 handler->SetSentErrorMessage(true);
212 return false;
213 }
214
215 handler->PSendSysMessage(LANG_ARENA_INFO_HEADER, arena->GetName().c_str(), arena->GetId(), arena->GetRating(), arena->GetType(), arena->GetType());
216
217 for (auto const& itr : arena->GetMembers())
218 handler->PSendSysMessage(LANG_ARENA_INFO_MEMBERS, itr.Name.c_str(), itr.Guid.GetCounter(), itr.PersonalRating, (arena->GetCaptain() == itr.Guid ? "- Captain" : ""));
219
220 return true;
221 }
@ LANG_ARENA_INFO_HEADER
Definition: Language.h:799
@ LANG_ARENA_INFO_MEMBERS
Definition: Language.h:800
uint32 GetRating() const
Definition: ArenaTeam.h:159
MemberList & GetMembers()
Definition: ArenaTeam.h:174

References ArenaTeam::GetCaptain(), ArenaTeam::GetId(), ArenaTeam::GetMembers(), ArenaTeam::GetName(), ArenaTeam::GetRating(), ArenaTeam::GetType(), LANG_ARENA_ERROR_NOT_FOUND, LANG_ARENA_INFO_HEADER, LANG_ARENA_INFO_MEMBERS, ChatHandler::PSendSysMessage(), sArenaTeamMgr, and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleArenaLookupCommand()

static bool arena_commandscript::HandleArenaLookupCommand ( ChatHandler handler,
Tail  needle 
)
inlinestatic
224 {
225 if (needle.empty())
226 return false;
227
228 bool found = false;
229 for (auto [teamId, team] : sArenaTeamMgr->GetArenaTeams())
230 {
231 if (StringContainsStringI(team->GetName(), needle))
232 {
233 if (handler->GetSession())
234 {
235 handler->PSendSysMessage(LANG_ARENA_LOOKUP, team->GetName().c_str(), team->GetId(), team->GetType(), team->GetType());
236 found = true;
237 continue;
238 }
239 }
240 }
241
242 if (!found)
243 handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, std::string(needle).c_str());
244
245 return true;
246 }
bool StringContainsStringI(std::string_view haystack, std::string_view needle)
Definition: Util.cpp:593
@ LANG_ARENA_ERROR_NAME_NOT_FOUND
Definition: Language.h:792
@ LANG_ARENA_LOOKUP
Definition: Language.h:801
WorldSession * GetSession()
Definition: Chat.h:122

References ChatHandler::GetSession(), LANG_ARENA_ERROR_NAME_NOT_FOUND, LANG_ARENA_LOOKUP, ChatHandler::PSendSysMessage(), sArenaTeamMgr, and StringContainsStringI().

Referenced by GetCommands().

◆ HandleArenaRenameCommand()

static bool arena_commandscript::HandleArenaRenameCommand ( ChatHandler handler,
QuotedString  oldName,
QuotedString  newName 
)
inlinestatic
124 {
125 ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamByName(oldName);
126 if (!arena)
127 {
128 handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, oldName.c_str());
129 handler->SetSentErrorMessage(true);
130 return false;
131 }
132
133 if (sArenaTeamMgr->GetArenaTeamByName(newName))
134 {
135 handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, oldName.c_str());
136 handler->SetSentErrorMessage(true);
137 return false;
138 }
139
140 if (arena->IsFighting())
141 {
143 handler->SetSentErrorMessage(true);
144 return false;
145 }
146
147 if (!arena->SetName(newName))
148 {
150 handler->SetSentErrorMessage(true);
151 return false;
152 }
153
154 handler->PSendSysMessage(LANG_ARENA_RENAME, arena->GetId(), oldName.c_str(), newName.c_str());
155
156 return true;
157 }
@ LANG_ARENA_RENAME
Definition: Language.h:797
bool SetName(std::string const &name)
Definition: ArenaTeam.cpp:282

References ArenaTeam::GetId(), ArenaTeam::IsFighting(), LANG_ARENA_ERROR_COMBAT, LANG_ARENA_ERROR_NAME_EXISTS, LANG_ARENA_ERROR_NAME_NOT_FOUND, LANG_ARENA_RENAME, LANG_BAD_VALUE, ChatHandler::PSendSysMessage(), sArenaTeamMgr, ChatHandler::SendSysMessage(), ArenaTeam::SetName(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().