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
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

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, 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, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ instance_commandscript()

instance_commandscript::instance_commandscript ( )
inline
35: CommandScript("instance_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable instance_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

38 {
39 static ChatCommandTable instanceCommandTable =
40 {
47 };
48
49 static ChatCommandTable commandTable =
50 {
51 { "instance", instanceCommandTable },
52 };
53
54 return commandTable;
55 }
static bool HandleInstanceGetBossStateCommand(ChatHandler *handler, Optional< PlayerIdentifier > player)
Definition cs_instance.cpp:205
static bool HandleInstanceSaveDataCommand(ChatHandler *handler)
Definition cs_instance.cpp:140
static bool HandleInstanceUnbindCommand(ChatHandler *handler, Variant< uint16, EXACT_SEQUENCE("all")> mapArg, Optional< uint8 > difficultyArg)
Definition cs_instance.cpp:84
static bool HandleInstanceStatsCommand(ChatHandler *handler)
Definition cs_instance.cpp:126
static bool HandleInstanceListBindsCommand(ChatHandler *handler)
Definition cs_instance.cpp:57
static bool HandleInstanceSetBossStateCommand(ChatHandler *handler, uint32 encounterId, uint32 state, Optional< PlayerIdentifier > player)
Definition cs_instance.cpp:161
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_INSTANCE_LISTBINDS
Definition RBAC.h:247
@ RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE
Definition RBAC.h:617
@ RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE
Definition RBAC.h:618
@ RBAC_PERM_COMMAND_INSTANCE_STATS
Definition RBAC.h:249
@ RBAC_PERM_COMMAND_INSTANCE_UNBIND
Definition RBAC.h:248
@ RBAC_PERM_COMMAND_INSTANCE_SAVEDATA
Definition RBAC.h:250

References HandleInstanceGetBossStateCommand(), HandleInstanceListBindsCommand(), HandleInstanceSaveDataCommand(), HandleInstanceSetBossStateCommand(), HandleInstanceStatsCommand(), HandleInstanceUnbindCommand(), rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, and rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND.

◆ HandleInstanceGetBossStateCommand()

static bool instance_commandscript::HandleInstanceGetBossStateCommand ( ChatHandler handler,
Optional< PlayerIdentifier player 
)
inlinestatic
206 {
207 // Character name must be provided when using this from console.
208 if (!player && !handler->GetSession())
209 {
211 return false;
212 }
213
214 if (!player)
215 player = PlayerIdentifier::FromSelf(handler);
216
217 if (!player->IsConnected())
218 {
220 return false;
221 }
222
223 InstanceMap* map = player->GetConnectedPlayer()->GetMap()->ToInstanceMap();
224 if (!map)
225 {
227 return false;
228 }
229
230 if (!map->GetInstanceScript())
231 {
233 return false;
234 }
235
236 // Build a map of encounterIndex -> encounterName from DBC data
237 std::unordered_map<uint32, char const*> encounterNames;
238 Difficulty difficulty = map->GetDifficulty();
239
240 // For heroic ICC/Ruby Sanctum, encounters are only defined
241 // for normal difficulty in the DBC, use the same fallback
242 // pattern as Map::UpdateEncounterState
243 DungeonEncounterList const* encounters = nullptr;
244 if ((map->GetId() == 631 || map->GetId() == 724)
245 && map->IsHeroic())
246 {
247 encounters = sObjectMgr->GetDungeonEncounterList(
248 map->GetId(),
249 !map->Is25ManRaid()
252 }
253 else
254 {
255 Difficulty diffFixed = IsSharedDifficultyMap(map->GetId())
256 ? Difficulty(difficulty % 2)
257 : difficulty;
258 encounters = sObjectMgr->GetDungeonEncounterList(
259 map->GetId(), diffFixed);
260 }
261
262 if (encounters)
263 {
264 for (auto const* encounter : *encounters)
265 encounterNames[encounter->dbcEntry->encounterIndex]
266 = encounter->dbcEntry->encounterName[0];
267 }
268
269 for (uint8 i = 0; i < map->GetInstanceScript()->GetEncounterCount(); ++i)
270 {
271 uint32 state = map->GetInstanceScript()->GetBossState(i);
272 std::string stateName = InstanceScript::GetBossStateName(state);
273
274 auto it = encounterNames.find(i);
275 std::string bossName = (it != encounterNames.end()
276 && it->second) ? it->second : "Unknown";
277
278 handler->PSendSysMessage(
280 i, bossName, state, stateName);
281 }
282
283 return true;
284 }
Difficulty
Definition DBCEnums.h:266
@ RAID_DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:273
@ RAID_DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:274
bool IsSharedDifficultyMap(uint32 mapid)
Definition DBCStores.cpp:829
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
@ LANG_COMMAND_INST_GET_BOSS_STATE
Definition Language.h:1122
@ LANG_NOT_DUNGEON
Definition Language.h:1119
@ LANG_NO_INSTANCE_DATA
Definition Language.h:1120
@ LANG_CMD_SYNTAX
Definition Language.h:42
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:548
#define sObjectMgr
Definition ObjectMgr.h:1723
std::list< DungeonEncounter const * > DungeonEncounterList
Definition ObjectMgr.h:714
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:224
Definition Map.h:708
InstanceScript * GetInstanceScript()
Definition Map.h:720
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:252
static std::string GetBossStateName(uint8 state)
Definition InstanceScript.cpp:837
bool Is25ManRaid() const
Definition Map.h:302
uint32 GetId() const
Definition Map.h:232
InstanceMap * ToInstanceMap()
Definition Map.h:381
Difficulty GetDifficulty() const
Definition Map.h:292
bool IsHeroic() const
Definition Map.h:301
static Optional< PlayerIdentifier > FromSelf(ChatHandler *handler)
Definition ChatCommandTags.cpp:147

References Acore::ChatCommands::PlayerIdentifier::FromSelf(), InstanceScript::GetBossState(), InstanceScript::GetBossStateName(), Map::GetDifficulty(), Map::GetId(), InstanceMap::GetInstanceScript(), ChatHandler::GetSession(), Map::Is25ManRaid(), Map::IsHeroic(), IsSharedDifficultyMap(), LANG_CMD_SYNTAX, LANG_COMMAND_INST_GET_BOSS_STATE, LANG_NO_INSTANCE_DATA, LANG_NOT_DUNGEON, LANG_PLAYER_NOT_FOUND, ChatHandler::PSendSysMessage(), RAID_DIFFICULTY_10MAN_NORMAL, RAID_DIFFICULTY_25MAN_NORMAL, ChatHandler::SendErrorMessage(), sObjectMgr, and Map::ToInstanceMap().

Referenced by GetCommands().

◆ HandleInstanceListBindsCommand()

static bool instance_commandscript::HandleInstanceListBindsCommand ( ChatHandler handler)
inlinestatic
58 {
59 Player* player = handler->getSelectedPlayer();
60 if (!player)
61 player = handler->GetSession()->GetPlayer();
62
63 uint32 counter = 0;
64
65 for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
66 {
67 for (auto const& [mapId, bind] : sInstanceSaveMgr->PlayerGetBoundInstances(player->GetGUID(), Difficulty(i)))
68 {
69 InstanceSave const* save = bind.save;
70 uint32 resetTime = bind.extended ? save->GetExtendedResetTime() : save->GetResetTime();
71 uint32 ttr = (resetTime >= GameTime::GetGameTime().count() ? resetTime - GameTime::GetGameTime().count() : 0);
72 std::string timeleft = secsToTimeString(ttr);
73 handler->PSendSysMessage("map: {}, inst: {}, perm: {}, diff: {}, canReset: {}, TTR: {}{}",
74 mapId, save->GetInstanceId(), bind.perm ? "yes" : "no", save->GetDifficulty(), save->CanReset() ? "yes" : "no", timeleft, (bind.extended ? " (extended)" : ""));
75 counter++;
76 }
77 }
78
79 handler->PSendSysMessage("player binds: {}", counter);
80
81 return true;
82 }
#define MAX_DIFFICULTY
Definition DBCEnums.h:283
#define sInstanceSaveMgr
Definition InstanceSaveMgr.h:202
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
Player * getSelectedPlayer() const
Definition Chat.cpp:382
Definition InstanceSaveMgr.h:56
time_t GetExtendedResetTime() const
Definition InstanceSaveMgr.h:76
uint32 GetInstanceId() const
Definition InstanceSaveMgr.h:61
time_t GetResetTime() const
Definition InstanceSaveMgr.h:75
Definition Player.h:1084
Player * GetPlayer() const
Definition WorldSession.h:454
Seconds GetGameTime()
Definition GameTime.cpp:38

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
141 {
142 Player* player = handler->GetSession()->GetPlayer();
143 Map* map = player->GetMap();
144 if (!map->IsDungeon())
145 {
146 handler->SendErrorMessage("Map is not a dungeon.");
147 return false;
148 }
149
150 if (!map->ToInstanceMap()->GetInstanceScript())
151 {
152 handler->SendErrorMessage("Map has no instance data.");
153 return false;
154 }
155
157
158 return true;
159 }
void SaveToDB()
Definition InstanceScript.cpp:42
Definition Map.h:166
bool IsDungeon() const
Definition Map.h:297
Map * GetMap() const
Definition Object.h:625

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

Referenced by GetCommands().

◆ HandleInstanceSetBossStateCommand()

static bool instance_commandscript::HandleInstanceSetBossStateCommand ( ChatHandler handler,
uint32  encounterId,
uint32  state,
Optional< PlayerIdentifier player 
)
inlinestatic
162 {
163 // Character name must be provided when using this from console.
164 if (!player && !handler->GetSession())
165 {
167 return false;
168 }
169
170 if (!player)
171 player = PlayerIdentifier::FromSelf(handler);
172
173 if (!player->IsConnected())
174 {
176 return false;
177 }
178
179 InstanceMap* map = player->GetConnectedPlayer()->GetMap()->ToInstanceMap();
180 if (!map)
181 {
183 return false;
184 }
185
186 if (!map->GetInstanceScript())
187 {
189 return false;
190 }
191
192 // Reject improper values.
193 if (encounterId > map->GetInstanceScript()->GetEncounterCount())
194 {
196 return false;
197 }
198
199 map->GetInstanceScript()->SetBossState(encounterId, EncounterState(state));
200 std::string stateName = InstanceScript::GetBossStateName(state);
201 handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state, stateName);
202 return true;
203 }
EncounterState
Definition InstanceScript.h:57
@ LANG_COMMAND_INST_SET_BOSS_STATE
Definition Language.h:1121
@ LANG_BAD_VALUE
Definition Language.h:151
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:396
uint32 GetEncounterCount() const
Definition InstanceScript.h:278

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(), ChatHandler::SendErrorMessage(), InstanceScript::SetBossState(), and Map::ToInstanceMap().

Referenced by GetCommands().

◆ HandleInstanceStatsCommand()

static bool instance_commandscript::HandleInstanceStatsCommand ( ChatHandler handler)
inlinestatic
127 {
128 uint32 dungeon = 0, battleground = 0, arena = 0, spectators = 0;
129 sMapMgr->GetNumInstances(dungeon, battleground, arena);
130 handler->PSendSysMessage("instances loaded: dungeons ({}), battlegrounds ({}), arenas ({})", dungeon, battleground, arena);
131 dungeon = 0;
132 battleground = 0;
133 arena = 0;
134 spectators = 0;
135 sMapMgr->GetNumPlayersInInstances(dungeon, battleground, arena, spectators);
136 handler->SendErrorMessage("players in instances: dungeons ({}), battlegrounds ({}), arenas ({} + {} spect)", dungeon, battleground, arena, spectators);
137 return false;
138 }
#define sMapMgr
Definition MapMgr.h:220

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

Referenced by GetCommands().

◆ HandleInstanceUnbindCommand()

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

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().


The documentation for this class was generated from the following file: