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 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:3226
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:3375
static bool HandleAddItemCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, ItemTemplate const *itemTemplate, Optional< int32 > _count)
Definition cs_misc.cpp:1724
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:2798
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:3425
static bool HandleRespawnCreatureByGuidCommand(ChatHandler *handler, ObjectGuid::LowType spawnId)
Definition cs_misc.cpp:2515
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:3445
static bool HandleChangeWeather(ChatHandler *handler, uint32 type, float grade)
Definition cs_misc.cpp:1976
static bool HandlePInfoCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2058
static bool HandleBMCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:3471
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:3458
static bool HandleCommandsCommand(ChatHandler *handler)
Definition cs_misc.cpp:1158
static bool HandleMailBoxCommand(ChatHandler *handler)
Definition cs_misc.cpp:3438
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:2774
static bool HandleNearGraveCommand(ChatHandler *handler, Optional< std::string_view > team)
Definition cs_misc.cpp:1585
static bool HandleMovegensCommand(ChatHandler *handler)
Definition cs_misc.cpp:3076
static bool HandleGUIDCommand(ChatHandler *handler)
Definition cs_misc.cpp:1250
static bool HandleAddItemSetCommand(ChatHandler *handler, Variant< Hyperlink< itemset >, uint32 > itemSetId)
Definition cs_misc.cpp:1915
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:2014
static bool HandlePacketLog(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< bool > enableArg)
Definition cs_misc.cpp:3512
static bool HandleUnmuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2976
static bool HandleRecallCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1334
static bool HandleBindSightCommand(ChatHandler *handler)
Definition cs_misc.cpp:3413
static bool HandleComeToMeCommand(ChatHandler *handler)
Definition cs_misc.cpp:3210
static bool HandleUnPossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:3401
static bool HandleRespawnGameObjectByEntryCommand(ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
Definition cs_misc.cpp:2702
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:3258
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:2000
static bool HandleFlushArenaPointsCommand(ChatHandler *)
Definition cs_misc.cpp:3284
static bool HandleFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:3290
static bool HandleRespawnGameObjectByGuidCommand(ChatHandler *handler, ObjectGuid::LowType spawnId)
Definition cs_misc.cpp:2574
static bool HandleMuteInfoCommand(ChatHandler *handler, std::string accountName)
Definition cs_misc.cpp:3035
static bool HandleUnFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:3333
static bool HandleMuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, std::string notSpeakTime, Tail muteReason)
Definition cs_misc.cpp:2852
static bool HandlePossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:3389
static bool HandleRespawnCreatureByEntryCommand(ChatHandler *handler, uint32 entry, Optional< uint32 > mapIdArg, Optional< uint32 > instanceIdArg)
Definition cs_misc.cpp:2630
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
1725 {
1726 if (!sObjectMgr->GetItemTemplate(itemTemplate->ItemId))
1727 {
1728 handler->SendErrorMessage(LANG_COMMAND_ITEMIDINVALID, itemTemplate->ItemId);
1729 return false;
1730 }
1731
1732 uint32 itemId = itemTemplate->ItemId;
1733 int32 count = 1;
1734
1735 if (_count)
1736 count = *_count;
1737
1738 if (!count)
1739 count = 1;
1740
1741 if (!player)
1742 player = PlayerIdentifier::FromTargetOrSelf(handler);
1743
1744 if (!player)
1745 return false;
1746
1747 Player* playerTarget = player->GetConnectedPlayer();
1748
1749 // Subtract
1750 if (count < 0)
1751 {
1752 uint32 removeCount = uint32(-count);
1753
1754 if (playerTarget)
1755 {
1756 // Only have scam check on player accounts
1757 if (playerTarget->GetSession()->GetSecurity() == SEC_PLAYER)
1758 {
1759 if (!playerTarget->HasItemCount(itemId, 0))
1760 {
1761 // output that player don't have any items to destroy
1762 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, handler->GetNameLink(playerTarget), itemId);
1763 return false;
1764 }
1765
1766 if (!playerTarget->HasItemCount(itemId, removeCount))
1767 {
1768 // output that player don't have as many items that you want to destroy
1769 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, handler->GetNameLink(playerTarget), itemId);
1770 return false;
1771 }
1772 }
1773
1774 // output successful amount of destroyed items
1775 playerTarget->DestroyItemCount(itemId, removeCount, true, false);
1776 handler->PSendSysMessage(LANG_REMOVEITEM, itemId, removeCount, handler->GetNameLink(playerTarget));
1777 return true;
1778 }
1779
1780 // offline target: remove the items directly from the DB
1781 if (handler->HasLowerSecurity(nullptr, player->GetGUID()))
1782 return false;
1783
1784 std::string nameLink = handler->playerLink(player->GetName());
1785
1787 stmt->SetData(0, itemId);
1788 stmt->SetData(1, player->GetGUID().GetCounter());
1789 PreparedQueryResult result = CharacterDatabase.Query(stmt);
1790
1791 std::vector<std::pair<ObjectGuid::LowType, uint32>> stacks;
1792 uint32 totalCount = 0;
1793 if (result)
1794 {
1795 do
1796 {
1797 Field* fields = result->Fetch();
1798 stacks.emplace_back(fields[0].Get<uint32>(), fields[1].Get<uint32>());
1799 totalCount += fields[1].Get<uint32>();
1800 } while (result->NextRow());
1801 }
1802
1803 if (!totalCount)
1804 {
1805 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, nameLink, itemId);
1806 return false;
1807 }
1808
1809 // Only have scam check on player accounts
1810 uint32 accountId = sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
1811 if (AccountMgr::GetSecurity(accountId, realm.Id.Realm) == SEC_PLAYER && totalCount < removeCount)
1812 {
1813 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, nameLink, itemId);
1814 return false;
1815 }
1816
1817 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
1818 uint32 remaining = removeCount;
1819 for (auto const& [itemGuid, stackCount] : stacks)
1820 {
1821 if (!remaining)
1822 break;
1823
1824 if (stackCount <= remaining)
1825 {
1826 remaining -= stackCount;
1827 Item::DeleteFromInventoryDB(trans, itemGuid);
1828 Item::DeleteFromDB(trans, itemGuid);
1829
1830 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
1831 stmt->SetData(0, itemGuid);
1832 trans->Append(stmt);
1833
1834 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
1835 stmt->SetData(0, itemGuid);
1836 trans->Append(stmt);
1837
1838 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE);
1839 stmt->SetData(0, itemGuid);
1840 trans->Append(stmt);
1841
1842 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_CONTAINER);
1843 stmt->SetData(0, itemGuid);
1844 trans->Append(stmt);
1845 }
1846 else
1847 {
1848 stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_COUNT);
1849 stmt->SetData(0, stackCount - remaining);
1850 stmt->SetData(1, itemGuid);
1851 trans->Append(stmt);
1852 remaining = 0;
1853 }
1854 }
1855 CharacterDatabase.CommitTransaction(trans);
1856
1857 handler->PSendSysMessage(LANG_REMOVEITEM, itemId, removeCount - remaining, nameLink);
1858 return true;
1859 }
1860
1861 // Adding items requires the target to be online
1862 if (!playerTarget)
1863 {
1865 return false;
1866 }
1867
1868 // Adding items
1869 uint32 noSpaceForCount = 0;
1870
1871 // check space and find places
1872 ItemPosCountVec dest;
1873 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
1874
1875 if (msg != EQUIP_ERR_OK) // convert to possible store amount
1876 count -= noSpaceForCount;
1877
1878 if (!count || dest.empty()) // can't add any
1879 {
1880 handler->SendErrorMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1881 return false;
1882 }
1883
1884 Item* item = playerTarget->StoreNewItem(dest, itemId, true);
1885
1886 Player* p = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
1887 // remove binding (let GM give it to another player later)
1888 if (p && p == playerTarget)
1889 {
1890 for (auto const& itemPos : dest)
1891 {
1892 if (Item* item1 = p->GetItemByPos(itemPos.pos))
1893 {
1894 item1->SetBinding(false);
1895 }
1896 }
1897 }
1898
1899 if (p && count && item)
1900 {
1901 p->SendNewItem(item, count, false, true);
1902
1903 if (p != playerTarget)
1904 {
1905 playerTarget->SendNewItem(item, count, true, false);
1906 }
1907 }
1908
1909 if (noSpaceForCount)
1910 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1911
1912 return true;
1913 }
#define sCharacterCache
Definition CharacterCache.h:88
@ CHAR_DEL_ITEMCONTAINER_CONTAINER
Definition CharacterDatabase.h:502
@ CHAR_DEL_ITEM_BOP_TRADE
Definition CharacterDatabase.h:121
@ CHAR_DEL_ITEM_REFUND_INSTANCE
Definition CharacterDatabase.h:380
@ 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:365
@ 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:1416
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:548
@ LANG_REMOVEITEM_ERROR
Definition Language.h:1417
@ LANG_REMOVEITEM
Definition Language.h:545
@ LANG_COMMAND_ITEMIDINVALID
Definition Language.h:476
#define sObjectMgr
Definition ObjectMgr.h:1730
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:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition Item.h:220
static void DeleteFromInventoryDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition Item.cpp:533
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition Item.cpp:519
Definition Player.h:1086
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition PlayerStorage.cpp:659
WorldSession * GetSession() const
Definition Player.h:2030
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:4822
void DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Definition PlayerStorage.cpp:3192
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0, bool refund=false)
Definition PlayerStorage.cpp:2606
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:467
Player * GetPlayer() const
Definition WorldSession.h:480
Realm realm
Definition World.cpp:115
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(), Player::GetItemByPos(), 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, LANG_REMOVEITEM_ERROR, LANG_REMOVEITEM_FAILURE, NULL_BAG, NULL_SLOT, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), realm, RealmHandle::Realm, sCharacterCache, SEC_PLAYER, ChatHandler::SendErrorMessage(), Player::SendNewItem(), PreparedStatementBase::SetData(), sObjectMgr, and Player::StoreNewItem().

Referenced by GetCommands().

◆ HandleAddItemSetCommand()

static bool misc_commandscript::HandleAddItemSetCommand ( ChatHandler handler,
Variant< Hyperlink< itemset >, uint32 itemSetId 
)
inlinestatic
1916 {
1917 // prevent generation all items with itemset field value '0'
1918 if (!*itemSetId)
1919 {
1921 return false;
1922 }
1923
1924 Player* player = handler->GetSession()->GetPlayer();
1925 Player* playerTarget = handler->getSelectedPlayer();
1926
1927 if (!playerTarget)
1928 {
1929 playerTarget = player;
1930 }
1931
1932 bool found = false;
1933
1934 for (auto const& [itemid, itemTemplate] : *sObjectMgr->GetItemTemplateStore())
1935 {
1936 if (itemTemplate.ItemSet == uint32(itemSetId))
1937 {
1938 found = true;
1939 ItemPosCountVec dest;
1940 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate.ItemId, 1);
1941
1942 if (msg == EQUIP_ERR_OK)
1943 {
1944 Item* item = playerTarget->StoreNewItem(dest, itemTemplate.ItemId, true);
1945
1946 // remove binding (let GM give it to another player later)
1947 if (player == playerTarget)
1948 {
1949 item->SetBinding(false);
1950 }
1951
1952 player->SendNewItem(item, 1, false, true);
1953
1954 if (player != playerTarget)
1955 {
1956 playerTarget->SendNewItem(item, 1, true, false);
1957 }
1958 }
1959 else
1960 {
1961 player->SendEquipError(msg, nullptr, nullptr, itemTemplate.ItemId);
1962 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate.ItemId, 1);
1963 }
1964 }
1965 }
1966
1967 if (!found)
1968 {
1970 return false;
1971 }
1972
1973 return true;
1974 }
@ 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:4098

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:206
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void SetDungeonDifficulty(Difficulty dungeon_difficulty)
Definition Player.h:1951
void SetEntryPoint()
Definition Player.cpp:11454
void SetRaidDifficulty(Difficulty raid_difficulty)
Definition Player.h:1952
void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId)
Definition Player.cpp:12546
void SaveRecallPosition()
Definition Player.cpp:5820
Group * GetGroup()
Definition Player.h:2516
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:1399
static bool LoadPositionFromDB(uint32 &mapid, float &x, float &y, float &z, float &o, bool &in_flight, ObjectGuid::LowType guid)
Definition PlayerStorage.cpp:4947
void CleanupAfterTaxiFlight()
Definition Player.cpp:10597
Definition Transport.h:30
MotionMaster * GetMotionMaster()
Definition Unit.h:1758
bool IsInFlight() const
Definition Unit.h:1709
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:773
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:15323
Map * GetMap() const
Definition Object.h:631
void SetTransport(Transport *t)
Definition Object.h:702
Transport * GetTransport() const
Definition Object.h:694
MovementInfo m_movementInfo
Definition Object.h:704
static Optional< PlayerIdentifier > FromTarget(ChatHandler *handler)
Definition ChatCommandTags.cpp:138
Definition InstanceSaveMgr.h:40
ObjectGuid guid
Definition Object.h:309
Position pos
Definition Object.h:310
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:1638
@ 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:665

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:87
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
Definition SpellAuras.cpp:968
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5877

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
3414 {
3415 Unit* unit = handler->getSelectedUnit();
3416 if (!unit)
3417 {
3418 return false;
3419 }
3420
3421 handler->GetSession()->GetPlayer()->CastSpell(unit, 6277, true);
3422 return true;
3423 }
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:1361

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
3472 {
3473 WorldSession* session = handler->GetSession();
3474
3475 if (!session)
3476 return false;
3477
3478 auto SetBMMod = [&](bool enable)
3479 {
3480 char const* enabled = "ON";
3481 char const* disabled = "OFF";
3482 handler->SendNotification(LANG_COMMAND_BEASTMASTER_MODE, enable ? enabled : disabled);
3483
3484 session->GetPlayer()->SetBeastMaster(enable);
3485 };
3486
3487 if (!enableArg)
3488 {
3489 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper())
3490 SetBMMod(true);
3491 else
3492 SetBMMod(false);
3493
3494 return true;
3495 }
3496
3497 if (*enableArg)
3498 {
3499 SetBMMod(true);
3500 return true;
3501 }
3502 else
3503 {
3504 SetBMMod(false);
3505 return true;
3506 }
3507
3509 return false;
3510 }
@ LANG_USE_BOL
Definition Language.h:311
@ LANG_COMMAND_BEASTMASTER_MODE
Definition Language.h:987
static bool IsPlayerAccount(uint32 gmlevel)
Definition AccountMgr.cpp:324
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:409

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
1977 {
1978 // Weather is OFF
1979 if (!sWorld->getBoolConfig(CONFIG_WEATHER))
1980 {
1982 return false;
1983 }
1984
1985 Player* player = handler->GetSession()->GetPlayer();
1986 uint32 zoneid = player->GetZoneId();
1987
1988 Weather* weather = player->GetMap()->GetOrGenerateZoneDefaultWeather(zoneid);
1989 if (!weather)
1990 {
1992 return false;
1993 }
1994
1995 weather->SetWeather(WeatherType(type), grade);
1996
1997 return true;
1998 }
@ LANG_NO_WEATHER
Definition Language.h:441
@ LANG_WEATHER_DISABLED
Definition Language.h:442
WeatherType
Definition SharedDefines.h:3370
@ CONFIG_WEATHER
Definition WorldConfig.h:50
Weather * GetOrGenerateZoneDefaultWeather(uint32 zoneId)
Definition Map.cpp:3275
Weather for one zone.
Definition Weather.h:65
uint32 GetZoneId() const
Definition Object.cpp:3166
#define sWorld
Definition World.h:318
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
3259 {
3260 if (!target)
3261 {
3262 target = PlayerIdentifier::FromTargetOrSelf(handler);
3263 }
3264
3265 if (!target || !target->IsConnected())
3266 {
3268 return false;
3269 }
3270
3271 Player* playerTarget = target->GetConnectedPlayer();
3272
3273 // check online security
3274 if (handler->HasLowerSecurity(playerTarget))
3275 {
3276 return false;
3277 }
3278
3279 playerTarget->CombatStop();
3280 playerTarget->GetThreatMgr().RemoveMeFromThreatLists();
3281 return true;
3282 }
void RemoveMeFromThreatLists()
Definition ThreatManager.cpp:789
ThreatManager & GetThreatMgr()
Definition Unit.h:952
void CombatStop(bool includingCast=false, bool mutualPvP=true)
Definition Unit.cpp:7532

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
3211 {
3212 Creature* caster = handler->getSelectedCreature();
3213 if (!caster)
3214 {
3216 return false;
3217 }
3218
3219 Player* player = handler->GetSession()->GetPlayer();
3220
3221 caster->GetMotionMaster()->MovePoint(0, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
3222
3223 return true;
3224 }
@ 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:240
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:3734
void RemoveSpellCooldown(uint32 spell_id, bool update=false)
Definition Player.cpp:3683

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
3227 {
3228 Unit* target = handler->getSelectedUnit();
3229 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
3230 {
3232 return false;
3233 }
3234
3235 if (target->IsPlayer())
3236 if (handler->HasLowerSecurity(target->ToPlayer()))
3237 return false;
3238
3239 if (!target->IsAlive() || !damage)
3240 return true;
3241
3242 if (target->IsCreature() && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
3243 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
3244
3245 if (percent)
3246 if (StringStartsWith("pct", *percent))
3247 if (damage <= 100)
3248 damage = target->CountPctFromMaxHealth(damage);
3249
3250 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
3251
3252 if (target != handler->GetSession()->GetPlayer())
3254
3255 return true;
3256 }
@ SEC_CONSOLE
Definition Common.h:61
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:285
@ VICTIMSTATE_HIT
Definition Unit.h:86
@ HITINFO_AFFECTS_VICTIM
Definition Unit.h:100
@ DIRECT_DAMAGE
Definition Unit.h:255
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:3872
bool IsPlayer() const
Definition Object.h:201
Player * ToPlayer()
Definition Object.h:202
bool IsCreature() const
Definition Object.h:205
Creature * ToCreature()
Definition Object.h:206
void SendAttackStateUpdate(CalcDamageInfo *damageInfo)
Definition Unit.cpp:6931
uint32 GetMaxHealth() const
Definition Unit.h:1110
bool IsAlive() const
Definition Unit.h:1793
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:1122
ObjectGuid GetTarget() const
Definition Unit.h:862
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)
Definition Unit.cpp:982

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:743
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:63
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:13975
uint32 GetHealth() const
Definition Unit.h:1109

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:10571
bool IsMounted() const
Definition Unit.h:1886
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:11304
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5397

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
3285 {
3286 sArenaTeamMgr->DistributeArenaPoints();
3287 return true;
3288 }
#define sArenaTeamMgr
Definition ArenaTeamMgr.h:69

References sArenaTeamMgr.

Referenced by GetCommands().

◆ HandleFreezeCommand()

static bool misc_commandscript::HandleFreezeCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
3291 {
3292 Creature* creatureTarget = handler->getSelectedCreature();
3293
3294 if (!target && !creatureTarget)
3295 {
3296 target = PlayerIdentifier::FromTargetOrSelf(handler);
3297 }
3298
3299 if (!target && !creatureTarget)
3300 {
3302 return false;
3303 }
3304
3305 Player* playerTarget = target->GetConnectedPlayer();
3306 if (playerTarget && !creatureTarget)
3307 {
3308 handler->PSendSysMessage(LANG_COMMAND_FREEZE, target->GetName());
3309
3310 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
3311 {
3312 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, playerTarget, playerTarget);
3313 }
3314
3315 return true;
3316 }
3317 else if (creatureTarget && creatureTarget->IsAlive())
3318 {
3320
3321 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
3322 {
3323 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, creatureTarget, creatureTarget);
3324 }
3325
3326 return true;
3327 }
3328
3330 return false;
3331 }
@ LANG_COMMAND_FREEZE
Definition Language.h:1061
#define sSpellMgr
Definition SpellMgr.h:847
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:476
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1317
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1299
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:748
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:573
uint32 GetMapId() const
Definition Position.h:281
bool IsOutdoors() const
Definition Object.cpp:3191
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:1325
char const * name[16]
Definition DBCStructure.h:1331

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:177
GroupReference * GetFirstMember()
Definition Group.h:252
ObjectGuid GetLeaderGUID() const
Definition Group.cpp:2502
bool Instanceable() const
Definition Map.h:298
uint32 GetInstanceId() const
Definition Map.h:270
bool IsBeingTeleported() const
Definition Player.h:2120
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:2820
float GetObjectSize() const
Definition Object.cpp:2892

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:48

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:298
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17367
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:90
void SendWorldText(std::string_view str)
Definition Chat.cpp:139
std::string const & GetName() const
Definition ScriptObject.h:53
std::string const & GetPlayerName() const
Definition WorldSession.cpp:262

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:74
@ 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
3439 {
3440 Player* player = handler->GetSession()->GetPlayer();
3441 handler->GetSession()->SendShowMailBox(player->GetGUID());
3442 return true;
3443 }
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
2001 {
2002 Player* SelectedPlayer = handler->getSelectedPlayer();
2003 if (!SelectedPlayer)
2004 {
2006 return false;
2007 }
2008
2009 // each skills that have max skill value dependent from level seted to current level max skill value
2010 SelectedPlayer->UpdateSkillsToMaxSkillsForLevel();
2011 return true;
2012 }
void UpdateSkillsToMaxSkillsForLevel()
Definition PlayerUpdates.cpp:1140

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

Referenced by GetCommands().

◆ HandleMovegensCommand()

static bool misc_commandscript::HandleMovegensCommand ( ChatHandler handler)
inlinestatic
3077 {
3078 Unit* unit = handler->getSelectedUnit();
3079 if (!unit)
3080 {
3082 return false;
3083 }
3084
3085 handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->IsPlayer() ? "Player" : "Creature"), unit->GetGUID().ToString());
3086
3087 MotionMaster* motionMaster = unit->GetMotionMaster();
3088 float x, y, z;
3089 motionMaster->GetDestination(x, y, z);
3090
3091 for (uint8 i = 0; i < MAX_MOTION_SLOT; ++i)
3092 {
3093 MovementGenerator* movementGenerator = motionMaster->GetMotionSlot(i);
3094 if (!movementGenerator)
3095 {
3096 handler->SendSysMessage("Empty");
3097 continue;
3098 }
3099
3100 switch (movementGenerator->GetMovementGeneratorType())
3101 {
3102 case IDLE_MOTION_TYPE:
3104 break;
3105 case RANDOM_MOTION_TYPE:
3107 break;
3110 break;
3113 break;
3116 break;
3117 case CHASE_MOTION_TYPE:
3118 {
3119 Unit* target = nullptr;
3120 if (unit->IsPlayer())
3121 {
3122 target = static_cast<ChaseMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
3123 }
3124 else
3125 {
3126 target = static_cast<ChaseMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
3127 }
3128
3129 if (!target)
3130 {
3132 }
3133 else if (target->IsPlayer())
3134 {
3135 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName(), target->GetGUID().ToString());
3136 }
3137 else
3138 {
3139 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName(), target->GetGUID().ToString());
3140 }
3141 break;
3142 }
3143 case FOLLOW_MOTION_TYPE:
3144 {
3145 Unit* target = nullptr;
3146 if (unit->IsPlayer())
3147 {
3148 target = static_cast<FollowMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
3149 }
3150 else
3151 {
3152 target = static_cast<FollowMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
3153 }
3154
3155 if (!target)
3156 {
3158 }
3159 else if (target->IsPlayer())
3160 {
3161 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName(), target->GetGUID().ToString());
3162 }
3163 else
3164 {
3165 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName(), target->GetGUID().ToString());
3166 }
3167 break;
3168 }
3169 case HOME_MOTION_TYPE:
3170 {
3171 if (unit->IsCreature())
3172 {
3174 }
3175 else
3176 {
3178 }
3179 break;
3180 }
3181 case FLIGHT_MOTION_TYPE:
3183 break;
3184 case POINT_MOTION_TYPE:
3185 {
3186 handler->PSendSysMessage(LANG_MOVEGENS_POINT, x, y, z);
3187 break;
3188 }
3191 break;
3194 break;
3195 case EFFECT_MOTION_TYPE:
3197 break;
3198 default:
3199 handler->PSendSysMessage(LANG_MOVEGENS_UNKNOWN, movementGenerator->GetMovementGeneratorType());
3200 break;
3201 }
3202 }
3203 return true;
3204 }
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:82
Definition MotionMaster.h:138
_Ty GetMotionSlot(int slot) const
Definition MotionMaster.h:181
bool GetDestination(float &x, float &y, float &z)
Definition MotionMaster.cpp:1044
Definition MovementGenerator.h:28
virtual MovementGeneratorType GetMovementGeneratorType()=0
std::string const & GetName() const
Definition Object.h:529
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
2853 {
2854 std::string muteReasonStr{ muteReason };
2855
2856 if (notSpeakTime.empty())
2857 {
2858 return false;
2859 }
2860
2861 if (Acore::StringTo<int32>(notSpeakTime).value_or(0) < 0)
2862 {
2864 return false;
2865 }
2866
2867 if (muteReason.empty())
2868 {
2869 muteReasonStr = handler->GetAcoreString(LANG_NO_REASON);
2870 }
2871
2872 if (!player)
2873 {
2874 player = PlayerIdentifier::FromTarget(handler);
2875 }
2876
2877 if (!player)
2878 {
2880 return false;
2881 }
2882
2883 Player* target = player->GetConnectedPlayer();
2884 uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
2885
2886 // find only player from same account if any
2887 if (!target)
2888 if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
2889 {
2890 target = session->GetPlayer();
2891 }
2892
2893 // must have strong lesser security level
2894 if (handler->HasLowerSecurity(target, player->GetGUID(), true))
2895 {
2896 return false;
2897 }
2898
2900 int32 muteDuration = TimeStringToSecs(notSpeakTime);
2901 if (muteDuration <= 0)
2902 {
2903 muteDuration = Acore::StringTo<int32>(notSpeakTime).value_or(0);
2904 }
2905
2906 if (muteDuration <= 0)
2907 {
2909 return false;
2910 }
2911
2912 std::string muteBy = "";
2913 if (handler->GetSession())
2914 {
2915 muteBy = handler->GetSession()->GetPlayerName();
2916 }
2917 else
2918 {
2919 muteBy = handler->GetAcoreString(LANG_CONSOLE);
2920 }
2921
2922 if (target)
2923 {
2924 // Target is online, mute will be in effect right away.
2925 int64 muteTime = GameTime::GetGameTime().count() + muteDuration;
2926 target->GetSession()->m_muteTime = muteTime;
2927 stmt->SetData(0, muteTime);
2928 std::string nameLink = handler->playerLink(player->GetName());
2929
2930 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
2931 {
2932 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2933 }
2934
2935 ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, secsToTimeString(muteDuration, true), muteBy, muteReasonStr);
2936 }
2937 else
2938 {
2939 // Target is offline, mute will be in effect starting from the next login.
2940 stmt->SetData(0, -int32(muteDuration));
2941 }
2942
2943 stmt->SetData(1, muteReasonStr);
2944 stmt->SetData(2, muteBy);
2945 stmt->SetData(3, accountId);
2946 LoginDatabase.Execute(stmt);
2947
2948 stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
2949 stmt->SetData(0, accountId);
2950 stmt->SetData(1, muteDuration / MINUTE);
2951 stmt->SetData(2, muteBy);
2952 stmt->SetData(3, muteReasonStr);
2953 LoginDatabase.Execute(stmt);
2954
2955 std::string nameLink = handler->playerLink(player->GetName());
2956
2957 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
2958 {
2959 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2960 }
2961 else
2962 {
2963 // pussywizard: notify all online GMs
2964 std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
2966 for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
2967 if (itr->second->GetSession()->GetSecurity())
2968 ChatHandler(itr->second->GetSession()).PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED,
2969 (handler->GetSession() ? handler->GetSession()->GetPlayerName() : handler->GetAcoreString(LANG_CONSOLE)), nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2970 }
2971
2972 return true;
2973 }
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:123
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:91
#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:479
time_t m_muteTime
Definition WorldSession.h:619
AC_GAME_API std::string GetAcoreString(ChatHandler const *handler, AcoreStrings which)
Definition ChatCommandHelpers.cpp:27
Seconds GetGameTime()
Definition GameTime.cpp:38
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::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
3036 {
3037 if (!Utf8ToUpperOnlyLatin(accountName))
3038 {
3039 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
3040 return false;
3041 }
3042
3043 uint32 accountId = AccountMgr::GetId(accountName);
3044 if (!accountId)
3045 {
3046 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
3047 return false;
3048 }
3049
3050 return HandleMuteInfoHelper(handler, accountId, accountName.c_str());
3051 }
@ 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:3054

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
3055 {
3057 stmt->SetData(0, accountId);
3058 PreparedQueryResult result = LoginDatabase.Query(stmt);
3059
3060 if (!result)
3061 {
3062 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
3063 return true;
3064 }
3065
3066 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
3067 do
3068 {
3069 Field* fields = result->Fetch();
3070 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>());
3071 } while (result->NextRow());
3072
3073 return true;
3074 }
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:124
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
3459 {
3460 if (GameObject* go = handler->GetPlayer()->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_DOOR, range ? *range : 5.0f))
3461 {
3462 go->SetGoState(GO_STATE_ACTIVE);
3463 handler->PSendSysMessage(LANG_CMD_DOOR_OPENED, go->GetName(), go->GetEntry());
3464 return true;
3465 }
3466
3467 handler->SendErrorMessage(LANG_CMD_NO_DOOR_FOUND, range ? *range : 5.0f);
3468 return false;
3469 }
@ 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:120
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition Object.cpp:2571

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
3513 {
3514 if (!target)
3515 target = PlayerIdentifier::FromTargetOrSelf(handler);
3516
3517 if (!target || !target->IsConnected())
3518 {
3520 return false;
3521 }
3522
3523 Player* playerTarget = target->GetConnectedPlayer();
3524 WorldSession* session = playerTarget->GetSession();
3525
3526 if (!session)
3527 return false;
3528
3529 if (enableArg)
3530 {
3531 if (*enableArg)
3532 {
3533 session->SetPacketLogging(true);
3534 handler->PSendSysMessage("Packet logging enabled for {}.", playerTarget->GetName());
3535 return true;
3536 }
3537 else
3538 {
3539 session->SetPacketLogging(false);
3540 handler->PSendSysMessage("Packet logging disabled for {}.", playerTarget->GetName());
3541 return true;
3542 }
3543 }
3544
3546 return false;
3547 }
void SetPacketLogging(bool state)
Definition WorldSession.cpp:1641

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
2059 {
2060 if (!target)
2061 {
2062 target = PlayerIdentifier::FromTargetOrSelf(handler);
2063 }
2064
2065 if (!target)
2066 {
2067 return false;
2068 }
2069
2070 Player* playerTarget = target->GetConnectedPlayer();
2071
2072 CharacterDatabasePreparedStatement* stmt = nullptr;
2073 LoginDatabasePreparedStatement* loginStmt = nullptr;
2074
2075 // Account data print variables
2076 std::string userName = handler->GetAcoreString(LANG_ERROR);
2077 ObjectGuid::LowType lowguid = target->GetGUID().GetCounter();
2078 uint32 accId = 0;
2079 std::string eMail = handler->GetAcoreString(LANG_ERROR);
2080 std::string regMail = handler->GetAcoreString(LANG_ERROR);
2081 uint32 security = 0;
2082 std::string lastIp = handler->GetAcoreString(LANG_ERROR);
2083 uint8 locked = 0;
2084 std::string lastLogin = handler->GetAcoreString(LANG_ERROR);
2085 uint32 failedLogins = 0;
2086 uint32 latency = 0;
2087 std::string OS = handler->GetAcoreString(LANG_UNKNOWN);
2088
2089 // Mute data print variables
2090 int64 muteTime = -1;
2091 std::string muteReason = handler->GetAcoreString(LANG_NO_REASON);
2092 std::string muteBy = handler->GetAcoreString(LANG_UNKNOWN);
2093
2094 // Ban data print variables
2095 int64 banTime = -1;
2096 std::string banType = handler->GetAcoreString(LANG_UNKNOWN);
2097 std::string banReason = handler->GetAcoreString(LANG_NO_REASON);
2098 std::string bannedBy = handler->GetAcoreString(LANG_UNKNOWN);
2099
2100 // Character data print variables
2101 uint8 raceid, classid = 0; //RACE_NONE, CLASS_NONE
2102 std::string raceStr, classStr = handler->GetAcoreString(LANG_UNKNOWN);
2103 uint8 gender = 0;
2104 int8 locale = handler->GetSessionDbcLocale();
2105 uint32 totalPlayerTime = 0;
2106 uint8 level = 0;
2107 std::string alive = handler->GetAcoreString(LANG_ERROR);
2108 uint32 money = 0;
2109 uint32 xp = 0;
2110 uint32 xptotal = 0;
2111
2112 // Position data print
2113 uint32 mapId;
2114 uint32 areaId;
2115 uint32 phase = 0;
2116 std::string areaName = "";
2117 std::string zoneName = "";
2118
2119 // Guild data print variables defined so that they exist, but are not necessarily used
2120 uint32 guildId = 0;
2121 uint8 guildRankId = 0;
2122 std::string guildName;
2123 std::string guildRank;
2124 std::string note;
2125 std::string officeNote;
2126
2127 // get additional information from Player object
2128 if (playerTarget)
2129 {
2130 // check online security
2131 if (handler->HasLowerSecurity(playerTarget))
2132 {
2133 return false;
2134 }
2135
2136 accId = playerTarget->GetSession()->GetAccountId();
2137 money = playerTarget->GetMoney();
2138 totalPlayerTime = playerTarget->GetTotalPlayedTime();
2139 level = playerTarget->GetLevel();
2140 latency = playerTarget->GetSession()->GetLatency();
2141 raceid = playerTarget->getRace();
2142 classid = playerTarget->getClass();
2143 muteTime = playerTarget->GetSession()->m_muteTime;
2144 mapId = playerTarget->GetMapId();
2145 areaId = playerTarget->GetAreaId();
2146 alive = playerTarget->IsAlive() ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO);
2147 gender = playerTarget->getGender();
2148 phase = playerTarget->GetPhaseMask();
2149 }
2150 // get additional information from DB
2151 else
2152 {
2153 // check offline security
2154 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
2155 {
2156 return false;
2157 }
2158
2159 // Query informations from the DB
2160 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
2161 stmt->SetData(0, lowguid);
2162 PreparedQueryResult charInfoResult = CharacterDatabase.Query(stmt);
2163
2164 if (!charInfoResult)
2165 {
2166 return false;
2167 }
2168
2169 Field* fields = charInfoResult->Fetch();
2170 totalPlayerTime = fields[0].Get<uint32>();
2171 level = fields[1].Get<uint8>();
2172 money = fields[2].Get<uint32>();
2173 accId = fields[3].Get<uint32>();
2174 raceid = fields[4].Get<uint8>();
2175 classid = fields[5].Get<uint8>();
2176 mapId = fields[6].Get<uint16>();
2177 areaId = fields[7].Get<uint16>();
2178 gender = fields[8].Get<uint8>();
2179 uint32 health = fields[9].Get<uint32>();
2180 uint32 playerFlags = fields[10].Get<uint32>();
2181
2182 if (!health || playerFlags & PLAYER_FLAGS_GHOST)
2183 {
2184 alive = handler->GetAcoreString(LANG_NO);
2185 }
2186 else
2187 {
2188 alive = handler->GetAcoreString(LANG_YES);
2189 }
2190 }
2191
2192 // Query the prepared statement for login data
2193 loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
2194 loginStmt->SetData(0, int32(realm.Id.Realm));
2195 loginStmt->SetData(1, accId);
2196
2197 PreparedQueryResult accInfoResult = LoginDatabase.Query(loginStmt);
2198 if (accInfoResult)
2199 {
2200 Field* fields = accInfoResult->Fetch();
2201 userName = fields[0].Get<std::string>();
2202 security = fields[1].Get<uint8>();
2203
2204 // Only fetch these fields if commander has sufficient rights)
2205 if (!handler->GetSession() || handler->GetSession()->GetSecurity() >= AccountTypes(security))
2206 {
2207 eMail = fields[2].Get<std::string>();
2208 regMail = fields[3].Get<std::string>();
2209 lastIp = fields[4].Get<std::string>();
2210 lastLogin = fields[5].Get<std::string>();
2211
2212 if (IpLocationRecord const* location = sIPLocation->GetLocationRecord(lastIp))
2213 {
2214 lastIp.append(" (");
2215 lastIp.append(location->CountryName);
2216 lastIp.append(")");
2217 }
2218 }
2219 else
2220 {
2221 eMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2222 regMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2223 lastIp = handler->GetAcoreString(LANG_UNAUTHORIZED);
2224 lastLogin = handler->GetAcoreString(LANG_UNAUTHORIZED);
2225 }
2226
2227 muteTime = fields[6].Get<uint64>();
2228 muteReason = fields[7].Get<std::string>();
2229 muteBy = fields[8].Get<std::string>();
2230 failedLogins = fields[9].Get<uint32>();
2231 locked = fields[10].Get<uint8>();
2232 OS = fields[11].Get<std::string>();
2233 }
2234
2235 // Creates a chat link to the character. Returns nameLink
2236 std::string nameLink = handler->playerLink(target->GetName());
2237
2238 // Returns banType, banTime, bannedBy, banreason
2239 LoginDatabasePreparedStatement* banQuery = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO_BANS);
2240 banQuery->SetData(0, accId);
2241
2242 PreparedQueryResult accBannedResult = LoginDatabase.Query(banQuery);
2243 if (!accBannedResult)
2244 {
2245 banType = handler->GetAcoreString(LANG_CHARACTER);
2246 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_BANS);
2247 stmt->SetData(0, lowguid);
2248 accBannedResult = CharacterDatabase.Query(stmt);
2249 }
2250
2251 if (accBannedResult)
2252 {
2253 Field* fields = accBannedResult->Fetch();
2254 banTime = int64(fields[1].Get<uint64>() ? 0 : fields[0].Get<uint32>());
2255 bannedBy = fields[2].Get<std::string>();
2256 banReason = fields[3].Get<std::string>();
2257 }
2258
2259 // Can be used to query data from World database
2260 WorldDatabasePreparedStatement* xpQuery = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
2261 xpQuery->SetData(0, level);
2262
2263 PreparedQueryResult xpResult = WorldDatabase.Query(xpQuery);
2264 if (xpResult)
2265 {
2266 Field* fields = xpResult->Fetch();
2267 xptotal = fields[0].Get<uint32>();
2268 }
2269
2270 // Can be used to query data from Characters database
2271 CharacterDatabasePreparedStatement* charXpQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
2272 charXpQuery->SetData(0, lowguid);
2273
2274 PreparedQueryResult charXpResult = CharacterDatabase.Query(charXpQuery);
2275 if (charXpResult)
2276 {
2277 Field* fields = charXpResult->Fetch();
2278 xp = fields[0].Get<uint32>();
2279 ObjectGuid::LowType gguid = fields[1].Get<uint32>();
2280
2281 if (gguid != 0)
2282 {
2284 guildQuery->SetData(0, lowguid);
2285
2286 PreparedQueryResult guildInfoResult = CharacterDatabase.Query(guildQuery);
2287 if (guildInfoResult)
2288 {
2289 Field* guildInfoFields = guildInfoResult->Fetch();
2290 guildId = guildInfoFields[0].Get<uint32>();
2291 guildName = guildInfoFields[1].Get<std::string>();
2292 guildRank = guildInfoFields[2].Get<std::string>();
2293 note = guildInfoFields[3].Get<std::string>();
2294 officeNote = guildInfoFields[4].Get<std::string>();
2295 }
2296 }
2297 }
2298
2299 // Initiate output
2300 // Output I. LANG_PINFO_PLAYER
2301 handler->PSendSysMessage(LANG_PINFO_PLAYER, playerTarget ? "" : handler->GetAcoreString(LANG_OFFLINE), nameLink, target->GetGUID().ToString());
2302
2303 // Output II. LANG_PINFO_GM_ACTIVE if character is gamemaster
2304 if (playerTarget && playerTarget->IsGameMaster())
2305 {
2307 }
2308
2309 // Output III. LANG_PINFO_BANNED if ban exists and is applied
2310 if (banTime >= 0)
2311 {
2312 handler->PSendSysMessage(LANG_PINFO_BANNED, banType, banReason, banTime > 0 ? secsToTimeString(banTime - GameTime::GetGameTime().count(), true) : handler->GetAcoreString(LANG_PERMANENTLY), bannedBy);
2313 }
2314
2315 // Output IV. LANG_PINFO_MUTED if mute is applied
2316 if (muteTime > 0)
2317 {
2318 handler->PSendSysMessage(LANG_PINFO_MUTED, muteReason, secsToTimeString(muteTime - GameTime::GetGameTime().count(), true), muteBy);
2319 }
2320
2321 // Output V. LANG_PINFO_ACC_ACCOUNT
2322 handler->PSendSysMessage(LANG_PINFO_ACC_ACCOUNT, userName, accId, security);
2323
2324 if (playerTarget)
2325 {
2326 uint32 accountFlags = playerTarget->GetSession()->GetAccountFlags();
2328 for (uint8 i = 0; i < MAX_ACCOUNT_FLAG; i++)
2329 if (accountFlags & (uint32(1) << i))
2331 }
2332
2333 // Output VI. LANG_PINFO_ACC_LASTLOGIN
2334 handler->PSendSysMessage(LANG_PINFO_ACC_LASTLOGIN, lastLogin, failedLogins);
2335
2336 // Output VII. LANG_PINFO_ACC_OS
2337 handler->PSendSysMessage(LANG_PINFO_ACC_OS, OS, latency);
2338
2339 // Output VIII. LANG_PINFO_ACC_REGMAILS
2340 handler->PSendSysMessage(LANG_PINFO_ACC_REGMAILS, regMail, eMail);
2341
2342 // Output IX. LANG_PINFO_ACC_IP
2343 handler->PSendSysMessage(LANG_PINFO_ACC_IP, lastIp, locked ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO));
2344
2345 // Output X. LANG_PINFO_CHR_LEVEL
2346 if (level != sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
2347 {
2348 handler->PSendSysMessage(LANG_PINFO_CHR_LEVEL_LOW, level, xp, xptotal, (xptotal - xp));
2349 }
2350 else
2351 {
2353 }
2354
2355 // Output XI. LANG_PINFO_CHR_RACE
2356 switch (raceid)
2357 {
2358 case RACE_HUMAN:
2359 raceStr = "Human";
2360 break;
2361 case RACE_ORC:
2362 raceStr = "Orc";
2363 break;
2364 case RACE_DWARF:
2365 raceStr = "Dwarf";
2366 break;
2367 case RACE_NIGHTELF:
2368 raceStr = "Night Elf";
2369 break;
2370 case RACE_UNDEAD_PLAYER:
2371 raceStr = "Undead";
2372 break;
2373 case RACE_TAUREN:
2374 raceStr = "Tauren";
2375 break;
2376 case RACE_GNOME:
2377 raceStr = "Gnome";
2378 break;
2379 case RACE_TROLL:
2380 raceStr = "Troll";
2381 break;
2382 case RACE_BLOODELF:
2383 raceStr = "Blood Elf";
2384 break;
2385 case RACE_DRAENEI:
2386 raceStr = "Draenei";
2387 break;
2388 }
2389
2390 switch (classid)
2391 {
2392 case CLASS_WARRIOR:
2393 classStr = "Warrior";
2394 break;
2395 case CLASS_PALADIN:
2396 classStr = "Paladin";
2397 break;
2398 case CLASS_HUNTER:
2399 classStr = "Hunter";
2400 break;
2401 case CLASS_ROGUE:
2402 classStr = "Rogue";
2403 break;
2404 case CLASS_PRIEST:
2405 classStr = "Priest";
2406 break;
2407 case CLASS_DEATH_KNIGHT:
2408 classStr = "Death Knight";
2409 break;
2410 case CLASS_SHAMAN:
2411 classStr = "Shaman";
2412 break;
2413 case CLASS_MAGE:
2414 classStr = "Mage";
2415 break;
2416 case CLASS_WARLOCK:
2417 classStr = "Warlock";
2418 break;
2419 case CLASS_DRUID:
2420 classStr = "Druid";
2421 break;
2422 }
2423
2424 handler->PSendSysMessage(LANG_PINFO_CHR_RACE, (gender == 0 ? handler->GetAcoreString(LANG_CHARACTER_GENDER_MALE) : handler->GetAcoreString(LANG_CHARACTER_GENDER_FEMALE)), raceStr, classStr);
2425
2426 // Output XII. LANG_PINFO_CHR_ALIVE
2427 handler->PSendSysMessage(LANG_PINFO_CHR_ALIVE, alive);
2428
2429 // Output XIII. LANG_PINFO_CHR_PHASE if player is not in GM mode (GM is in every phase)
2430 if (playerTarget && !playerTarget->IsGameMaster()) // IsInWorld() returns false on loadingscreen, so it's more
2431 {
2432 handler->PSendSysMessage(LANG_PINFO_CHR_PHASE, phase); // precise than just target (safer ?).
2433 }
2434
2435 // However, as we usually just require a target here, we use target instead.
2436 // Output XIV. LANG_PINFO_CHR_MONEY
2437 uint32 gold = money / GOLD;
2438 uint32 silv = (money % GOLD) / SILVER;
2439 uint32 copp = (money % GOLD) % SILVER;
2440 handler->PSendSysMessage(LANG_PINFO_CHR_MONEY, gold, silv, copp);
2441
2442 // Position data
2443 MapEntry const* map = sMapStore.LookupEntry(mapId);
2444 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);
2445
2446 if (area)
2447 {
2448 zoneName = area->area_name[locale];
2449
2450 AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->zone);
2451 if (zone)
2452 {
2453 areaName = zoneName;
2454 zoneName = zone->area_name[locale];
2455 }
2456 }
2457
2458 if (zoneName.empty())
2459 zoneName = handler->GetAcoreString(LANG_UNKNOWN);
2460
2461 if (!areaName.empty())
2462 handler->PSendSysMessage(LANG_PINFO_CHR_MAP_WITH_AREA, map->name[locale], zoneName, areaName);
2463 else
2464 handler->PSendSysMessage(LANG_PINFO_CHR_MAP, map->name[locale], zoneName);
2465
2466 // Output XVII. - XVIX. if they are not empty
2467 if (!guildName.empty())
2468 {
2469 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName, guildId);
2470 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank, uint32(guildRankId));
2471
2472 if (!note.empty())
2473 {
2475 }
2476
2477 if (!officeNote.empty())
2478 {
2479 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_ONOTE, officeNote);
2480 }
2481 }
2482
2483 // Output XX. LANG_PINFO_CHR_PLAYEDTIME
2484 handler->PSendSysMessage(LANG_PINFO_CHR_PLAYEDTIME, (secsToTimeString(totalPlayerTime, true)));
2485
2486 // Output XXI. LANG_PINFO_CHR_ONLINETIME (only for online players)
2487 if (playerTarget)
2488 {
2489 uint32 onlineTime = uint32(GameTime::GetGameTime().count() - playerTarget->m_logintime);
2490 handler->PSendSysMessage(LANG_PINFO_CHR_ONLINETIME, secsToTimeString(onlineTime, true));
2491 }
2492
2493 // Mail Data - an own query, because it may or may not be useful.
2494 // SQL: "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?"
2496 mailQuery->SetData(0, lowguid);
2497
2498 PreparedQueryResult mailInfoResult = CharacterDatabase.Query(mailQuery);
2499 if (mailInfoResult)
2500 {
2501 Field* fields = mailInfoResult->Fetch();
2502 uint32 readmail = uint32(fields[0].Get<double>());
2503 uint32 totalmail = uint32(fields[1].Get<uint64>());
2504
2505 // Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given
2506 if (totalmail >= 1)
2507 {
2508 handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, readmail, totalmail);
2509 }
2510 }
2511
2512 return true;
2513 }
@ CHAR_SEL_PINFO_XP
Definition CharacterDatabase.h:341
@ CHAR_SEL_GUILD_MEMBER_EXTENDED
Definition CharacterDatabase.h:147
@ CHAR_SEL_CHAR_PINFO
Definition CharacterDatabase.h:340
@ CHAR_SEL_PINFO_MAILS
Definition CharacterDatabase.h:342
@ CHAR_SEL_PINFO_BANS
Definition CharacterDatabase.h:343
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:1630
time_t m_logintime
Definition Player.h:1207
uint8 getGender() const
Definition Unit.h:849
uint8 getClass() const
Definition Unit.h:844
uint8 getRace(bool original=false) const
Definition Unit.cpp:17057
uint8 GetLevel() const
Definition Unit.h:1104
uint32 GetPhaseMask() const
Definition Object.h:517
uint32 GetAreaId() const
Definition Object.cpp:3174
uint32 GetAccountFlags() const
Definition WorldSession.h:414
uint32 GetLatency() const
Definition WorldSession.h:627
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
3376 {
3377 if (!sSoundEntriesStore.LookupEntry(soundId))
3378 {
3379 handler->SendErrorMessage(LANG_SOUND_NOT_EXIST, soundId);
3380 return false;
3381 }
3382
3383 sWorldSessionMgr->SendGlobalMessage(WorldPackets::Misc::Playsound(soundId).Write());
3384
3386 return true;
3387 }
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
3390 {
3391 Unit* unit = handler->getSelectedUnit();
3392 if (!unit)
3393 {
3394 return false;
3395 }
3396
3397 handler->GetSession()->GetPlayer()->CastSpell(unit, MAP_OUTLAND, true);
3398 return true;
3399 }
@ MAP_OUTLAND
Definition AreaDefines.h:217

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
2799 {
2800 Player* player = handler->GetSession()->GetPlayer();
2801
2802 // Phase 1: respawn creatures/GOs that still have corpses in the grid
2803 Acore::RespawnDo u_do;
2804 Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
2805 Cell::VisitObjects(player, worker, player->GetGridActivationRange());
2806
2807 // Phase 2: force-respawn creatures/GOs that were fully removed (non-compat mode)
2808 // by setting their respawn times to now so ProcessRespawns() picks them up
2809 Map* map = player->GetMap();
2810 uint32 gridId = Acore::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId();
2811 time_t now = GameTime::GetGameTime().count();
2812
2813 std::vector<ObjectGuid::LowType> creaturesToRespawn;
2814 for (auto const& pair : map->GetCreatureRespawnTimes())
2815 {
2816 CreatureData const* data = sObjectMgr->GetCreatureData(pair.first);
2817 if (!data || Acore::ComputeGridCoord(data->posX, data->posY).GetId() != gridId)
2818 continue;
2819
2820 // Skip pooled spawns — Phase 1 already triggered pool rotation via
2821 // Creature::Respawn() -> PoolMgr::UpdatePool(). Forcing a respawn time
2822 // here would cause ProcessRespawns() to call UpdatePool() again,
2823 // spawning duplicates beyond the pool's max_limit.
2824 if (sPoolMgr->IsPartOfAPool<Creature>(pair.first))
2825 continue;
2826
2827 creaturesToRespawn.push_back(pair.first);
2828 }
2829 for (ObjectGuid::LowType spawnId : creaturesToRespawn)
2830 map->SaveCreatureRespawnTime(spawnId, now);
2831
2832 std::vector<ObjectGuid::LowType> goesToRespawn;
2833 for (auto const& pair : map->GetGORespawnTimes())
2834 {
2835 GameObjectData const* data = sObjectMgr->GetGameObjectData(pair.first);
2836 if (!data || Acore::ComputeGridCoord(data->posX, data->posY).GetId() != gridId)
2837 continue;
2838
2839 // Skip pooled spawns — same reason as creatures above.
2840 if (sPoolMgr->IsPartOfAPool<GameObject>(pair.first))
2841 continue;
2842
2843 goesToRespawn.push_back(pair.first);
2844 }
2845 for (ObjectGuid::LowType spawnId : goesToRespawn)
2846 map->SaveGORespawnTime(spawnId, now);
2847
2848 return true;
2849 }
#define sPoolMgr
Definition PoolMgr.h:216
Definition GridNotifiers.h:668
float GetGridActivationRange() const
Definition Object.cpp:1683
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
2775 {
2776 Player* player = handler->GetSession()->GetPlayer();
2777
2778 Unit* target = handler->getSelectedUnit();
2779 if (player->GetTarget() && target)
2780 {
2781 if (!target->IsCreature() || target->IsPet())
2782 {
2784 return false;
2785 }
2786
2787 if (target->isDead())
2788 {
2789 target->ToCreature()->Respawn(true);
2790 }
2791 return true;
2792 }
2793
2795 return false;
2796 }
void Respawn(bool force=false)
Definition Creature.cpp:2027
bool IsPet() const
Definition Unit.h:798
bool isDead() const
Definition Unit.h:1795

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
2631 {
2632 if (!sObjectMgr->GetCreatureTemplate(entry))
2633 {
2635 return false;
2636 }
2637
2638 Map* map = nullptr;
2639 if (handler->GetSession())
2640 {
2641 // In-game: always use the player's current map
2642 map = handler->GetSession()->GetPlayer()->GetMap();
2643 }
2644 else
2645 {
2646 // Console: mapId required, instanceId optional
2647 if (!mapIdArg)
2648 {
2650 return false;
2651 }
2652 map = sMapMgr->FindMap(*mapIdArg, instanceIdArg.value_or(0));
2653 }
2654
2655 if (!map)
2656 {
2657 handler->PSendSysMessage(LANG_RESPAWN_GUID_MAP_NOT_LOADED, mapIdArg.value_or(0));
2658 return false;
2659 }
2660
2661 time_t now = GameTime::GetGameTime().count();
2662 uint32 count = 0;
2663
2664 // Phase 1: respawn dead corpses that are still tracked in the spawn-id store.
2665 // Collect first to avoid iterator invalidation caused by Respawn().
2666 std::vector<Creature*> deadCreatures;
2667 for (auto const& [spawnId, creature] : map->GetCreatureBySpawnIdStore())
2668 {
2669 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
2670 if (!data || data->id != entry)
2671 continue;
2672 if (creature->isDead())
2673 deadCreatures.push_back(creature);
2674 }
2675 for (Creature* creature : deadCreatures)
2676 {
2677 creature->Respawn(true);
2678 ++count;
2679 }
2680
2681 // Phase 2: set respawn time to now for fully-removed spawns, skipping pools
2682 std::vector<ObjectGuid::LowType> toRespawn;
2683 for (auto const& [spawnId, respawnTime] : map->GetCreatureRespawnTimes())
2684 {
2685 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
2686 if (!data || data->id != entry)
2687 continue;
2688 if (sPoolMgr->IsPartOfAPool<Creature>(spawnId))
2689 continue;
2690 toRespawn.push_back(spawnId);
2691 }
2692 for (ObjectGuid::LowType spawnId : toRespawn)
2693 {
2694 map->SaveCreatureRespawnTime(spawnId, now);
2695 ++count;
2696 }
2697
2699 return true;
2700 }
@ LANG_LIST_RESPAWNS_NO_MAP
Definition Language.h:1520
@ LANG_RESPAWN_GUID_MAP_NOT_LOADED
Definition Language.h:1505
@ LANG_RESPAWN_ENTRY_CREATURE_NOT_FOUND
Definition Language.h:1514
@ LANG_RESPAWN_ENTRY_CREATURE_QUEUED
Definition Language.h:1516
#define sMapMgr
Definition MapMgr.h:220
void SaveCreatureRespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition Map.cpp:2449
uint32 id
Definition CreatureData.h:372

References Map::GetCreatureBySpawnIdStore(), Map::GetCreatureRespawnTimes(), GameTime::GetGameTime(), 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(), Map::SaveCreatureRespawnTime(), ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), sMapMgr, sObjectMgr, and sPoolMgr.

Referenced by GetCommands().

◆ HandleRespawnCreatureByGuidCommand()

static bool misc_commandscript::HandleRespawnCreatureByGuidCommand ( ChatHandler handler,
ObjectGuid::LowType  spawnId 
)
inlinestatic
2516 {
2517 CreatureData const* creData = sObjectMgr->GetCreatureData(spawnId);
2518 if (!creData)
2519 {
2521 return false;
2522 }
2523
2524 Map* map = nullptr;
2525 if (handler->GetSession())
2526 {
2527 Player* player = handler->GetSession()->GetPlayer();
2528 if (player->GetMapId() == creData->mapid)
2529 map = player->GetMap();
2530 }
2531 if (!map)
2532 map = sMapMgr->FindMap(creData->mapid, 0);
2533
2534 if (!map)
2535 {
2537 return true;
2538 }
2539
2540 // First pass: check if any instance is alive
2541 bool isAlive = false;
2542 auto const creBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId);
2543 for (auto itr = creBounds.first; itr != creBounds.second; ++itr)
2544 {
2545 if (itr->second->IsAlive())
2546 {
2547 isAlive = true;
2548 break;
2549 }
2550 }
2551
2552 if (isAlive)
2553 {
2554 handler->PSendSysMessage(LANG_RESPAWN_GUID_CREATURE_ALIVE, spawnId, creData->id);
2555 return true;
2556 }
2557
2558 // Second pass: respawn any dead corpses in the world
2559 for (auto itr = creBounds.first; itr != creBounds.second; ++itr)
2560 {
2561 if (itr->second->isDead())
2562 itr->second->Respawn(true);
2563 }
2564 // Also trigger via respawn time queue for fully-removed spawns
2565 if (map->GetCreatureRespawnTime(spawnId) > 0)
2566 {
2567 time_t now = GameTime::GetGameTime().count();
2568 map->SaveCreatureRespawnTime(spawnId, now);
2569 }
2570 handler->PSendSysMessage(LANG_RESPAWN_GUID_CREATURE_QUEUED, spawnId, creData->id);
2571 return true;
2572 }
@ LANG_RESPAWN_GUID_CREATURE_QUEUED
Definition Language.h:1507
@ LANG_RESPAWN_GUID_CREATURE_ALIVE
Definition Language.h:1506
@ LANG_RESPAWN_GUID_CREATURE_NOT_FOUND
Definition Language.h:1504
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::GetCreatureBySpawnIdStore(), Map::GetCreatureRespawnTime(), GameTime::GetGameTime(), 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(), Map::SaveCreatureRespawnTime(), 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
2703 {
2704 if (!sObjectMgr->GetGameObjectTemplate(entry))
2705 {
2707 return false;
2708 }
2709
2710 Map* map = nullptr;
2711 if (handler->GetSession())
2712 {
2713 // In-game: always use the player's current map
2714 map = handler->GetSession()->GetPlayer()->GetMap();
2715 }
2716 else
2717 {
2718 // Console: mapId required, instanceId optional
2719 if (!mapIdArg)
2720 {
2722 return false;
2723 }
2724 map = sMapMgr->FindMap(*mapIdArg, instanceIdArg.value_or(0));
2725 }
2726
2727 if (!map)
2728 {
2729 handler->PSendSysMessage(LANG_RESPAWN_GUID_MAP_NOT_LOADED, mapIdArg.value_or(0));
2730 return false;
2731 }
2732
2733 time_t now = GameTime::GetGameTime().count();
2734 uint32 count = 0;
2735
2736 // Phase 1: respawn inactive objects that are still tracked in the spawn-id store.
2737 // Collect first to avoid iterator invalidation caused by Respawn().
2738 std::vector<GameObject*> inactiveGOs;
2739 for (auto const& [spawnId, go] : map->GetGameObjectBySpawnIdStore())
2740 {
2741 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
2742 if (!data || data->id != entry)
2743 continue;
2744 if (!go->isSpawned())
2745 inactiveGOs.push_back(go);
2746 }
2747 for (GameObject* go : inactiveGOs)
2748 {
2749 go->Respawn();
2750 ++count;
2751 }
2752
2753 // Phase 2: set respawn time to now for fully-removed spawns, skipping pools
2754 std::vector<ObjectGuid::LowType> toRespawn;
2755 for (auto const& [spawnId, respawnTime] : map->GetGORespawnTimes())
2756 {
2757 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
2758 if (!data || data->id != entry)
2759 continue;
2760 if (sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
2761 continue;
2762 toRespawn.push_back(spawnId);
2763 }
2764 for (ObjectGuid::LowType spawnId : toRespawn)
2765 {
2766 map->SaveGORespawnTime(spawnId, now);
2767 ++count;
2768 }
2769
2771 return true;
2772 }
@ LANG_RESPAWN_ENTRY_GAMEOBJECT_QUEUED
Definition Language.h:1517
@ LANG_RESPAWN_ENTRY_GAMEOBJECT_NOT_FOUND
Definition Language.h:1515
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition Map.cpp:2494
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
2575 {
2576 GameObjectData const* goData = sObjectMgr->GetGameObjectData(spawnId);
2577 if (!goData)
2578 {
2580 return false;
2581 }
2582
2583 Map* map = nullptr;
2584 if (handler->GetSession())
2585 {
2586 Player* player = handler->GetSession()->GetPlayer();
2587 if (player->GetMapId() == goData->mapid)
2588 map = player->GetMap();
2589 }
2590 if (!map)
2591 map = sMapMgr->FindMap(goData->mapid, 0);
2592
2593 if (!map)
2594 {
2596 return true;
2597 }
2598
2599 // First pass: check if any instance is already active
2600 bool isActive = false;
2601 auto const goBounds = map->GetGameObjectBySpawnIdStore().equal_range(spawnId);
2602 for (auto itr = goBounds.first; itr != goBounds.second; ++itr)
2603 {
2604 if (itr->second->isSpawned())
2605 {
2606 isActive = true;
2607 break;
2608 }
2609 }
2610
2611 if (isActive)
2612 {
2614 return true;
2615 }
2616
2617 // Second pass: respawn inactive objects in the world
2618 for (auto itr = goBounds.first; itr != goBounds.second; ++itr)
2619 itr->second->Respawn();
2620 // Also trigger via respawn time queue for fully-removed spawns
2621 if (map->GetGORespawnTime(spawnId) > 0)
2622 {
2623 time_t now = GameTime::GetGameTime().count();
2624 map->SaveGORespawnTime(spawnId, now);
2625 }
2627 return true;
2628 }
@ LANG_RESPAWN_GUID_GAMEOBJECT_QUEUED
Definition Language.h:1509
@ LANG_RESPAWN_GUID_GAMEOBJECT_ACTIVE
Definition Language.h:1508
@ LANG_RESPAWN_GUID_GAMEOBJECT_NOT_FOUND
Definition Language.h:1511
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:4658

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:173
void SaveToDB(bool create, bool logout)
Definition PlayerStorage.cpp:7196
uint32 GetSaveTimer() const
Definition Player.h:2404
bool HasPermission(uint32 permissionId)
Definition WorldSession.cpp:1671
@ 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
2015 {
2016 uint32 skillID = uint32(skillId);
2017
2018 if (skillID <= 0)
2019 {
2020 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, skillID);
2021 return false;
2022 }
2023
2024 Player* target = handler->getSelectedPlayer();
2025 if (!target)
2026 {
2028 return false;
2029 }
2030
2031 SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skillID);
2032 if (!skillLine)
2033 {
2034 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, uint32(skillID));
2035 return false;
2036 }
2037
2038 bool targetHasSkill = target->GetSkillValue(skillID);
2039
2040 // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes
2041 // the max level of the new profession.
2042 uint16 max = maxPureSkill ? *maxPureSkill : targetHasSkill ? target->GetPureMaxSkillValue(skillID) : uint16(level);
2043
2044 if (level <= 0 || level > max || max <= 0)
2045 {
2046 return false;
2047 }
2048
2049 // If the player has the skill, we get the current skill step. If they don't have the skill, we
2050 // add the skill to the player's book with step 1 (which is the first rank, in most cases something
2051 // like 'Apprentice <skill>'.
2052 target->SetSkill(skillID, targetHasSkill ? target->GetSkillStep(skillID) : 1, level, max);
2053 handler->PSendSysMessage(LANG_SET_SKILL, skillID, skillLine->name[handler->GetSessionDbcLocale()], handler->GetNameLink(target), level, max);
2054 return true;
2055 }
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:5610
uint16 GetSkillStep(uint16 skill) const
Definition Player.cpp:5598
uint16 GetPureMaxSkillValue(uint32 skill) const
Definition Player.cpp:5645
void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
Definition Player.cpp:5484
Definition DBCStructure.h:1583
char const * name[16]
Definition DBCStructure.h:1587

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:815
#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:303
uint32 GetMapId() const
Definition Battleground.h:441
void DecreaseInvitedCount(TeamId teamId)
Definition Battleground.h:394
uint8 GetArenaType() const
Definition Battleground.h:353
void StartBattleground()
Definition Battleground.cpp:1169
uint32 GetInstanceID() const
Definition Battleground.h:331
void IncreaseInvitedCount(TeamId teamId)
Definition Battleground.h:395
uint32 GetStartTime() const
Definition Battleground.h:334
BattlegroundBracketId GetBracketId() const
Definition Battleground.h:330
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:329
void SetSentErrorMessage(bool val)
Definition Chat.h:238
bool isLFGGroup(bool restricted=false) const
Definition Group.cpp:2471
bool isBGGroup() const
Definition Group.cpp:2482
uint32 GetMembersCount() const
Definition Group.h:254
bool isBFGroup() const
Definition Group.cpp:2487
bool isRaidGroup() const
Definition Group.cpp:2477
MapEntry const * GetEntry() const
Definition Map.h:175
bool IsInWorld() const
Definition Object.h:109
static TeamId TeamIdForRace(uint8 race)
Definition Player.cpp:5989
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5852
bool InBattlegroundQueue(bool ignoreArena=false) const
Definition Player.cpp:12445
bool IsUsingLfg()
Definition Player.cpp:13368
Map * FindMap() const
Definition Object.h:632
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:1353

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
3446 {
3447 if (!id)
3448 {
3450 return false;
3451 }
3452
3453 std::string str = sObjectMgr->GetAcoreString(id, locale ? static_cast<LocaleConstant>(*locale) : DEFAULT_LOCALE);
3454 handler->SendSysMessage(str);
3455 return true;
3456 }
LocaleConstant
Definition Common.h:125
#define DEFAULT_LOCALE
Definition Common.h:139
@ 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:42
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:5189
void RemoveAllAuras()
Definition Unit.cpp:5612

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
3426 {
3427 Player* player = handler->GetSession()->GetPlayer();
3428
3429 if (player->isPossessing())
3430 {
3431 return false;
3432 }
3433
3434 player->StopCastingBindSight();
3435 return true;
3436 }
void StopCastingBindSight(Aura *except=nullptr)
Definition Player.cpp:13456
bool isPossessing() const
Definition Unit.h:1314

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
3334 {
3335 Creature* creatureTarget = handler->getSelectedCreature();
3336
3337 if (!target && !creatureTarget)
3338 {
3339 target = PlayerIdentifier::FromTargetOrSelf(handler);
3340 }
3341
3342 if (!target && !creatureTarget)
3343 {
3345 return false;
3346 }
3347
3348 Player* playerTarget = target->GetConnectedPlayer();
3349
3350 if (!creatureTarget && playerTarget && playerTarget->HasAura(SPELL_FREEZE))
3351 {
3352 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
3353 playerTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
3354 return true;
3355 }
3356 else if (creatureTarget && creatureTarget->HasAura(SPELL_FREEZE))
3357 {
3359 creatureTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
3360 return true;
3361 }
3362 else if (!creatureTarget && target && !target->IsConnected())
3363 {
3365 stmt->SetData(0, target->GetGUID().GetCounter());
3366 CharacterDatabase.Execute(stmt);
3367 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
3368 return true;
3369 }
3370
3372 return true;
3373 }
@ CHAR_DEL_CHAR_AURA_FROZEN
Definition CharacterDatabase.h:358
@ 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:6017

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
2977 {
2978 if (!target)
2979 {
2980 target = PlayerIdentifier::FromTargetOrSelf(handler);
2981 }
2982
2983 if (!target)
2984 {
2985 return false;
2986 }
2987
2988 Player* playerTarget = target->GetConnectedPlayer();
2989 uint32 accountId = playerTarget ? playerTarget->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(target->GetGUID());
2990
2991 // find only player from same account if any
2992 if (!playerTarget)
2993 {
2994 if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
2995 {
2996 playerTarget = session->GetPlayer();
2997 }
2998 }
2999
3000 // must have strong lesser security level
3001 if (handler->HasLowerSecurity(playerTarget, target->GetGUID(), true))
3002 {
3003 return false;
3004 }
3005
3006 if (playerTarget)
3007 {
3008 if (playerTarget->CanSpeak())
3009 {
3011 return false;
3012 }
3013
3014 playerTarget->GetSession()->m_muteTime = 0;
3015 }
3016
3018 stmt->SetData(0, 0);
3019 stmt->SetData(1, "");
3020 stmt->SetData(2, "");
3021 stmt->SetData(3, accountId);
3022 LoginDatabase.Execute(stmt);
3023
3024 if (playerTarget)
3025 {
3027 }
3028
3029 handler->PSendSysMessage(LANG_YOU_ENABLE_CHAT, handler->playerLink(target->GetName()));
3030
3031 return true;
3032 }
@ LANG_CHAT_ALREADY_ENABLED
Definition Language.h:351
@ LANG_YOU_ENABLE_CHAT
Definition Language.h:353
@ LANG_YOUR_CHAT_ENABLED
Definition Language.h:352
bool CanSpeak() const
Definition PlayerMisc.cpp:71

References Player::CanSpeak(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldSession::GetAccountId(), Object::GetGUID(), 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
3402 {
3403 Unit* unit = handler->getSelectedUnit();
3404 if (!unit)
3405 {
3406 unit = handler->GetSession()->GetPlayer();
3407 }
3408
3409 unit->RemoveCharmAuras();
3410 return true;
3411 }
void RemoveCharmAuras()
Definition Unit.cpp:8353

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:2422
uint32 m_homebindMapId
Definition Player.h:2418
void RepopAtGraveyard()
Definition Player.cpp:4994
float m_homebindY
Definition Player.h:2421
WorldLocation GetStartPosition() const
Definition Player.cpp:11577
float m_homebindX
Definition Player.h:2420
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition Spell.cpp:4671
bool IsInCombat() const
Definition Unit.h:936
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().


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