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

Public Member Functions

 misc_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
std::string const & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleSkirmishCommand (ChatHandler *handler, std::vector< std::string_view > args)
 
static bool HandleCommentatorCommand (ChatHandler *handler, Optional< bool > enableArg)
 
static bool HandleDevCommand (ChatHandler *handler, Optional< bool > enableArg)
 
static bool HandleGPSCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleAuraCommand (ChatHandler *handler, SpellInfo const *spell)
 
static bool HandleAuraStacksCommand (ChatHandler *handler, SpellInfo const *spell, int16 stacks)
 
static bool HandleUnAuraCommand (ChatHandler *handler, Variant< SpellInfo const *, std::string_view > spells)
 
static bool HandleAppearCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleSummonCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleGroupSummonCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleCommandsCommand (ChatHandler *handler)
 
static bool HandleDieCommand (ChatHandler *handler)
 
static bool HandleReviveCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleDismountCommand (ChatHandler *handler)
 
static bool HandleGUIDCommand (ChatHandler *handler)
 
static bool HandleHelpCommand (ChatHandler *handler, Tail cmd)
 
static bool HandleCooldownCommand (ChatHandler *handler, Optional< SpellInfo const * > spell)
 
static bool HandleGetDistanceCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleRecallCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleSaveCommand (ChatHandler *handler)
 
static bool HandleSaveAllCommand (ChatHandler *handler)
 
static bool HandleKickPlayerCommand (ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > reason)
 
static bool HandleUnstuckCommand (ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > location)
 
static bool HandleLinkGraveCommand (ChatHandler *handler, uint32 graveyardId, Optional< std::string_view > team)
 
static bool HandleNearGraveCommand (ChatHandler *handler, Optional< std::string_view > team)
 
static bool HandleShowAreaCommand (ChatHandler *handler, uint32 areaID)
 
static bool HandleHideAreaCommand (ChatHandler *handler, uint32 areaID)
 
static void SendRemoveItemResult (ChatHandler *handler, uint32 itemId, uint32 removed, std::string const &nameLink, ObjectGuid::LowType guidLow, bool online, uint32 countLeft)
 
static bool HandleAddItemCommand (ChatHandler *handler, Optional< PlayerIdentifier > player, ItemTemplate const *itemTemplate, Optional< int32 > _count)
 
static bool HandleAddItemSetCommand (ChatHandler *handler, Variant< Hyperlink< itemset >, uint32 > itemSetId)
 
static bool HandleChangeWeather (ChatHandler *handler, uint32 type, float grade)
 
static bool HandleMaxSkillCommand (ChatHandler *handler)
 
static bool HandleSetSkillCommand (ChatHandler *handler, Variant< Hyperlink< skill >, uint32 > skillId, int32 level, Optional< uint16 > maxPureSkill)
 
static bool HandlePInfoCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleRespawnCreatureByGuidCommand (ChatHandler *handler, ObjectGuid::LowType spawnId)
 
static bool HandleRespawnGameObjectByGuidCommand (ChatHandler *handler, ObjectGuid::LowType spawnId)
 
static bool HandleRespawnCreatureByEntryCommand (ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
 
static bool HandleRespawnGameObjectByEntryCommand (ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
 
static bool HandleRespawnCommand (ChatHandler *handler)
 
static bool HandleRespawnAllCommand (ChatHandler *handler)
 
static bool HandleMuteCommand (ChatHandler *handler, Optional< PlayerIdentifier > player, std::string notSpeakTime, Tail muteReason)
 
static bool HandleUnmuteCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleMuteInfoCommand (ChatHandler *handler, std::string accountName)
 
static bool HandleMuteInfoHelper (ChatHandler *handler, uint32 accountId, char const *accountName)
 
static bool HandleMovegensCommand (ChatHandler *handler)
 
static bool HandleComeToMeCommand (ChatHandler *handler)
 
static bool HandleDamageCommand (ChatHandler *handler, uint32 damage, Optional< std::string > percent)
 
static bool HandleCombatStopCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleFlushArenaPointsCommand (ChatHandler *)
 
static bool HandleFreezeCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleUnFreezeCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandlePlayAllCommand (ChatHandler *handler, uint32 soundId)
 
static bool HandlePossessCommand (ChatHandler *handler)
 
static bool HandleUnPossessCommand (ChatHandler *handler)
 
static bool HandleBindSightCommand (ChatHandler *handler)
 
static bool HandleUnbindSightCommand (ChatHandler *handler)
 
static bool HandleMailBoxCommand (ChatHandler *handler)
 
static bool HandleStringCommand (ChatHandler *handler, uint32 id, Optional< uint8 > locale)
 
static bool HandleOpenDoorCommand (ChatHandler *handler, Optional< float > range)
 
static bool HandleBMCommand (ChatHandler *handler, Optional< bool > enableArg)
 
static bool HandlePacketLog (ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< bool > enableArg)
 

Additional Inherited Members

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

Detailed Description

Constructor & Destructor Documentation

◆ misc_commandscript()

misc_commandscript::misc_commandscript ( )
inline
93: CommandScript("misc_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable misc_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

96 {
97 static ChatCommandTable auraCommandTable =
98 {
101 };
102
103 static ChatCommandTable commandTable =
104 {
105 { "commentator", HandleCommentatorCommand, rbac::RBAC_PERM_COMMAND_COMMENTATOR, Console::No },
106 { "dev", HandleDevCommand, rbac::RBAC_PERM_COMMAND_DEV, Console::No },
107 { "gps", HandleGPSCommand, rbac::RBAC_PERM_COMMAND_GPS, Console::No },
108 { "aura", auraCommandTable },
109 { "unaura", HandleUnAuraCommand, rbac::RBAC_PERM_COMMAND_UNAURA, Console::No },
110 { "appear", HandleAppearCommand, rbac::RBAC_PERM_COMMAND_APPEAR, Console::No },
111 { "summon", HandleSummonCommand, rbac::RBAC_PERM_COMMAND_SUMMON, Console::No },
112 { "groupsummon", HandleGroupSummonCommand, rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, Console::No },
113 { "commands", HandleCommandsCommand, rbac::RBAC_PERM_COMMAND_COMMANDS, Console::Yes },
114 { "die", HandleDieCommand, rbac::RBAC_PERM_COMMAND_DIE, Console::No },
115 { "revive", HandleReviveCommand, rbac::RBAC_PERM_COMMAND_REVIVE, Console::Yes },
116 { "dismount", HandleDismountCommand, rbac::RBAC_PERM_COMMAND_DISMOUNT, Console::No },
117 { "guid", HandleGUIDCommand, rbac::RBAC_PERM_COMMAND_GUID, Console::No },
118 { "help", HandleHelpCommand, rbac::RBAC_PERM_COMMAND_HELP, Console::Yes },
119 { "cooldown", HandleCooldownCommand, rbac::RBAC_PERM_COMMAND_COOLDOWN, Console::No },
121 { "recall", HandleRecallCommand, rbac::RBAC_PERM_COMMAND_RECALL, Console::No },
122 { "save", HandleSaveCommand, rbac::RBAC_PERM_COMMAND_SAVE, Console::No },
123 { "saveall", HandleSaveAllCommand, rbac::RBAC_PERM_COMMAND_SAVEALL, Console::Yes },
124 { "kick", HandleKickPlayerCommand, rbac::RBAC_PERM_COMMAND_KICK, Console::Yes },
125 { "unstuck", HandleUnstuckCommand, rbac::RBAC_PERM_COMMAND_UNSTUCK, Console::Yes },
126 { "linkgrave", HandleLinkGraveCommand, rbac::RBAC_PERM_COMMAND_LINKGRAVE, Console::No },
127 { "neargrave", HandleNearGraveCommand, rbac::RBAC_PERM_COMMAND_NEARGRAVE, Console::No },
128 { "showarea", HandleShowAreaCommand, rbac::RBAC_PERM_COMMAND_SHOWAREA, Console::No },
129 { "hidearea", HandleHideAreaCommand, rbac::RBAC_PERM_COMMAND_HIDEAREA, Console::No },
130 { "additem", HandleAddItemCommand, rbac::RBAC_PERM_COMMAND_ADDITEM, Console::Yes },
131 { "additem set", HandleAddItemSetCommand, rbac::RBAC_PERM_COMMAND_ADDITEMSET, Console::No },
132 { "wchange", HandleChangeWeather, rbac::RBAC_PERM_COMMAND_WCHANGE, Console::No },
133 { "maxskill", HandleMaxSkillCommand, rbac::RBAC_PERM_COMMAND_MAXSKILL, Console::No },
134 { "setskill", HandleSetSkillCommand, rbac::RBAC_PERM_COMMAND_SETSKILL, Console::No },
135 { "pinfo", HandlePInfoCommand, rbac::RBAC_PERM_COMMAND_PINFO, Console::Yes },
136 { "respawn", HandleRespawnCommand, rbac::RBAC_PERM_COMMAND_RESPAWN, Console::No },
137 { "respawn all", HandleRespawnAllCommand, rbac::RBAC_PERM_COMMAND_RESPAWN_ALL, Console::No },
142 { "mute", HandleMuteCommand, rbac::RBAC_PERM_COMMAND_MUTE, Console::Yes },
143 { "mutehistory", HandleMuteInfoCommand, rbac::RBAC_PERM_COMMAND_MUTEHISTORY, Console::Yes },
144 { "unmute", HandleUnmuteCommand, rbac::RBAC_PERM_COMMAND_UNMUTE, Console::Yes },
145 { "movegens", HandleMovegensCommand, rbac::RBAC_PERM_COMMAND_MOVEGENS, Console::No },
146 { "cometome", HandleComeToMeCommand, rbac::RBAC_PERM_COMMAND_COMETOME, Console::No },
147 { "damage", HandleDamageCommand, rbac::RBAC_PERM_COMMAND_DAMAGE, Console::No },
148 { "combatstop", HandleCombatStopCommand, rbac::RBAC_PERM_COMMAND_COMBATSTOP, Console::Yes },
149 { "flusharenapoints", HandleFlushArenaPointsCommand, rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, Console::Yes },
150 { "freeze", HandleFreezeCommand, rbac::RBAC_PERM_COMMAND_FREEZE, Console::No },
151 { "unfreeze", HandleUnFreezeCommand, rbac::RBAC_PERM_COMMAND_UNFREEZE, Console::No },
152 { "possess", HandlePossessCommand, rbac::RBAC_PERM_COMMAND_POSSESS, Console::No },
153 { "unpossess", HandleUnPossessCommand, rbac::RBAC_PERM_COMMAND_UNPOSSESS, Console::No },
154 { "bindsight", HandleBindSightCommand, rbac::RBAC_PERM_COMMAND_BINDSIGHT, Console::No },
155 { "unbindsight", HandleUnbindSightCommand, rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, Console::No },
156 { "playall", HandlePlayAllCommand, rbac::RBAC_PERM_COMMAND_PLAYALL, Console::No },
157 { "skirmish", HandleSkirmishCommand, rbac::RBAC_PERM_COMMAND_SKIRMISH, Console::No },
158 { "mailbox", HandleMailBoxCommand, rbac::RBAC_PERM_COMMAND_MAILBOX, Console::No },
159 { "string", HandleStringCommand, rbac::RBAC_PERM_COMMAND_STRING, Console::No },
160 { "opendoor", HandleOpenDoorCommand, rbac::RBAC_PERM_COMMAND_OPENDOOR, Console::No },
162 { "packetlog", HandlePacketLog, rbac::RBAC_PERM_COMMAND_PACKETLOG, Console::Yes }
163 };
164
165 return commandTable;
166 }
static bool HandleCommentatorCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:480
static bool HandleDevCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:522
static bool HandleDamageCommand(ChatHandler *handler, uint32 damage, Optional< std::string > percent)
Definition cs_misc.cpp:3240
static bool HandleSaveCommand(ChatHandler *handler)
Definition cs_misc.cpp:1371
static bool HandleAuraStacksCommand(ChatHandler *handler, SpellInfo const *spell, int16 stacks)
Definition cs_misc.cpp:677
static bool HandleLinkGraveCommand(ChatHandler *handler, uint32 graveyardId, Optional< std::string_view > team)
Definition cs_misc.cpp:1534
static bool HandlePlayAllCommand(ChatHandler *handler, uint32 soundId)
Definition cs_misc.cpp:3389
static bool HandleAddItemCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, ItemTemplate const *itemTemplate, Optional< int32 > _count)
Definition cs_misc.cpp:1734
static bool HandleAuraCommand(ChatHandler *handler, SpellInfo const *spell)
Definition cs_misc.cpp:651
static bool HandleUnstuckCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > location)
Definition cs_misc.cpp:1456
static bool HandleRespawnAllCommand(ChatHandler *handler)
Definition cs_misc.cpp:2816
static bool HandleSkirmishCommand(ChatHandler *handler, std::vector< std::string_view > args)
Definition cs_misc.cpp:168
static bool HandleUnbindSightCommand(ChatHandler *handler)
Definition cs_misc.cpp:3439
static bool HandleRespawnCreatureByGuidCommand(ChatHandler *handler, ObjectGuid::LowType spawnId)
Definition cs_misc.cpp:2537
static bool HandleShowAreaCommand(ChatHandler *handler, uint32 areaID)
Definition cs_misc.cpp:1662
static bool HandleStringCommand(ChatHandler *handler, uint32 id, Optional< uint8 > locale)
Definition cs_misc.cpp:3459
static bool HandleChangeWeather(ChatHandler *handler, uint32 type, float grade)
Definition cs_misc.cpp:1998
static bool HandlePInfoCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2080
static bool HandleBMCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:3485
static bool HandleSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:931
static bool HandleCooldownCommand(ChatHandler *handler, Optional< SpellInfo const * > spell)
Definition cs_misc.cpp:1276
static bool HandleReviveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1201
static bool HandleOpenDoorCommand(ChatHandler *handler, Optional< float > range)
Definition cs_misc.cpp:3472
static bool HandleCommandsCommand(ChatHandler *handler)
Definition cs_misc.cpp:1158
static bool HandleMailBoxCommand(ChatHandler *handler)
Definition cs_misc.cpp:3452
static bool HandleDieCommand(ChatHandler *handler)
Definition cs_misc.cpp:1164
static bool HandleAppearCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:756
static bool HandleHelpCommand(ChatHandler *handler, Tail cmd)
Definition cs_misc.cpp:1264
static bool HandleRespawnCommand(ChatHandler *handler)
Definition cs_misc.cpp:2792
static bool HandleNearGraveCommand(ChatHandler *handler, Optional< std::string_view > team)
Definition cs_misc.cpp:1585
static bool HandleMovegensCommand(ChatHandler *handler)
Definition cs_misc.cpp:3090
static bool HandleGUIDCommand(ChatHandler *handler)
Definition cs_misc.cpp:1250
static bool HandleAddItemSetCommand(ChatHandler *handler, Variant< Hyperlink< itemset >, uint32 > itemSetId)
Definition cs_misc.cpp:1937
static bool HandleSaveAllCommand(ChatHandler *handler)
Definition cs_misc.cpp:1402
static bool HandleGPSCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:565
static bool HandleKickPlayerCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > reason)
Definition cs_misc.cpp:1410
static bool HandleHideAreaCommand(ChatHandler *handler, uint32 areaID)
Definition cs_misc.cpp:1693
static bool HandleSetSkillCommand(ChatHandler *handler, Variant< Hyperlink< skill >, uint32 > skillId, int32 level, Optional< uint16 > maxPureSkill)
Definition cs_misc.cpp:2036
static bool HandlePacketLog(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< bool > enableArg)
Definition cs_misc.cpp:3526
static bool HandleUnmuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2994
static bool HandleRecallCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1334
static bool HandleBindSightCommand(ChatHandler *handler)
Definition cs_misc.cpp:3427
static bool HandleComeToMeCommand(ChatHandler *handler)
Definition cs_misc.cpp:3224
static bool HandleUnPossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:3415
static bool HandleRespawnGameObjectByEntryCommand(ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
Definition cs_misc.cpp:2720
static bool HandleDismountCommand(ChatHandler *handler)
Definition cs_misc.cpp:1226
static bool HandleGroupSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1053
static bool HandleCombatStopCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:3272
static bool HandleUnAuraCommand(ChatHandler *handler, Variant< SpellInfo const *, std::string_view > spells)
Definition cs_misc.cpp:722
static bool HandleGetDistanceCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1306
static bool HandleMaxSkillCommand(ChatHandler *handler)
Definition cs_misc.cpp:2022
static bool HandleFlushArenaPointsCommand(ChatHandler *)
Definition cs_misc.cpp:3298
static bool HandleFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:3304
static bool HandleRespawnGameObjectByGuidCommand(ChatHandler *handler, ObjectGuid::LowType spawnId)
Definition cs_misc.cpp:2593
static bool HandleMuteInfoCommand(ChatHandler *handler, std::string accountName)
Definition cs_misc.cpp:3049
static bool HandleUnFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:3347
static bool HandleMuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, std::string notSpeakTime, Tail muteReason)
Definition cs_misc.cpp:2870
static bool HandlePossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:3403
static bool HandleRespawnCreatureByEntryCommand(ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
Definition cs_misc.cpp:2649
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_COMMANDS
Definition RBAC.h:327
@ RBAC_PERM_COMMAND_DISMOUNT
Definition RBAC.h:332
@ RBAC_PERM_COMMAND_STRING
Definition RBAC.h:655
@ RBAC_PERM_COMMAND_GROUP_SUMMON
Definition RBAC.h:309
@ RBAC_PERM_COMMAND_AURA_STACK
Definition RBAC.h:659
@ RBAC_PERM_COMMAND_FLUSHARENAPOINTS
Definition RBAC.h:334
@ RBAC_PERM_COMMAND_POSSESS
Definition RBAC.h:350
@ RBAC_PERM_COMMAND_NEARGRAVE
Definition RBAC.h:347
@ RBAC_PERM_COMMAND_PLAYALL
Definition RBAC.h:349
@ RBAC_PERM_COMMAND_UNFREEZE
Definition RBAC.h:362
@ RBAC_PERM_COMMAND_MUTE
Definition RBAC.h:346
@ RBAC_PERM_COMMAND_HIDEAREA
Definition RBAC.h:339
@ RBAC_PERM_COMMAND_SHOWAREA
Definition RBAC.h:358
@ RBAC_PERM_COMMAND_BINDSIGHT
Definition RBAC.h:324
@ RBAC_PERM_COMMAND_SKIRMISH
Definition RBAC.h:654
@ RBAC_PERM_COMMAND_ADDITEM
Definition RBAC.h:319
@ RBAC_PERM_COMMAND_DEV
Definition RBAC.h:330
@ RBAC_PERM_COMMAND_RESPAWN
Definition RBAC.h:353
@ RBAC_PERM_COMMAND_COMMENTATOR
Definition RBAC.h:653
@ RBAC_PERM_COMMAND_UNMUTE
Definition RBAC.h:363
@ RBAC_PERM_COMMAND_HELP
Definition RBAC.h:338
@ RBAC_PERM_COMMAND_COOLDOWN
Definition RBAC.h:328
@ RBAC_PERM_COMMAND_COMETOME
Definition RBAC.h:326
@ RBAC_PERM_COMMAND_COMBATSTOP
Definition RBAC.h:325
@ RBAC_PERM_COMMAND_SETSKILL
Definition RBAC.h:357
@ RBAC_PERM_COMMAND_ADDITEMSET
Definition RBAC.h:320
@ RBAC_PERM_COMMAND_AURA
Definition RBAC.h:322
@ RBAC_PERM_COMMAND_MOVEGENS
Definition RBAC.h:345
@ RBAC_PERM_COMMAND_UNSTUCK
Definition RBAC.h:365
@ RBAC_PERM_COMMAND_REVIVE
Definition RBAC.h:354
@ RBAC_PERM_COMMAND_APPEAR
Definition RBAC.h:321
@ RBAC_PERM_COMMAND_FREEZE
Definition RBAC.h:335
@ RBAC_PERM_COMMAND_RESPAWN_CREATURE_ENTRY
Definition RBAC.h:682
@ RBAC_PERM_COMMAND_GPS
Definition RBAC.h:336
@ RBAC_PERM_COMMAND_RESPAWN_CREATURE_GUID
Definition RBAC.h:680
@ RBAC_PERM_COMMAND_UNPOSSESS
Definition RBAC.h:364
@ RBAC_PERM_COMMAND_MAXSKILL
Definition RBAC.h:344
@ RBAC_PERM_COMMAND_SUMMON
Definition RBAC.h:359
@ RBAC_PERM_COMMAND_RECALL
Definition RBAC.h:351
@ RBAC_PERM_COMMAND_RESPAWN_GAMEOBJECT_GUID
Definition RBAC.h:681
@ RBAC_PERM_COMMAND_PACKETLOG
Definition RBAC.h:658
@ RBAC_PERM_COMMAND_DIE
Definition RBAC.h:331
@ RBAC_PERM_COMMAND_MAILBOX
Definition RBAC.h:600
@ RBAC_PERM_COMMAND_RESPAWN_ALL
Definition RBAC.h:660
@ RBAC_PERM_COMMAND_SAVE
Definition RBAC.h:356
@ RBAC_PERM_COMMAND_UNBINDSIGHT
Definition RBAC.h:361
@ RBAC_PERM_COMMAND_DAMAGE
Definition RBAC.h:329
@ RBAC_PERM_COMMAND_RESPAWN_GAMEOBJECT_ENTRY
Definition RBAC.h:683
@ RBAC_PERM_COMMAND_BEASTMASTER
Definition RBAC.h:657
@ RBAC_PERM_COMMAND_UNAURA
Definition RBAC.h:360
@ RBAC_PERM_COMMAND_OPENDOOR
Definition RBAC.h:656
@ RBAC_PERM_COMMAND_KICK
Definition RBAC.h:341
@ RBAC_PERM_COMMAND_WCHANGE
Definition RBAC.h:366
@ RBAC_PERM_COMMAND_LINKGRAVE
Definition RBAC.h:342
@ RBAC_PERM_COMMAND_SAVEALL
Definition RBAC.h:355
@ RBAC_PERM_COMMAND_PINFO
Definition RBAC.h:348
@ RBAC_PERM_COMMAND_MUTEHISTORY
Definition RBAC.h:461
@ RBAC_PERM_COMMAND_GUID
Definition RBAC.h:337
@ RBAC_PERM_COMMAND_DISTANCE
Definition RBAC.h:333

References HandleAddItemCommand(), HandleAddItemSetCommand(), HandleAppearCommand(), HandleAuraCommand(), HandleAuraStacksCommand(), HandleBindSightCommand(), HandleBMCommand(), HandleChangeWeather(), HandleCombatStopCommand(), HandleComeToMeCommand(), HandleCommandsCommand(), HandleCommentatorCommand(), HandleCooldownCommand(), HandleDamageCommand(), HandleDevCommand(), HandleDieCommand(), HandleDismountCommand(), HandleFlushArenaPointsCommand(), HandleFreezeCommand(), HandleGetDistanceCommand(), HandleGPSCommand(), HandleGroupSummonCommand(), HandleGUIDCommand(), HandleHelpCommand(), HandleHideAreaCommand(), HandleKickPlayerCommand(), HandleLinkGraveCommand(), HandleMailBoxCommand(), HandleMaxSkillCommand(), HandleMovegensCommand(), HandleMuteCommand(), HandleMuteInfoCommand(), HandleNearGraveCommand(), HandleOpenDoorCommand(), HandlePacketLog(), HandlePInfoCommand(), HandlePlayAllCommand(), HandlePossessCommand(), HandleRecallCommand(), HandleRespawnAllCommand(), HandleRespawnCommand(), HandleRespawnCreatureByEntryCommand(), HandleRespawnCreatureByGuidCommand(), HandleRespawnGameObjectByEntryCommand(), HandleRespawnGameObjectByGuidCommand(), HandleReviveCommand(), HandleSaveAllCommand(), HandleSaveCommand(), HandleSetSkillCommand(), HandleShowAreaCommand(), HandleSkirmishCommand(), HandleStringCommand(), HandleSummonCommand(), HandleUnAuraCommand(), HandleUnbindSightCommand(), HandleUnFreezeCommand(), HandleUnmuteCommand(), HandleUnPossessCommand(), HandleUnstuckCommand(), rbac::RBAC_PERM_COMMAND_ADDITEM, rbac::RBAC_PERM_COMMAND_ADDITEMSET, rbac::RBAC_PERM_COMMAND_APPEAR, rbac::RBAC_PERM_COMMAND_AURA, rbac::RBAC_PERM_COMMAND_AURA_STACK, rbac::RBAC_PERM_COMMAND_BEASTMASTER, rbac::RBAC_PERM_COMMAND_BINDSIGHT, rbac::RBAC_PERM_COMMAND_COMBATSTOP, rbac::RBAC_PERM_COMMAND_COMETOME, rbac::RBAC_PERM_COMMAND_COMMANDS, rbac::RBAC_PERM_COMMAND_COMMENTATOR, rbac::RBAC_PERM_COMMAND_COOLDOWN, rbac::RBAC_PERM_COMMAND_DAMAGE, rbac::RBAC_PERM_COMMAND_DEV, rbac::RBAC_PERM_COMMAND_DIE, rbac::RBAC_PERM_COMMAND_DISMOUNT, rbac::RBAC_PERM_COMMAND_DISTANCE, rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, rbac::RBAC_PERM_COMMAND_FREEZE, rbac::RBAC_PERM_COMMAND_GPS, rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, rbac::RBAC_PERM_COMMAND_GUID, rbac::RBAC_PERM_COMMAND_HELP, rbac::RBAC_PERM_COMMAND_HIDEAREA, rbac::RBAC_PERM_COMMAND_KICK, rbac::RBAC_PERM_COMMAND_LINKGRAVE, rbac::RBAC_PERM_COMMAND_MAILBOX, rbac::RBAC_PERM_COMMAND_MAXSKILL, rbac::RBAC_PERM_COMMAND_MOVEGENS, rbac::RBAC_PERM_COMMAND_MUTE, rbac::RBAC_PERM_COMMAND_MUTEHISTORY, rbac::RBAC_PERM_COMMAND_NEARGRAVE, rbac::RBAC_PERM_COMMAND_OPENDOOR, rbac::RBAC_PERM_COMMAND_PACKETLOG, rbac::RBAC_PERM_COMMAND_PINFO, rbac::RBAC_PERM_COMMAND_PLAYALL, rbac::RBAC_PERM_COMMAND_POSSESS, rbac::RBAC_PERM_COMMAND_RECALL, rbac::RBAC_PERM_COMMAND_RESPAWN, rbac::RBAC_PERM_COMMAND_RESPAWN_ALL, rbac::RBAC_PERM_COMMAND_RESPAWN_CREATURE_ENTRY, rbac::RBAC_PERM_COMMAND_RESPAWN_CREATURE_GUID, rbac::RBAC_PERM_COMMAND_RESPAWN_GAMEOBJECT_ENTRY, rbac::RBAC_PERM_COMMAND_RESPAWN_GAMEOBJECT_GUID, rbac::RBAC_PERM_COMMAND_REVIVE, rbac::RBAC_PERM_COMMAND_SAVE, rbac::RBAC_PERM_COMMAND_SAVEALL, rbac::RBAC_PERM_COMMAND_SETSKILL, rbac::RBAC_PERM_COMMAND_SHOWAREA, rbac::RBAC_PERM_COMMAND_SKIRMISH, rbac::RBAC_PERM_COMMAND_STRING, rbac::RBAC_PERM_COMMAND_SUMMON, rbac::RBAC_PERM_COMMAND_UNAURA, rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, rbac::RBAC_PERM_COMMAND_UNFREEZE, rbac::RBAC_PERM_COMMAND_UNMUTE, rbac::RBAC_PERM_COMMAND_UNPOSSESS, rbac::RBAC_PERM_COMMAND_UNSTUCK, and rbac::RBAC_PERM_COMMAND_WCHANGE.

◆ HandleAddItemCommand()

static bool misc_commandscript::HandleAddItemCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  player,
ItemTemplate const *  itemTemplate,
Optional< int32 >  _count 
)
inlinestatic
1735 {
1736 if (!sObjectMgr->GetItemTemplate(itemTemplate->ItemId))
1737 {
1738 handler->SendErrorMessage(LANG_COMMAND_ITEMIDINVALID, itemTemplate->ItemId);
1739 return false;
1740 }
1741
1742 uint32 itemId = itemTemplate->ItemId;
1743 int32 count = 1;
1744
1745 if (_count)
1746 count = *_count;
1747
1748 if (!count)
1749 count = 1;
1750
1751 if (!player)
1752 player = PlayerIdentifier::FromTargetOrSelf(handler);
1753
1754 if (!player)
1755 return false;
1756
1757 Player* playerTarget = player->GetConnectedPlayer();
1758
1759 // Subtract
1760 if (count < 0)
1761 {
1762 uint32 removeCount = uint32(-count);
1763
1764 if (playerTarget)
1765 {
1766 // Only have scam check on player accounts
1767 if (playerTarget->GetSession()->GetSecurity() == SEC_PLAYER)
1768 {
1769 if (!playerTarget->HasItemCount(itemId, 0))
1770 {
1771 // output that player don't have any items to destroy
1772 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, handler->GetNameLink(playerTarget), itemId);
1773 return false;
1774 }
1775
1776 if (!playerTarget->HasItemCount(itemId, removeCount))
1777 {
1778 // output that player don't have as many items that you want to destroy
1779 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, handler->GetNameLink(playerTarget), itemId);
1780 return false;
1781 }
1782 }
1783
1784 uint32 countBefore = playerTarget->GetItemCount(itemId, true);
1785 playerTarget->DestroyItemCount(itemId, removeCount, true, false);
1786 uint32 countAfter = playerTarget->GetItemCount(itemId, true);
1787
1788 SendRemoveItemResult(handler, itemId, countBefore - countAfter, handler->GetNameLink(playerTarget),
1789 playerTarget->GetGUID().GetCounter(), true, countAfter);
1790 return true;
1791 }
1792
1793 // offline target: remove the items directly from the DB
1794 if (handler->HasLowerSecurity(nullptr, player->GetGUID()))
1795 return false;
1796
1797 std::string nameLink = handler->playerLink(player->GetName());
1798
1800 stmt->SetData(0, itemId);
1801 stmt->SetData(1, player->GetGUID().GetCounter());
1802 PreparedQueryResult result = CharacterDatabase.Query(stmt);
1803
1804 std::vector<std::pair<ObjectGuid::LowType, uint32>> stacks;
1805 uint32 removableCount = 0;
1806 uint32 ownedCount = 0;
1807 if (result)
1808 {
1809 do
1810 {
1811 Field* fields = result->Fetch();
1812 uint32 stackCount = fields[1].Get<uint32>();
1813 ownedCount += stackCount;
1814
1815 // Bags that still hold items are never removed
1816 if (fields[2].Get<uint64>())
1817 continue;
1818
1819 stacks.emplace_back(fields[0].Get<uint32>(), stackCount);
1820 removableCount += stackCount;
1821 } while (result->NextRow());
1822 }
1823
1824 if (!removableCount)
1825 {
1826 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, nameLink, itemId);
1827 return false;
1828 }
1829
1830 // Only have scam check on player accounts
1831 uint32 accountId = sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
1832 if (AccountMgr::GetSecurity(accountId, realm.Id.Realm) == SEC_PLAYER && removableCount < removeCount)
1833 {
1834 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, nameLink, itemId);
1835 return false;
1836 }
1837
1838 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
1839 uint32 remaining = removeCount;
1840 for (auto const& [itemGuid, stackCount] : stacks)
1841 {
1842 if (!remaining)
1843 break;
1844
1845 if (stackCount <= remaining)
1846 {
1847 remaining -= stackCount;
1848 Item::DeleteFromInventoryDB(trans, itemGuid);
1849 Item::DeleteFromDB(trans, itemGuid);
1850
1851 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
1852 stmt->SetData(0, itemGuid);
1853 trans->Append(stmt);
1854
1855 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
1856 stmt->SetData(0, itemGuid);
1857 trans->Append(stmt);
1858
1859 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE);
1860 stmt->SetData(0, itemGuid);
1861 trans->Append(stmt);
1862
1863 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_CONTAINER);
1864 stmt->SetData(0, itemGuid);
1865 trans->Append(stmt);
1866 }
1867 else
1868 {
1869 stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_COUNT);
1870 stmt->SetData(0, stackCount - remaining);
1871 stmt->SetData(1, itemGuid);
1872 trans->Append(stmt);
1873 remaining = 0;
1874 }
1875 }
1876 CharacterDatabase.CommitTransaction(trans);
1877
1878 uint32 removed = removeCount - remaining;
1879 SendRemoveItemResult(handler, itemId, removed, nameLink, player->GetGUID().GetCounter(), false, ownedCount - removed);
1880 return true;
1881 }
1882
1883 // Adding items requires the target to be online
1884 if (!playerTarget)
1885 {
1887 return false;
1888 }
1889
1890 // Adding items
1891 uint32 noSpaceForCount = 0;
1892
1893 // check space and find places
1894 ItemPosCountVec dest;
1895 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
1896
1897 if (msg != EQUIP_ERR_OK) // convert to possible store amount
1898 count -= noSpaceForCount;
1899
1900 if (!count || dest.empty()) // can't add any
1901 {
1902 handler->SendErrorMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1903 return false;
1904 }
1905
1906 Item* item = playerTarget->StoreNewItem(dest, itemId, true);
1907
1908 Player* p = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
1909 // remove binding (let GM give it to another player later)
1910 if (p && p == playerTarget)
1911 {
1912 for (auto const& itemPos : dest)
1913 {
1914 if (Item* item1 = p->GetItemByPos(itemPos.pos))
1915 {
1916 item1->SetBinding(false);
1917 }
1918 }
1919 }
1920
1921 if (p && count && item)
1922 {
1923 p->SendNewItem(item, count, false, true);
1924
1925 if (p != playerTarget)
1926 {
1927 playerTarget->SendNewItem(item, count, true, false);
1928 }
1929 }
1930
1931 if (noSpaceForCount)
1932 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1933
1934 return true;
1935 }
#define sCharacterCache
Definition CharacterCache.h:88
@ CHAR_DEL_ITEMCONTAINER_CONTAINER
Definition CharacterDatabase.h:504
@ CHAR_DEL_ITEM_BOP_TRADE
Definition CharacterDatabase.h:121
@ CHAR_DEL_ITEM_REFUND_INSTANCE
Definition CharacterDatabase.h:382
@ CHAR_DEL_GIFT
Definition CharacterDatabase.h:131
@ CHAR_UPD_ITEM_COUNT
Definition CharacterDatabase.h:127
@ CHAR_SEL_CHAR_INVENTORY_STACKS_BY_ENTRY_AND_OWNER
Definition CharacterDatabase.h:367
@ SEC_PLAYER
Definition Common.h:57
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
InventoryResult
Definition Item.h:46
@ EQUIP_ERR_OK
Definition Item.h:47
@ NULL_BAG
Definition Item.h:40
@ NULL_SLOT
Definition Item.h:41
@ LANG_ITEM_CANNOT_CREATE
Definition Language.h:546
@ LANG_REMOVEITEM_FAILURE
Definition Language.h:1431
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:548
@ LANG_REMOVEITEM_ERROR
Definition Language.h:1432
@ LANG_COMMAND_ITEMIDINVALID
Definition Language.h:476
#define sObjectMgr
Definition ObjectMgr.h:1731
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:758
static uint32 GetSecurity(uint32 accountId)
Definition AccountMgr.cpp:257
virtual std::string GetNameLink() const
Definition Chat.h:198
std::string playerLink(std::string const &name) const
Definition Chat.h:231
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
bool HasLowerSecurity(Player *target, ObjectGuid guid=ObjectGuid::Empty, bool strong=false)
Definition Chat.cpp:65
Class used to access individual fields of database query result.
Definition Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:113
Definition Item.h:220
static void DeleteFromInventoryDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition Item.cpp:526
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition Item.cpp:512
LowType GetCounter() const
Definition ObjectGuid.h:149
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:120
Definition Player.h:1086
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition PlayerStorage.cpp:659
uint32 GetItemCount(uint32 item, bool inBankAlso=false, Item *skipItem=nullptr) const
Definition PlayerStorage.cpp:331
WorldSession * GetSession() const
Definition Player.h:2032
Item * GetItemByPos(uint16 pos) const
Definition PlayerStorage.cpp:445
void SendNewItem(Item *item, uint32 count, bool received, bool created, bool broadcast=false, bool sendChatMessage=true)
Definition PlayerStorage.cpp:4855
void DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Definition PlayerStorage.cpp:3225
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0, bool refund=false)
Definition PlayerStorage.cpp:2635
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
Definition Player.h:1304
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
AccountTypes GetSecurity() const
Definition WorldSession.h:490
Player * GetPlayer() const
Definition WorldSession.h:503
static void SendRemoveItemResult(ChatHandler *handler, uint32 itemId, uint32 removed, std::string const &nameLink, ObjectGuid::LowType guidLow, bool online, uint32 countLeft)
Definition cs_misc.cpp:1724
Realm realm
Definition World.cpp:117
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition ChatCommandTags.h:189
uint32 Realm
Definition Realm.h:43
RealmHandle Id
Definition Realm.h:69

References Player::CanStoreNewItem(), CHAR_DEL_GIFT, CHAR_DEL_ITEM_BOP_TRADE, CHAR_DEL_ITEM_REFUND_INSTANCE, CHAR_DEL_ITEMCONTAINER_CONTAINER, CHAR_SEL_CHAR_INVENTORY_STACKS_BY_ENTRY_AND_OWNER, CHAR_UPD_ITEM_COUNT, CharacterDatabase, Item::DeleteFromDB(), Item::DeleteFromInventoryDB(), Player::DestroyItemCount(), EQUIP_ERR_OK, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Field::Get(), ObjectGuid::GetCounter(), Object::GetGUID(), Player::GetItemByPos(), Player::GetItemCount(), ChatHandler::GetNameLink(), WorldSession::GetPlayer(), WorldSession::GetSecurity(), AccountMgr::GetSecurity(), ChatHandler::GetSession(), Player::GetSession(), Player::HasItemCount(), ChatHandler::HasLowerSecurity(), Realm::Id, ItemTemplate::ItemId, LANG_COMMAND_ITEMIDINVALID, LANG_ITEM_CANNOT_CREATE, LANG_PLAYER_NOT_FOUND, LANG_REMOVEITEM_ERROR, LANG_REMOVEITEM_FAILURE, NULL_BAG, NULL_SLOT, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), realm, RealmHandle::Realm, sCharacterCache, SEC_PLAYER, ChatHandler::SendErrorMessage(), Player::SendNewItem(), SendRemoveItemResult(), PreparedStatementBase::SetData(), sObjectMgr, and Player::StoreNewItem().

Referenced by GetCommands().

◆ HandleAddItemSetCommand()

static bool misc_commandscript::HandleAddItemSetCommand ( ChatHandler *  handler,
Variant< Hyperlink< itemset >, uint32 >  itemSetId 
)
inlinestatic
1938 {
1939 // prevent generation all items with itemset field value '0'
1940 if (!*itemSetId)
1941 {
1943 return false;
1944 }
1945
1946 Player* player = handler->GetSession()->GetPlayer();
1947 Player* playerTarget = handler->getSelectedPlayer();
1948
1949 if (!playerTarget)
1950 {
1951 playerTarget = player;
1952 }
1953
1954 bool found = false;
1955
1956 for (auto const& [itemid, itemTemplate] : *sObjectMgr->GetItemTemplateStore())
1957 {
1958 if (itemTemplate.ItemSet == uint32(itemSetId))
1959 {
1960 found = true;
1961 ItemPosCountVec dest;
1962 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate.ItemId, 1);
1963
1964 if (msg == EQUIP_ERR_OK)
1965 {
1966 Item* item = playerTarget->StoreNewItem(dest, itemTemplate.ItemId, true);
1967
1968 // remove binding (let GM give it to another player later)
1969 if (player == playerTarget)
1970 {
1971 item->SetBinding(false);
1972 }
1973
1974 player->SendNewItem(item, 1, false, true);
1975
1976 if (player != playerTarget)
1977 {
1978 playerTarget->SendNewItem(item, 1, true, false);
1979 }
1980 }
1981 else
1982 {
1983 player->SendEquipError(msg, nullptr, nullptr, itemTemplate.ItemId);
1984 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate.ItemId, 1);
1985 }
1986 }
1987 }
1988
1989 if (!found)
1990 {
1992 return false;
1993 }
1994
1995 return true;
1996 }
@ LANG_NO_ITEMS_FROM_ITEMSET_FOUND
Definition Language.h:551
Player * getSelectedPlayer() const
Definition Chat.cpp:382
void SetBinding(bool val)
Definition Item.h:235
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=nullptr, uint32 itemid=0)
Definition PlayerStorage.cpp:4131

References Player::CanStoreNewItem(), EQUIP_ERR_OK, WorldSession::GetPlayer(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), LANG_ITEM_CANNOT_CREATE, LANG_NO_ITEMS_FROM_ITEMSET_FOUND, NULL_BAG, NULL_SLOT, ChatHandler::PSendSysMessage(), Player::SendEquipError(), ChatHandler::SendErrorMessage(), Player::SendNewItem(), Item::SetBinding(), sObjectMgr, and Player::StoreNewItem().

Referenced by GetCommands().

◆ HandleAppearCommand()

static bool misc_commandscript::HandleAppearCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
757 {
758 if (!target)
759 {
760 target = PlayerIdentifier::FromTarget(handler);
761 }
762
763 if (!target)
764 {
765 return false;
766 }
767
768 Player* _player = handler->GetSession()->GetPlayer();
769 if (target->GetGUID() == _player->GetGUID())
770 {
772 return false;
773 }
774
775 std::string nameLink = handler->playerLink(target->GetName());
776
777 if (target->IsConnected())
778 {
779 auto targetPlayer = target->GetConnectedPlayer();
780
781 // check online security
782 if (handler->HasLowerSecurity(targetPlayer))
783 {
784 return false;
785 }
786
787 Map* map = targetPlayer->GetMap();
788 if (map->IsBattlegroundOrArena())
789 {
790 // only allow if gm mode is on
791 if (!_player->IsGameMaster())
792 {
793 handler->SendErrorMessage(LANG_CANNOT_GO_TO_BG_GM, nameLink);
794 return false;
795 }
796
797 if (!_player->GetMap()->IsBattlegroundOrArena())
798 {
799 _player->SetEntryPoint();
800 }
801
802 _player->SetBattlegroundId(targetPlayer->GetBattlegroundId(), targetPlayer->GetBattlegroundTypeId(), PLAYER_MAX_BATTLEGROUND_QUEUES, false, false, TEAM_NEUTRAL);
803 }
804 else if (map->IsDungeon())
805 {
806 // we have to go to instance, and can go to player only if:
807 // 1) we are in his group (either as leader or as member)
808 // 2) we are not bound to any group and have GM mode on
809 if (_player->GetGroup())
810 {
811 // we are in group, we can go only if we are in the player group
812 if (_player->GetGroup() != targetPlayer->GetGroup())
813 {
815 return false;
816 }
817 }
818 else
819 {
820 // we are not in group, let's verify our GM mode
821 if (!_player->IsGameMaster())
822 {
824 return false;
825 }
826 }
827
828 // if the GM is bound to another instance, he will not be bound to another one
829 InstancePlayerBind* bind = sInstanceSaveMgr->PlayerGetBoundInstance(_player->GetGUID(), targetPlayer->GetMapId(), targetPlayer->GetDifficulty(map->IsRaid()));
830 if (!bind)
831 {
832 if (InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(target->GetConnectedPlayer()->GetInstanceId()))
833 {
834 sInstanceSaveMgr->PlayerBindToInstance(_player->GetGUID(), save, !save->CanReset(), _player);
835 }
836 }
837
838 if (map->IsRaid())
839 {
840 _player->SetRaidDifficulty(targetPlayer->GetRaidDifficulty());
841 }
842 else
843 {
844 _player->SetDungeonDifficulty(targetPlayer->GetDungeonDifficulty());
845 }
846 }
847
848 handler->PSendSysMessage(LANG_APPEARING_AT, nameLink);
849
850 // stop flight if need
851 if (_player->IsInFlight())
852 {
853 _player->GetMotionMaster()->MovementExpired();
854 _player->CleanupAfterTaxiFlight();
855 }
856 else // save only in non-flight case
857 _player->SaveRecallPosition();
858
859 if (Transport* transport = targetPlayer->GetTransport())
860 {
861 if (Transport* oldTransport = _player->GetTransport())
862 oldTransport->RemovePassenger(_player, true);
863
864 float x;
865 float y;
866 float z;
867 float o;
868 targetPlayer->m_movementInfo.transport.pos.GetPosition(x, y, z, o);
869
870 _player->SetTransport(transport);
871 _player->m_movementInfo.transport.guid = transport->GetGUID();
872 _player->m_movementInfo.transport.pos.Relocate(x, y, z, o);
874
875 float worldX = x;
876 float worldY = y;
877 float worldZ = z;
878 float worldO = o;
879 transport->CalculatePassengerPosition(worldX, worldY, worldZ, &worldO);
880
881 transport->AddPassenger(_player, false);
882
883 if (_player->TeleportTo(transport->GetMapId(), worldX, worldY, worldZ + 0.25f, worldO, TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_GM_MODE, targetPlayer))
884 _player->SetPhaseMask(targetPlayer->GetPhaseMask() | 1, false);
885 }
886 else
887 {
888 if (_player->TeleportTo(targetPlayer->GetMapId(), targetPlayer->GetPositionX(), targetPlayer->GetPositionY(), targetPlayer->GetPositionZ() + 0.25f, _player->GetOrientation(), TELE_TO_GM_MODE, targetPlayer))
889 _player->SetPhaseMask(targetPlayer->GetPhaseMask() | 1, false);
890 }
891 }
892 else
893 {
894 // check offline security
895 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
896 {
897 return false;
898 }
899
900 handler->PSendSysMessage(LANG_APPEARING_AT, nameLink);
901
902 // to point where player stay (if loaded)
903 float x, y, z, o;
904 uint32 map;
905 bool in_flight;
906
907 if (!Player::LoadPositionFromDB(map, x, y, z, o, in_flight, target->GetGUID().GetCounter()))
908 {
909 return false;
910 }
911
912 // stop flight if need
913 if (_player->IsInFlight())
914 {
915 _player->GetMotionMaster()->MovementExpired();
916 _player->CleanupAfterTaxiFlight();
917 }
918 // save only in non-flight case
919 else
920 {
921 _player->SaveRecallPosition();
922 }
923
924 _player->TeleportTo(map, x, y, z, _player->GetOrientation());
925 }
926
927 return true;
928 }
#define sInstanceSaveMgr
Definition InstanceSaveMgr.h:233
@ LANG_CANNOT_GO_TO_INST_PARTY
Definition Language.h:140
@ LANG_CANT_TELEPORT_SELF
Definition Language.h:215
@ LANG_APPEARING_AT
Definition Language.h:149
@ LANG_CANNOT_GO_TO_INST_GM
Definition Language.h:141
@ LANG_CANNOT_GO_TO_BG_GM
Definition Language.h:717
@ TELE_TO_GM_MODE
Definition Player.h:815
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition Player.h:816
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
#define PLAYER_MAX_BATTLEGROUND_QUEUES
Definition SharedDefines.h:153
@ MOVEMENTFLAG_ONTRANSPORT
Definition UnitDefines.h:381
Definition InstanceSaveMgr.h:57
Definition Map.h:168
bool IsDungeon() const
Definition Map.h:299
bool IsBattlegroundOrArena() const
Definition Map.h:307
bool IsRaid() const
Definition Map.h:301
void MovementExpired(bool reset=true)
Definition MotionMaster.h:207
void SetDungeonDifficulty(Difficulty dungeon_difficulty)
Definition Player.h:1953
void SetEntryPoint()
Definition Player.cpp:11485
void SetRaidDifficulty(Difficulty raid_difficulty)
Definition Player.h:1954
void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId)
Definition Player.cpp:12599
void SaveRecallPosition()
Definition Player.cpp:5854
Group * GetGroup()
Definition Player.h:2518
bool IsGameMaster() const
Definition Player.h:1178
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1402
static bool LoadPositionFromDB(uint32 &mapid, float &x, float &y, float &z, float &o, bool &in_flight, ObjectGuid::LowType guid)
Definition PlayerStorage.cpp:4980
void CleanupAfterTaxiFlight()
Definition Player.cpp:10627
Definition Transport.h:30
MotionMaster * GetMotionMaster()
Definition Unit.h:1774
bool IsInFlight() const
Definition Unit.h:1725
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:778
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:15011
Map * GetMap() const
Definition Object.h:637
void SetTransport(Transport *t)
Definition Object.h:709
Transport * GetTransport() const
Definition Object.h:701
MovementInfo m_movementInfo
Definition Object.h:711
static Optional< PlayerIdentifier > FromTarget(ChatHandler *handler)
Definition ChatCommandTags.cpp:138
Definition InstanceSaveMgr.h:40
ObjectGuid guid
Definition Object.h:315
Position pos
Definition Object.h:316
struct MovementInfo::TransportInfo transport
float GetOrientation() const
Definition Position.h:124
void Relocate(float x, float y)
Definition Position.h:77

References Unit::AddUnitMovementFlag(), Player::CleanupAfterTaxiFlight(), Acore::ChatCommands::PlayerIdentifier::FromTarget(), Player::GetGroup(), Object::GetGUID(), WorldObject::GetMap(), Unit::GetMotionMaster(), Position::GetOrientation(), WorldSession::GetPlayer(), ChatHandler::GetSession(), WorldObject::GetTransport(), MovementInfo::TransportInfo::guid, ChatHandler::HasLowerSecurity(), Map::IsBattlegroundOrArena(), Map::IsDungeon(), Player::IsGameMaster(), Unit::IsInFlight(), Map::IsRaid(), LANG_APPEARING_AT, LANG_CANNOT_GO_TO_BG_GM, LANG_CANNOT_GO_TO_INST_GM, LANG_CANNOT_GO_TO_INST_PARTY, LANG_CANT_TELEPORT_SELF, Player::LoadPositionFromDB(), WorldObject::m_movementInfo, MotionMaster::MovementExpired(), MOVEMENTFLAG_ONTRANSPORT, PLAYER_MAX_BATTLEGROUND_QUEUES, ChatHandler::playerLink(), MovementInfo::TransportInfo::pos, ChatHandler::PSendSysMessage(), Position::Relocate(), Player::SaveRecallPosition(), ChatHandler::SendErrorMessage(), Player::SetBattlegroundId(), Player::SetDungeonDifficulty(), Player::SetEntryPoint(), Unit::SetPhaseMask(), Player::SetRaidDifficulty(), WorldObject::SetTransport(), sInstanceSaveMgr, TEAM_NEUTRAL, TELE_TO_GM_MODE, TELE_TO_NOT_LEAVE_TRANSPORT, Player::TeleportTo(), and MovementInfo::transport.

Referenced by GetCommands().

◆ HandleAuraCommand()

static bool misc_commandscript::HandleAuraCommand ( ChatHandler *  handler,
SpellInfo const *  spell 
)
inlinestatic
652 {
653 if (!spell)
654 {
656 return false;
657 }
658
659 if (!SpellMgr::IsSpellValid(spell))
660 {
661 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
662 return false;
663 }
664
665 Unit* target = handler->getSelectedUnit();
666 if (!target)
667 {
669 return false;
670 }
671
672 Aura::TryRefreshStackOrCreate(spell, MAX_EFFECT_MASK, target, target);
673
674 return true;
675 }
#define MAX_EFFECT_MASK
Definition DBCStructure.h:1674
@ LANG_COMMAND_NOSPELLFOUND
Definition Language.h:486
@ LANG_SELECT_CHAR_OR_CREATURE
Definition Language.h:31
@ LANG_COMMAND_SPELL_BROKEN
Definition Language.h:529
static Aura * TryRefreshStackOrCreate(SpellInfo const *spellproto, uint8 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool *refresh=nullptr, bool periodicReset=false)
Definition SpellAuras.cpp:270
Unit * getSelectedUnit() const
Definition Chat.cpp:394
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:490
Definition Unit.h:670

References ChatHandler::getSelectedUnit(), SpellInfo::Id, SpellMgr::IsSpellValid(), LANG_COMMAND_NOSPELLFOUND, LANG_COMMAND_SPELL_BROKEN, LANG_SELECT_CHAR_OR_CREATURE, MAX_EFFECT_MASK, ChatHandler::SendErrorMessage(), and Aura::TryRefreshStackOrCreate().

Referenced by GetCommands().

◆ HandleAuraStacksCommand()

static bool misc_commandscript::HandleAuraStacksCommand ( ChatHandler *  handler,
SpellInfo const *  spell,
int16  stacks 
)
inlinestatic
678 {
679 if (!spell)
680 {
682 return false;
683 }
684
685 if (!SpellMgr::IsSpellValid(spell))
686 {
687 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
688 return false;
689 }
690
691 if (!stacks)
692 {
694 return false;
695 }
696
697 Unit* target = handler->getSelectedUnit();
698 if (!target)
699 {
701 return false;
702 }
703
704 Aura* aur = target->GetAura(spell->Id);
705 if (!aur)
706 {
708 return false;
709 }
710
711 if (!spell->StackAmount)
712 {
714 return false;
715 }
716
717 aur->ModStackAmount(stacks);
718
719 return true;
720 }
@ LANG_COMMAND_AURASTACK_CANT_STACK
Definition Language.h:430
@ LANG_COMMAND_AURASTACK_NO_STACK
Definition Language.h:429
@ LANG_COMMAND_AURASTACK_NO_AURA
Definition Language.h:428
Definition SpellAuras.h:88
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
Definition SpellAuras.cpp:1083
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5658

References Unit::GetAura(), ChatHandler::getSelectedUnit(), SpellInfo::Id, SpellMgr::IsSpellValid(), LANG_COMMAND_AURASTACK_CANT_STACK, LANG_COMMAND_AURASTACK_NO_AURA, LANG_COMMAND_AURASTACK_NO_STACK, LANG_COMMAND_NOSPELLFOUND, LANG_COMMAND_SPELL_BROKEN, LANG_SELECT_CHAR_OR_CREATURE, Aura::ModStackAmount(), ChatHandler::SendErrorMessage(), and SpellInfo::StackAmount.

Referenced by GetCommands().

◆ HandleBindSightCommand()

static bool misc_commandscript::HandleBindSightCommand ( ChatHandler *  handler)
inlinestatic
3428 {
3429 Unit* unit = handler->getSelectedUnit();
3430 if (!unit)
3431 {
3432 return false;
3433 }
3434
3435 handler->GetSession()->GetPlayer()->CastSpell(unit, 6277, true);
3436 return true;
3437 }
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1378

References Unit::CastSpell(), WorldSession::GetPlayer(), ChatHandler::getSelectedUnit(), and ChatHandler::GetSession().

Referenced by GetCommands().

◆ HandleBMCommand()

static bool misc_commandscript::HandleBMCommand ( ChatHandler *  handler,
Optional< bool >  enableArg 
)
inlinestatic
3486 {
3487 WorldSession* session = handler->GetSession();
3488
3489 if (!session)
3490 return false;
3491
3492 auto SetBMMod = [&](bool enable)
3493 {
3494 char const* enabled = "ON";
3495 char const* disabled = "OFF";
3496 handler->SendNotification(LANG_COMMAND_BEASTMASTER_MODE, enable ? enabled : disabled);
3497
3498 session->GetPlayer()->SetBeastMaster(enable);
3499 };
3500
3501 if (!enableArg)
3502 {
3503 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper())
3504 SetBMMod(true);
3505 else
3506 SetBMMod(false);
3507
3508 return true;
3509 }
3510
3511 if (*enableArg)
3512 {
3513 SetBMMod(true);
3514 return true;
3515 }
3516 else
3517 {
3518 SetBMMod(false);
3519 return true;
3520 }
3521
3523 return false;
3524 }
@ LANG_USE_BOL
Definition Language.h:311
@ LANG_COMMAND_BEASTMASTER_MODE
Definition Language.h:987
static bool IsPlayerAccount(uint32 gmlevel)
Definition AccountMgr.cpp:327
void SendNotification(std::string_view str)
Definition Chat.cpp:113
void SetBeastMaster(bool on)
Definition Player.h:1173
bool IsDeveloper() const
Definition Player.h:1171
Player session in the World.
Definition WorldSession.h:430

References WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::IsDeveloper(), AccountMgr::IsPlayerAccount(), LANG_COMMAND_BEASTMASTER_MODE, LANG_USE_BOL, ChatHandler::SendErrorMessage(), ChatHandler::SendNotification(), and Player::SetBeastMaster().

Referenced by GetCommands().

◆ HandleChangeWeather()

static bool misc_commandscript::HandleChangeWeather ( ChatHandler *  handler,
uint32  type,
float  grade 
)
inlinestatic
1999 {
2000 // Weather is OFF
2001 if (!sWorld->getBoolConfig(CONFIG_WEATHER))
2002 {
2004 return false;
2005 }
2006
2007 Player* player = handler->GetSession()->GetPlayer();
2008 uint32 zoneid = player->GetZoneId();
2009
2010 Weather* weather = player->GetMap()->GetOrGenerateZoneDefaultWeather(zoneid);
2011 if (!weather)
2012 {
2014 return false;
2015 }
2016
2017 weather->SetWeather(WeatherType(type), grade);
2018
2019 return true;
2020 }
@ LANG_NO_WEATHER
Definition Language.h:441
@ LANG_WEATHER_DISABLED
Definition Language.h:442
WeatherType
Definition SharedDefines.h:3370
@ CONFIG_WEATHER
Definition WorldConfig.h:51
Weather * GetOrGenerateZoneDefaultWeather(uint32 zoneId)
Definition Map.cpp:3324
Weather for one zone.
Definition Weather.h:65
uint32 GetZoneId() const
Definition Object.cpp:3178
#define sWorld
Definition World.h:337
void SetWeather(WeatherType type, float grade)
Set the weather.
Definition Weather.cpp:268

References CONFIG_WEATHER, WorldObject::GetMap(), Map::GetOrGenerateZoneDefaultWeather(), WorldSession::GetPlayer(), ChatHandler::GetSession(), WorldObject::GetZoneId(), LANG_NO_WEATHER, LANG_WEATHER_DISABLED, ChatHandler::SendErrorMessage(), Weather::SetWeather(), and sWorld.

Referenced by GetCommands().

◆ HandleCombatStopCommand()

static bool misc_commandscript::HandleCombatStopCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
3273 {
3274 if (!target)
3275 {
3276 target = PlayerIdentifier::FromTargetOrSelf(handler);
3277 }
3278
3279 if (!target || !target->IsConnected())
3280 {
3282 return false;
3283 }
3284
3285 Player* playerTarget = target->GetConnectedPlayer();
3286
3287 // check online security
3288 if (handler->HasLowerSecurity(playerTarget))
3289 {
3290 return false;
3291 }
3292
3293 playerTarget->CombatStop();
3294 playerTarget->GetThreatMgr().RemoveMeFromThreatLists();
3295 return true;
3296 }
void RemoveMeFromThreatLists()
Definition ThreatManager.cpp:831
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool keepPvPForOthers=false)
Definition Unit.cpp:7303
ThreatManager & GetThreatMgr()
Definition Unit.h:965

References Unit::CombatStop(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Unit::GetThreatMgr(), ChatHandler::HasLowerSecurity(), LANG_PLAYER_NOT_FOUND, ThreatManager::RemoveMeFromThreatLists(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleComeToMeCommand()

static bool misc_commandscript::HandleComeToMeCommand ( ChatHandler *  handler)
inlinestatic
3225 {
3226 Creature* caster = handler->getSelectedCreature();
3227 if (!caster)
3228 {
3230 return false;
3231 }
3232
3233 Player* player = handler->GetSession()->GetPlayer();
3234
3235 caster->GetMotionMaster()->MovePoint(0, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
3236
3237 return true;
3238 }
@ LANG_SELECT_CREATURE
Definition Language.h:32
Creature * getSelectedCreature() const
Definition Chat.cpp:418
Definition Creature.h:47
void MovePoint(uint32 id, Position const &pos, ForcedMovement forcedMovement=FORCED_MOVEMENT_NONE, float speed=0.f, bool generatePath=true, bool forceDestination=true, std::optional< AnimTier > animTier=std::nullopt)
Definition MotionMaster.h:241
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References Unit::GetMotionMaster(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::getSelectedCreature(), ChatHandler::GetSession(), LANG_SELECT_CREATURE, MotionMaster::MovePoint(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleCommandsCommand()

static bool misc_commandscript::HandleCommandsCommand ( ChatHandler *  handler)
inlinestatic
1159 {
1160 SendCommandHelpFor(*handler, "");
1161 return true;
1162 }
AC_GAME_API void SendCommandHelpFor(ChatHandler &handler, std::string_view cmd)
Definition ChatCommand.cpp:538

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleCommentatorCommand()

static bool misc_commandscript::HandleCommentatorCommand ( ChatHandler *  handler,
Optional< bool >  enableArg 
)
inlinestatic
481 {
482 WorldSession* session = handler->GetSession();
483
484 if (!session)
485 {
487 return false;
488 }
489
490 auto SetCommentatorMod = [&](bool enable)
491 {
492 handler->SendNotification(enable ? "Commentator mode on" : "Commentator mode off");
493 session->GetPlayer()->SetCommentator(enable);
494 };
495
496 if (!enableArg)
497 {
498 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsCommentator())
499 {
500 SetCommentatorMod(true);
501 }
502 else
503 {
504 SetCommentatorMod(false);
505 }
506
507 return true;
508 }
509
510 if (*enableArg)
511 {
512 SetCommentatorMod(true);
513 return true;
514 }
515 else
516 {
517 SetCommentatorMod(false);
518 return true;
519 }
520 }
bool IsCommentator() const
Definition Player.h:1169
void SetCommentator(bool on)
Definition Player.h:1170

References WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::IsCommentator(), AccountMgr::IsPlayerAccount(), LANG_USE_BOL, ChatHandler::SendErrorMessage(), ChatHandler::SendNotification(), and Player::SetCommentator().

Referenced by GetCommands().

◆ HandleCooldownCommand()

static bool misc_commandscript::HandleCooldownCommand ( ChatHandler *  handler,
Optional< SpellInfo const * >  spell 
)
inlinestatic
1277 {
1278 Player* target = handler->getSelectedPlayer();
1279 if (!target)
1280 {
1282 return false;
1283 }
1284
1285 std::string nameLink = handler->GetNameLink(target);
1286
1287 if (!spell)
1288 {
1289 target->RemoveAllSpellCooldown();
1290 handler->PSendSysMessage(LANG_REMOVEALL_COOLDOWN, nameLink);
1291 }
1292 else
1293 {
1294 if (!SpellMgr::IsSpellValid(*spell))
1295 {
1296 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell.value()->Id);
1297 return false;
1298 }
1299
1300 target->RemoveSpellCooldown(spell.value()->Id, true);
1301 handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, spell.value()->Id, target == handler->GetSession()->GetPlayer() ? handler->GetAcoreString(LANG_YOU) : nameLink);
1302 }
1303 return true;
1304 }
@ LANG_YOU
Definition Language.h:76
@ LANG_REMOVE_COOLDOWN
Definition Language.h:541
@ LANG_REMOVEALL_COOLDOWN
Definition Language.h:540
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:42
void RemoveAllSpellCooldown()
Definition Player.cpp:3756
void RemoveSpellCooldown(uint32 spell_id, bool update=false)
Definition Player.cpp:3705

References ChatHandler::GetAcoreString(), ChatHandler::GetNameLink(), WorldSession::GetPlayer(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), SpellMgr::IsSpellValid(), LANG_COMMAND_SPELL_BROKEN, LANG_PLAYER_NOT_FOUND, LANG_REMOVE_COOLDOWN, LANG_REMOVEALL_COOLDOWN, LANG_YOU, ChatHandler::PSendSysMessage(), Player::RemoveAllSpellCooldown(), Player::RemoveSpellCooldown(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleDamageCommand()

static bool misc_commandscript::HandleDamageCommand ( ChatHandler *  handler,
uint32  damage,
Optional< std::string >  percent 
)
inlinestatic
3241 {
3242 Unit* target = handler->getSelectedUnit();
3243 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
3244 {
3246 return false;
3247 }
3248
3249 if (target->IsPlayer())
3250 if (handler->HasLowerSecurity(target->ToPlayer()))
3251 return false;
3252
3253 if (!target->IsAlive() || !damage)
3254 return true;
3255
3256 if (target->IsCreature() && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
3257 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
3258
3259 if (percent)
3260 if (StringStartsWith("pct", *percent))
3261 if (damage <= 100)
3262 damage = target->CountPctFromMaxHealth(damage);
3263
3264 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
3265
3266 if (target != handler->GetSession()->GetPlayer())
3268
3269 return true;
3270 }
@ SEC_CONSOLE
Definition Common.h:61
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:285
@ VICTIMSTATE_HIT
Definition Unit.h:87
@ HITINFO_AFFECTS_VICTIM
Definition Unit.h:101
@ DIRECT_DAMAGE
Definition Unit.h:262
bool StringStartsWith(std::string_view haystack, std::string_view needle)
Definition Util.h:392
void LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer=true, uint8 attackerLevel=0)
Definition Creature.cpp:3928
bool IsPlayer() const
Definition Object.h:207
Player * ToPlayer()
Definition Object.h:208
bool IsCreature() const
Definition Object.h:211
Creature * ToCreature()
Definition Object.h:212
static uint32 DealDamage(Unit *attacker, Unit *victim, uint32 damage, CleanDamage const *cleanDamage=nullptr, DamageEffectType damagetype=DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *spellProto=nullptr, bool durabilityLoss=true, bool allowGM=false, Spell const *spell=nullptr, bool skipCombat=false)
Definition Unit.cpp:990
void SendAttackStateUpdate(CalcDamageInfo *damageInfo)
Definition Unit.cpp:6700
uint32 GetMaxHealth() const
Definition Unit.h:1123
bool IsAlive() const
Definition Unit.h:1812
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:1135
ObjectGuid GetTarget() const
Definition Unit.h:867

References Unit::CountPctFromMaxHealth(), Unit::DealDamage(), DIRECT_DAMAGE, Unit::GetMaxHealth(), WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), Unit::GetTarget(), ChatHandler::HasLowerSecurity(), HITINFO_AFFECTS_VICTIM, Unit::IsAlive(), Object::IsCreature(), Object::IsPlayer(), LANG_SELECT_CHAR_OR_CREATURE, Creature::LowerPlayerDamageReq(), SEC_CONSOLE, Unit::SendAttackStateUpdate(), ChatHandler::SendErrorMessage(), SPELL_SCHOOL_MASK_NORMAL, StringStartsWith(), Object::ToCreature(), Object::ToPlayer(), and VICTIMSTATE_HIT.

Referenced by GetCommands().

◆ HandleDevCommand()

static bool misc_commandscript::HandleDevCommand ( ChatHandler *  handler,
Optional< bool >  enableArg 
)
inlinestatic
523 {
524 WorldSession* session = handler->GetSession();
525
526 if (!session)
527 {
529 return false;
530 }
531
532 auto SetDevMod = [&](bool enable)
533 {
534 handler->SendNotification(enable ? LANG_DEV_ON : LANG_DEV_OFF);
535 session->GetPlayer()->SetDeveloper(enable);
536 sScriptMgr->OnHandleDevCommand(handler->GetSession()->GetPlayer(), enable);
537 };
538
539 if (!enableArg)
540 {
541 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper())
542 {
543 SetDevMod(true);
544 }
545 else
546 {
547 SetDevMod(false);
548 }
549
550 return true;
551 }
552
553 if (*enableArg)
554 {
555 SetDevMod(true);
556 return true;
557 }
558 else
559 {
560 SetDevMod(false);
561 return true;
562 }
563 }
@ LANG_DEV_ON
Definition Language.h:938
@ LANG_DEV_OFF
Definition Language.h:939
#define sScriptMgr
Definition ScriptMgr.h:769
void SetDeveloper(bool on)
Definition Player.h:1172

References WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::IsDeveloper(), AccountMgr::IsPlayerAccount(), LANG_DEV_OFF, LANG_DEV_ON, LANG_USE_BOL, ChatHandler::SendErrorMessage(), ChatHandler::SendNotification(), Player::SetDeveloper(), and sScriptMgr.

Referenced by GetCommands().

◆ HandleDieCommand()

static bool misc_commandscript::HandleDieCommand ( ChatHandler *  handler)
inlinestatic
1165 {
1166 Unit* target = handler->getSelectedUnit();
1167
1168 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
1169 {
1171 return false;
1172 }
1173
1174 if (target->IsPlayer())
1175 {
1176 if (handler->HasLowerSecurity(target->ToPlayer()))
1177 {
1178 return false;
1179 }
1180 }
1181
1182 if (target->IsAlive())
1183 {
1184 if (sWorld->getBoolConfig(CONFIG_DIE_COMMAND_MODE))
1185 {
1186 if (target->IsCreature() && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
1187 {
1188 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
1189 }
1190 Unit::Kill(handler->GetSession()->GetPlayer(), target);
1191 }
1192 else
1193 {
1194 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, target->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
1195 }
1196 }
1197
1198 return true;
1199 }
@ CONFIG_DIE_COMMAND_MODE
Definition WorldConfig.h:64
static void Kill(Unit *killer, Unit *victim, bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
Definition Unit.cpp:13651
uint32 GetHealth() const
Definition Unit.h:1122

References CONFIG_DIE_COMMAND_MODE, Unit::DealDamage(), DIRECT_DAMAGE, Unit::GetHealth(), Unit::GetMaxHealth(), WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), Unit::GetTarget(), ChatHandler::HasLowerSecurity(), Unit::IsAlive(), Object::IsCreature(), Object::IsPlayer(), Unit::Kill(), LANG_SELECT_CHAR_OR_CREATURE, Creature::LowerPlayerDamageReq(), SEC_CONSOLE, ChatHandler::SendErrorMessage(), SPELL_SCHOOL_MASK_NORMAL, sWorld, Object::ToCreature(), and Object::ToPlayer().

Referenced by GetCommands().

◆ HandleDismountCommand()

static bool misc_commandscript::HandleDismountCommand ( ChatHandler *  handler)
inlinestatic
1227 {
1228 Player* player = handler->GetSession()->GetPlayer();
1229
1230 // If player is not mounted, so go out :)
1231 if (!player->IsMounted())
1232 {
1234 return false;
1235 }
1236
1237 if (player->IsInFlight())
1238 {
1240 return false;
1241 }
1242
1243 player->Dismount();
1245 player->SetSpeed(MOVE_RUN, 1, true);
1246 player->SetSpeed(MOVE_FLIGHT, 1, true);
1247 return true;
1248 }
@ LANG_CHAR_NON_MOUNTED
Definition Language.h:54
@ LANG_YOU_IN_FLIGHT
Definition Language.h:50
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
@ MOVE_FLIGHT
Definition UnitDefines.h:362
@ MOVE_RUN
Definition UnitDefines.h:357
void Dismount()
Definition Unit.cpp:10363
bool IsMounted() const
Definition Unit.h:1908
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:11114
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5178

References Unit::Dismount(), WorldSession::GetPlayer(), ChatHandler::GetSession(), Unit::IsInFlight(), Unit::IsMounted(), LANG_CHAR_NON_MOUNTED, LANG_YOU_IN_FLIGHT, MOVE_FLIGHT, MOVE_RUN, Unit::RemoveAurasByType(), ChatHandler::SendErrorMessage(), Unit::SetSpeed(), and SPELL_AURA_MOUNTED.

Referenced by GetCommands().

◆ HandleFlushArenaPointsCommand()

static bool misc_commandscript::HandleFlushArenaPointsCommand ( ChatHandler *  )
inlinestatic
3299 {
3300 sArenaTeamMgr->DistributeArenaPoints();
3301 return true;
3302 }
#define sArenaTeamMgr
Definition ArenaTeamMgr.h:69

References sArenaTeamMgr.

Referenced by GetCommands().

◆ HandleFreezeCommand()

static bool misc_commandscript::HandleFreezeCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
3305 {
3306 Creature* creatureTarget = handler->getSelectedCreature();
3307
3308 if (!target && !creatureTarget)
3309 {
3310 target = PlayerIdentifier::FromTargetOrSelf(handler);
3311 }
3312
3313 if (!target && !creatureTarget)
3314 {
3316 return false;
3317 }
3318
3319 Player* playerTarget = target->GetConnectedPlayer();
3320 if (playerTarget && !creatureTarget)
3321 {
3322 handler->PSendSysMessage(LANG_COMMAND_FREEZE, target->GetName());
3323
3324 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
3325 {
3326 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, playerTarget, playerTarget);
3327 }
3328
3329 return true;
3330 }
3331 else if (creatureTarget && creatureTarget->IsAlive())
3332 {
3334
3335 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
3336 {
3337 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, creatureTarget, creatureTarget);
3338 }
3339
3340 return true;
3341 }
3342
3344 return false;
3345 }
@ LANG_COMMAND_FREEZE
Definition Language.h:1061
#define sSpellMgr
Definition SpellMgr.h:851
virtual LocaleConstant GetSessionDbcLocale() const
Definition Chat.cpp:878
Definition SpellInfo.h:340
constexpr auto SPELL_FREEZE
Definition cs_misc.cpp:62
std::string const GetLocalizeCreatureName(Creature *creature, LocaleConstant locale)
Definition cs_misc.cpp:64

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), GetLocalizeCreatureName(), ChatHandler::getSelectedCreature(), ChatHandler::GetSessionDbcLocale(), Unit::IsAlive(), LANG_COMMAND_FREEZE, LANG_SELECT_CHAR_OR_CREATURE, MAX_EFFECT_MASK, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), SPELL_FREEZE, sSpellMgr, and Aura::TryRefreshStackOrCreate().

Referenced by GetCommands().

◆ HandleGetDistanceCommand()

static bool misc_commandscript::HandleGetDistanceCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
1307 {
1308 if (!target)
1309 {
1310 target = PlayerIdentifier::FromTargetOrSelf(handler);
1311 }
1312
1313 WorldObject* object = handler->getSelectedUnit();
1314
1315 if (!object && !target)
1316 {
1317 return false;
1318 }
1319
1320 if (!object && target && target->IsConnected())
1321 {
1322 object = target->GetConnectedPlayer();
1323 }
1324
1325 if (!object)
1326 {
1327 return false;
1328 }
1329
1330 handler->PSendSysMessage(LANG_DISTANCE, handler->GetSession()->GetPlayer()->GetDistance(object), handler->GetSession()->GetPlayer()->GetDistance2d(object), handler->GetSession()->GetPlayer()->GetExactDist(object), handler->GetSession()->GetPlayer()->GetExactDist2d(object));
1331 return true;
1332 }
@ LANG_DISTANCE
Definition Language.h:553
Definition Object.h:482
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1322
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1304
float GetExactDist2d(const float x, const float y) const
Definition Position.h:170
float GetExactDist(float x, float y, float z) const
Definition Position.h:182

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldObject::GetDistance(), WorldObject::GetDistance2d(), Position::GetExactDist(), Position::GetExactDist2d(), WorldSession::GetPlayer(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), LANG_DISTANCE, and ChatHandler::PSendSysMessage().

Referenced by GetCommands().

◆ HandleGPSCommand()

static bool misc_commandscript::HandleGPSCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
566 {
567 if (!target)
568 {
569 target = PlayerIdentifier::FromTargetOrSelf(handler);
570 }
571
572 WorldObject* object = handler->getSelectedUnit();
573
574 if (!object && !target)
575 {
576 return false;
577 }
578
579 if (!object && target && target->IsConnected())
580 {
581 object = target->GetConnectedPlayer();
582 }
583
584 if (!object)
585 {
586 return false;
587 }
588
589 CellCoord const cellCoord = Acore::ComputeCellCoord(object->GetPositionX(), object->GetPositionY());
590 Cell cell(cellCoord);
591
592 uint32 zoneId, areaId;
593 object->GetZoneAndAreaId(zoneId, areaId);
594
595 MapEntry const* mapEntry = sMapStore.LookupEntry(object->GetMapId());
596 AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
597 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId);
598
599 float zoneX = object->GetPositionX();
600 float zoneY = object->GetPositionY();
601
602 Map2ZoneCoordinates(zoneX, zoneY, zoneId);
603
604 float groundZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT);
605 float floorZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ());
606
607 uint32 haveMap = GridTerrainLoader::ExistMap(object->GetMapId(), cell.GridX(), cell.GridY()) ? 1 : 0;
608 uint32 haveVMap = GridTerrainLoader::ExistVMap(object->GetMapId(), cell.GridX(), cell.GridY()) ? 1 : 0;
609 uint32 haveMMAP = handler->GetSession()->GetPlayer()->GetMap()->GetMapCollisionData().GetMMapData().GetNavMesh() ? 1 : 0;
610
611 if (haveVMap)
612 {
613 if (object->IsOutdoors())
614 {
615 handler->PSendSysMessage("You are outdoors");
616 }
617 else
618 {
619 handler->PSendSysMessage("You are indoors");
620 }
621 }
622 else
623 {
624 handler->PSendSysMessage("no VMAP available for area info");
625 }
626
628 object->GetMapId(), (mapEntry ? mapEntry->name[handler->GetSessionDbcLocale()] : "<unknown>"),
629 zoneId, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
630 areaId, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
631 object->GetPhaseMask(),
632 object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation(),
633 cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(),
634 zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap, haveMMAP);
635
636 LiquidData const& liquidData = object->GetLiquidData();
637
638 if (liquidData.Status)
639 {
640 handler->PSendSysMessage(LANG_LIQUID_STATUS, liquidData.Level, liquidData.DepthLevel, liquidData.Entry, liquidData.Flags, liquidData.Status);
641 }
642
643 if (object->GetTransport())
644 {
645 handler->PSendSysMessage("Transport offset: {:0.2f}, {:0.2f}, {:0.2f}, {:0.2f}", object->m_movementInfo.transport.pos.GetPositionX(), object->m_movementInfo.transport.pos.GetPositionY(), object->m_movementInfo.transport.pos.GetPositionZ(), object->m_movementInfo.transport.pos.GetOrientation());
646 }
647
648 return true;
649 }
void Map2ZoneCoordinates(float &x, float &y, uint32 zone)
Definition DBCStores.cpp:765
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define MAX_HEIGHT
Definition GridTerrainData.h:26
@ LANG_LIQUID_STATUS
Definition Language.h:219
@ LANG_MAP_POSITION
Definition Language.h:137
static bool ExistVMap(uint32 mapid, int gx, int gy)
Definition GridTerrainLoader.cpp:121
static bool ExistMap(uint32 mapid, int gx, int gy)
Definition GridTerrainLoader.cpp:94
dtNavMesh const * GetNavMesh() const
Definition MapCollisionData.h:62
MMapData & GetMMapData()
Definition MapCollisionData.h:86
MapCollisionData & GetMapCollisionData()
Definition Map.h:575
uint32 GetMapId() const
Definition Position.h:281
bool IsOutdoors() const
Definition Object.cpp:3203
CellCoord ComputeCellCoord(float x, float y)
Definition GridDefines.h:197
Definition DBCStructure.h:519
Definition Cell.h:45
Definition GridTerrainData.h:199
float Level
Definition GridTerrainData.h:204
uint32 Flags
Definition GridTerrainData.h:203
uint32 Entry
Definition GridTerrainData.h:202
LiquidStatus Status
Definition GridTerrainData.h:206
float DepthLevel
Definition GridTerrainData.h:205
Definition DBCStructure.h:1361
char const * name[16]
Definition DBCStructure.h:1367

References AreaTableEntry::area_name, Cell::CellX(), Cell::CellY(), Acore::ComputeCellCoord(), LiquidData::DepthLevel, LiquidData::Entry, GridTerrainLoader::ExistMap(), GridTerrainLoader::ExistVMap(), LiquidData::Flags, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldObject::GetMap(), Map::GetMapCollisionData(), WorldLocation::GetMapId(), MapCollisionData::GetMMapData(), MMapData::GetNavMesh(), WorldObject::GetPhaseMask(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), ChatHandler::GetSessionDbcLocale(), WorldObject::GetTransport(), Cell::GridX(), Cell::GridY(), WorldObject::IsOutdoors(), LANG_LIQUID_STATUS, LANG_MAP_POSITION, LiquidData::Level, WorldObject::m_movementInfo, Map2ZoneCoordinates(), MAX_HEIGHT, MapEntry::name, MovementInfo::TransportInfo::pos, ChatHandler::PSendSysMessage(), sAreaTableStore, sMapStore, LiquidData::Status, and MovementInfo::transport.

Referenced by GetCommands().

◆ HandleGroupSummonCommand()

static bool misc_commandscript::HandleGroupSummonCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
1054 {
1055 if (!target)
1056 {
1057 target = PlayerIdentifier::FromTargetOrSelf(handler);
1058 }
1059
1060 if (!target || !target->IsConnected())
1061 {
1062 return false;
1063 }
1064
1065 // check online security
1066 if (handler->HasLowerSecurity(target->GetConnectedPlayer()))
1067 {
1068 return false;
1069 }
1070
1071 auto targetPlayer = target->GetConnectedPlayer();
1072
1073 Group* group = targetPlayer->GetGroup();
1074
1075 std::string nameLink = handler->playerLink(target->GetName());
1076
1077 if (!group)
1078 {
1079 handler->SendErrorMessage(LANG_NOT_IN_GROUP, nameLink);
1080 return false;
1081 }
1082
1083 Map* gmMap = handler->GetSession()->GetPlayer()->GetMap();
1084 bool toInstance = gmMap->Instanceable();
1085
1086 // we are in instance, and can summon only player in our group with us as lead
1087 if (toInstance && (
1088 !handler->GetSession()->GetPlayer()->GetGroup() || (group->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
1089 (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID())))
1090 // the last check is a bit excessive, but let it be, just in case
1091 {
1093 return false;
1094 }
1095
1096 for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
1097 {
1098 Player* player = itr->GetSource();
1099
1100 if (!player || player == handler->GetSession()->GetPlayer() || !player->GetSession())
1101 {
1102 continue;
1103 }
1104
1105 // check online security
1106 if (handler->HasLowerSecurity(player))
1107 {
1108 return false;
1109 }
1110
1111 std::string plNameLink = handler->GetNameLink(player);
1112
1113 if (player->IsBeingTeleported())
1114 {
1115 handler->SendErrorMessage(LANG_IS_TELEPORTED, plNameLink);
1116 return false;
1117 }
1118
1119 if (toInstance)
1120 {
1121 Map* playerMap = player->GetMap();
1122
1123 if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
1124 {
1125 // cannot summon from instance to instance
1126 handler->SendErrorMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink);
1127 return false;
1128 }
1129 }
1130
1131 handler->PSendSysMessage(LANG_SUMMONING, plNameLink, "");
1132 if (handler->needReportToTarget(player))
1133 {
1135 }
1136
1137 // stop flight if need
1138 if (player->IsInFlight())
1139 {
1140 player->GetMotionMaster()->MovementExpired();
1141 player->CleanupAfterTaxiFlight();
1142 }
1143 // save only in non-flight case
1144 else
1145 {
1146 player->SaveRecallPosition();
1147 }
1148
1149 // before GM
1150 float x, y, z;
1151 handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize());
1152 player->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation(), 0, handler->GetSession()->GetPlayer());
1153 }
1154
1155 return true;
1156 }
@ LANG_SUMMONING
Definition Language.h:144
@ LANG_NOT_IN_GROUP
Definition Language.h:153
@ LANG_IS_TELEPORTED
Definition Language.h:138
@ LANG_CANNOT_SUMMON_TO_INST
Definition Language.h:139
@ LANG_SUMMONED_BY
Definition Language.h:145
Definition Chat.h:37
virtual bool needReportToTarget(Player *chr) const
Definition Chat.cpp:872
Definition GroupReference.h:27
Definition Group.h:178
GroupReference * GetFirstMember()
Definition Group.h:253
ObjectGuid GetLeaderGUID() const
Definition Group.cpp:2538
bool Instanceable() const
Definition Map.h:298
uint32 GetInstanceId() const
Definition Map.h:270
bool IsBeingTeleported() const
Definition Player.h:2122
bool GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
Definition Object.cpp:2832
float GetObjectSize() const
Definition Object.cpp:2904

References Player::CleanupAfterTaxiFlight(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldObject::GetClosePoint(), Group::GetFirstMember(), Player::GetGroup(), Object::GetGUID(), Map::GetInstanceId(), Group::GetLeaderGUID(), WorldObject::GetMap(), WorldLocation::GetMapId(), Unit::GetMotionMaster(), ChatHandler::GetNameLink(), WorldObject::GetObjectSize(), Position::GetOrientation(), WorldSession::GetPlayer(), ChatHandler::GetSession(), Player::GetSession(), ChatHandler::HasLowerSecurity(), Map::Instanceable(), Player::IsBeingTeleported(), Unit::IsInFlight(), LANG_CANNOT_SUMMON_TO_INST, LANG_IS_TELEPORTED, LANG_NOT_IN_GROUP, LANG_SUMMONED_BY, LANG_SUMMONING, MotionMaster::MovementExpired(), ChatHandler::needReportToTarget(), ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Player::SaveRecallPosition(), ChatHandler::SendErrorMessage(), and Player::TeleportTo().

Referenced by GetCommands().

◆ HandleGUIDCommand()

static bool misc_commandscript::HandleGUIDCommand ( ChatHandler *  handler)
inlinestatic
1251 {
1252 ObjectGuid guid = handler->GetSession()->GetPlayer()->GetTarget();
1253
1254 if (!guid)
1255 {
1257 return false;
1258 }
1259
1260 handler->PSendSysMessage(LANG_OBJECT_GUID, guid.ToString());
1261 return true;
1262 }
@ LANG_OBJECT_GUID
Definition Language.h:246
@ LANG_NO_SELECTION
Definition Language.h:245
Definition ObjectGuid.h:121
std::string ToString() const
Definition ObjectGuid.cpp:49

References WorldSession::GetPlayer(), ChatHandler::GetSession(), Unit::GetTarget(), LANG_NO_SELECTION, LANG_OBJECT_GUID, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), and ObjectGuid::ToString().

Referenced by GetCommands().

◆ HandleHelpCommand()

static bool misc_commandscript::HandleHelpCommand ( ChatHandler *  handler,
Tail  cmd 
)
inlinestatic
1265 {
1267
1268 if (cmd.empty())
1269 {
1271 }
1272
1273 return true;
1274 }

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleHideAreaCommand()

static bool misc_commandscript::HandleHideAreaCommand ( ChatHandler *  handler,
uint32  areaID 
)
inlinestatic
1694 {
1695 Player* playerTarget = handler->getSelectedPlayer();
1696 if (!playerTarget)
1697 {
1699 return false;
1700 }
1701
1702 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1703 if (!area)
1704 {
1706 return false;
1707 }
1708
1709 int32 offset = area->exploreFlag / 32;
1710 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1711 {
1713 return false;
1714 }
1715
1716 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1717 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1718 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields ^ val)));
1719
1721 return true;
1722 }
@ LANG_UNEXPLORE_AREA
Definition Language.h:626
@ LANG_NO_CHAR_SELECTED
Definition Language.h:152
@ LANG_BAD_VALUE
Definition Language.h:151
#define PLAYER_EXPLORED_ZONES_SIZE
Definition Player.h:73
@ PLAYER_EXPLORED_ZONES_1
Definition UpdateFields.h:357
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:168
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:303
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17078
uint32 exploreFlag
Definition DBCStructure.h:523

References AreaTableEntry::exploreFlag, ChatHandler::getSelectedPlayer(), Object::GetUInt32Value(), LANG_BAD_VALUE, LANG_NO_CHAR_SELECTED, LANG_UNEXPLORE_AREA, PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE, sAreaTableStore, ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), and Unit::SetUInt32Value().

Referenced by GetCommands().

◆ HandleKickPlayerCommand()

static bool misc_commandscript::HandleKickPlayerCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target,
Optional< std::string_view >  reason 
)
inlinestatic
1411 {
1412 if (!target)
1413 {
1414 target = PlayerIdentifier::FromTargetOrSelf(handler);
1415 }
1416
1417 if (!target || !target->IsConnected())
1418 {
1419 return false;
1420 }
1421
1422 auto targetPlayer = target->GetConnectedPlayer();
1423
1424 if (handler->GetSession() && target->GetGUID() == handler->GetSession()->GetPlayer()->GetGUID())
1425 {
1427 return false;
1428 }
1429
1430 // check online security
1431 if (handler->HasLowerSecurity(targetPlayer))
1432 {
1433 return false;
1434 }
1435
1436 std::string kickReasonStr = handler->GetAcoreString(LANG_NO_REASON);
1437 if (reason && !reason->empty())
1438 {
1439 kickReasonStr = std::string{ *reason };
1440 }
1441
1442 if (sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
1443 {
1444 handler->SendWorldText(LANG_COMMAND_KICKMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server"), target->GetName(), kickReasonStr);
1445 }
1446 else
1447 {
1448 handler->PSendSysMessage(LANG_COMMAND_KICKMESSAGE, target->GetName());
1449 }
1450
1451 targetPlayer->GetSession()->KickPlayer("HandleKickPlayerCommand");
1452
1453 return true;
1454 }
@ LANG_COMMAND_KICKSELF
Definition Language.h:334
@ LANG_COMMAND_KICKMESSAGE_WORLD
Definition Language.h:1375
@ LANG_NO_REASON
Definition Language.h:818
@ LANG_COMMAND_KICKMESSAGE
Definition Language.h:335
@ CONFIG_SHOW_KICK_IN_WORLD
Definition WorldConfig.h:91
void SendWorldText(std::string_view str)
Definition Chat.cpp:139
std::string const & GetName() const
Definition ScriptObject.h:52
std::string const & GetPlayerName() const
Definition WorldSession.cpp:268

References CONFIG_SHOW_KICK_IN_WORLD, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), ChatHandler::GetAcoreString(), Object::GetGUID(), WorldSession::GetPlayer(), WorldSession::GetPlayerName(), ChatHandler::GetSession(), ChatHandler::HasLowerSecurity(), LANG_COMMAND_KICKMESSAGE, LANG_COMMAND_KICKMESSAGE_WORLD, LANG_COMMAND_KICKSELF, LANG_NO_REASON, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), ChatHandler::SendWorldText(), and sWorld.

Referenced by GetCommands().

◆ HandleLinkGraveCommand()

static bool misc_commandscript::HandleLinkGraveCommand ( ChatHandler *  handler,
uint32  graveyardId,
Optional< std::string_view >  team 
)
inlinestatic
1535 {
1536 TeamId teamId;
1537
1538 if (!team)
1539 {
1540 teamId = TEAM_NEUTRAL;
1541 }
1542 else if (StringEqualI(team->substr(0, 6), "horde"))
1543 {
1544 teamId = TEAM_HORDE;
1545 }
1546 else if (StringEqualI(team->substr(0, 9), "alliance"))
1547 {
1548 teamId = TEAM_ALLIANCE;
1549 }
1550 else
1551 {
1552 return false;
1553 }
1554
1555 GraveyardStruct const* graveyard = sGraveyard->GetGraveyard(graveyardId);
1556
1557 if (!graveyard)
1558 {
1559 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDNOEXIST, graveyardId);
1560 return false;
1561 }
1562
1563 Player* player = handler->GetSession()->GetPlayer();
1564 uint32 zoneId = player->GetZoneId();
1565
1566 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId);
1567 if (!areaEntry || areaEntry->zone != 0)
1568 {
1569 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDWRONGZONE, graveyardId, zoneId);
1570 return false;
1571 }
1572
1573 if (sGraveyard->AddGraveyardLink(graveyardId, zoneId, teamId))
1574 {
1575 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDLINKED, graveyardId, zoneId);
1576 }
1577 else
1578 {
1579 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDALRLINKED, graveyardId, zoneId);
1580 }
1581
1582 return true;
1583 }
#define sGraveyard
Definition GameGraveyard.h:76
@ LANG_COMMAND_GRAVEYARDALRLINKED
Definition Language.h:491
@ LANG_COMMAND_GRAVEYARDNOEXIST
Definition Language.h:490
@ LANG_COMMAND_GRAVEYARDWRONGZONE
Definition Language.h:493
@ LANG_COMMAND_GRAVEYARDLINKED
Definition Language.h:492
TeamId
Definition SharedDefines.h:747
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
bool StringEqualI(std::string_view a, std::string_view b)
Definition Util.cpp:592
uint32 zone
Definition DBCStructure.h:522
Definition GameGraveyard.h:27

References WorldSession::GetPlayer(), ChatHandler::GetSession(), WorldObject::GetZoneId(), LANG_COMMAND_GRAVEYARDALRLINKED, LANG_COMMAND_GRAVEYARDLINKED, LANG_COMMAND_GRAVEYARDNOEXIST, LANG_COMMAND_GRAVEYARDWRONGZONE, ChatHandler::PSendSysMessage(), sAreaTableStore, ChatHandler::SendErrorMessage(), sGraveyard, StringEqualI(), TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, and AreaTableEntry::zone.

Referenced by GetCommands().

◆ HandleMailBoxCommand()

static bool misc_commandscript::HandleMailBoxCommand ( ChatHandler *  handler)
inlinestatic
3453 {
3454 Player* player = handler->GetSession()->GetPlayer();
3455 handler->GetSession()->SendShowMailBox(player->GetGUID());
3456 return true;
3457 }
void SendShowMailBox(ObjectGuid guid)
Definition NPCHandler.cpp:74

References Object::GetGUID(), WorldSession::GetPlayer(), ChatHandler::GetSession(), and WorldSession::SendShowMailBox().

Referenced by GetCommands().

◆ HandleMaxSkillCommand()

static bool misc_commandscript::HandleMaxSkillCommand ( ChatHandler *  handler)
inlinestatic
2023 {
2024 Player* SelectedPlayer = handler->getSelectedPlayer();
2025 if (!SelectedPlayer)
2026 {
2028 return false;
2029 }
2030
2031 // each skills that have max skill value dependent from level seted to current level max skill value
2032 SelectedPlayer->UpdateSkillsToMaxSkillsForLevel();
2033 return true;
2034 }
void UpdateSkillsToMaxSkillsForLevel()
Definition PlayerUpdates.cpp:1155

References ChatHandler::getSelectedPlayer(), LANG_NO_CHAR_SELECTED, ChatHandler::SendErrorMessage(), and Player::UpdateSkillsToMaxSkillsForLevel().

Referenced by GetCommands().

◆ HandleMovegensCommand()

static bool misc_commandscript::HandleMovegensCommand ( ChatHandler *  handler)
inlinestatic
3091 {
3092 Unit* unit = handler->getSelectedUnit();
3093 if (!unit)
3094 {
3096 return false;
3097 }
3098
3099 handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->IsPlayer() ? "Player" : "Creature"), unit->GetGUID().ToString());
3100
3101 MotionMaster* motionMaster = unit->GetMotionMaster();
3102 float x, y, z;
3103 motionMaster->GetDestination(x, y, z);
3104
3105 for (uint8 i = 0; i < MAX_MOTION_SLOT; ++i)
3106 {
3107 MovementGenerator* movementGenerator = motionMaster->GetMotionSlot(i);
3108 if (!movementGenerator)
3109 {
3110 handler->SendSysMessage("Empty");
3111 continue;
3112 }
3113
3114 switch (movementGenerator->GetMovementGeneratorType())
3115 {
3116 case IDLE_MOTION_TYPE:
3118 break;
3119 case RANDOM_MOTION_TYPE:
3121 break;
3124 break;
3127 break;
3130 break;
3131 case CHASE_MOTION_TYPE:
3132 {
3133 Unit* target = nullptr;
3134 if (unit->IsPlayer())
3135 {
3136 target = static_cast<ChaseMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
3137 }
3138 else
3139 {
3140 target = static_cast<ChaseMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
3141 }
3142
3143 if (!target)
3144 {
3146 }
3147 else if (target->IsPlayer())
3148 {
3149 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName(), target->GetGUID().ToString());
3150 }
3151 else
3152 {
3153 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName(), target->GetGUID().ToString());
3154 }
3155 break;
3156 }
3157 case FOLLOW_MOTION_TYPE:
3158 {
3159 Unit* target = nullptr;
3160 if (unit->IsPlayer())
3161 {
3162 target = static_cast<FollowMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
3163 }
3164 else
3165 {
3166 target = static_cast<FollowMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
3167 }
3168
3169 if (!target)
3170 {
3172 }
3173 else if (target->IsPlayer())
3174 {
3175 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName(), target->GetGUID().ToString());
3176 }
3177 else
3178 {
3179 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName(), target->GetGUID().ToString());
3180 }
3181 break;
3182 }
3183 case HOME_MOTION_TYPE:
3184 {
3185 if (unit->IsCreature())
3186 {
3188 }
3189 else
3190 {
3192 }
3193 break;
3194 }
3195 case FLIGHT_MOTION_TYPE:
3197 break;
3198 case POINT_MOTION_TYPE:
3199 {
3200 handler->PSendSysMessage(LANG_MOVEGENS_POINT, x, y, z);
3201 break;
3202 }
3205 break;
3208 break;
3209 case EFFECT_MOTION_TYPE:
3211 break;
3212 default:
3213 handler->PSendSysMessage(LANG_MOVEGENS_UNKNOWN, movementGenerator->GetMovementGeneratorType());
3214 break;
3215 }
3216 }
3217 return true;
3218 }
std::uint8_t uint8
Definition Define.h:109
@ LANG_MOVEGENS_FOLLOW_PLAYER
Definition Language.h:940
@ LANG_MOVEGENS_EFFECT
Definition Language.h:943
@ LANG_MOVEGENS_UNKNOWN
Definition Language.h:593
@ LANG_MOVEGENS_CHASE_PLAYER
Definition Language.h:587
@ LANG_MOVEGENS_IDLE
Definition Language.h:582
@ LANG_MOVEGENS_CONFUSED
Definition Language.h:586
@ LANG_MOVEGENS_FOLLOW_CREATURE
Definition Language.h:941
@ LANG_MOVEGENS_FOLLOW_NULL
Definition Language.h:942
@ LANG_MOVEGENS_DISTRACT
Definition Language.h:661
@ LANG_MOVEGENS_CHASE_CREATURE
Definition Language.h:588
@ LANG_MOVEGENS_RANDOM
Definition Language.h:583
@ LANG_MOVEGENS_WAYPOINT
Definition Language.h:584
@ LANG_MOVEGENS_POINT
Definition Language.h:659
@ LANG_MOVEGENS_ANIMAL_RANDOM
Definition Language.h:585
@ LANG_MOVEGENS_CHASE_NULL
Definition Language.h:589
@ LANG_MOVEGENS_FLIGHT
Definition Language.h:592
@ LANG_MOVEGENS_HOME_CREATURE
Definition Language.h:590
@ LANG_MOVEGENS_HOME_PLAYER
Definition Language.h:591
@ LANG_MOVEGENS_LIST
Definition Language.h:581
@ LANG_MOVEGENS_FEAR
Definition Language.h:660
@ MAX_MOTION_SLOT
Definition MotionMaster.h:67
@ DISTRACT_MOTION_TYPE
Definition MotionMaster.h:50
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39
@ CHASE_MOTION_TYPE
Definition MotionMaster.h:45
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
@ FLEEING_MOTION_TYPE
Definition MotionMaster.h:49
@ CONFUSED_MOTION_TYPE
Definition MotionMaster.h:44
@ HOME_MOTION_TYPE
Definition MotionMaster.h:46
@ POINT_MOTION_TYPE
Definition MotionMaster.h:48
@ FLIGHT_MOTION_TYPE
Definition MotionMaster.h:47
@ FOLLOW_MOTION_TYPE
Definition MotionMaster.h:54
@ ANIMAL_RANDOM_MOTION_TYPE
Definition MotionMaster.h:43
@ RANDOM_MOTION_TYPE
Definition MotionMaster.h:40
@ EFFECT_MOTION_TYPE
Definition MotionMaster.h:56
Definition TargetedMovementGenerator.h:38
Definition TargetedMovementGenerator.h:83
Definition MotionMaster.h:139
_Ty GetMotionSlot(int slot) const
Definition MotionMaster.h:182
bool GetDestination(float &x, float &y, float &z)
Definition MotionMaster.cpp:1151
Definition MovementGenerator.h:28
virtual MovementGeneratorType GetMovementGeneratorType()=0
std::string const & GetName() const
Definition Object.h:535
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250

References ANIMAL_RANDOM_MOTION_TYPE, CHASE_MOTION_TYPE, CONFUSED_MOTION_TYPE, DISTRACT_MOTION_TYPE, EFFECT_MOTION_TYPE, FLEEING_MOTION_TYPE, FLIGHT_MOTION_TYPE, FOLLOW_MOTION_TYPE, MotionMaster::GetDestination(), Object::GetGUID(), Unit::GetMotionMaster(), MotionMaster::GetMotionSlot(), MovementGenerator::GetMovementGeneratorType(), WorldObject::GetName(), ChatHandler::getSelectedUnit(), HOME_MOTION_TYPE, IDLE_MOTION_TYPE, Object::IsCreature(), Object::IsPlayer(), LANG_MOVEGENS_ANIMAL_RANDOM, LANG_MOVEGENS_CHASE_CREATURE, LANG_MOVEGENS_CHASE_NULL, LANG_MOVEGENS_CHASE_PLAYER, LANG_MOVEGENS_CONFUSED, LANG_MOVEGENS_DISTRACT, LANG_MOVEGENS_EFFECT, LANG_MOVEGENS_FEAR, LANG_MOVEGENS_FLIGHT, LANG_MOVEGENS_FOLLOW_CREATURE, LANG_MOVEGENS_FOLLOW_NULL, LANG_MOVEGENS_FOLLOW_PLAYER, LANG_MOVEGENS_HOME_CREATURE, LANG_MOVEGENS_HOME_PLAYER, LANG_MOVEGENS_IDLE, LANG_MOVEGENS_LIST, LANG_MOVEGENS_POINT, LANG_MOVEGENS_RANDOM, LANG_MOVEGENS_UNKNOWN, LANG_MOVEGENS_WAYPOINT, LANG_SELECT_CHAR_OR_CREATURE, MAX_MOTION_SLOT, POINT_MOTION_TYPE, ChatHandler::PSendSysMessage(), RANDOM_MOTION_TYPE, ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), ObjectGuid::ToString(), and WAYPOINT_MOTION_TYPE.

Referenced by GetCommands().

◆ HandleMuteCommand()

static bool misc_commandscript::HandleMuteCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  player,
std::string  notSpeakTime,
Tail  muteReason 
)
inlinestatic
2871 {
2872 std::string muteReasonStr{ muteReason };
2873
2874 if (notSpeakTime.empty())
2875 {
2876 return false;
2877 }
2878
2879 if (Acore::StringTo<int32>(notSpeakTime).value_or(0) < 0)
2880 {
2882 return false;
2883 }
2884
2885 if (muteReason.empty())
2886 {
2887 muteReasonStr = handler->GetAcoreString(LANG_NO_REASON);
2888 }
2889
2890 if (!player)
2891 {
2892 player = PlayerIdentifier::FromTarget(handler);
2893 }
2894
2895 if (!player)
2896 {
2898 return false;
2899 }
2900
2901 Player* target = player->GetConnectedPlayer();
2902 uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
2903
2904 // The account may be online on another character or idle at character select, where
2905 // the session has no player but keeps its mute time for every character it logs in.
2906 WorldSession* session = target ? target->GetSession() : sWorldSessionMgr->FindSession(accountId);
2907 if (!target && session)
2908 target = session->GetPlayer();
2909
2910 // must have strong lesser security level
2911 if (handler->HasLowerSecurity(target, player->GetGUID(), true))
2912 {
2913 return false;
2914 }
2915
2917 int32 muteDuration = TimeStringToSecs(notSpeakTime);
2918 if (muteDuration <= 0)
2919 {
2920 muteDuration = Acore::StringTo<int32>(notSpeakTime).value_or(0);
2921 }
2922
2923 if (muteDuration <= 0)
2924 {
2926 return false;
2927 }
2928
2929 std::string muteBy = "";
2930 if (handler->GetSession())
2931 {
2932 muteBy = handler->GetSession()->GetPlayerName();
2933 }
2934 else
2935 {
2936 muteBy = handler->GetAcoreString(LANG_CONSOLE);
2937 }
2938
2939 if (session)
2940 {
2941 // Account is online, mute will be in effect right away.
2942 int64 muteTime = GameTime::GetGameTime().count() + muteDuration;
2943 session->m_muteTime = muteTime;
2944 stmt->SetData(0, muteTime);
2945 std::string nameLink = handler->playerLink(player->GetName());
2946
2947 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
2948 {
2949 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2950 }
2951
2952 if (target)
2953 ChatHandler(session).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, secsToTimeString(muteDuration, true), muteBy, muteReasonStr);
2954 }
2955 else
2956 {
2957 // Account is offline, mute will be in effect starting from the next login.
2958 stmt->SetData(0, -int32(muteDuration));
2959 }
2960
2961 stmt->SetData(1, muteReasonStr);
2962 stmt->SetData(2, muteBy);
2963 stmt->SetData(3, accountId);
2964 LoginDatabase.Execute(stmt);
2965
2966 stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
2967 stmt->SetData(0, accountId);
2968 stmt->SetData(1, muteDuration / MINUTE);
2969 stmt->SetData(2, muteBy);
2970 stmt->SetData(3, muteReasonStr);
2971 LoginDatabase.Execute(stmt);
2972
2973 std::string nameLink = handler->playerLink(player->GetName());
2974
2975 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !session)
2976 {
2977 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2978 }
2979 else
2980 {
2981 // pussywizard: notify all online GMs
2982 std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
2984 for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
2985 if (itr->second->GetSession()->GetSecurity())
2986 ChatHandler(itr->second->GetSession()).PSendSysMessage(session ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED,
2987 (handler->GetSession() ? handler->GetSession()->GetPlayerName() : handler->GetAcoreString(LANG_CONSOLE)), nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2988 }
2989
2990 return true;
2991 }
constexpr auto MINUTE
Definition Common.h:47
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition DatabaseEnv.cpp:22
std::int64_t int64
Definition Define.h:102
@ LANG_COMMAND_DISABLE_CHAT_DELAYED
Definition Language.h:336
@ LANG_YOUR_CHAT_DISABLED
Definition Language.h:349
@ LANG_COMMAND_MUTEMESSAGE_WORLD
Definition Language.h:1378
@ LANG_YOU_DISABLE_CHAT
Definition Language.h:350
@ LANG_CONSOLE
Definition Language.h:1101
@ LOGIN_UPD_MUTE_TIME
Definition LoginDatabase.h:72
@ LOGIN_INS_ACCOUNT_MUTE
Definition LoginDatabase.h:124
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
uint32 TimeStringToSecs(std::string const &timestring)
Definition Util.cpp:163
@ CONFIG_SHOW_MUTE_IN_WORLD
Definition WorldConfig.h:92
#define sWorldSessionMgr
Definition WorldSessionMgr.h:118
Definition ObjectAccessor.h:41
std::unordered_map< ObjectGuid, T * > MapType
Definition ObjectAccessor.h:47
uint32 GetAccountId() const
Definition WorldSession.h:502
time_t m_muteTime
Definition WorldSession.h:643
AC_GAME_API std::string GetAcoreString(ChatHandler const *handler, AcoreStrings which)
Definition ChatCommandHelpers.cpp:27
Seconds GetGameTime()
Definition GameTime.cpp:39
HashMapHolder< Player >::MapType const & GetPlayers()
Definition ObjectAccessor.cpp:99

References CONFIG_SHOW_MUTE_IN_WORLD, Acore::ChatCommands::PlayerIdentifier::FromTarget(), WorldSession::GetAccountId(), ChatHandler::GetAcoreString(), GameTime::GetGameTime(), Object::GetGUID(), WorldSession::GetPlayer(), WorldSession::GetPlayerName(), ObjectAccessor::GetPlayers(), ChatHandler::GetSession(), Player::GetSession(), ChatHandler::HasLowerSecurity(), LANG_BAD_VALUE, LANG_COMMAND_DISABLE_CHAT_DELAYED, LANG_COMMAND_MUTEMESSAGE_WORLD, LANG_CONSOLE, LANG_NO_REASON, LANG_PLAYER_NOT_FOUND, LANG_YOU_DISABLE_CHAT, LANG_YOUR_CHAT_DISABLED, LOGIN_INS_ACCOUNT_MUTE, LOGIN_UPD_MUTE_TIME, LoginDatabase, WorldSession::m_muteTime, MINUTE, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), sCharacterCache, secsToTimeString(), ChatHandler::SendErrorMessage(), ChatHandler::SendWorldText(), PreparedStatementBase::SetData(), sWorld, sWorldSessionMgr, and TimeStringToSecs().

Referenced by GetCommands().

◆ HandleMuteInfoCommand()

static bool misc_commandscript::HandleMuteInfoCommand ( ChatHandler *  handler,
std::string  accountName 
)
inlinestatic
3050 {
3051 if (!Utf8ToUpperOnlyLatin(accountName))
3052 {
3053 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
3054 return false;
3055 }
3056
3057 uint32 accountId = AccountMgr::GetId(accountName);
3058 if (!accountId)
3059 {
3060 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
3061 return false;
3062 }
3063
3064 return HandleMuteInfoHelper(handler, accountId, accountName.c_str());
3065 }
@ LANG_ACCOUNT_NOT_EXIST
Definition Language.h:451
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition Util.cpp:532
static uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:248
static bool HandleMuteInfoHelper(ChatHandler *handler, uint32 accountId, char const *accountName)
Definition cs_misc.cpp:3068

References AccountMgr::GetId(), HandleMuteInfoHelper(), LANG_ACCOUNT_NOT_EXIST, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), and Utf8ToUpperOnlyLatin().

Referenced by GetCommands().

◆ HandleMuteInfoHelper()

static bool misc_commandscript::HandleMuteInfoHelper ( ChatHandler *  handler,
uint32  accountId,
char const *  accountName 
)
inlinestatic
3069 {
3071 stmt->SetData(0, accountId);
3072 PreparedQueryResult result = LoginDatabase.Query(stmt);
3073
3074 if (!result)
3075 {
3076 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
3077 return true;
3078 }
3079
3080 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
3081 do
3082 {
3083 Field* fields = result->Fetch();
3084 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_OUTPUT, Acore::Time::TimeToHumanReadable(Seconds(fields[0].Get<uint32>())), fields[1].Get<uint32>(), fields[2].Get<std::string>(), fields[3].Get<std::string>());
3085 } while (result->NextRow());
3086
3087 return true;
3088 }
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:30
@ LANG_COMMAND_MUTEHISTORY_OUTPUT
Definition Language.h:1127
@ LANG_COMMAND_MUTEHISTORY_EMPTY
Definition Language.h:1126
@ LANG_COMMAND_MUTEHISTORY
Definition Language.h:1125
@ LOGIN_SEL_ACCOUNT_MUTE_INFO
Definition LoginDatabase.h:125
AC_COMMON_API std::string TimeToHumanReadable(Seconds time=0s, std::string_view fmt={})
Definition Timer.cpp:287

References LANG_COMMAND_MUTEHISTORY, LANG_COMMAND_MUTEHISTORY_EMPTY, LANG_COMMAND_MUTEHISTORY_OUTPUT, LOGIN_SEL_ACCOUNT_MUTE_INFO, LoginDatabase, ChatHandler::PSendSysMessage(), PreparedStatementBase::SetData(), and Acore::Time::TimeToHumanReadable().

Referenced by HandleMuteInfoCommand().

◆ HandleNearGraveCommand()

static bool misc_commandscript::HandleNearGraveCommand ( ChatHandler *  handler,
Optional< std::string_view >  team 
)
inlinestatic
1586 {
1587 TeamId teamId;
1588
1589 if (!team)
1590 {
1591 teamId = TEAM_NEUTRAL;
1592 }
1593 else if (StringEqualI(team->substr(0, 6), "horde"))
1594 {
1595 teamId = TEAM_HORDE;
1596 }
1597 else if (StringEqualI(team->substr(0, 9), "alliance"))
1598 {
1599 teamId = TEAM_ALLIANCE;
1600 }
1601 else
1602 {
1603 return false;
1604 }
1605
1606 Player* player = handler->GetSession()->GetPlayer();
1607 uint32 zone_id = player->GetZoneId();
1608
1609 GraveyardStruct const* graveyard = sGraveyard->GetClosestGraveyard(player, teamId);
1610
1611 if (graveyard)
1612 {
1613 uint32 graveyardId = graveyard->ID;
1614
1615 GraveyardData const* data = sGraveyard->FindGraveyardData(graveyardId, zone_id);
1616 if (!data)
1617 {
1618 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDERROR, graveyardId);
1619 return false;
1620 }
1621
1622 std::string team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_NOTEAM);
1623
1624 if (data->teamId == TEAM_NEUTRAL)
1625 {
1626 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1627 }
1628 else if (data->teamId == TEAM_HORDE)
1629 {
1630 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1631 }
1632 else if (data->teamId == TEAM_ALLIANCE)
1633 {
1634 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1635 }
1636
1637 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDNEAREST, graveyardId, team_name, zone_id);
1638 }
1639 else
1640 {
1641 std::string team_name;
1642
1643 if (teamId == TEAM_NEUTRAL)
1644 {
1645 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1646 }
1647 else if (teamId == TEAM_HORDE)
1648 {
1649 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1650 }
1651 else if (teamId == TEAM_ALLIANCE)
1652 {
1653 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1654 }
1655
1656 handler->PSendSysMessage(LANG_COMMAND_ZONENOGRAFACTION, zone_id, team_name);
1657 }
1658
1659 return true;
1660 }
@ LANG_COMMAND_GRAVEYARD_ALLIANCE
Definition Language.h:498
@ LANG_COMMAND_ZONENOGRAFACTION
Definition Language.h:502
@ LANG_COMMAND_GRAVEYARDNEAREST
Definition Language.h:500
@ LANG_COMMAND_GRAVEYARD_NOTEAM
Definition Language.h:496
@ LANG_COMMAND_GRAVEYARDERROR
Definition Language.h:495
@ LANG_COMMAND_GRAVEYARD_HORDE
Definition Language.h:499
@ LANG_COMMAND_GRAVEYARD_ANY
Definition Language.h:497
Definition GameGraveyard.h:38
TeamId teamId
Definition GameGraveyard.h:40
uint32 ID
Definition GameGraveyard.h:28

References ChatHandler::GetAcoreString(), WorldSession::GetPlayer(), ChatHandler::GetSession(), WorldObject::GetZoneId(), GraveyardStruct::ID, LANG_COMMAND_GRAVEYARD_ALLIANCE, LANG_COMMAND_GRAVEYARD_ANY, LANG_COMMAND_GRAVEYARD_HORDE, LANG_COMMAND_GRAVEYARD_NOTEAM, LANG_COMMAND_GRAVEYARDERROR, LANG_COMMAND_GRAVEYARDNEAREST, LANG_COMMAND_ZONENOGRAFACTION, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sGraveyard, StringEqualI(), TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, and GraveyardData::teamId.

Referenced by GetCommands().

◆ HandleOpenDoorCommand()

static bool misc_commandscript::HandleOpenDoorCommand ( ChatHandler *  handler,
Optional< float >  range 
)
inlinestatic
3473 {
3474 if (GameObject* go = handler->GetPlayer()->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_DOOR, range ? *range : 5.0f))
3475 {
3476 go->SetGoState(GO_STATE_ACTIVE);
3477 handler->PSendSysMessage(LANG_CMD_DOOR_OPENED, go->GetName(), go->GetEntry());
3478 return true;
3479 }
3480
3481 handler->SendErrorMessage(LANG_CMD_NO_DOOR_FOUND, range ? *range : 5.0f);
3482 return false;
3483 }
@ GO_STATE_ACTIVE
Definition GameObjectData.h:708
@ LANG_CMD_NO_DOOR_FOUND
Definition Language.h:1163
@ LANG_CMD_DOOR_OPENED
Definition Language.h:1164
@ GAMEOBJECT_TYPE_DOOR
Definition SharedDefines.h:1564
Player * GetPlayer() const
Definition Chat.cpp:37
Definition GameObject.h:125
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition Object.cpp:2583

References WorldObject::FindNearestGameObjectOfType(), GAMEOBJECT_TYPE_DOOR, ChatHandler::GetPlayer(), GO_STATE_ACTIVE, LANG_CMD_DOOR_OPENED, LANG_CMD_NO_DOOR_FOUND, ChatHandler::PSendSysMessage(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandlePacketLog()

static bool misc_commandscript::HandlePacketLog ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target,
Optional< bool >  enableArg 
)
inlinestatic
3527 {
3528 if (!target)
3529 target = PlayerIdentifier::FromTargetOrSelf(handler);
3530
3531 if (!target || !target->IsConnected())
3532 {
3534 return false;
3535 }
3536
3537 Player* playerTarget = target->GetConnectedPlayer();
3538 WorldSession* session = playerTarget->GetSession();
3539
3540 if (!session)
3541 return false;
3542
3543 if (enableArg)
3544 {
3545 if (*enableArg)
3546 {
3547 session->SetPacketLogging(true);
3548 handler->PSendSysMessage("Packet logging enabled for {}.", playerTarget->GetName());
3549 return true;
3550 }
3551 else
3552 {
3553 session->SetPacketLogging(false);
3554 handler->PSendSysMessage("Packet logging disabled for {}.", playerTarget->GetName());
3555 return true;
3556 }
3557 }
3558
3560 return false;
3561 }
void SetPacketLogging(bool state)
Definition WorldSession.cpp:1662

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldObject::GetName(), Player::GetSession(), LANG_PLAYER_NOT_FOUND, LANG_USE_BOL, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), and WorldSession::SetPacketLogging().

Referenced by GetCommands().

◆ HandlePInfoCommand()

static bool misc_commandscript::HandlePInfoCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
2081 {
2082 if (!target)
2083 {
2084 target = PlayerIdentifier::FromTargetOrSelf(handler);
2085 }
2086
2087 if (!target)
2088 {
2089 return false;
2090 }
2091
2092 Player* playerTarget = target->GetConnectedPlayer();
2093
2094 CharacterDatabasePreparedStatement* stmt = nullptr;
2095 LoginDatabasePreparedStatement* loginStmt = nullptr;
2096
2097 // Account data print variables
2098 std::string userName = handler->GetAcoreString(LANG_ERROR);
2099 ObjectGuid::LowType lowguid = target->GetGUID().GetCounter();
2100 uint32 accId = 0;
2101 std::string eMail = handler->GetAcoreString(LANG_ERROR);
2102 std::string regMail = handler->GetAcoreString(LANG_ERROR);
2103 uint32 security = 0;
2104 std::string lastIp = handler->GetAcoreString(LANG_ERROR);
2105 uint8 locked = 0;
2106 std::string lastLogin = handler->GetAcoreString(LANG_ERROR);
2107 uint32 failedLogins = 0;
2108 uint32 latency = 0;
2109 std::string OS = handler->GetAcoreString(LANG_UNKNOWN);
2110
2111 // Mute data print variables
2112 int64 muteTime = -1;
2113 std::string muteReason = handler->GetAcoreString(LANG_NO_REASON);
2114 std::string muteBy = handler->GetAcoreString(LANG_UNKNOWN);
2115
2116 // Ban data print variables
2117 int64 banTime = -1;
2118 std::string banType = handler->GetAcoreString(LANG_UNKNOWN);
2119 std::string banReason = handler->GetAcoreString(LANG_NO_REASON);
2120 std::string bannedBy = handler->GetAcoreString(LANG_UNKNOWN);
2121
2122 // Character data print variables
2123 uint8 raceid, classid = 0; //RACE_NONE, CLASS_NONE
2124 std::string raceStr, classStr = handler->GetAcoreString(LANG_UNKNOWN);
2125 uint8 gender = 0;
2126 int8 locale = handler->GetSessionDbcLocale();
2127 uint32 totalPlayerTime = 0;
2128 uint8 level = 0;
2129 std::string alive = handler->GetAcoreString(LANG_ERROR);
2130 uint32 money = 0;
2131 uint32 xp = 0;
2132 uint32 xptotal = 0;
2133
2134 // Position data print
2135 uint32 mapId;
2136 uint32 areaId;
2137 uint32 phase = 0;
2138 std::string areaName = "";
2139 std::string zoneName = "";
2140
2141 // Guild data print variables defined so that they exist, but are not necessarily used
2142 uint32 guildId = 0;
2143 uint8 guildRankId = 0;
2144 std::string guildName;
2145 std::string guildRank;
2146 std::string note;
2147 std::string officeNote;
2148
2149 // get additional information from Player object
2150 if (playerTarget)
2151 {
2152 // check online security
2153 if (handler->HasLowerSecurity(playerTarget))
2154 {
2155 return false;
2156 }
2157
2158 accId = playerTarget->GetSession()->GetAccountId();
2159 money = playerTarget->GetMoney();
2160 totalPlayerTime = playerTarget->GetTotalPlayedTime();
2161 level = playerTarget->GetLevel();
2162 latency = playerTarget->GetSession()->GetLatency();
2163 raceid = playerTarget->getRace();
2164 classid = playerTarget->getClass();
2165 muteTime = playerTarget->GetSession()->m_muteTime;
2166 mapId = playerTarget->GetMapId();
2167 areaId = playerTarget->GetAreaId();
2168 alive = playerTarget->IsAlive() ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO);
2169 gender = playerTarget->getGender();
2170 phase = playerTarget->GetPhaseMask();
2171 }
2172 // get additional information from DB
2173 else
2174 {
2175 // check offline security
2176 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
2177 {
2178 return false;
2179 }
2180
2181 // Query informations from the DB
2182 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
2183 stmt->SetData(0, lowguid);
2184 PreparedQueryResult charInfoResult = CharacterDatabase.Query(stmt);
2185
2186 if (!charInfoResult)
2187 {
2188 return false;
2189 }
2190
2191 Field* fields = charInfoResult->Fetch();
2192 totalPlayerTime = fields[0].Get<uint32>();
2193 level = fields[1].Get<uint8>();
2194 money = fields[2].Get<uint32>();
2195 accId = fields[3].Get<uint32>();
2196 raceid = fields[4].Get<uint8>();
2197 classid = fields[5].Get<uint8>();
2198 mapId = fields[6].Get<uint16>();
2199 areaId = fields[7].Get<uint16>();
2200 gender = fields[8].Get<uint8>();
2201 uint32 health = fields[9].Get<uint32>();
2202 uint32 playerFlags = fields[10].Get<uint32>();
2203
2204 if (!health || playerFlags & PLAYER_FLAGS_GHOST)
2205 {
2206 alive = handler->GetAcoreString(LANG_NO);
2207 }
2208 else
2209 {
2210 alive = handler->GetAcoreString(LANG_YES);
2211 }
2212 }
2213
2214 // Query the prepared statement for login data
2215 loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
2216 loginStmt->SetData(0, int32(realm.Id.Realm));
2217 loginStmt->SetData(1, accId);
2218
2219 PreparedQueryResult accInfoResult = LoginDatabase.Query(loginStmt);
2220 if (accInfoResult)
2221 {
2222 Field* fields = accInfoResult->Fetch();
2223 userName = fields[0].Get<std::string>();
2224 security = fields[1].Get<uint8>();
2225
2226 // Only fetch these fields if commander has sufficient rights)
2227 if (!handler->GetSession() || handler->GetSession()->GetSecurity() >= AccountTypes(security))
2228 {
2229 eMail = fields[2].Get<std::string>();
2230 regMail = fields[3].Get<std::string>();
2231 lastIp = fields[4].Get<std::string>();
2232 lastLogin = fields[5].Get<std::string>();
2233
2234 if (IpLocationRecord const* location = sIPLocation->GetLocationRecord(lastIp))
2235 {
2236 lastIp.append(" (");
2237 lastIp.append(location->CountryName);
2238 lastIp.append(")");
2239 }
2240 }
2241 else
2242 {
2243 eMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2244 regMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2245 lastIp = handler->GetAcoreString(LANG_UNAUTHORIZED);
2246 lastLogin = handler->GetAcoreString(LANG_UNAUTHORIZED);
2247 }
2248
2249 muteTime = fields[6].Get<uint64>();
2250 muteReason = fields[7].Get<std::string>();
2251 muteBy = fields[8].Get<std::string>();
2252 failedLogins = fields[9].Get<uint32>();
2253 locked = fields[10].Get<uint8>();
2254 OS = fields[11].Get<std::string>();
2255 }
2256
2257 // Creates a chat link to the character. Returns nameLink
2258 std::string nameLink = handler->playerLink(target->GetName());
2259
2260 // Returns banType, banTime, bannedBy, banreason
2261 LoginDatabasePreparedStatement* banQuery = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO_BANS);
2262 banQuery->SetData(0, accId);
2263
2264 PreparedQueryResult accBannedResult = LoginDatabase.Query(banQuery);
2265 if (!accBannedResult)
2266 {
2267 banType = handler->GetAcoreString(LANG_CHARACTER);
2268 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_BANS);
2269 stmt->SetData(0, lowguid);
2270 accBannedResult = CharacterDatabase.Query(stmt);
2271 }
2272
2273 if (accBannedResult)
2274 {
2275 Field* fields = accBannedResult->Fetch();
2276 banTime = int64(fields[1].Get<uint64>() ? 0 : fields[0].Get<uint32>());
2277 bannedBy = fields[2].Get<std::string>();
2278 banReason = fields[3].Get<std::string>();
2279 }
2280
2281 // Can be used to query data from World database
2282 WorldDatabasePreparedStatement* xpQuery = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
2283 xpQuery->SetData(0, level);
2284
2285 PreparedQueryResult xpResult = WorldDatabase.Query(xpQuery);
2286 if (xpResult)
2287 {
2288 Field* fields = xpResult->Fetch();
2289 xptotal = fields[0].Get<uint32>();
2290 }
2291
2292 // Can be used to query data from Characters database
2293 CharacterDatabasePreparedStatement* charXpQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
2294 charXpQuery->SetData(0, lowguid);
2295
2296 PreparedQueryResult charXpResult = CharacterDatabase.Query(charXpQuery);
2297 if (charXpResult)
2298 {
2299 Field* fields = charXpResult->Fetch();
2300 xp = fields[0].Get<uint32>();
2301 ObjectGuid::LowType gguid = fields[1].Get<uint32>();
2302
2303 if (gguid != 0)
2304 {
2306 guildQuery->SetData(0, lowguid);
2307
2308 PreparedQueryResult guildInfoResult = CharacterDatabase.Query(guildQuery);
2309 if (guildInfoResult)
2310 {
2311 Field* guildInfoFields = guildInfoResult->Fetch();
2312 guildId = guildInfoFields[0].Get<uint32>();
2313 guildName = guildInfoFields[1].Get<std::string>();
2314 guildRank = guildInfoFields[2].Get<std::string>();
2315 note = guildInfoFields[3].Get<std::string>();
2316 officeNote = guildInfoFields[4].Get<std::string>();
2317 }
2318 }
2319 }
2320
2321 // Initiate output
2322 // Output I. LANG_PINFO_PLAYER
2323 handler->PSendSysMessage(LANG_PINFO_PLAYER, playerTarget ? "" : handler->GetAcoreString(LANG_OFFLINE), nameLink, target->GetGUID().ToString());
2324
2325 // Output II. LANG_PINFO_GM_ACTIVE if character is gamemaster
2326 if (playerTarget && playerTarget->IsGameMaster())
2327 {
2329 }
2330
2331 // Output III. LANG_PINFO_BANNED if ban exists and is applied
2332 if (banTime >= 0)
2333 {
2334 handler->PSendSysMessage(LANG_PINFO_BANNED, banType, banReason, banTime > 0 ? secsToTimeString(banTime - GameTime::GetGameTime().count(), true) : handler->GetAcoreString(LANG_PERMANENTLY), bannedBy);
2335 }
2336
2337 // Output IV. LANG_PINFO_MUTED if mute is applied
2338 if (muteTime > 0)
2339 {
2340 handler->PSendSysMessage(LANG_PINFO_MUTED, muteReason, secsToTimeString(muteTime - GameTime::GetGameTime().count(), true), muteBy);
2341 }
2342
2343 // Output V. LANG_PINFO_ACC_ACCOUNT
2344 handler->PSendSysMessage(LANG_PINFO_ACC_ACCOUNT, userName, accId, security);
2345
2346 if (playerTarget)
2347 {
2348 uint32 accountFlags = playerTarget->GetSession()->GetAccountFlags();
2350 for (uint8 i = 0; i < MAX_ACCOUNT_FLAG; i++)
2351 if (accountFlags & (uint32(1) << i))
2353 }
2354
2355 // Output VI. LANG_PINFO_ACC_LASTLOGIN
2356 handler->PSendSysMessage(LANG_PINFO_ACC_LASTLOGIN, lastLogin, failedLogins);
2357
2358 // Output VII. LANG_PINFO_ACC_OS
2359 handler->PSendSysMessage(LANG_PINFO_ACC_OS, OS, latency);
2360
2361 // Output VIII. LANG_PINFO_ACC_REGMAILS
2362 handler->PSendSysMessage(LANG_PINFO_ACC_REGMAILS, regMail, eMail);
2363
2364 // Output IX. LANG_PINFO_ACC_IP
2365 handler->PSendSysMessage(LANG_PINFO_ACC_IP, lastIp, locked ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO));
2366
2367 // Output X. LANG_PINFO_CHR_LEVEL
2368 if (level != sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
2369 {
2370 handler->PSendSysMessage(LANG_PINFO_CHR_LEVEL_LOW, level, xp, xptotal, (xptotal - xp));
2371 }
2372 else
2373 {
2375 }
2376
2377 // Output XI. LANG_PINFO_CHR_RACE
2378 switch (raceid)
2379 {
2380 case RACE_HUMAN:
2381 raceStr = "Human";
2382 break;
2383 case RACE_ORC:
2384 raceStr = "Orc";
2385 break;
2386 case RACE_DWARF:
2387 raceStr = "Dwarf";
2388 break;
2389 case RACE_NIGHTELF:
2390 raceStr = "Night Elf";
2391 break;
2392 case RACE_UNDEAD_PLAYER:
2393 raceStr = "Undead";
2394 break;
2395 case RACE_TAUREN:
2396 raceStr = "Tauren";
2397 break;
2398 case RACE_GNOME:
2399 raceStr = "Gnome";
2400 break;
2401 case RACE_TROLL:
2402 raceStr = "Troll";
2403 break;
2404 case RACE_BLOODELF:
2405 raceStr = "Blood Elf";
2406 break;
2407 case RACE_DRAENEI:
2408 raceStr = "Draenei";
2409 break;
2410 }
2411
2412 switch (classid)
2413 {
2414 case CLASS_WARRIOR:
2415 classStr = "Warrior";
2416 break;
2417 case CLASS_PALADIN:
2418 classStr = "Paladin";
2419 break;
2420 case CLASS_HUNTER:
2421 classStr = "Hunter";
2422 break;
2423 case CLASS_ROGUE:
2424 classStr = "Rogue";
2425 break;
2426 case CLASS_PRIEST:
2427 classStr = "Priest";
2428 break;
2429 case CLASS_DEATH_KNIGHT:
2430 classStr = "Death Knight";
2431 break;
2432 case CLASS_SHAMAN:
2433 classStr = "Shaman";
2434 break;
2435 case CLASS_MAGE:
2436 classStr = "Mage";
2437 break;
2438 case CLASS_WARLOCK:
2439 classStr = "Warlock";
2440 break;
2441 case CLASS_DRUID:
2442 classStr = "Druid";
2443 break;
2444 }
2445
2446 handler->PSendSysMessage(LANG_PINFO_CHR_RACE, (gender == 0 ? handler->GetAcoreString(LANG_CHARACTER_GENDER_MALE) : handler->GetAcoreString(LANG_CHARACTER_GENDER_FEMALE)), raceStr, classStr);
2447
2448 // Output XII. LANG_PINFO_CHR_ALIVE
2449 handler->PSendSysMessage(LANG_PINFO_CHR_ALIVE, alive);
2450
2451 // Output XIII. LANG_PINFO_CHR_PHASE if player is not in GM mode (GM is in every phase)
2452 if (playerTarget && !playerTarget->IsGameMaster()) // IsInWorld() returns false on loadingscreen, so it's more
2453 {
2454 handler->PSendSysMessage(LANG_PINFO_CHR_PHASE, phase); // precise than just target (safer ?).
2455 }
2456
2457 // However, as we usually just require a target here, we use target instead.
2458 // Output XIV. LANG_PINFO_CHR_MONEY
2459 uint32 gold = money / GOLD;
2460 uint32 silv = (money % GOLD) / SILVER;
2461 uint32 copp = (money % GOLD) % SILVER;
2462 handler->PSendSysMessage(LANG_PINFO_CHR_MONEY, gold, silv, copp);
2463
2464 // Position data
2465 MapEntry const* map = sMapStore.LookupEntry(mapId);
2466 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);
2467
2468 if (area)
2469 {
2470 zoneName = area->area_name[locale];
2471
2472 AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->zone);
2473 if (zone)
2474 {
2475 areaName = zoneName;
2476 zoneName = zone->area_name[locale];
2477 }
2478 }
2479
2480 if (zoneName.empty())
2481 zoneName = handler->GetAcoreString(LANG_UNKNOWN);
2482
2483 if (!areaName.empty())
2484 handler->PSendSysMessage(LANG_PINFO_CHR_MAP_WITH_AREA, map->name[locale], zoneName, areaName);
2485 else
2486 handler->PSendSysMessage(LANG_PINFO_CHR_MAP, map->name[locale], zoneName);
2487
2488 // Output XVII. - XVIX. if they are not empty
2489 if (!guildName.empty())
2490 {
2491 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName, guildId);
2492 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank, uint32(guildRankId));
2493
2494 if (!note.empty())
2495 {
2497 }
2498
2499 if (!officeNote.empty())
2500 {
2501 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_ONOTE, officeNote);
2502 }
2503 }
2504
2505 // Output XX. LANG_PINFO_CHR_PLAYEDTIME
2506 handler->PSendSysMessage(LANG_PINFO_CHR_PLAYEDTIME, (secsToTimeString(totalPlayerTime, true)));
2507
2508 // Output XXI. LANG_PINFO_CHR_ONLINETIME (only for online players)
2509 if (playerTarget)
2510 {
2511 uint32 onlineTime = uint32(GameTime::GetGameTime().count() - playerTarget->m_logintime);
2512 handler->PSendSysMessage(LANG_PINFO_CHR_ONLINETIME, secsToTimeString(onlineTime, true));
2513 }
2514
2515 // Mail Data - an own query, because it may or may not be useful.
2516 // SQL: "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?"
2518 mailQuery->SetData(0, lowguid);
2519
2520 PreparedQueryResult mailInfoResult = CharacterDatabase.Query(mailQuery);
2521 if (mailInfoResult)
2522 {
2523 Field* fields = mailInfoResult->Fetch();
2524 uint32 readmail = uint32(fields[0].Get<double>());
2525 uint32 totalmail = uint32(fields[1].Get<uint64>());
2526
2527 // Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given
2528 if (totalmail >= 1)
2529 {
2530 handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, readmail, totalmail);
2531 }
2532 }
2533
2534 return true;
2535 }
@ CHAR_SEL_PINFO_XP
Definition CharacterDatabase.h:343
@ CHAR_SEL_GUILD_MEMBER_EXTENDED
Definition CharacterDatabase.h:147
@ CHAR_SEL_CHAR_PINFO
Definition CharacterDatabase.h:342
@ CHAR_SEL_PINFO_MAILS
Definition CharacterDatabase.h:344
@ CHAR_SEL_PINFO_BANS
Definition CharacterDatabase.h:345
AccountFlagName const accountFlagNames[MAX_ACCOUNT_FLAG]
Definition Common.cpp:33
#define MAX_ACCOUNT_FLAG
Definition Common.h:64
AccountTypes
Definition Common.h:56
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
std::int8_t int8
Definition Define.h:105
std::uint64_t uint64
Definition Define.h:106
std::uint16_t uint16
Definition Define.h:108
#define sIPLocation
Definition IPLocation.h:49
@ LANG_YES
Definition Language.h:460
@ LANG_CHARACTER_GENDER_FEMALE
Definition Language.h:824
@ LANG_PINFO_CHR_GUILD_NOTE
Definition Language.h:813
@ LANG_PINFO_CHR_ALIVE
Definition Language.h:807
@ LANG_PINFO_ACC_LASTLOGIN
Definition Language.h:801
@ LANG_CHARACTER
Definition Language.h:1102
@ LANG_UNKNOWN
Definition Language.h:77
@ LANG_PINFO_CHR_PHASE
Definition Language.h:808
@ LANG_ERROR
Definition Language.h:78
@ LANG_PERMANENTLY
Definition Language.h:1103
@ LANG_OFFLINE
Definition Language.h:69
@ LANG_PINFO_CHR_LEVEL_LOW
Definition Language.h:805
@ LANG_PINFO_CHR_PLAYEDTIME
Definition Language.h:815
@ LANG_UNAUTHORIZED
Definition Language.h:819
@ LANG_SUBCMDS_LIST_ENTRY
Definition Language.h:233
@ LANG_PINFO_CHR_RACE
Definition Language.h:806
@ LANG_PINFO_CHR_MAP_WITH_AREA
Definition Language.h:820
@ LANG_PINFO_PLAYER
Definition Language.h:796
@ LANG_PINFO_CHR_ONLINETIME
Definition Language.h:821
@ LANG_PINFO_ACC_OS
Definition Language.h:802
@ LANG_CHARACTER_GENDER_MALE
Definition Language.h:823
@ LANG_PINFO_CHR_MONEY
Definition Language.h:809
@ LANG_PINFO_CHR_LEVEL_HIGH
Definition Language.h:817
@ LANG_NO
Definition Language.h:461
@ LANG_PINFO_CHR_MAP
Definition Language.h:810
@ LANG_PINFO_ACC_IP
Definition Language.h:804
@ LANG_PINFO_BANNED
Definition Language.h:798
@ LANG_PINFO_CHR_GUILD_RANK
Definition Language.h:812
@ LANG_PINFO_ACC_ACCOUNT
Definition Language.h:800
@ LANG_PINFO_ACC_REGMAILS
Definition Language.h:803
@ LANG_PINFO_GM_ACTIVE
Definition Language.h:797
@ LANG_PINFO_CHR_MAILS
Definition Language.h:816
@ LANG_PINFO_CHR_GUILD
Definition Language.h:811
@ LANG_ACCOUNT_FLAGS_PINFO
Definition Language.h:224
@ LANG_PINFO_CHR_GUILD_ONOTE
Definition Language.h:814
@ LANG_PINFO_MUTED
Definition Language.h:799
@ LOGIN_SEL_PINFO
Definition LoginDatabase.h:91
@ LOGIN_SEL_PINFO_BANS
Definition LoginDatabase.h:92
@ PLAYER_FLAGS_GHOST
Definition Player.h:463
@ CLASS_HUNTER
Definition SharedDefines.h:128
@ CLASS_DRUID
Definition SharedDefines.h:136
@ CLASS_SHAMAN
Definition SharedDefines.h:132
@ CLASS_PRIEST
Definition SharedDefines.h:130
@ CLASS_WARRIOR
Definition SharedDefines.h:126
@ CLASS_WARLOCK
Definition SharedDefines.h:134
@ CLASS_MAGE
Definition SharedDefines.h:133
@ CLASS_DEATH_KNIGHT
Definition SharedDefines.h:131
@ CLASS_PALADIN
Definition SharedDefines.h:127
@ CLASS_ROGUE
Definition SharedDefines.h:129
@ SILVER
Definition SharedDefines.h:240
@ GOLD
Definition SharedDefines.h:241
@ RACE_TROLL
Definition SharedDefines.h:78
@ RACE_UNDEAD_PLAYER
Definition SharedDefines.h:75
@ RACE_ORC
Definition SharedDefines.h:72
@ RACE_DRAENEI
Definition SharedDefines.h:81
@ RACE_NIGHTELF
Definition SharedDefines.h:74
@ RACE_BLOODELF
Definition SharedDefines.h:80
@ RACE_DWARF
Definition SharedDefines.h:73
@ RACE_GNOME
Definition SharedDefines.h:77
@ RACE_HUMAN
Definition SharedDefines.h:71
@ RACE_TAUREN
Definition SharedDefines.h:76
@ CONFIG_MAX_PLAYER_LEVEL
Definition WorldConfig.h:195
@ WORLD_SEL_REQ_XP
Definition WorldDatabase.h:118
uint32 LowType
Definition ObjectGuid.h:125
uint32 GetTotalPlayedTime()
Definition Player.h:1210
uint32 GetMoney() const
Definition Player.h:1631
time_t m_logintime
Definition Player.h:1207
uint8 getGender() const
Definition Unit.h:854
uint8 getClass() const
Definition Unit.h:849
uint8 getRace(bool original=false) const
Definition Unit.cpp:16768
uint8 GetLevel() const
Definition Unit.h:1117
uint32 GetPhaseMask() const
Definition Object.h:523
uint32 GetAreaId() const
Definition Object.cpp:3186
uint32 GetAccountFlags() const
Definition WorldSession.h:437
uint32 GetLatency() const
Definition WorldSession.h:652
char const * area_name[16]
Definition DBCStructure.h:527
Definition IPLocation.h:23

References accountFlagNames, AreaTableEntry::area_name, CHAR_SEL_CHAR_PINFO, CHAR_SEL_GUILD_MEMBER_EXTENDED, CHAR_SEL_PINFO_BANS, CHAR_SEL_PINFO_MAILS, CHAR_SEL_PINFO_XP, CharacterDatabase, CLASS_DEATH_KNIGHT, CLASS_DRUID, CLASS_HUNTER, CLASS_MAGE, CLASS_PALADIN, CLASS_PRIEST, CLASS_ROGUE, CLASS_SHAMAN, CLASS_WARLOCK, CLASS_WARRIOR, CONFIG_MAX_PLAYER_LEVEL, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), AccountFlagName::full, Field::Get(), WorldSession::GetAccountFlags(), WorldSession::GetAccountId(), ChatHandler::GetAcoreString(), WorldObject::GetAreaId(), Unit::getClass(), GameTime::GetGameTime(), Unit::getGender(), WorldSession::GetLatency(), Unit::GetLevel(), WorldLocation::GetMapId(), Player::GetMoney(), WorldObject::GetPhaseMask(), Unit::getRace(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::GetSession(), ChatHandler::GetSessionDbcLocale(), Player::GetTotalPlayedTime(), GOLD, ChatHandler::HasLowerSecurity(), Realm::Id, Unit::IsAlive(), Player::IsGameMaster(), LANG_ACCOUNT_FLAGS_PINFO, LANG_CHARACTER, LANG_CHARACTER_GENDER_FEMALE, LANG_CHARACTER_GENDER_MALE, LANG_ERROR, LANG_NO, LANG_NO_REASON, LANG_OFFLINE, LANG_PERMANENTLY, LANG_PINFO_ACC_ACCOUNT, LANG_PINFO_ACC_IP, LANG_PINFO_ACC_LASTLOGIN, LANG_PINFO_ACC_OS, LANG_PINFO_ACC_REGMAILS, LANG_PINFO_BANNED, LANG_PINFO_CHR_ALIVE, LANG_PINFO_CHR_GUILD, LANG_PINFO_CHR_GUILD_NOTE, LANG_PINFO_CHR_GUILD_ONOTE, LANG_PINFO_CHR_GUILD_RANK, LANG_PINFO_CHR_LEVEL_HIGH, LANG_PINFO_CHR_LEVEL_LOW, LANG_PINFO_CHR_MAILS, LANG_PINFO_CHR_MAP, LANG_PINFO_CHR_MAP_WITH_AREA, LANG_PINFO_CHR_MONEY, LANG_PINFO_CHR_ONLINETIME, LANG_PINFO_CHR_PHASE, LANG_PINFO_CHR_PLAYEDTIME, LANG_PINFO_CHR_RACE, LANG_PINFO_GM_ACTIVE, LANG_PINFO_MUTED, LANG_PINFO_PLAYER, LANG_SUBCMDS_LIST_ENTRY, LANG_UNAUTHORIZED, LANG_UNKNOWN, LANG_YES, LOGIN_SEL_PINFO, LOGIN_SEL_PINFO_BANS, LoginDatabase, Player::m_logintime, WorldSession::m_muteTime, MAX_ACCOUNT_FLAG, MapEntry::name, PLAYER_FLAGS_GHOST, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), RACE_BLOODELF, RACE_DRAENEI, RACE_DWARF, RACE_GNOME, RACE_HUMAN, RACE_NIGHTELF, RACE_ORC, RACE_TAUREN, RACE_TROLL, RACE_UNDEAD_PLAYER, realm, RealmHandle::Realm, sAreaTableStore, secsToTimeString(), PreparedStatementBase::SetData(), SILVER, sIPLocation, sMapStore, sWorld, WORLD_SEL_REQ_XP, WorldDatabase, and AreaTableEntry::zone.

Referenced by GetCommands().

◆ HandlePlayAllCommand()

static bool misc_commandscript::HandlePlayAllCommand ( ChatHandler *  handler,
uint32  soundId 
)
inlinestatic
3390 {
3391 if (!sSoundEntriesStore.LookupEntry(soundId))
3392 {
3393 handler->SendErrorMessage(LANG_SOUND_NOT_EXIST, soundId);
3394 return false;
3395 }
3396
3397 sWorldSessionMgr->SendGlobalMessage(WorldPackets::Misc::Playsound(soundId).Write());
3398
3400 return true;
3401 }
DBCStorage< SoundEntriesEntry > sSoundEntriesStore(SoundEntriesfmt)
@ LANG_COMMAND_PLAYED_TO_ALL
Definition Language.h:1070
@ LANG_SOUND_NOT_EXIST
Definition Language.h:214
Definition MiscPackets.h:85

References LANG_COMMAND_PLAYED_TO_ALL, LANG_SOUND_NOT_EXIST, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sSoundEntriesStore, and sWorldSessionMgr.

Referenced by GetCommands().

◆ HandlePossessCommand()

static bool misc_commandscript::HandlePossessCommand ( ChatHandler *  handler)
inlinestatic
3404 {
3405 Unit* unit = handler->getSelectedUnit();
3406 if (!unit)
3407 {
3408 return false;
3409 }
3410
3411 handler->GetSession()->GetPlayer()->CastSpell(unit, MAP_OUTLAND, true);
3412 return true;
3413 }
@ MAP_OUTLAND
Definition AreaDefines.h:219

References Unit::CastSpell(), WorldSession::GetPlayer(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), and MAP_OUTLAND.

Referenced by GetCommands().

◆ HandleRecallCommand()

static bool misc_commandscript::HandleRecallCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
1335 {
1336 if (!target)
1337 {
1338 target = PlayerIdentifier::FromTargetOrSelf(handler);
1339 }
1340
1341 if (!target || !target->IsConnected())
1342 {
1343 return false;
1344 }
1345
1346 auto targetPlayer = target->GetConnectedPlayer();
1347
1348 // check online security
1349 if (handler->HasLowerSecurity(targetPlayer))
1350 {
1351 return false;
1352 }
1353
1354 if (targetPlayer->IsBeingTeleported())
1355 {
1356 handler->SendErrorMessage(LANG_IS_TELEPORTED, handler->playerLink(target->GetName()));
1357 return false;
1358 }
1359
1360 // stop flight if need
1361 if (targetPlayer->IsInFlight())
1362 {
1363 targetPlayer->GetMotionMaster()->MovementExpired();
1364 targetPlayer->CleanupAfterTaxiFlight();
1365 }
1366
1367 targetPlayer->TeleportTo(targetPlayer->m_recallMap, targetPlayer->m_recallX, targetPlayer->m_recallY, targetPlayer->m_recallZ, targetPlayer->m_recallO);
1368 return true;
1369 }

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), ChatHandler::HasLowerSecurity(), LANG_IS_TELEPORTED, ChatHandler::playerLink(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleRespawnAllCommand()

static bool misc_commandscript::HandleRespawnAllCommand ( ChatHandler *  handler)
inlinestatic
2817 {
2818 Player* player = handler->GetSession()->GetPlayer();
2819
2820 // Phase 1: respawn creatures/GOs that still have corpses in the grid
2821 Acore::RespawnDo u_do;
2822 Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
2823 Cell::VisitObjects(player, worker, player->GetGridActivationRange());
2824
2825 // Phase 2: force-respawn creatures/GOs that were fully removed (non-compat mode)
2826 // by setting their respawn times to now so ProcessRespawns() picks them up
2827 Map* map = player->GetMap();
2828 uint32 gridId = Acore::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId();
2829 time_t now = GameTime::GetGameTime().count();
2830
2831 std::vector<ObjectGuid::LowType> creaturesToRespawn;
2832 for (auto const& pair : map->GetCreatureRespawnTimes())
2833 {
2834 CreatureData const* data = sObjectMgr->GetCreatureData(pair.first);
2835 if (!data || Acore::ComputeGridCoord(data->posX, data->posY).GetId() != gridId)
2836 continue;
2837
2838 // Skip pooled spawns — Phase 1 already triggered pool rotation via
2839 // Creature::Respawn() -> PoolMgr::UpdatePool(). Forcing a respawn time
2840 // here would cause ProcessRespawns() to call UpdatePool() again,
2841 // spawning duplicates beyond the pool's max_limit.
2842 if (sPoolMgr->IsPartOfAPool<Creature>(pair.first))
2843 continue;
2844
2845 creaturesToRespawn.push_back(pair.first);
2846 }
2847 for (ObjectGuid::LowType spawnId : creaturesToRespawn)
2848 map->SaveCreatureRespawnTime(spawnId, now);
2849
2850 std::vector<ObjectGuid::LowType> goesToRespawn;
2851 for (auto const& pair : map->GetGORespawnTimes())
2852 {
2853 GameObjectData const* data = sObjectMgr->GetGameObjectData(pair.first);
2854 if (!data || Acore::ComputeGridCoord(data->posX, data->posY).GetId() != gridId)
2855 continue;
2856
2857 // Skip pooled spawns — same reason as creatures above.
2858 if (sPoolMgr->IsPartOfAPool<GameObject>(pair.first))
2859 continue;
2860
2861 goesToRespawn.push_back(pair.first);
2862 }
2863 for (ObjectGuid::LowType spawnId : goesToRespawn)
2864 map->SaveGORespawnTime(spawnId, now);
2865
2866 return true;
2867 }
#define sPoolMgr
Definition PoolMgr.h:216
Definition GridNotifiers.h:668
float GetGridActivationRange() const
Definition Object.cpp:1688
GridCoord ComputeGridCoord(float x, float y)
Definition GridDefines.h:185
Definition GridNotifiers.h:283
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165
uint32 GetId() const
Definition GridDefines.h:150
Definition CreatureData.h:370
Definition GameObjectData.h:715
float posX
Definition SpawnData.h:71
float posY
Definition SpawnData.h:72

References Acore::ComputeGridCoord(), Map::GetCreatureRespawnTimes(), GameTime::GetGameTime(), Map::GetGORespawnTimes(), WorldObject::GetGridActivationRange(), CoordPair< LIMIT >::GetId(), WorldObject::GetMap(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), ChatHandler::GetSession(), SpawnData::posX, SpawnData::posY, Map::SaveCreatureRespawnTime(), Map::SaveGORespawnTime(), sObjectMgr, sPoolMgr, and Cell::VisitObjects().

Referenced by GetCommands().

◆ HandleRespawnCommand()

static bool misc_commandscript::HandleRespawnCommand ( ChatHandler *  handler)
inlinestatic
2793 {
2794 Player* player = handler->GetSession()->GetPlayer();
2795
2796 Unit* target = handler->getSelectedUnit();
2797 if (player->GetTarget() && target)
2798 {
2799 if (!target->IsCreature() || target->IsPet())
2800 {
2802 return false;
2803 }
2804
2805 if (target->isDead())
2806 {
2807 target->ToCreature()->Respawn(true);
2808 }
2809 return true;
2810 }
2811
2813 return false;
2814 }
void Respawn(bool force=false)
Definition Creature.cpp:2043
bool IsPet() const
Definition Unit.h:803
bool isDead() const
Definition Unit.h:1814

References WorldSession::GetPlayer(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), Unit::GetTarget(), Object::IsCreature(), Unit::isDead(), Unit::IsPet(), LANG_SELECT_CREATURE, Creature::Respawn(), ChatHandler::SendErrorMessage(), and Object::ToCreature().

Referenced by GetCommands().

◆ HandleRespawnCreatureByEntryCommand()

static bool misc_commandscript::HandleRespawnCreatureByEntryCommand ( ChatHandler *  handler,
uint32  entry,
Optional< uint32 >  mapIdArg,
Optional< uint32 >  instanceIdArg 
)
inlinestatic
2650 {
2651 if (!sObjectMgr->GetCreatureTemplate(entry))
2652 {
2654 return false;
2655 }
2656
2657 Map* map = nullptr;
2658 if (handler->GetSession())
2659 {
2660 // In-game: always use the player's current map
2661 map = handler->GetSession()->GetPlayer()->GetMap();
2662 }
2663 else
2664 {
2665 // Console: mapId required, instanceId optional
2666 if (!mapIdArg)
2667 {
2669 return false;
2670 }
2671 map = sMapMgr->FindMap(*mapIdArg, instanceIdArg.value_or(0));
2672 }
2673
2674 if (!map)
2675 {
2676 handler->PSendSysMessage(LANG_RESPAWN_GUID_MAP_NOT_LOADED, mapIdArg.value_or(0));
2677 return false;
2678 }
2679
2680 uint32 count = 0;
2681
2682 // Phase 1: respawn dead corpses that are still tracked in the spawn-id store.
2683 // Collect first to avoid iterator invalidation caused by Respawn().
2684 std::vector<Creature*> deadCreatures;
2685 for (auto const& [spawnId, creature] : map->GetCreatureBySpawnIdStore())
2686 {
2687 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
2688 if (!data || data->id != entry)
2689 continue;
2690 if (creature->isDead())
2691 deadCreatures.push_back(creature);
2692 }
2693 for (Creature* creature : deadCreatures)
2694 {
2695 creature->Respawn(true);
2696 ++count;
2697 }
2698
2699 // Phase 2: set respawn time to now for fully-removed spawns, skipping pools
2700 std::vector<ObjectGuid::LowType> toRespawn;
2701 for (auto const& [spawnId, respawnTime] : map->GetCreatureRespawnTimes())
2702 {
2703 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
2704 if (!data || data->id != entry)
2705 continue;
2706 if (sPoolMgr->IsPartOfAPool<Creature>(spawnId))
2707 continue;
2708 toRespawn.push_back(spawnId);
2709 }
2710 for (ObjectGuid::LowType spawnId : toRespawn)
2711 {
2712 map->ForceCreatureRespawn(spawnId);
2713 ++count;
2714 }
2715
2717 return true;
2718 }
@ LANG_LIST_RESPAWNS_NO_MAP
Definition Language.h:1535
@ LANG_RESPAWN_GUID_MAP_NOT_LOADED
Definition Language.h:1520
@ LANG_RESPAWN_ENTRY_CREATURE_NOT_FOUND
Definition Language.h:1529
@ LANG_RESPAWN_ENTRY_CREATURE_QUEUED
Definition Language.h:1531
#define sMapMgr
Definition MapMgr.h:220
void ForceCreatureRespawn(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2522
uint32 id
Definition CreatureData.h:372

References Map::ForceCreatureRespawn(), Map::GetCreatureBySpawnIdStore(), Map::GetCreatureRespawnTimes(), WorldObject::GetMap(), WorldSession::GetPlayer(), ChatHandler::GetSession(), CreatureData::id, LANG_LIST_RESPAWNS_NO_MAP, LANG_RESPAWN_ENTRY_CREATURE_NOT_FOUND, LANG_RESPAWN_ENTRY_CREATURE_QUEUED, LANG_RESPAWN_GUID_MAP_NOT_LOADED, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), sMapMgr, sObjectMgr, and sPoolMgr.

Referenced by GetCommands().

◆ HandleRespawnCreatureByGuidCommand()

static bool misc_commandscript::HandleRespawnCreatureByGuidCommand ( ChatHandler *  handler,
ObjectGuid::LowType  spawnId 
)
inlinestatic
2538 {
2539 CreatureData const* creData = sObjectMgr->GetCreatureData(spawnId);
2540 if (!creData)
2541 {
2543 return false;
2544 }
2545
2546 Map* map = nullptr;
2547 if (handler->GetSession())
2548 {
2549 Player* player = handler->GetSession()->GetPlayer();
2550 if (player->GetMapId() == creData->mapid)
2551 map = player->GetMap();
2552 }
2553 if (!map)
2554 map = sMapMgr->FindMap(creData->mapid, 0);
2555
2556 if (!map)
2557 {
2559 return true;
2560 }
2561
2562 // First pass: check if any instance is alive
2563 bool isAlive = false;
2564 auto const creBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId);
2565 for (auto itr = creBounds.first; itr != creBounds.second; ++itr)
2566 {
2567 if (itr->second->IsAlive())
2568 {
2569 isAlive = true;
2570 break;
2571 }
2572 }
2573
2574 if (isAlive)
2575 {
2576 handler->PSendSysMessage(LANG_RESPAWN_GUID_CREATURE_ALIVE, spawnId, creData->id);
2577 return true;
2578 }
2579
2580 // Second pass: respawn any dead corpses in the world
2581 for (auto itr = creBounds.first; itr != creBounds.second; ++itr)
2582 {
2583 if (itr->second->isDead())
2584 itr->second->Respawn(true);
2585 }
2586 // Also trigger via respawn time queue for fully-removed spawns
2587 if (map->GetCreatureRespawnTime(spawnId) > 0)
2588 map->ForceCreatureRespawn(spawnId);
2589 handler->PSendSysMessage(LANG_RESPAWN_GUID_CREATURE_QUEUED, spawnId, creData->id);
2590 return true;
2591 }
@ LANG_RESPAWN_GUID_CREATURE_QUEUED
Definition Language.h:1522
@ LANG_RESPAWN_GUID_CREATURE_ALIVE
Definition Language.h:1521
@ LANG_RESPAWN_GUID_CREATURE_NOT_FOUND
Definition Language.h:1519
time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:416
CreatureBySpawnIdContainer & GetCreatureBySpawnIdStore()
Definition Map.h:361
uint16 mapid
Definition SpawnData.h:69

References Map::ForceCreatureRespawn(), Map::GetCreatureBySpawnIdStore(), Map::GetCreatureRespawnTime(), WorldObject::GetMap(), WorldLocation::GetMapId(), WorldSession::GetPlayer(), ChatHandler::GetSession(), CreatureData::id, LANG_RESPAWN_GUID_CREATURE_ALIVE, LANG_RESPAWN_GUID_CREATURE_NOT_FOUND, LANG_RESPAWN_GUID_CREATURE_QUEUED, LANG_RESPAWN_GUID_MAP_NOT_LOADED, SpawnData::mapid, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sMapMgr, and sObjectMgr.

Referenced by GetCommands().

◆ HandleRespawnGameObjectByEntryCommand()

static bool misc_commandscript::HandleRespawnGameObjectByEntryCommand ( ChatHandler *  handler,
uint32  entry,
Optional< uint32 >  mapIdArg,
Optional< uint32 >  instanceIdArg 
)
inlinestatic
2721 {
2722 if (!sObjectMgr->GetGameObjectTemplate(entry))
2723 {
2725 return false;
2726 }
2727
2728 Map* map = nullptr;
2729 if (handler->GetSession())
2730 {
2731 // In-game: always use the player's current map
2732 map = handler->GetSession()->GetPlayer()->GetMap();
2733 }
2734 else
2735 {
2736 // Console: mapId required, instanceId optional
2737 if (!mapIdArg)
2738 {
2740 return false;
2741 }
2742 map = sMapMgr->FindMap(*mapIdArg, instanceIdArg.value_or(0));
2743 }
2744
2745 if (!map)
2746 {
2747 handler->PSendSysMessage(LANG_RESPAWN_GUID_MAP_NOT_LOADED, mapIdArg.value_or(0));
2748 return false;
2749 }
2750
2751 time_t now = GameTime::GetGameTime().count();
2752 uint32 count = 0;
2753
2754 // Phase 1: respawn inactive objects that are still tracked in the spawn-id store.
2755 // Collect first to avoid iterator invalidation caused by Respawn().
2756 std::vector<GameObject*> inactiveGOs;
2757 for (auto const& [spawnId, go] : map->GetGameObjectBySpawnIdStore())
2758 {
2759 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
2760 if (!data || data->id != entry)
2761 continue;
2762 if (!go->isSpawned())
2763 inactiveGOs.push_back(go);
2764 }
2765 for (GameObject* go : inactiveGOs)
2766 {
2767 go->Respawn();
2768 ++count;
2769 }
2770
2771 // Phase 2: set respawn time to now for fully-removed spawns, skipping pools
2772 std::vector<ObjectGuid::LowType> toRespawn;
2773 for (auto const& [spawnId, respawnTime] : map->GetGORespawnTimes())
2774 {
2775 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
2776 if (!data || data->id != entry)
2777 continue;
2778 if (sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
2779 continue;
2780 toRespawn.push_back(spawnId);
2781 }
2782 for (ObjectGuid::LowType spawnId : toRespawn)
2783 {
2784 map->SaveGORespawnTime(spawnId, now);
2785 ++count;
2786 }
2787
2789 return true;
2790 }
@ LANG_RESPAWN_ENTRY_GAMEOBJECT_QUEUED
Definition Language.h:1532
@ LANG_RESPAWN_ENTRY_GAMEOBJECT_NOT_FOUND
Definition Language.h:1530
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition Map.cpp:2529
uint32 id
Definition GameObjectData.h:717

References Map::GetGameObjectBySpawnIdStore(), GameTime::GetGameTime(), Map::GetGORespawnTimes(), WorldObject::GetMap(), WorldSession::GetPlayer(), ChatHandler::GetSession(), GameObjectData::id, LANG_LIST_RESPAWNS_NO_MAP, LANG_RESPAWN_ENTRY_GAMEOBJECT_NOT_FOUND, LANG_RESPAWN_ENTRY_GAMEOBJECT_QUEUED, LANG_RESPAWN_GUID_MAP_NOT_LOADED, ChatHandler::PSendSysMessage(), Map::SaveGORespawnTime(), ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), sMapMgr, sObjectMgr, and sPoolMgr.

Referenced by GetCommands().

◆ HandleRespawnGameObjectByGuidCommand()

static bool misc_commandscript::HandleRespawnGameObjectByGuidCommand ( ChatHandler *  handler,
ObjectGuid::LowType  spawnId 
)
inlinestatic
2594 {
2595 GameObjectData const* goData = sObjectMgr->GetGameObjectData(spawnId);
2596 if (!goData)
2597 {
2599 return false;
2600 }
2601
2602 Map* map = nullptr;
2603 if (handler->GetSession())
2604 {
2605 Player* player = handler->GetSession()->GetPlayer();
2606 if (player->GetMapId() == goData->mapid)
2607 map = player->GetMap();
2608 }
2609 if (!map)
2610 map = sMapMgr->FindMap(goData->mapid, 0);
2611
2612 if (!map)
2613 {
2615 return true;
2616 }
2617
2618 // First pass: check if any instance is already active
2619 bool isActive = false;
2620 auto const goBounds = map->GetGameObjectBySpawnIdStore().equal_range(spawnId);
2621 for (auto itr = goBounds.first; itr != goBounds.second; ++itr)
2622 {
2623 if (itr->second->isSpawned())
2624 {
2625 isActive = true;
2626 break;
2627 }
2628 }
2629
2630 if (isActive)
2631 {
2633 return true;
2634 }
2635
2636 // Second pass: respawn inactive objects in the world
2637 for (auto itr = goBounds.first; itr != goBounds.second; ++itr)
2638 itr->second->Respawn();
2639 // Also trigger via respawn time queue for fully-removed spawns
2640 if (map->GetGORespawnTime(spawnId) > 0)
2641 {
2642 time_t now = GameTime::GetGameTime().count();
2643 map->SaveGORespawnTime(spawnId, now);
2644 }
2646 return true;
2647 }
@ LANG_RESPAWN_GUID_GAMEOBJECT_QUEUED
Definition Language.h:1524
@ LANG_RESPAWN_GUID_GAMEOBJECT_ACTIVE
Definition Language.h:1523
@ LANG_RESPAWN_GUID_GAMEOBJECT_NOT_FOUND
Definition Language.h:1526
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:425
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
Definition Map.h:364
ObjectData const goData[]
Definition instance_violet_hold.cpp:48

References Map::GetGameObjectBySpawnIdStore(), GameTime::GetGameTime(), Map::GetGORespawnTime(), WorldObject::GetMap(), WorldLocation::GetMapId(), WorldSession::GetPlayer(), ChatHandler::GetSession(), goData, LANG_RESPAWN_GUID_GAMEOBJECT_ACTIVE, LANG_RESPAWN_GUID_GAMEOBJECT_NOT_FOUND, LANG_RESPAWN_GUID_GAMEOBJECT_QUEUED, LANG_RESPAWN_GUID_MAP_NOT_LOADED, ChatHandler::PSendSysMessage(), Map::SaveGORespawnTime(), ChatHandler::SendErrorMessage(), sMapMgr, and sObjectMgr.

Referenced by GetCommands().

◆ HandleReviveCommand()

static bool misc_commandscript::HandleReviveCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
1202 {
1203 if (!target)
1204 target = PlayerIdentifier::FromTargetOrSelf(handler);
1205
1206 if (!target)
1207 return false;
1208
1209 if (target->IsConnected())
1210 {
1211 auto targetPlayer = target->GetConnectedPlayer();
1212 targetPlayer->RemoveAurasDueToSpell(27827); // Spirit of Redemption
1213 targetPlayer->ResurrectPlayer(!AccountMgr::IsPlayerAccount(targetPlayer->GetSession()->GetSecurity()) ? 1.0f : 0.5f);
1214 targetPlayer->SpawnCorpseBones();
1215 targetPlayer->SaveToDB(false, false);
1216 }
1217 else
1218 {
1219 CharacterDatabaseTransaction trans(nullptr);
1220 Player::OfflineResurrect(target->GetGUID(), trans);
1221 }
1222
1223 return true;
1224 }
static void OfflineResurrect(ObjectGuid const &guid, CharacterDatabaseTransaction trans)
Definition Player.cpp:4692

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), AccountMgr::IsPlayerAccount(), and Player::OfflineResurrect().

Referenced by GetCommands().

◆ HandleSaveAllCommand()

static bool misc_commandscript::HandleSaveAllCommand ( ChatHandler *  handler)
inlinestatic
1403 {
1406 return true;
1407 }
@ LANG_PLAYERS_SAVED
Definition Language.h:47
void SaveAllPlayers()
Definition ObjectAccessor.cpp:286

References LANG_PLAYERS_SAVED, ObjectAccessor::SaveAllPlayers(), and ChatHandler::SendSysMessage().

Referenced by GetCommands().

◆ HandleSaveCommand()

static bool misc_commandscript::HandleSaveCommand ( ChatHandler *  handler)
inlinestatic
1372 {
1373 Player* player = handler->GetSession()->GetPlayer();
1374
1375 // save GM account without delay and output message
1377 {
1378 if (Player* target = handler->getSelectedPlayer())
1379 {
1380 target->SaveToDB(false, false);
1381 }
1382 else
1383 {
1384 player->SaveToDB(false, false);
1385 }
1386
1388 return true;
1389 }
1390
1391 // save if the player has last been saved over 20 seconds ago
1392 uint32 saveInterval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
1393 if (saveInterval == 0 || (saveInterval > 20 * IN_MILLISECONDS && player->GetSaveTimer() <= saveInterval - 20 * IN_MILLISECONDS))
1394 {
1395 player->SaveToDB(false, false);
1396 }
1397
1398 return true;
1399 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
@ LANG_PLAYER_SAVED
Definition Language.h:46
@ CONFIG_INTERVAL_SAVE
Definition WorldConfig.h:174
void SaveToDB(bool create, bool logout)
Definition PlayerStorage.cpp:7238
uint32 GetSaveTimer() const
Definition Player.h:2406
bool HasPermission(uint32 permissionId)
Definition WorldSession.cpp:1701
@ RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY
Definition RBAC.h:81

References CONFIG_INTERVAL_SAVE, WorldSession::GetPlayer(), Player::GetSaveTimer(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), WorldSession::HasPermission(), IN_MILLISECONDS, LANG_PLAYER_SAVED, rbac::RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY, Player::SaveToDB(), ChatHandler::SendSysMessage(), and sWorld.

Referenced by GetCommands().

◆ HandleSetSkillCommand()

static bool misc_commandscript::HandleSetSkillCommand ( ChatHandler *  handler,
Variant< Hyperlink< skill >, uint32 >  skillId,
int32  level,
Optional< uint16 >  maxPureSkill 
)
inlinestatic
2037 {
2038 uint32 skillID = uint32(skillId);
2039
2040 if (skillID <= 0)
2041 {
2042 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, skillID);
2043 return false;
2044 }
2045
2046 Player* target = handler->getSelectedPlayer();
2047 if (!target)
2048 {
2050 return false;
2051 }
2052
2053 SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skillID);
2054 if (!skillLine)
2055 {
2056 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, uint32(skillID));
2057 return false;
2058 }
2059
2060 bool targetHasSkill = target->GetSkillValue(skillID);
2061
2062 // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes
2063 // the max level of the new profession.
2064 uint16 max = maxPureSkill ? *maxPureSkill : targetHasSkill ? target->GetPureMaxSkillValue(skillID) : uint16(level);
2065
2066 if (level <= 0 || level > max || max <= 0)
2067 {
2068 return false;
2069 }
2070
2071 // If the player has the skill, we get the current skill step. If they don't have the skill, we
2072 // add the skill to the player's book with step 1 (which is the first rank, in most cases something
2073 // like 'Apprentice <skill>'.
2074 target->SetSkill(skillID, targetHasSkill ? target->GetSkillStep(skillID) : 1, level, max);
2075 handler->PSendSysMessage(LANG_SET_SKILL, skillID, skillLine->name[handler->GetSessionDbcLocale()], handler->GetNameLink(target), level, max);
2076 return true;
2077 }
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ LANG_INVALID_SKILL_ID
Definition Language.h:534
@ LANG_SET_SKILL
Definition Language.h:531
uint16 GetSkillValue(uint32 skill) const
Definition Player.cpp:5644
uint16 GetSkillStep(uint16 skill) const
Definition Player.cpp:5632
uint16 GetPureMaxSkillValue(uint32 skill) const
Definition Player.cpp:5679
void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
Definition Player.cpp:5518
Definition DBCStructure.h:1619
char const * name[16]
Definition DBCStructure.h:1623

References ChatHandler::GetNameLink(), Player::GetPureMaxSkillValue(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSessionDbcLocale(), Player::GetSkillStep(), Player::GetSkillValue(), LANG_INVALID_SKILL_ID, LANG_NO_CHAR_SELECTED, LANG_SET_SKILL, SkillLineEntry::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), Player::SetSkill(), and sSkillLineStore.

Referenced by GetCommands().

◆ HandleShowAreaCommand()

static bool misc_commandscript::HandleShowAreaCommand ( ChatHandler *  handler,
uint32  areaID 
)
inlinestatic
1663 {
1664 Player* playerTarget = handler->getSelectedPlayer();
1665 if (!playerTarget)
1666 {
1668 return false;
1669 }
1670
1671 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1672 if (!area)
1673 {
1675 return false;
1676 }
1677
1678 int32 offset = area->exploreFlag / 32;
1679 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1680 {
1682 return false;
1683 }
1684
1685 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1686 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1687 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields | val)));
1688
1690 return true;
1691 }
@ LANG_EXPLORE_AREA
Definition Language.h:625

References AreaTableEntry::exploreFlag, ChatHandler::getSelectedPlayer(), Object::GetUInt32Value(), LANG_BAD_VALUE, LANG_EXPLORE_AREA, LANG_NO_CHAR_SELECTED, PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE, sAreaTableStore, ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), and Unit::SetUInt32Value().

Referenced by GetCommands().

◆ HandleSkirmishCommand()

static bool misc_commandscript::HandleSkirmishCommand ( ChatHandler *  handler,
std::vector< std::string_view >  args 
)
inlinestatic
169 {
170 auto tokens = args;
171
172 if (args.empty() || !tokens.size())
173 {
174 handler->SetSentErrorMessage(true);
175 return false;
176 }
177
178 auto tokensItr = tokens.begin();
179
180 std::vector<BattlegroundTypeId> allowedArenas;
181 std::string_view arenasStr = *(tokensItr++);
182
183 auto arenaTokens = Acore::Tokenize(arenasStr, ',', false);
184 for (auto const& arenaName : arenaTokens)
185 {
186 if (arenaName == "all")
187 {
188 if (arenaTokens.size() > 1)
189 {
190 handler->SendErrorMessage("Invalid [arena] specified.");
191 return false;
192 }
193
194 allowedArenas.emplace_back(BATTLEGROUND_NA);
195 allowedArenas.emplace_back(BATTLEGROUND_BE);
196 allowedArenas.emplace_back(BATTLEGROUND_RL);
197 allowedArenas.emplace_back(BATTLEGROUND_DS);
198 allowedArenas.emplace_back(BATTLEGROUND_RV);
199 }
200 else if (arenaName == "NA")
201 {
202 allowedArenas.emplace_back(BATTLEGROUND_NA);
203 }
204 else if (arenaName == "BE")
205 {
206 allowedArenas.emplace_back(BATTLEGROUND_BE);
207 }
208 else if (arenaName == "RL")
209 {
210 allowedArenas.emplace_back(BATTLEGROUND_RL);
211 }
212 else if (arenaName == "DS")
213 {
214 allowedArenas.emplace_back(BATTLEGROUND_DS);
215 }
216 else if (arenaName == "RV")
217 {
218 allowedArenas.emplace_back(BATTLEGROUND_RV);
219 }
220 else
221 {
222 handler->SendErrorMessage("Invalid [arena] specified.");
223 return false;
224 }
225 }
226
227 ASSERT(!allowedArenas.empty());
228 BattlegroundTypeId randomizedArenaBgTypeId = Acore::Containers::SelectRandomContainerElement(allowedArenas);
229
230 uint8 count = 0;
231 if (tokensItr != tokens.end())
232 {
233 std::string_view mode = *(tokensItr++);
234
235 if (mode == "1v1")
236 {
237 count = 2;
238 }
239 else if (mode == "2v2")
240 {
241 count = 4;
242 }
243 else if (mode == "3v3")
244 {
245 count = 6;
246 }
247 else if (mode == "5v5")
248 {
249 count = 10;
250 }
251 }
252
253 if (!count)
254 {
255 handler->SendErrorMessage("Invalid bracket. Can be 1v1, 2v2, 3v3, 5v5");
256 return false;
257 }
258
259 if (tokens.size() != uint16(count + 2))
260 {
261 handler->SendErrorMessage("Invalid number of nicknames for this bracket.");
262 return false;
263 }
264
265 uint8 hcnt = count / 2;
266 uint8 error = 0;
267 std::string last_name;
268 Player* plr = nullptr;
269 std::array<Player*, 10> players = {};
270 uint8 cnt = 0;
271
272 for (; tokensItr != tokens.end(); ++tokensItr)
273 {
274 last_name = std::string(*tokensItr);
275 plr = ObjectAccessor::FindPlayerByName(last_name, false);
276
277 if (!plr)
278 {
279 error = 1;
280 break;
281 }
282
283 if (!plr->IsInWorld() || !plr->FindMap() || plr->IsBeingTeleported())
284 {
285 error = 2;
286 break;
287 }
288
289 if (plr->GetMap()->GetEntry()->Instanceable())
290 {
291 error = 3;
292 break;
293 }
294
295 if (plr->IsUsingLfg())
296 {
297 error = 4;
298 break;
299 }
300
301 if (plr->InBattlegroundQueue())
302 {
303 error = 5;
304 break;
305 }
306
307 if (plr->IsInFlight())
308 {
309 error = 10;
310 break;
311 }
312
313 if (!plr->IsAlive())
314 {
315 error = 11;
316 break;
317 }
318
319 Group const* g = plr->GetGroup();
320
321 if (hcnt > 1)
322 {
323 if (!g)
324 {
325 error = 6;
326 break;
327 }
328
329 if (g->isRaidGroup() || g->isBGGroup() || g->isBFGroup() || g->isLFGGroup())
330 {
331 error = 7;
332 break;
333 }
334
335 if (g->GetMembersCount() != hcnt)
336 {
337 error = 8;
338 break;
339 }
340
341 uint8 sti = (cnt < hcnt ? 0 : hcnt);
342 if (sti != cnt && players[sti]->GetGroup() != plr->GetGroup())
343 {
344 error = 9;
345 last_name += " and " + players[sti]->GetName();
346 break;
347 }
348 }
349 else // 1v1
350 {
351 if (g)
352 {
353 error = 12;
354 break;
355 }
356 }
357
358 players[cnt++] = plr;
359 }
360
361 for (uint8 i = 0; i < cnt && !error; ++i)
362 {
363 for (uint8 j = i + 1; j < cnt; ++j)
364 {
365 if (players[i]->GetGUID() == players[j]->GetGUID())
366 {
367 last_name = players[i]->GetName();
368 error = 13;
369 break;
370 }
371 }
372 }
373
374 switch (error)
375 {
376 case 1:
377 handler->PSendSysMessage("Player {} not found.", last_name);
378 break;
379 case 2:
380 handler->PSendSysMessage("Player {} is being teleported.", last_name);
381 break;
382 case 3:
383 handler->PSendSysMessage("Player {} is in instance/battleground/arena.", last_name);
384 break;
385 case 4:
386 handler->PSendSysMessage("Player {} is in LFG system.", last_name);
387 break;
388 case 5:
389 handler->PSendSysMessage("Player {} is queued for battleground/arena.", last_name);
390 break;
391 case 6:
392 handler->PSendSysMessage("Player {} is not in group.", last_name);
393 break;
394 case 7:
395 handler->PSendSysMessage("Player {} is not in normal group.", last_name);
396 break;
397 case 8:
398 handler->PSendSysMessage("Group of player {} has invalid member count.", last_name);
399 break;
400 case 9:
401 handler->PSendSysMessage("Players {} are not in the same group.", last_name);
402 break;
403 case 10:
404 handler->PSendSysMessage("Player {} is in flight.", last_name);
405 break;
406 case 11:
407 handler->PSendSysMessage("Player {} is dead.", last_name);
408 break;
409 case 12:
410 handler->PSendSysMessage("Player {} is in a group.", last_name);
411 break;
412 case 13:
413 handler->PSendSysMessage("Player {} occurs more than once.", last_name);
414 break;
415 }
416
417 if (error)
418 {
419 handler->SetSentErrorMessage(true);
420 return false;
421 }
422
423 Battleground* bgt = sBattlegroundMgr->GetBattlegroundTemplate(BATTLEGROUND_AA);
424 if (!bgt)
425 {
426 handler->SendErrorMessage("Couldn't create arena map!");
427 return false;
428 }
429
430 Battleground* bg = sBattlegroundMgr->CreateNewBattleground(randomizedArenaBgTypeId, GetBattlegroundBracketById(bgt->GetMapId(), bgt->GetBracketId()), ArenaType(hcnt >= 2 ? hcnt : 2), false);
431 if (!bg)
432 {
433 handler->SendErrorMessage("Couldn't create arena map!");
434 return false;
435 }
436
437 bg->StartBattleground();
438
439 BattlegroundTypeId bgTypeId = bg->GetBgTypeID();
440
441 TeamId teamId1 = Player::TeamIdForRace(players[0]->getRace());
442 TeamId teamId2 = (teamId1 == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
443
444 for (uint8 i = 0; i < cnt; ++i)
445 {
446 Player* player = players[i];
447
448 TeamId teamId = (i < hcnt ? teamId1 : teamId2);
449 player->SetEntryPoint();
450
451 uint32 queueSlot = 0;
452 WorldPacket data;
453 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId);
454 player->SendDirectMessage(&data);
455
456 // Remove from LFG queues
457 sLFGMgr->LeaveAllLfgQueues(player->GetGUID(), false);
458
459 // Book the reservation like the queue path does, so it is symmetric
460 // with RemovePlayerAtLeave's decrement and the 0-players/0-invited
461 // state can't let Battleground::Update delete the arena while players
462 // are still on the loading screen.
463 bg->IncreaseInvitedCount(teamId);
464 player->SetBattlegroundId(bg->GetInstanceID(), bgTypeId, queueSlot, true, false, teamId);
465
466 // A synchronous teleport failure would strand that reservation (the
467 // player never enters and never reaches RemovePlayerAtLeave), leaving
468 // the arena undeletable; release it and reset his bg data.
469 if (!sBattlegroundMgr->SendToBattleground(player, bg->GetInstanceID(), bgTypeId))
470 {
471 bg->DecreaseInvitedCount(teamId);
473 }
474 }
475
476 handler->PSendSysMessage("Success! Players are now being teleported to the arena.");
477 return true;
478 }
#define sBattlegroundMgr
Definition BattlegroundMgr.h:190
@ STATUS_IN_PROGRESS
Definition Battleground.h:193
ArenaType
Definition Battleground.h:207
PvPDifficultyEntry const * GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id)
Definition DBCStores.cpp:832
#define ASSERT
Definition Errors.h:68
#define sLFGMgr
Definition LFGMgr.h:665
BattlegroundTypeId
Definition SharedDefines.h:3735
@ BATTLEGROUND_AA
Definition SharedDefines.h:3742
@ BATTLEGROUND_BE
Definition SharedDefines.h:3741
@ BATTLEGROUND_RV
Definition SharedDefines.h:3747
@ BATTLEGROUND_TYPE_NONE
Definition SharedDefines.h:3736
@ BATTLEGROUND_NA
Definition SharedDefines.h:3740
@ BATTLEGROUND_DS
Definition SharedDefines.h:3746
@ BATTLEGROUND_RL
Definition SharedDefines.h:3744
Definition Battleground.h:304
uint32 GetMapId() const
Definition Battleground.h:442
void DecreaseInvitedCount(TeamId teamId)
Definition Battleground.h:395
uint8 GetArenaType() const
Definition Battleground.h:354
void StartBattleground()
Definition Battleground.cpp:1169
uint32 GetInstanceID() const
Definition Battleground.h:332
void IncreaseInvitedCount(TeamId teamId)
Definition Battleground.h:396
uint32 GetStartTime() const
Definition Battleground.h:335
BattlegroundBracketId GetBracketId() const
Definition Battleground.h:331
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:330
void SetSentErrorMessage(bool val)
Definition Chat.h:238
bool isLFGGroup(bool restricted=false) const
Definition Group.cpp:2507
bool isBGGroup() const
Definition Group.cpp:2518
uint32 GetMembersCount() const
Definition Group.h:255
bool isBFGroup() const
Definition Group.cpp:2523
bool isRaidGroup() const
Definition Group.cpp:2513
MapEntry const * GetEntry() const
Definition Map.h:175
bool IsInWorld() const
Definition Object.h:115
static TeamId TeamIdForRace(uint8 race)
Definition Player.cpp:6023
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5886
bool InBattlegroundQueue(bool ignoreArena=false) const
Definition Player.cpp:12498
bool IsUsingLfg()
Definition Player.cpp:13455
Map * FindMap() const
Definition Object.h:638
Definition WorldPacket.h:26
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:133
std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
Definition Tokenize.cpp:20
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition ObjectAccessor.cpp:295
bool Instanceable() const
Definition DBCStructure.h:1389

References ASSERT, BATTLEGROUND_AA, BATTLEGROUND_BE, BATTLEGROUND_DS, BATTLEGROUND_NA, BATTLEGROUND_RL, BATTLEGROUND_RV, BATTLEGROUND_TYPE_NONE, Battleground::DecreaseInvitedCount(), WorldObject::FindMap(), ObjectAccessor::FindPlayerByName(), Battleground::GetArenaType(), GetBattlegroundBracketById(), Battleground::GetBgTypeID(), Battleground::GetBracketId(), Map::GetEntry(), Player::GetGroup(), Object::GetGUID(), Battleground::GetInstanceID(), WorldObject::GetMap(), Battleground::GetMapId(), Group::GetMembersCount(), WorldObject::GetName(), Battleground::GetStartTime(), Player::InBattlegroundQueue(), Battleground::IncreaseInvitedCount(), MapEntry::Instanceable(), Unit::IsAlive(), Player::IsBeingTeleported(), Group::isBFGroup(), Group::isBGGroup(), Unit::IsInFlight(), Object::IsInWorld(), Group::isLFGGroup(), Group::isRaidGroup(), Player::IsUsingLfg(), PLAYER_MAX_BATTLEGROUND_QUEUES, ChatHandler::PSendSysMessage(), sBattlegroundMgr, Acore::Containers::SelectRandomContainerElement(), Player::SendDirectMessage(), ChatHandler::SendErrorMessage(), Player::SetBattlegroundId(), Player::SetEntryPoint(), ChatHandler::SetSentErrorMessage(), sLFGMgr, Battleground::StartBattleground(), STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, Player::TeamIdForRace(), and Acore::Tokenize().

Referenced by GetCommands().

◆ HandleStringCommand()

static bool misc_commandscript::HandleStringCommand ( ChatHandler *  handler,
uint32  id,
Optional< uint8 >  locale 
)
inlinestatic
3460 {
3461 if (!id)
3462 {
3464 return false;
3465 }
3466
3467 std::string str = sObjectMgr->GetAcoreString(id, locale ? static_cast<LocaleConstant>(*locale) : DEFAULT_LOCALE);
3468 handler->SendSysMessage(str);
3469 return true;
3470 }
LocaleConstant
Definition Common.h:125
#define DEFAULT_LOCALE
Definition Common.h:140
@ LANG_CMD_SYNTAX
Definition Language.h:42

References DEFAULT_LOCALE, LANG_CMD_SYNTAX, ChatHandler::SendSysMessage(), and sObjectMgr.

Referenced by GetCommands().

◆ HandleSummonCommand()

static bool misc_commandscript::HandleSummonCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
932 {
933 if (!target)
934 {
935 target = PlayerIdentifier::FromTarget(handler);
936 }
937
938 if (!target)
939 {
940 return false;
941 }
942
943 Player* _player = handler->GetSession()->GetPlayer();
944 if (target->GetGUID() == _player->GetGUID())
945 {
947 return false;
948 }
949
950 std::string nameLink = handler->playerLink(target->GetName());
951
952 if (target->IsConnected())
953 {
954 auto targetPlayer = target->GetConnectedPlayer();
955
956 // check online security
957 if (handler->HasLowerSecurity(targetPlayer))
958 {
959 return false;
960 }
961
962 if (targetPlayer->IsBeingTeleported())
963 {
964 handler->SendErrorMessage(LANG_IS_TELEPORTED, nameLink);
965 return false;
966 }
967
968 Map* map = handler->GetSession()->GetPlayer()->GetMap();
969
970 if (map->IsBattlegroundOrArena())
971 {
972 handler->SendErrorMessage("Can't summon to a battleground!");
973 return false;
974 }
975 else if (map->IsDungeon())
976 {
977 // Allow GM to summon players or only other GM accounts inside instances.
978 if (!sWorld->getBoolConfig(CONFIG_INSTANCE_GMSUMMON_PLAYER))
979 {
980 // pussywizard: prevent unbinding normal player's perm bind by just summoning him >_>
981 if (!targetPlayer->GetSession()->GetSecurity())
982 {
983 handler->SendErrorMessage("Only GMs can be summoned to an instance!");
984 return false;
985 }
986 }
987
988 Map* destMap = targetPlayer->GetMap();
989
990 if (destMap->Instanceable() && destMap->GetInstanceId() != map->GetInstanceId())
991 {
992 sInstanceSaveMgr->PlayerUnbindInstance(target->GetGUID(), map->GetInstanceId(), targetPlayer->GetDungeonDifficulty(), true, targetPlayer);
993 }
994
995 // we are in an instance, and can only summon players in our group with us as leader
996 if (!handler->GetSession()->GetPlayer()->GetGroup() || !targetPlayer->GetGroup() ||
997 (targetPlayer->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
998 (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()))
999 // the last check is a bit excessive, but let it be, just in case
1000 {
1001 handler->SendErrorMessage(LANG_CANNOT_SUMMON_TO_INST, nameLink);
1002 return false;
1003 }
1004 }
1005
1006 handler->PSendSysMessage(LANG_SUMMONING, nameLink, "");
1007 if (handler->needReportToTarget(targetPlayer))
1008 {
1009 ChatHandler(targetPlayer->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->playerLink(_player->GetName()));
1010 }
1011
1012 // stop flight if need
1013 if (targetPlayer->IsInFlight())
1014 {
1015 targetPlayer->GetMotionMaster()->MovementExpired();
1016 targetPlayer->CleanupAfterTaxiFlight();
1017 }
1018 // save only in non-flight case
1019 else
1020 {
1021 targetPlayer->SaveRecallPosition();
1022 }
1023
1024 // before GM
1025 float x, y, z;
1026 handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, targetPlayer->GetObjectSize());
1027 targetPlayer->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, targetPlayer->GetOrientation(), 0, handler->GetSession()->GetPlayer());
1028 }
1029 else
1030 {
1031 // check offline security
1032 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
1033 {
1034 return false;
1035 }
1036
1037 handler->PSendSysMessage(LANG_SUMMONING, nameLink, handler->GetAcoreString(LANG_OFFLINE));
1038
1039 // in point where GM stay
1041 handler->GetSession()->GetPlayer()->GetPositionX(),
1042 handler->GetSession()->GetPlayer()->GetPositionY(),
1043 handler->GetSession()->GetPlayer()->GetPositionZ(),
1044 handler->GetSession()->GetPlayer()->GetOrientation(),
1045 handler->GetSession()->GetPlayer()->GetZoneId(),
1046 target->GetGUID());
1047 }
1048
1049 return true;
1050 }
@ CONFIG_INSTANCE_GMSUMMON_PLAYER
Definition WorldConfig.h:43
static void SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, ObjectGuid guid)
Definition PlayerMisc.cpp:86

References CONFIG_INSTANCE_GMSUMMON_PLAYER, Acore::ChatCommands::PlayerIdentifier::FromTarget(), ChatHandler::GetAcoreString(), WorldObject::GetClosePoint(), Player::GetGroup(), Object::GetGUID(), Map::GetInstanceId(), Group::GetLeaderGUID(), WorldObject::GetMap(), WorldLocation::GetMapId(), WorldObject::GetName(), Position::GetOrientation(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::GetSession(), WorldObject::GetZoneId(), ChatHandler::HasLowerSecurity(), Map::Instanceable(), Map::IsBattlegroundOrArena(), Map::IsDungeon(), LANG_CANNOT_SUMMON_TO_INST, LANG_CANT_TELEPORT_SELF, LANG_IS_TELEPORTED, LANG_OFFLINE, LANG_SUMMONED_BY, LANG_SUMMONING, ChatHandler::needReportToTarget(), ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Player::SavePositionInDB(), ChatHandler::SendErrorMessage(), sInstanceSaveMgr, and sWorld.

Referenced by GetCommands().

◆ HandleUnAuraCommand()

static bool misc_commandscript::HandleUnAuraCommand ( ChatHandler *  handler,
Variant< SpellInfo const *, std::string_view >  spells 
)
inlinestatic
723 {
724 Unit* target = handler->getSelectedUnit();
725 if (!target)
726 {
728 return false;
729 }
730
731 if (spells.holds_alternative<std::string_view>() && spells.get<std::string_view>() == "all")
732 {
733 target->RemoveAllAuras();
734 return true;
735 }
736
737 if (!spells.holds_alternative<SpellInfo const*>())
738 {
740 return false;
741 }
742
743 auto spell = spells.get<SpellInfo const*>();
744
745 if (!SpellMgr::IsSpellValid(spell))
746 {
747 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
748 return false;
749 }
750
751 target->RemoveAurasDueToSpell(spell->Id);
752
753 return true;
754 }
spells
Definition boss_krystallus.cpp:26
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4969
void RemoveAllAuras()
Definition Unit.cpp:5393

References ChatHandler::getSelectedUnit(), SpellMgr::IsSpellValid(), LANG_COMMAND_NOSPELLFOUND, LANG_COMMAND_SPELL_BROKEN, LANG_SELECT_CHAR_OR_CREATURE, Unit::RemoveAllAuras(), Unit::RemoveAurasDueToSpell(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleUnbindSightCommand()

static bool misc_commandscript::HandleUnbindSightCommand ( ChatHandler *  handler)
inlinestatic
3440 {
3441 Player* player = handler->GetSession()->GetPlayer();
3442
3443 if (player->isPossessing())
3444 {
3445 return false;
3446 }
3447
3448 player->StopCastingBindSight();
3449 return true;
3450 }
void StopCastingBindSight(Aura *except=nullptr)
Definition Player.cpp:13543
bool isPossessing() const
Definition Unit.h:1330

References WorldSession::GetPlayer(), ChatHandler::GetSession(), Unit::isPossessing(), and Player::StopCastingBindSight().

Referenced by GetCommands().

◆ HandleUnFreezeCommand()

static bool misc_commandscript::HandleUnFreezeCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
3348 {
3349 Creature* creatureTarget = handler->getSelectedCreature();
3350
3351 if (!target && !creatureTarget)
3352 {
3353 target = PlayerIdentifier::FromTargetOrSelf(handler);
3354 }
3355
3356 if (!target && !creatureTarget)
3357 {
3359 return false;
3360 }
3361
3362 Player* playerTarget = target->GetConnectedPlayer();
3363
3364 if (!creatureTarget && playerTarget && playerTarget->HasAura(SPELL_FREEZE))
3365 {
3366 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
3367 playerTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
3368 return true;
3369 }
3370 else if (creatureTarget && creatureTarget->HasAura(SPELL_FREEZE))
3371 {
3373 creatureTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
3374 return true;
3375 }
3376 else if (!creatureTarget && target && !target->IsConnected())
3377 {
3379 stmt->SetData(0, target->GetGUID().GetCounter());
3380 CharacterDatabase.Execute(stmt);
3381 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
3382 return true;
3383 }
3384
3386 return true;
3387 }
@ CHAR_DEL_CHAR_AURA_FROZEN
Definition CharacterDatabase.h:360
@ LANG_COMMAND_UNFREEZE
Definition Language.h:1064
@ LANG_COMMAND_FREEZE_WRONG
Definition Language.h:1063
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5798

References CHAR_DEL_CHAR_AURA_FROZEN, CharacterDatabase, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), GetLocalizeCreatureName(), ChatHandler::getSelectedCreature(), ChatHandler::GetSessionDbcLocale(), Unit::HasAura(), LANG_COMMAND_FREEZE_WRONG, LANG_COMMAND_UNFREEZE, LANG_SELECT_CHAR_OR_CREATURE, ChatHandler::PSendSysMessage(), Unit::RemoveAurasDueToSpell(), ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), and SPELL_FREEZE.

Referenced by GetCommands().

◆ HandleUnmuteCommand()

static bool misc_commandscript::HandleUnmuteCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target 
)
inlinestatic
2995 {
2996 if (!target)
2997 {
2998 target = PlayerIdentifier::FromTargetOrSelf(handler);
2999 }
3000
3001 if (!target)
3002 {
3003 return false;
3004 }
3005
3006 Player* playerTarget = target->GetConnectedPlayer();
3007 uint32 accountId = playerTarget ? playerTarget->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(target->GetGUID());
3008
3009 // The account may be online on another character or idle at character select.
3010 WorldSession* session = playerTarget ? playerTarget->GetSession() : sWorldSessionMgr->FindSession(accountId);
3011 if (!playerTarget && session)
3012 playerTarget = session->GetPlayer();
3013
3014 // must have strong lesser security level
3015 if (handler->HasLowerSecurity(playerTarget, target->GetGUID(), true))
3016 {
3017 return false;
3018 }
3019
3020 if (session)
3021 {
3022 if (session->m_muteTime <= GameTime::GetGameTime().count())
3023 {
3025 return false;
3026 }
3027
3028 session->m_muteTime = 0;
3029 }
3030
3032 stmt->SetData(0, 0);
3033 stmt->SetData(1, "");
3034 stmt->SetData(2, "");
3035 stmt->SetData(3, accountId);
3036 LoginDatabase.Execute(stmt);
3037
3038 if (playerTarget)
3039 {
3041 }
3042
3043 handler->PSendSysMessage(LANG_YOU_ENABLE_CHAT, handler->playerLink(target->GetName()));
3044
3045 return true;
3046 }
@ LANG_CHAT_ALREADY_ENABLED
Definition Language.h:351
@ LANG_YOU_ENABLE_CHAT
Definition Language.h:353
@ LANG_YOUR_CHAT_ENABLED
Definition Language.h:352

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldSession::GetAccountId(), GameTime::GetGameTime(), Object::GetGUID(), WorldSession::GetPlayer(), Player::GetSession(), ChatHandler::HasLowerSecurity(), LANG_CHAT_ALREADY_ENABLED, LANG_YOU_ENABLE_CHAT, LANG_YOUR_CHAT_ENABLED, LOGIN_UPD_MUTE_TIME, LoginDatabase, WorldSession::m_muteTime, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), sCharacterCache, ChatHandler::SendErrorMessage(), PreparedStatementBase::SetData(), and sWorldSessionMgr.

Referenced by GetCommands().

◆ HandleUnPossessCommand()

static bool misc_commandscript::HandleUnPossessCommand ( ChatHandler *  handler)
inlinestatic
3416 {
3417 Unit* unit = handler->getSelectedUnit();
3418 if (!unit)
3419 {
3420 unit = handler->GetSession()->GetPlayer();
3421 }
3422
3423 unit->RemoveCharmAuras();
3424 return true;
3425 }
void RemoveCharmAuras()
Definition Unit.cpp:8123

References WorldSession::GetPlayer(), ChatHandler::getSelectedUnit(), ChatHandler::GetSession(), and Unit::RemoveCharmAuras().

Referenced by GetCommands().

◆ HandleUnstuckCommand()

static bool misc_commandscript::HandleUnstuckCommand ( ChatHandler *  handler,
Optional< PlayerIdentifier >  target,
Optional< std::string_view >  location 
)
inlinestatic
1457 {
1458 // No args required for players
1459 if (handler->GetSession() && AccountMgr::IsPlayerAccount(handler->GetSession()->GetSecurity()))
1460 {
1461 if (Player* player = handler->GetSession()->GetPlayer())
1462 {
1463 player->CastSpell(player, SPELL_STUCK, false);
1464 }
1465
1466 return true;
1467 }
1468
1469 if (!target)
1470 {
1471 target = PlayerIdentifier::FromTargetOrSelf(handler);
1472 }
1473
1474 if (!target || !target->IsConnected())
1475 {
1476 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
1477 return false;
1478
1480 stmt->SetData(0, target->GetGUID().GetCounter());
1481
1482 PreparedQueryResult result = CharacterDatabase.Query(stmt);
1483
1484 if (result)
1485 {
1486 Field* fieldsDB = result->Fetch();
1487 WorldLocation loc(fieldsDB[0].Get<uint16>(), fieldsDB[2].Get<float>(), fieldsDB[3].Get<float>(), fieldsDB[4].Get<float>(), 0.0f);
1488 uint32 zoneId = fieldsDB[1].Get<uint16>();
1489
1490 Player::SavePositionInDB(loc, zoneId, target->GetGUID(), nullptr);
1491
1492 handler->PSendSysMessage(LANG_SUMMONING, target->GetName(), handler->GetAcoreString(LANG_OFFLINE));
1493 }
1494
1495 return true;
1496 }
1497
1498 Player* player = target->GetConnectedPlayer();
1499
1500 if (player->IsInFlight() || player->IsInCombat())
1501 {
1502 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(7355);
1503 if (!spellInfo)
1504 return false;
1505
1506 if (player)
1508
1509 return false;
1510 }
1511
1512 if (location->empty() || *location == "inn")
1513 {
1514 player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
1515 return true;
1516 }
1517
1518 if (*location == "graveyard")
1519 {
1520 player->RepopAtGraveyard();
1521 return true;
1522 }
1523
1524 if (*location == "startzone")
1525 {
1526 player->TeleportTo(player->GetStartPosition());
1527 return true;
1528 }
1529
1530 //Not a supported argument
1531 return false;
1532 }
@ CHAR_SEL_CHARACTER_HOMEBIND
Definition CharacterDatabase.h:87
@ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW
Definition SharedDefines.h:1110
float m_homebindZ
Definition Player.h:2424
uint32 m_homebindMapId
Definition Player.h:2420
void RepopAtGraveyard()
Definition Player.cpp:5028
float m_homebindY
Definition Player.h:2423
WorldLocation GetStartPosition() const
Definition Player.cpp:11608
float m_homebindX
Definition Player.h:2422
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition Spell.cpp:4832
bool IsInCombat() const
Definition Unit.h:949
Definition Position.h:256
constexpr auto SPELL_STUCK
Definition cs_misc.cpp:61

References CHAR_SEL_CHARACTER_HOMEBIND, CharacterDatabase, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Field::Get(), ChatHandler::GetAcoreString(), Position::GetOrientation(), WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::GetStartPosition(), ChatHandler::HasLowerSecurity(), Unit::IsInCombat(), Unit::IsInFlight(), AccountMgr::IsPlayerAccount(), LANG_OFFLINE, LANG_SUMMONING, Player::m_homebindMapId, Player::m_homebindX, Player::m_homebindY, Player::m_homebindZ, ChatHandler::PSendSysMessage(), Player::RepopAtGraveyard(), Player::SavePositionInDB(), Spell::SendCastResult(), PreparedStatementBase::SetData(), SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW, SPELL_STUCK, sSpellMgr, and Player::TeleportTo().

Referenced by GetCommands().

◆ SendRemoveItemResult()

static void misc_commandscript::SendRemoveItemResult ( ChatHandler *  handler,
uint32  itemId,
uint32  removed,
std::string const &  nameLink,
ObjectGuid::LowType  guidLow,
bool  online,
uint32  countLeft 
)
inlinestatic
1725 {
1726 std::string status = handler->GetAcoreString(online ? LANG_CHARACTER_ONLINE : LANG_CHARACTER_OFFLINE);
1727
1728 if (countLeft)
1729 handler->PSendSysMessage(LANG_REMOVEITEM, itemId, removed, nameLink, guidLow, status, countLeft);
1730 else
1731 handler->PSendSysMessage(LANG_REMOVEITEM_NONE_LEFT, itemId, removed, nameLink, guidLow, status);
1732 }
@ LANG_CHARACTER_OFFLINE
Definition Language.h:1578
@ LANG_REMOVEITEM_NONE_LEFT
Definition Language.h:1576
@ LANG_CHARACTER_ONLINE
Definition Language.h:1577
@ LANG_REMOVEITEM
Definition Language.h:545

References ChatHandler::GetAcoreString(), LANG_CHARACTER_OFFLINE, LANG_CHARACTER_ONLINE, LANG_REMOVEITEM, LANG_REMOVEITEM_NONE_LEFT, and ChatHandler::PSendSysMessage().

Referenced by HandleAddItemCommand().


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