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

Public Member Functions

 instance_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 HandleInstanceListBindsCommand (ChatHandler *handler)
 
static bool HandleInstanceUnbindCommand (ChatHandler *handler, Variant< uint16, EXACT_SEQUENCE("all")> mapArg, Optional< uint8 > difficultyArg)
 
static bool HandleInstanceStatsCommand (ChatHandler *handler)
 
static bool HandleInstanceSaveDataCommand (ChatHandler *handler)
 
static bool HandleInstanceSetBossStateCommand (ChatHandler *handler, uint32 encounterId, uint32 state, Optional< PlayerIdentifier > player)
 
static bool HandleInstanceGetBossStateCommand (ChatHandler *handler, uint32 encounterId, Optional< PlayerIdentifier > player)
 

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

◆ instance_commandscript()

instance_commandscript::instance_commandscript ( )
inline
41: CommandScript("instance_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable instance_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

44 {
45 static ChatCommandTable instanceCommandTable =
46 {
47 { "listbinds", HandleInstanceListBindsCommand, SEC_MODERATOR, Console::No },
48 { "unbind", HandleInstanceUnbindCommand, SEC_GAMEMASTER, Console::No },
49 { "stats", HandleInstanceStatsCommand, SEC_MODERATOR, Console::Yes },
50 { "savedata", HandleInstanceSaveDataCommand, SEC_ADMINISTRATOR, Console::No },
51 { "setbossstate", HandleInstanceSetBossStateCommand, SEC_GAMEMASTER, Console::Yes },
52 { "getbossstate", HandleInstanceGetBossStateCommand, SEC_MODERATOR, Console::Yes },
53 };
54
55 static ChatCommandTable commandTable =
56 {
57 { "instance", instanceCommandTable },
58 };
59
60 return commandTable;
61 }
@ SEC_ADMINISTRATOR
Definition: Common.h:69
@ SEC_GAMEMASTER
Definition: Common.h:68
@ SEC_MODERATOR
Definition: Common.h:67
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleInstanceGetBossStateCommand(ChatHandler *handler, uint32 encounterId, Optional< PlayerIdentifier > player)
Definition: cs_instance.cpp:220
static bool HandleInstanceSaveDataCommand(ChatHandler *handler)
Definition: cs_instance.cpp:148
static bool HandleInstanceUnbindCommand(ChatHandler *handler, Variant< uint16, EXACT_SEQUENCE("all")> mapArg, Optional< uint8 > difficultyArg)
Definition: cs_instance.cpp:90
static bool HandleInstanceStatsCommand(ChatHandler *handler)
Definition: cs_instance.cpp:132
static bool HandleInstanceListBindsCommand(ChatHandler *handler)
Definition: cs_instance.cpp:63
static bool HandleInstanceSetBossStateCommand(ChatHandler *handler, uint32 encounterId, uint32 state, Optional< PlayerIdentifier > player)
Definition: cs_instance.cpp:171

References HandleInstanceGetBossStateCommand(), HandleInstanceListBindsCommand(), HandleInstanceSaveDataCommand(), HandleInstanceSetBossStateCommand(), HandleInstanceStatsCommand(), HandleInstanceUnbindCommand(), SEC_ADMINISTRATOR, SEC_GAMEMASTER, and SEC_MODERATOR.

◆ HandleInstanceGetBossStateCommand()

static bool instance_commandscript::HandleInstanceGetBossStateCommand ( ChatHandler handler,
uint32  encounterId,
Optional< PlayerIdentifier player 
)
inlinestatic
221 {
222 // Character name must be provided when using this from console.
223 if (!player && !handler->GetSession())
224 {
226 handler->SetSentErrorMessage(true);
227 return false;
228 }
229
230 if (!player)
231 player = PlayerIdentifier::FromSelf(handler);
232
233 if (!player->IsConnected())
234 {
236 handler->SetSentErrorMessage(true);
237 return false;
238 }
239
240 InstanceMap* map = player->GetConnectedPlayer()->GetMap()->ToInstanceMap();
241 if (!map)
242 {
244 handler->SetSentErrorMessage(true);
245 return false;
246 }
247
248 if (!map->GetInstanceScript())
249 {
251 handler->SetSentErrorMessage(true);
252 return false;
253 }
254
255 if (encounterId > map->GetInstanceScript()->GetEncounterCount())
256 {
258 handler->SetSentErrorMessage(true);
259 return false;
260 }
261
262 uint32 state = map->GetInstanceScript()->GetBossState(encounterId);
263 std::string stateName = InstanceScript::GetBossStateName(state);
264 handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state, stateName.c_str());
265 return true;
266 }
std::uint32_t uint32
Definition: Define.h:108
@ LANG_COMMAND_INST_GET_BOSS_STATE
Definition: Language.h:1114
@ LANG_NOT_DUNGEON
Definition: Language.h:1111
@ LANG_NO_INSTANCE_DATA
Definition: Language.h:1112
@ LANG_CMD_SYNTAX
Definition: Language.h:42
@ LANG_PLAYER_NOT_FOUND
Definition: Language.h:522
@ LANG_BAD_VALUE
Definition: Language.h:147
WorldSession * GetSession()
Definition: Chat.h:122
void SetSentErrorMessage(bool val)
Definition: Chat.h:118
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
static Optional< PlayerIdentifier > FromSelf(ChatHandler *handler)
Definition: ChatCommandTags.cpp:147
EncounterState GetBossState(uint32 id) const
Definition: InstanceScript.h:230
static std::string GetBossStateName(uint8 state)
Definition: InstanceScript.cpp:701
uint32 GetEncounterCount() const
Definition: InstanceScript.h:254
InstanceMap * ToInstanceMap()
Definition: Map.h:544
Definition: Map.h:813
InstanceScript * GetInstanceScript()
Definition: Map.h:825

References Acore::ChatCommands::PlayerIdentifier::FromSelf(), InstanceScript::GetBossState(), InstanceScript::GetBossStateName(), InstanceScript::GetEncounterCount(), InstanceMap::GetInstanceScript(), ChatHandler::GetSession(), LANG_BAD_VALUE, LANG_CMD_SYNTAX, LANG_COMMAND_INST_GET_BOSS_STATE, LANG_NO_INSTANCE_DATA, LANG_NOT_DUNGEON, LANG_PLAYER_NOT_FOUND, ChatHandler::PSendSysMessage(), ChatHandler::SetSentErrorMessage(), and Map::ToInstanceMap().

Referenced by GetCommands().

◆ HandleInstanceListBindsCommand()

static bool instance_commandscript::HandleInstanceListBindsCommand ( ChatHandler handler)
inlinestatic
64 {
65 Player* player = handler->getSelectedPlayer();
66 if (!player)
67 player = handler->GetSession()->GetPlayer();
68
69 uint32 counter = 0;
70
71 for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
72 {
73 for (auto const& [mapId, bind] : sInstanceSaveMgr->PlayerGetBoundInstances(player->GetGUID(), Difficulty(i)))
74 {
75 InstanceSave const* save = bind.save;
76 uint32 resetTime = bind.extended ? save->GetExtendedResetTime() : save->GetResetTime();
77 uint32 ttr = (resetTime >= GameTime::GetGameTime().count() ? resetTime - GameTime::GetGameTime().count() : 0);
78 std::string timeleft = secsToTimeString(ttr);
79 handler->PSendSysMessage("map: %d, inst: %d, perm: %s, diff: %d, canReset: %s, TTR: %s%s",
80 mapId, save->GetInstanceId(), bind.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str(), (bind.extended ? " (extended)" : ""));
81 counter++;
82 }
83 }
84
85 handler->PSendSysMessage("player binds: %d", counter);
86
87 return true;
88 }
std::uint8_t uint8
Definition: Define.h:110
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition: Util.cpp:74
#define sInstanceSaveMgr
Definition: InstanceSaveMgr.h:202
Difficulty
Definition: DBCEnums.h:271
#define MAX_DIFFICULTY
Definition: DBCEnums.h:288
Seconds GetGameTime()
Definition: GameTime.cpp:38
Player * getSelectedPlayer() const
Definition: Chat.cpp:301
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
Definition: Player.h:1046
Definition: InstanceSaveMgr.h:56
time_t GetExtendedResetTime() const
Definition: InstanceSaveMgr.h:76
uint32 GetInstanceId() const
Definition: InstanceSaveMgr.h:61
Difficulty GetDifficulty() const
Definition: InstanceSaveMgr.h:63
bool CanReset() const
Definition: InstanceSaveMgr.h:81
time_t GetResetTime() const
Definition: InstanceSaveMgr.h:75
Player * GetPlayer() const
Definition: WorldSession.h:361

References InstanceSave::CanReset(), InstanceSave::GetDifficulty(), InstanceSave::GetExtendedResetTime(), GameTime::GetGameTime(), Object::GetGUID(), InstanceSave::GetInstanceId(), WorldSession::GetPlayer(), InstanceSave::GetResetTime(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), MAX_DIFFICULTY, ChatHandler::PSendSysMessage(), secsToTimeString(), and sInstanceSaveMgr.

Referenced by GetCommands().

◆ HandleInstanceSaveDataCommand()

static bool instance_commandscript::HandleInstanceSaveDataCommand ( ChatHandler handler)
inlinestatic
149 {
150 Player* player = handler->GetSession()->GetPlayer();
151 Map* map = player->GetMap();
152 if (!map->IsDungeon())
153 {
154 handler->PSendSysMessage("Map is not a dungeon.");
155 handler->SetSentErrorMessage(true);
156 return false;
157 }
158
159 if (!map->ToInstanceMap()->GetInstanceScript())
160 {
161 handler->PSendSysMessage("Map has no instance data.");
162 handler->SetSentErrorMessage(true);
163 return false;
164 }
165
167
168 return true;
169 }
Map * GetMap() const
Definition: Object.h:517
void SaveToDB()
Definition: InstanceScript.cpp:41
Definition: Map.h:312
bool IsDungeon() const
Definition: Map.h:447

References InstanceMap::GetInstanceScript(), WorldObject::GetMap(), WorldSession::GetPlayer(), ChatHandler::GetSession(), Map::IsDungeon(), ChatHandler::PSendSysMessage(), InstanceScript::SaveToDB(), ChatHandler::SetSentErrorMessage(), and Map::ToInstanceMap().

Referenced by GetCommands().

◆ HandleInstanceSetBossStateCommand()

static bool instance_commandscript::HandleInstanceSetBossStateCommand ( ChatHandler handler,
uint32  encounterId,
uint32  state,
Optional< PlayerIdentifier player 
)
inlinestatic
172 {
173 // Character name must be provided when using this from console.
174 if (!player && !handler->GetSession())
175 {
177 handler->SetSentErrorMessage(true);
178 return false;
179 }
180
181 if (!player)
182 player = PlayerIdentifier::FromSelf(handler);
183
184 if (!player->IsConnected())
185 {
187 handler->SetSentErrorMessage(true);
188 return false;
189 }
190
191 InstanceMap* map = player->GetConnectedPlayer()->GetMap()->ToInstanceMap();
192 if (!map)
193 {
195 handler->SetSentErrorMessage(true);
196 return false;
197 }
198
199 if (!map->GetInstanceScript())
200 {
202 handler->SetSentErrorMessage(true);
203 return false;
204 }
205
206 // Reject improper values.
207 if (encounterId > map->GetInstanceScript()->GetEncounterCount())
208 {
210 handler->SetSentErrorMessage(true);
211 return false;
212 }
213
214 map->GetInstanceScript()->SetBossState(encounterId, EncounterState(state));
215 std::string stateName = InstanceScript::GetBossStateName(state);
216 handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state, stateName.c_str());
217 return true;
218 }
EncounterState
Definition: InstanceScript.h:55
@ LANG_COMMAND_INST_SET_BOSS_STATE
Definition: Language.h:1113
virtual bool SetBossState(uint32 id, EncounterState state)
Definition: InstanceScript.cpp:317

References Acore::ChatCommands::PlayerIdentifier::FromSelf(), InstanceScript::GetBossStateName(), InstanceScript::GetEncounterCount(), InstanceMap::GetInstanceScript(), ChatHandler::GetSession(), LANG_BAD_VALUE, LANG_CMD_SYNTAX, LANG_COMMAND_INST_SET_BOSS_STATE, LANG_NO_INSTANCE_DATA, LANG_NOT_DUNGEON, LANG_PLAYER_NOT_FOUND, ChatHandler::PSendSysMessage(), InstanceScript::SetBossState(), ChatHandler::SetSentErrorMessage(), and Map::ToInstanceMap().

Referenced by GetCommands().

◆ HandleInstanceStatsCommand()

static bool instance_commandscript::HandleInstanceStatsCommand ( ChatHandler handler)
inlinestatic
133 {
134 uint32 dungeon = 0, battleground = 0, arena = 0, spectators = 0;
135 sMapMgr->GetNumInstances(dungeon, battleground, arena);
136 handler->PSendSysMessage("instances loaded: dungeons (%d), battlegrounds (%d), arenas (%d)", dungeon, battleground, arena);
137 dungeon = 0;
138 battleground = 0;
139 arena = 0;
140 spectators = 0;
141 sMapMgr->GetNumPlayersInInstances(dungeon, battleground, arena, spectators);
142 handler->PSendSysMessage("players in instances: dungeons (%d), battlegrounds (%d), arenas (%d + %d spect)", dungeon, battleground, arena, spectators);
143
144 handler->SetSentErrorMessage(true);
145 return false;
146 }
#define sMapMgr
Definition: MapMgr.h:221

References ChatHandler::PSendSysMessage(), ChatHandler::SetSentErrorMessage(), and sMapMgr.

Referenced by GetCommands().

◆ HandleInstanceUnbindCommand()

static bool instance_commandscript::HandleInstanceUnbindCommand ( ChatHandler handler,
Variant< uint16, EXACT_SEQUENCE("all")>  mapArg,
Optional< uint8 difficultyArg 
)
inlinestatic
91 {
92 Player* player = handler->getSelectedPlayer();
93 if (!player)
94 player = handler->GetSession()->GetPlayer();
95
96 uint16 counter = 0;
97 uint16 mapId = 0;
98
99 if (mapArg.holds_alternative<uint16>())
100 {
101 mapId = mapArg.get<uint16>();
102 if (!mapId)
103 return false;
104 }
105
106 for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
107 {
108 BoundInstancesMap const& m_boundInstances = sInstanceSaveMgr->PlayerGetBoundInstances(player->GetGUID(), Difficulty(i));
109 for (BoundInstancesMap::const_iterator itr = m_boundInstances.begin(); itr != m_boundInstances.end();)
110 {
111 InstanceSave const* save = itr->second.save;
112 if (itr->first != player->GetMapId() && (!mapId || mapId == itr->first) && (!difficultyArg || difficultyArg == save->GetDifficulty()))
113 {
114 uint32 resetTime = itr->second.extended ? save->GetExtendedResetTime() : save->GetResetTime();
115 uint32 ttr = (resetTime >= GameTime::GetGameTime().count() ? resetTime - GameTime::GetGameTime().count() : 0);
116 std::string timeleft = secsToTimeString(ttr);
117 handler->PSendSysMessage("unbinding map: %d, inst: %d, perm: %s, diff: %d, canReset: %s, TTR: %s%s", itr->first, save->GetInstanceId(), itr->second.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft.c_str(), (itr->second.extended ? " (extended)" : ""));
118 sInstanceSaveMgr->PlayerUnbindInstance(player->GetGUID(), itr->first, Difficulty(i), true, player);
119 itr = m_boundInstances.begin();
120 counter++;
121 }
122 else
123 ++itr;
124 }
125 }
126
127 handler->PSendSysMessage("instances unbound: %d", counter);
128
129 return true;
130 }
std::uint16_t uint16
Definition: Define.h:109
std::unordered_map< uint32, InstancePlayerBind > BoundInstancesMap
Definition: InstanceSaveMgr.h:46
constexpr decltype(auto) get()
Definition: ChatCommandTags.h:289
constexpr bool holds_alternative() const
Definition: ChatCommandTags.h:303
uint32 GetMapId() const
Definition: Position.h:276

References InstanceSave::CanReset(), InstanceSave::GetDifficulty(), InstanceSave::GetExtendedResetTime(), GameTime::GetGameTime(), Object::GetGUID(), InstanceSave::GetInstanceId(), WorldLocation::GetMapId(), WorldSession::GetPlayer(), InstanceSave::GetResetTime(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), MAX_DIFFICULTY, ChatHandler::PSendSysMessage(), secsToTimeString(), and sInstanceSaveMgr.

Referenced by GetCommands().