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
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
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 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)
 

Additional Inherited Members

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

Detailed Description

Constructor & Destructor Documentation

◆ misc_commandscript()

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

Member Function Documentation

◆ GetCommands()

ChatCommandTable misc_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

89 {
90 static ChatCommandTable auraCommandTable =
91 {
92 { "stack", HandleAuraStacksCommand, SEC_GAMEMASTER, Console::No },
93 { "", HandleAuraCommand, SEC_GAMEMASTER, Console::No }
94 };
95
96 static ChatCommandTable commandTable =
97 {
98 { "commentator", HandleCommentatorCommand, SEC_MODERATOR, Console::No },
99 { "dev", HandleDevCommand, SEC_ADMINISTRATOR, Console::No },
100 { "gps", HandleGPSCommand, SEC_MODERATOR, Console::No },
101 { "aura", auraCommandTable },
102 { "unaura", HandleUnAuraCommand, SEC_GAMEMASTER, Console::No },
103 { "appear", HandleAppearCommand, SEC_MODERATOR, Console::No },
104 { "summon", HandleSummonCommand, SEC_GAMEMASTER, Console::No },
105 { "groupsummon", HandleGroupSummonCommand, SEC_GAMEMASTER, Console::No },
106 { "commands", HandleCommandsCommand, SEC_PLAYER, Console::Yes },
107 { "die", HandleDieCommand, SEC_GAMEMASTER, Console::No },
108 { "revive", HandleReviveCommand, SEC_GAMEMASTER, Console::Yes },
109 { "dismount", HandleDismountCommand, SEC_PLAYER, Console::No },
110 { "guid", HandleGUIDCommand, SEC_GAMEMASTER, Console::No },
111 { "help", HandleHelpCommand, SEC_PLAYER, Console::Yes },
112 { "cooldown", HandleCooldownCommand, SEC_GAMEMASTER, Console::No },
113 { "distance", HandleGetDistanceCommand, SEC_ADMINISTRATOR, Console::No },
114 { "recall", HandleRecallCommand, SEC_GAMEMASTER, Console::No },
115 { "save", HandleSaveCommand, SEC_PLAYER, Console::No },
116 { "saveall", HandleSaveAllCommand, SEC_GAMEMASTER, Console::Yes },
117 { "kick", HandleKickPlayerCommand, SEC_GAMEMASTER, Console::Yes },
118 { "unstuck", HandleUnstuckCommand, SEC_GAMEMASTER, Console::Yes },
119 { "linkgrave", HandleLinkGraveCommand, SEC_ADMINISTRATOR, Console::No },
120 { "neargrave", HandleNearGraveCommand, SEC_GAMEMASTER, Console::No },
121 { "showarea", HandleShowAreaCommand, SEC_GAMEMASTER, Console::No },
122 { "hidearea", HandleHideAreaCommand, SEC_ADMINISTRATOR, Console::No },
123 { "additem", HandleAddItemCommand, SEC_GAMEMASTER, Console::Yes },
124 { "additem set", HandleAddItemSetCommand, SEC_GAMEMASTER, Console::No },
125 { "wchange", HandleChangeWeather, SEC_ADMINISTRATOR, Console::No },
126 { "maxskill", HandleMaxSkillCommand, SEC_GAMEMASTER, Console::No },
127 { "setskill", HandleSetSkillCommand, SEC_GAMEMASTER, Console::No },
128 { "pinfo", HandlePInfoCommand, SEC_GAMEMASTER, Console::Yes },
129 { "respawn", HandleRespawnCommand, SEC_GAMEMASTER, Console::No },
130 { "respawn all", HandleRespawnAllCommand, SEC_GAMEMASTER, Console::No },
131 { "mute", HandleMuteCommand, SEC_GAMEMASTER, Console::Yes },
132 { "mutehistory", HandleMuteInfoCommand, SEC_GAMEMASTER, Console::Yes },
133 { "unmute", HandleUnmuteCommand, SEC_GAMEMASTER, Console::Yes },
134 { "movegens", HandleMovegensCommand, SEC_ADMINISTRATOR, Console::No },
135 { "cometome", HandleComeToMeCommand, SEC_ADMINISTRATOR, Console::No },
136 { "damage", HandleDamageCommand, SEC_GAMEMASTER, Console::No },
137 { "combatstop", HandleCombatStopCommand, SEC_GAMEMASTER, Console::Yes },
138 { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes },
139 { "freeze", HandleFreezeCommand, SEC_GAMEMASTER, Console::No },
140 { "unfreeze", HandleUnFreezeCommand, SEC_GAMEMASTER, Console::No },
141 { "possess", HandlePossessCommand, SEC_GAMEMASTER, Console::No },
142 { "unpossess", HandleUnPossessCommand, SEC_GAMEMASTER, Console::No },
143 { "bindsight", HandleBindSightCommand, SEC_ADMINISTRATOR, Console::No },
144 { "unbindsight", HandleUnbindSightCommand, SEC_ADMINISTRATOR, Console::No },
145 { "playall", HandlePlayAllCommand, SEC_GAMEMASTER, Console::No },
146 { "skirmish", HandleSkirmishCommand, SEC_ADMINISTRATOR, Console::No },
147 { "mailbox", HandleMailBoxCommand, SEC_MODERATOR, Console::No },
148 { "string", HandleStringCommand, SEC_GAMEMASTER, Console::No }
149 };
150
151 return commandTable;
152 }
@ SEC_PLAYER
Definition: Common.h:56
@ SEC_ADMINISTRATOR
Definition: Common.h:59
@ SEC_GAMEMASTER
Definition: Common.h:58
@ SEC_MODERATOR
Definition: Common.h:57
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:49
static bool HandleCommentatorCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition: cs_misc.cpp:456
static bool HandleDevCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition: cs_misc.cpp:500
static bool HandleDamageCommand(ChatHandler *handler, uint32 damage, Optional< std::string > percent)
Definition: cs_misc.cpp:2803
static bool HandleSaveCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1334
static bool HandleAuraStacksCommand(ChatHandler *handler, SpellInfo const *spell, int16 stacks)
Definition: cs_misc.cpp:662
static bool HandleLinkGraveCommand(ChatHandler *handler, uint32 graveyardId, Optional< std::string_view > team)
Definition: cs_misc.cpp:1501
static bool HandlePlayAllCommand(ChatHandler *handler, uint32 soundId)
Definition: cs_misc.cpp:2952
static bool HandleAddItemCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, ItemTemplate const *itemTemplate, Optional< int32 > _count)
Definition: cs_misc.cpp:1691
static bool HandleAuraCommand(ChatHandler *handler, SpellInfo const *spell)
Definition: cs_misc.cpp:636
static bool HandleUnstuckCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > location)
Definition: cs_misc.cpp:1419
static bool HandleRespawnAllCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2413
static bool HandleSkirmishCommand(ChatHandler *handler, std::vector< std::string_view > args)
Definition: cs_misc.cpp:154
static bool HandleUnbindSightCommand(ChatHandler *handler)
Definition: cs_misc.cpp:3002
static bool HandleShowAreaCommand(ChatHandler *handler, uint32 areaID)
Definition: cs_misc.cpp:1629
static bool HandleStringCommand(ChatHandler *handler, uint32 id, Optional< uint8 > locale)
Definition: cs_misc.cpp:3022
static bool HandleChangeWeather(ChatHandler *handler, uint32 type, float grade)
Definition: cs_misc.cpp:1854
static bool HandlePInfoCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:1942
static bool HandleSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:890
static bool HandleCooldownCommand(ChatHandler *handler, Optional< SpellInfo const * > spell)
Definition: cs_misc.cpp:1239
static bool HandleReviveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:1160
static bool HandleCommandsCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1117
static bool HandleMailBoxCommand(ChatHandler *handler)
Definition: cs_misc.cpp:3015
static bool HandleDieCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1123
static bool HandleAppearCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:741
static bool HandleHelpCommand(ChatHandler *handler, Tail cmd)
Definition: cs_misc.cpp:1227
static bool HandleRespawnCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2389
static bool HandleNearGraveCommand(ChatHandler *handler, Optional< std::string_view > team)
Definition: cs_misc.cpp:1552
static bool HandleMovegensCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2653
static bool HandleGUIDCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1213
static bool HandleAddItemSetCommand(ChatHandler *handler, Variant< Hyperlink< itemset >, uint32 > itemSetId)
Definition: cs_misc.cpp:1793
static bool HandleSaveAllCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1365
static bool HandleGPSCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:545
static bool HandleKickPlayerCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > reason)
Definition: cs_misc.cpp:1373
static bool HandleHideAreaCommand(ChatHandler *handler, uint32 areaID)
Definition: cs_misc.cpp:1660
static bool HandleSetSkillCommand(ChatHandler *handler, Variant< Hyperlink< skill >, uint32 > skillId, int32 level, Optional< uint16 > maxPureSkill)
Definition: cs_misc.cpp:1898
static bool HandleUnmuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:2553
static bool HandleRecallCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:1297
static bool HandleBindSightCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2990
static bool HandleComeToMeCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2787
static bool HandleUnPossessCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2978
static bool HandleDismountCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1189
static bool HandleGroupSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:1012
static bool HandleCombatStopCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:2835
static bool HandleUnAuraCommand(ChatHandler *handler, Variant< SpellInfo const *, std::string_view > spells)
Definition: cs_misc.cpp:707
static bool HandleGetDistanceCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:1269
static bool HandleMaxSkillCommand(ChatHandler *handler)
Definition: cs_misc.cpp:1884
static bool HandleFlushArenaPointsCommand(ChatHandler *)
Definition: cs_misc.cpp:2861
static bool HandleFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:2867
static bool HandleMuteInfoCommand(ChatHandler *handler, std::string accountName)
Definition: cs_misc.cpp:2612
static bool HandleUnFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_misc.cpp:2910
static bool HandleMuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, std::string notSpeakTime, Tail muteReason)
Definition: cs_misc.cpp:2429
static bool HandlePossessCommand(ChatHandler *handler)
Definition: cs_misc.cpp:2966

References HandleAddItemCommand(), HandleAddItemSetCommand(), HandleAppearCommand(), HandleAuraCommand(), HandleAuraStacksCommand(), HandleBindSightCommand(), 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(), HandlePInfoCommand(), HandlePlayAllCommand(), HandlePossessCommand(), HandleRecallCommand(), HandleRespawnAllCommand(), HandleRespawnCommand(), HandleReviveCommand(), HandleSaveAllCommand(), HandleSaveCommand(), HandleSetSkillCommand(), HandleShowAreaCommand(), HandleSkirmishCommand(), HandleStringCommand(), HandleSummonCommand(), HandleUnAuraCommand(), HandleUnbindSightCommand(), HandleUnFreezeCommand(), HandleUnmuteCommand(), HandleUnPossessCommand(), HandleUnstuckCommand(), SEC_ADMINISTRATOR, SEC_GAMEMASTER, SEC_MODERATOR, and SEC_PLAYER.

◆ HandleAddItemCommand()

static bool misc_commandscript::HandleAddItemCommand ( ChatHandler handler,
Optional< PlayerIdentifier player,
ItemTemplate const *  itemTemplate,
Optional< int32 _count 
)
inlinestatic
1692 {
1693 if (!sObjectMgr->GetItemTemplate(itemTemplate->ItemId))
1694 {
1695 handler->SendErrorMessage(LANG_COMMAND_ITEMIDINVALID, itemTemplate->ItemId);
1696 return false;
1697 }
1698
1699 uint32 itemId = itemTemplate->ItemId;
1700 int32 count = 1;
1701
1702 if (_count)
1703 count = *_count;
1704
1705 if (!count)
1706 count = 1;
1707
1708 if (!player)
1709 player = PlayerIdentifier::FromTargetOrSelf(handler);
1710
1711 if (!player)
1712 return false;
1713
1714 Player* playerTarget = player->GetConnectedPlayer();
1715
1716 if (!playerTarget)
1717 return false;
1718
1719 // Subtract
1720 if (count < 0)
1721 {
1722 // Only have scam check on player accounts
1723 if (playerTarget->GetSession()->GetSecurity() == SEC_PLAYER)
1724 {
1725 if (!playerTarget->HasItemCount(itemId, 0))
1726 {
1727 // output that player don't have any items to destroy
1728 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, handler->GetNameLink(playerTarget), itemId);
1729 return false;
1730 }
1731
1732 if (!playerTarget->HasItemCount(itemId, -count))
1733 {
1734 // output that player don't have as many items that you want to destroy
1735 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, handler->GetNameLink(playerTarget), itemId);
1736 return false;
1737 }
1738 }
1739
1740 // output successful amount of destroyed items
1741 playerTarget->DestroyItemCount(itemId, -count, true, false);
1742 handler->PSendSysMessage(LANG_REMOVEITEM, itemId, -count, handler->GetNameLink(playerTarget));
1743 return true;
1744 }
1745
1746 // Adding items
1747 uint32 noSpaceForCount = 0;
1748
1749 // check space and find places
1750 ItemPosCountVec dest;
1751 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
1752
1753 if (msg != EQUIP_ERR_OK) // convert to possible store amount
1754 count -= noSpaceForCount;
1755
1756 if (!count || dest.empty()) // can't add any
1757 {
1758 handler->SendErrorMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1759 return false;
1760 }
1761
1762 Item* item = playerTarget->StoreNewItem(dest, itemId, true);
1763
1764 Player* p = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
1765 // remove binding (let GM give it to another player later)
1766 if (p && p == playerTarget)
1767 {
1768 for (auto const& itemPos : dest)
1769 {
1770 if (Item* item1 = p->GetItemByPos(itemPos.pos))
1771 {
1772 item1->SetBinding(false);
1773 }
1774 }
1775 }
1776
1777 if (p && count && item)
1778 {
1779 p->SendNewItem(item, count, false, true);
1780
1781 if (p != playerTarget)
1782 {
1783 playerTarget->SendNewItem(item, count, true, false);
1784 }
1785 }
1786
1787 if (noSpaceForCount)
1788 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1789
1790 return true;
1791 }
#define sObjectMgr
Definition: ObjectMgr.h:1623
InventoryResult
Definition: Item.h:46
@ EQUIP_ERR_OK
Definition: Item.h:47
@ NULL_BAG
Definition: Item.h:40
@ NULL_SLOT
Definition: Item.h:41
std::vector< ItemPosCount > ItemPosCountVec
Definition: Player.h:771
@ LANG_ITEM_CANNOT_CREATE
Definition: Language.h:537
@ LANG_REMOVEITEM_FAILURE
Definition: Language.h:1320
@ LANG_REMOVEITEM_ERROR
Definition: Language.h:1321
@ LANG_REMOVEITEM
Definition: Language.h:536
@ LANG_COMMAND_ITEMIDINVALID
Definition: Language.h:467
std::int32_t int32
Definition: Define.h:103
std::uint32_t uint32
Definition: Define.h:107
virtual std::string GetNameLink() const
Definition: Chat.h:200
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:213
WorldSession * GetSession()
Definition: Chat.h:244
void SendErrorMessage(uint32 entry)
Definition: Chat.cpp:218
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition: ChatCommandTags.h:188
Definition: Item.h:220
Definition: Player.h:1063
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition: PlayerStorage.cpp:678
WorldSession * GetSession() const
Definition: Player.h:1974
Item * GetItemByPos(uint16 pos) const
Definition: PlayerStorage.cpp:464
void SendNewItem(Item *item, uint32 count, bool received, bool created, bool broadcast=false, bool sendChatMessage=true)
Definition: PlayerStorage.cpp:4765
void DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Definition: PlayerStorage.cpp:3136
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0)
Definition: PlayerStorage.cpp:2539
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
Definition: Player.h:1271
AccountTypes GetSecurity() const
Definition: WorldSession.h:359
Player * GetPlayer() const
Definition: WorldSession.h:362

References Player::CanStoreNewItem(), Player::DestroyItemCount(), EQUIP_ERR_OK, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Player::GetItemByPos(), ChatHandler::GetNameLink(), WorldSession::GetPlayer(), WorldSession::GetSecurity(), ChatHandler::GetSession(), Player::GetSession(), Player::HasItemCount(), ItemTemplate::ItemId, LANG_COMMAND_ITEMIDINVALID, LANG_ITEM_CANNOT_CREATE, LANG_REMOVEITEM, LANG_REMOVEITEM_ERROR, LANG_REMOVEITEM_FAILURE, NULL_BAG, NULL_SLOT, ChatHandler::PSendSysMessage(), SEC_PLAYER, ChatHandler::SendErrorMessage(), Player::SendNewItem(), sObjectMgr, and Player::StoreNewItem().

Referenced by GetCommands().

◆ HandleAddItemSetCommand()

static bool misc_commandscript::HandleAddItemSetCommand ( ChatHandler handler,
Variant< Hyperlink< itemset >, uint32 itemSetId 
)
inlinestatic
1794 {
1795 // prevent generation all items with itemset field value '0'
1796 if (!*itemSetId)
1797 {
1799 return false;
1800 }
1801
1802 Player* player = handler->GetSession()->GetPlayer();
1803 Player* playerTarget = handler->getSelectedPlayer();
1804
1805 if (!playerTarget)
1806 {
1807 playerTarget = player;
1808 }
1809
1810 bool found = false;
1811
1812 for (auto const& [itemid, itemTemplate] : *sObjectMgr->GetItemTemplateStore())
1813 {
1814 if (itemTemplate.ItemSet == uint32(itemSetId))
1815 {
1816 found = true;
1817 ItemPosCountVec dest;
1818 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate.ItemId, 1);
1819
1820 if (msg == EQUIP_ERR_OK)
1821 {
1822 Item* item = playerTarget->StoreNewItem(dest, itemTemplate.ItemId, true);
1823
1824 // remove binding (let GM give it to another player later)
1825 if (player == playerTarget)
1826 {
1827 item->SetBinding(false);
1828 }
1829
1830 player->SendNewItem(item, 1, false, true);
1831
1832 if (player != playerTarget)
1833 {
1834 playerTarget->SendNewItem(item, 1, true, false);
1835 }
1836 }
1837 else
1838 {
1839 player->SendEquipError(msg, nullptr, nullptr, itemTemplate.ItemId);
1840 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate.ItemId, 1);
1841 }
1842 }
1843 }
1844
1845 if (!found)
1846 {
1848 return false;
1849 }
1850
1851 return true;
1852 }
@ LANG_NO_ITEMS_FROM_ITEMSET_FOUND
Definition: Language.h:542
Player * getSelectedPlayer() const
Definition: Chat.cpp:376
void SetBinding(bool val)
Definition: Item.h:235
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=nullptr, uint32 itemid=0)
Definition: PlayerStorage.cpp:4036

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
742 {
743 if (!target)
744 {
745 target = PlayerIdentifier::FromTarget(handler);
746 }
747
748 if (!target)
749 {
750 return false;
751 }
752
753 Player* _player = handler->GetSession()->GetPlayer();
754 if (target->GetGUID() == _player->GetGUID())
755 {
757 return false;
758 }
759
760 std::string nameLink = handler->playerLink(target->GetName());
761
762 if (target->IsConnected())
763 {
764 auto targetPlayer = target->GetConnectedPlayer();
765
766 // check online security
767 if (handler->HasLowerSecurity(targetPlayer))
768 {
769 return false;
770 }
771
772 Map* map = targetPlayer->GetMap();
773 if (map->IsBattlegroundOrArena())
774 {
775 // only allow if gm mode is on
776 if (!_player->IsGameMaster())
777 {
778 handler->SendErrorMessage(LANG_CANNOT_GO_TO_BG_GM, nameLink);
779 return false;
780 }
781
782 if (!_player->GetMap()->IsBattlegroundOrArena())
783 {
784 _player->SetEntryPoint();
785 }
786
787 _player->SetBattlegroundId(targetPlayer->GetBattlegroundId(), targetPlayer->GetBattlegroundTypeId(), PLAYER_MAX_BATTLEGROUND_QUEUES, false, false, TEAM_NEUTRAL);
788 }
789 else if (map->IsDungeon())
790 {
791 // we have to go to instance, and can go to player only if:
792 // 1) we are in his group (either as leader or as member)
793 // 2) we are not bound to any group and have GM mode on
794 if (_player->GetGroup())
795 {
796 // we are in group, we can go only if we are in the player group
797 if (_player->GetGroup() != targetPlayer->GetGroup())
798 {
800 return false;
801 }
802 }
803 else
804 {
805 // we are not in group, let's verify our GM mode
806 if (!_player->IsGameMaster())
807 {
809 return false;
810 }
811 }
812
813 // if the GM is bound to another instance, he will not be bound to another one
814 InstancePlayerBind* bind = sInstanceSaveMgr->PlayerGetBoundInstance(_player->GetGUID(), targetPlayer->GetMapId(), targetPlayer->GetDifficulty(map->IsRaid()));
815 if (!bind)
816 {
817 if (InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(target->GetConnectedPlayer()->GetInstanceId()))
818 {
819 sInstanceSaveMgr->PlayerBindToInstance(_player->GetGUID(), save, !save->CanReset(), _player);
820 }
821 }
822
823 if (map->IsRaid())
824 {
825 _player->SetRaidDifficulty(targetPlayer->GetRaidDifficulty());
826 }
827 else
828 {
829 _player->SetDungeonDifficulty(targetPlayer->GetDungeonDifficulty());
830 }
831 }
832
833 handler->PSendSysMessage(LANG_APPEARING_AT, nameLink);
834
835 // stop flight if need
836 if (_player->IsInFlight())
837 {
838 _player->GetMotionMaster()->MovementExpired();
839 _player->CleanupAfterTaxiFlight();
840 }
841 else // save only in non-flight case
842 {
843 _player->SaveRecallPosition();
844 }
845
846 if (_player->TeleportTo(targetPlayer->GetMapId(), targetPlayer->GetPositionX(), targetPlayer->GetPositionY(), targetPlayer->GetPositionZ() + 0.25f, _player->GetOrientation(), TELE_TO_GM_MODE, targetPlayer))
847 {
848 _player->SetPhaseMask(targetPlayer->GetPhaseMask() | 1, false);
849 }
850 }
851 else
852 {
853 // check offline security
854 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
855 {
856 return false;
857 }
858
859 handler->PSendSysMessage(LANG_APPEARING_AT, nameLink);
860
861 // to point where player stay (if loaded)
862 float x, y, z, o;
863 uint32 map;
864 bool in_flight;
865
866 if (!Player::LoadPositionFromDB(map, x, y, z, o, in_flight, target->GetGUID().GetCounter()))
867 {
868 return false;
869 }
870
871 // stop flight if need
872 if (_player->IsInFlight())
873 {
874 _player->GetMotionMaster()->MovementExpired();
875 _player->CleanupAfterTaxiFlight();
876 }
877 // save only in non-flight case
878 else
879 {
880 _player->SaveRecallPosition();
881 }
882
883 _player->TeleportTo(map, x, y, z, _player->GetOrientation());
884 }
885
886 return true;
887 }
@ TELE_TO_GM_MODE
Definition: Player.h:821
#define sInstanceSaveMgr
Definition: InstanceSaveMgr.h:202
@ LANG_CANNOT_GO_TO_INST_PARTY
Definition: Language.h:136
@ LANG_CANT_TELEPORT_SELF
Definition: Language.h:211
@ LANG_APPEARING_AT
Definition: Language.h:145
@ LANG_CANNOT_GO_TO_INST_GM
Definition: Language.h:137
@ LANG_CANNOT_GO_TO_BG_GM
Definition: Language.h:706
@ TEAM_NEUTRAL
Definition: SharedDefines.h:762
#define PLAYER_MAX_BATTLEGROUND_QUEUES
Definition: SharedDefines.h:176
std::string playerLink(std::string const &name) const
Definition: Chat.h:233
bool HasLowerSecurity(Player *target, ObjectGuid guid=ObjectGuid::Empty, bool strong=false)
Definition: Chat.cpp:59
static Optional< PlayerIdentifier > FromTarget(ChatHandler *handler)
Definition: ChatCommandTags.cpp:138
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:109
Map * GetMap() const
Definition: Object.h:529
float GetOrientation() const
Definition: Position.h:120
void SetDungeonDifficulty(Difficulty dungeon_difficulty)
Definition: Player.h:1900
void SetEntryPoint()
Definition: Player.cpp:11237
void SetRaidDifficulty(Difficulty raid_difficulty)
Definition: Player.h:1901
void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId)
Definition: Player.cpp:12258
void SaveRecallPosition()
Definition: Player.cpp:5603
Group * GetGroup()
Definition: Player.h:2444
bool IsGameMaster() const
Definition: Player.h:1157
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition: Player.cpp:1329
static bool LoadPositionFromDB(uint32 &mapid, float &x, float &y, float &z, float &o, bool &in_flight, ObjectGuid::LowType guid)
Definition: PlayerStorage.cpp:4890
void CleanupAfterTaxiFlight()
Definition: Player.cpp:10383
MotionMaster * GetMotionMaster()
Definition: Unit.h:1605
bool IsInFlight() const
Definition: Unit.h:1020
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition: Unit.cpp:18966
Definition: InstanceSaveMgr.h:39
Definition: InstanceSaveMgr.h:56
Definition: Map.h:313
bool IsDungeon() const
Definition: Map.h:448
bool IsBattlegroundOrArena() const
Definition: Map.h:456
bool IsRaid() const
Definition: Map.h:450
void MovementExpired(bool reset=true)
Definition: MotionMaster.h:178

References Player::CleanupAfterTaxiFlight(), Acore::ChatCommands::PlayerIdentifier::FromTarget(), Player::GetGroup(), Object::GetGUID(), WorldObject::GetMap(), Unit::GetMotionMaster(), Position::GetOrientation(), WorldSession::GetPlayer(), ChatHandler::GetSession(), 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(), MotionMaster::MovementExpired(), PLAYER_MAX_BATTLEGROUND_QUEUES, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Player::SaveRecallPosition(), ChatHandler::SendErrorMessage(), Player::SetBattlegroundId(), Player::SetDungeonDifficulty(), Player::SetEntryPoint(), Unit::SetPhaseMask(), Player::SetRaidDifficulty(), sInstanceSaveMgr, TEAM_NEUTRAL, TELE_TO_GM_MODE, and Player::TeleportTo().

Referenced by GetCommands().

◆ HandleAuraCommand()

static bool misc_commandscript::HandleAuraCommand ( ChatHandler handler,
SpellInfo const *  spell 
)
inlinestatic
637 {
638 if (!spell)
639 {
641 return false;
642 }
643
644 if (!SpellMgr::IsSpellValid(spell))
645 {
646 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
647 return false;
648 }
649
650 Unit* target = handler->getSelectedUnit();
651 if (!target)
652 {
654 return false;
655 }
656
657 Aura::TryRefreshStackOrCreate(spell, MAX_EFFECT_MASK, target, target);
658
659 return true;
660 }
@ LANG_COMMAND_NOSPELLFOUND
Definition: Language.h:477
@ LANG_SELECT_CHAR_OR_CREATURE
Definition: Language.h:31
@ LANG_COMMAND_SPELL_BROKEN
Definition: Language.h:520
#define MAX_EFFECT_MASK
Definition: DBCStructure.h:1638
Unit * getSelectedUnit() const
Definition: Chat.cpp:388
Definition: Unit.h:630
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:326
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition: SpellMgr.cpp:442

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
663 {
664 if (!spell)
665 {
667 return false;
668 }
669
670 if (!SpellMgr::IsSpellValid(spell))
671 {
672 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
673 return false;
674 }
675
676 if (!stacks)
677 {
679 return false;
680 }
681
682 Unit* target = handler->getSelectedUnit();
683 if (!target)
684 {
686 return false;
687 }
688
689 Aura* aur = target->GetAura(spell->Id);
690 if (!aur)
691 {
693 return false;
694 }
695
696 if (!spell->StackAmount)
697 {
699 return false;
700 }
701
702 aur->ModStackAmount(stacks);
703
704 return true;
705 }
@ LANG_COMMAND_AURASTACK_CANT_STACK
Definition: Language.h:421
@ LANG_COMMAND_AURASTACK_NO_STACK
Definition: Language.h:420
@ LANG_COMMAND_AURASTACK_NO_AURA
Definition: Language.h:419
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5532
Definition: SpellAuras.h:87
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
Definition: SpellAuras.cpp:1021

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
2991 {
2992 Unit* unit = handler->getSelectedUnit();
2993 if (!unit)
2994 {
2995 return false;
2996 }
2997
2998 handler->GetSession()->GetPlayer()->CastSpell(unit, 6277, true);
2999 return true;
3000 }
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:1154

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

Referenced by GetCommands().

◆ HandleChangeWeather()

static bool misc_commandscript::HandleChangeWeather ( ChatHandler handler,
uint32  type,
float  grade 
)
inlinestatic
1855 {
1856 // Weather is OFF
1857 if (!sWorld->getBoolConfig(CONFIG_WEATHER))
1858 {
1860 return false;
1861 }
1862
1863 Player* player = handler->GetSession()->GetPlayer();
1864 uint32 zoneid = player->GetZoneId();
1865
1866 Weather* weather = WeatherMgr::FindWeather(zoneid);
1867
1868 if (!weather)
1869 {
1870 weather = WeatherMgr::AddWeather(zoneid);
1871 }
1872
1873 if (!weather)
1874 {
1876 return false;
1877 }
1878
1879 weather->SetWeather(WeatherType(type), grade);
1880
1881 return true;
1882 }
@ LANG_NO_WEATHER
Definition: Language.h:432
@ LANG_WEATHER_DISABLED
Definition: Language.h:433
@ CONFIG_WEATHER
Definition: IWorld.h:99
WeatherType
Definition: SharedDefines.h:3137
#define sWorld
Definition: World.h:444
Weather * AddWeather(uint32 zone_id)
Add a Weather object to the list.
Definition: WeatherMgr.cpp:67
void SetWeather(WeatherType type, float grade)
Set the weather.
Definition: Weather.cpp:261
Weather * FindWeather(uint32 id)
Find a Weather object by the given zoneid.
Definition: WeatherMgr.cpp:50
uint32 GetZoneId() const
Definition: Object.cpp:3141
Weather for one zone.
Definition: Weather.h:65

References WeatherMgr::AddWeather(), CONFIG_WEATHER, WeatherMgr::FindWeather(), 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
2836 {
2837 if (!target)
2838 {
2839 target = PlayerIdentifier::FromTargetOrSelf(handler);
2840 }
2841
2842 if (!target || !target->IsConnected())
2843 {
2845 return false;
2846 }
2847
2848 Player* playerTarget = target->GetConnectedPlayer();
2849
2850 // check online security
2851 if (handler->HasLowerSecurity(playerTarget))
2852 {
2853 return false;
2854 }
2855
2856 playerTarget->CombatStop();
2857 playerTarget->getHostileRefMgr().deleteReferences();
2858 return true;
2859 }
@ LANG_PLAYER_NOT_FOUND
Definition: Language.h:539
void deleteReferences(bool removeFromMap=false)
Definition: HostileRefMgr.cpp:125
void CombatStop(bool includingCast=false)
Definition: Unit.cpp:10378
HostileRefMgr & getHostileRefMgr()
Definition: Unit.h:1492

References Unit::CombatStop(), HostileRefMgr::deleteReferences(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Unit::getHostileRefMgr(), ChatHandler::HasLowerSecurity(), LANG_PLAYER_NOT_FOUND, and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleComeToMeCommand()

static bool misc_commandscript::HandleComeToMeCommand ( ChatHandler handler)
inlinestatic
2788 {
2789 Creature* caster = handler->getSelectedCreature();
2790 if (!caster)
2791 {
2793 return false;
2794 }
2795
2796 Player* player = handler->GetSession()->GetPlayer();
2797
2798 caster->GetMotionMaster()->MovePoint(0, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
2799
2800 return true;
2801 }
@ LANG_SELECT_CREATURE
Definition: Language.h:32
Creature * getSelectedCreature() const
Definition: Chat.cpp:412
Definition: Creature.h:46
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition: MotionMaster.h:211

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
1118 {
1119 SendCommandHelpFor(*handler, "");
1120 return true;
1121 }
AC_GAME_API void SendCommandHelpFor(ChatHandler &handler, std::string_view cmd)
Definition: ChatCommand.cpp:530

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleCommentatorCommand()

static bool misc_commandscript::HandleCommentatorCommand ( ChatHandler handler,
Optional< bool >  enableArg 
)
inlinestatic
457 {
458 WorldSession* session = handler->GetSession();
459
460 if (!session)
461 {
462 return false;
463 }
464
465 auto SetCommentatorMod = [&](bool enable)
466 {
467 handler->SendNotification(enable ? "Commentator mode on" : "Commentator mode off");
468 session->GetPlayer()->SetCommentator(enable);
469 };
470
471 if (!enableArg)
472 {
473 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsCommentator())
474 {
475 SetCommentatorMod(true);
476 }
477 else
478 {
479 SetCommentatorMod(false);
480 }
481
482 return true;
483 }
484
485 if (*enableArg)
486 {
487 SetCommentatorMod(true);
488 return true;
489 }
490 else
491 {
492 SetCommentatorMod(false);
493 return true;
494 }
495
497 return false;
498 }
@ LANG_USE_BOL
Definition: Language.h:303
bool IsPlayerAccount(uint32 gmlevel)
Definition: AccountMgr.cpp:305
void SendNotification(std::string_view str)
Definition: Chat.cpp:107
bool IsCommentator() const
Definition: Player.h:1151
void SetCommentator(bool on)
Definition: Player.h:1152
Player session in the World.
Definition: WorldSession.h:330

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
1240 {
1241 Player* target = handler->getSelectedPlayer();
1242 if (!target)
1243 {
1245 return false;
1246 }
1247
1248 std::string nameLink = handler->GetNameLink(target);
1249
1250 if (!spell)
1251 {
1252 target->RemoveAllSpellCooldown();
1253 handler->PSendSysMessage(LANG_REMOVEALL_COOLDOWN, nameLink);
1254 }
1255 else
1256 {
1257 if (!SpellMgr::IsSpellValid(*spell))
1258 {
1259 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell.value()->Id);
1260 return false;
1261 }
1262
1263 target->RemoveSpellCooldown(spell.value()->Id, true);
1264 handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, spell.value()->Id, target == handler->GetSession()->GetPlayer() ? handler->GetAcoreString(LANG_YOU) : nameLink);
1265 }
1266 return true;
1267 }
@ LANG_YOU
Definition: Language.h:76
@ LANG_REMOVE_COOLDOWN
Definition: Language.h:532
@ LANG_REMOVEALL_COOLDOWN
Definition: Language.h:531
virtual char const * GetAcoreString(uint32 entry) const
Definition: Chat.cpp:43
void RemoveAllSpellCooldown()
Definition: Player.cpp:3553
void RemoveSpellCooldown(uint32 spell_id, bool update=false)
Definition: Player.cpp:3502

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
2804 {
2805 Unit* target = handler->getSelectedUnit();
2806 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
2807 {
2809 return false;
2810 }
2811
2812 if (target->IsPlayer())
2813 if (handler->HasLowerSecurity(target->ToPlayer()))
2814 return false;
2815
2816 if (!target->IsAlive() || !damage)
2817 return true;
2818
2819 if (target->GetTypeId() == TYPEID_UNIT && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
2820 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
2821
2822 if (percent)
2823 if (StringStartsWith("pct", *percent))
2824 if (damage <= 100)
2825 damage = target->CountPctFromMaxHealth(damage);
2826
2827 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
2828
2829 if (target != handler->GetSession()->GetPlayer())
2831
2832 return true;
2833 }
@ TYPEID_UNIT
Definition: ObjectGuid.h:35
@ VICTIMSTATE_HIT
Definition: Unit.h:84
@ HITINFO_AFFECTS_VICTIM
Definition: Unit.h:98
@ DIRECT_DAMAGE
Definition: Unit.h:248
@ SPELL_SCHOOL_MASK_NORMAL
Definition: SharedDefines.h:297
@ SEC_CONSOLE
Definition: Common.h:60
bool StringStartsWith(std::string_view haystack, std::string_view needle)
Definition: Util.h:401
void LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer=true)
Definition: Creature.cpp:3788
bool IsPlayer() const
Definition: Object.h:197
Player * ToPlayer()
Definition: Object.h:198
TypeID GetTypeId() const
Definition: Object.h:124
Creature * ToCreature()
Definition: Object.h:201
void SendAttackStateUpdate(CalcDamageInfo *damageInfo)
Definition: Unit.cpp:6430
uint32 GetMaxHealth() const
Definition: Unit.h:783
bool IsAlive() const
Definition: Unit.h:1151
uint32 CountPctFromMaxHealth(int32 pct) const
Definition: Unit.h:791
ObjectGuid GetTarget() const
Definition: Unit.h:1776
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:797

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

Referenced by GetCommands().

◆ HandleDevCommand()

static bool misc_commandscript::HandleDevCommand ( ChatHandler handler,
Optional< bool >  enableArg 
)
inlinestatic
501 {
502 WorldSession* session = handler->GetSession();
503
504 if (!session)
505 {
506 return false;
507 }
508
509 auto SetDevMod = [&](bool enable)
510 {
511 handler->SendNotification(enable ? LANG_DEV_ON : LANG_DEV_OFF);
512 session->GetPlayer()->SetDeveloper(enable);
513 sScriptMgr->OnHandleDevCommand(handler->GetSession()->GetPlayer(), enable);
514 };
515
516 if (!enableArg)
517 {
518 if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper())
519 {
520 SetDevMod(true);
521 }
522 else
523 {
524 SetDevMod(false);
525 }
526
527 return true;
528 }
529
530 if (*enableArg)
531 {
532 SetDevMod(true);
533 return true;
534 }
535 else
536 {
537 SetDevMod(false);
538 return true;
539 }
540
542 return false;
543 }
#define sScriptMgr
Definition: ScriptMgr.h:707
@ LANG_DEV_ON
Definition: Language.h:926
@ LANG_DEV_OFF
Definition: Language.h:927
void SetDeveloper(bool on)
Definition: Player.h:1154
bool IsDeveloper() const
Definition: Player.h:1153

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
1124 {
1125 Unit* target = handler->getSelectedUnit();
1126
1127 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
1128 {
1130 return false;
1131 }
1132
1133 if (target->IsPlayer())
1134 {
1135 if (handler->HasLowerSecurity(target->ToPlayer()))
1136 {
1137 return false;
1138 }
1139 }
1140
1141 if (target->IsAlive())
1142 {
1143 if (sWorld->getBoolConfig(CONFIG_DIE_COMMAND_MODE))
1144 {
1145 if (target->GetTypeId() == TYPEID_UNIT && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
1146 {
1147 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
1148 }
1149 Unit::Kill(handler->GetSession()->GetPlayer(), target);
1150 }
1151 else
1152 {
1153 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, target->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
1154 }
1155 }
1156
1157 return true;
1158 }
@ CONFIG_DIE_COMMAND_MODE
Definition: IWorld.h:112
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:17619
uint32 GetHealth() const
Definition: Unit.h:782

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

Referenced by GetCommands().

◆ HandleDismountCommand()

static bool misc_commandscript::HandleDismountCommand ( ChatHandler handler)
inlinestatic
1190 {
1191 Player* player = handler->GetSession()->GetPlayer();
1192
1193 // If player is not mounted, so go out :)
1194 if (!player->IsMounted())
1195 {
1197 return false;
1198 }
1199
1200 if (player->IsInFlight())
1201 {
1203 return false;
1204 }
1205
1206 player->Dismount();
1208 player->SetSpeed(MOVE_RUN, 1, true);
1209 player->SetSpeed(MOVE_FLIGHT, 1, true);
1210 return true;
1211 }
@ SPELL_AURA_MOUNTED
Definition: SpellAuraDefines.h:141
@ MOVE_FLIGHT
Definition: UnitDefines.h:334
@ MOVE_RUN
Definition: UnitDefines.h:329
@ LANG_CHAR_NON_MOUNTED
Definition: Language.h:54
@ LANG_YOU_IN_FLIGHT
Definition: Language.h:50
void Dismount()
Definition: Unit.cpp:13459
bool IsMounted() const
Definition: Unit.h:887
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition: Unit.cpp:14355
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition: Unit.cpp:5061

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
2862 {
2863 sArenaTeamMgr->DistributeArenaPoints();
2864 return true;
2865 }
#define sArenaTeamMgr
Definition: ArenaTeamMgr.h:67

References sArenaTeamMgr.

Referenced by GetCommands().

◆ HandleFreezeCommand()

static bool misc_commandscript::HandleFreezeCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
2868 {
2869 Creature* creatureTarget = handler->getSelectedCreature();
2870
2871 if (!target && !creatureTarget)
2872 {
2873 target = PlayerIdentifier::FromTargetOrSelf(handler);
2874 }
2875
2876 if (!target && !creatureTarget)
2877 {
2879 return false;
2880 }
2881
2882 Player* playerTarget = target->GetConnectedPlayer();
2883 if (playerTarget && !creatureTarget)
2884 {
2885 handler->PSendSysMessage(LANG_COMMAND_FREEZE, target->GetName());
2886
2887 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
2888 {
2889 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, playerTarget, playerTarget);
2890 }
2891
2892 return true;
2893 }
2894 else if (creatureTarget && creatureTarget->IsAlive())
2895 {
2897
2898 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
2899 {
2900 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, creatureTarget, creatureTarget);
2901 }
2902
2903 return true;
2904 }
2905
2907 return false;
2908 }
#define sSpellMgr
Definition: SpellMgr.h:825
@ LANG_COMMAND_FREEZE
Definition: Language.h:1046
constexpr auto SPELL_FREEZE
Definition: cs_misc.cpp:55
std::string const GetLocalizeCreatureName(Creature *creature, LocaleConstant locale)
Definition: cs_misc.cpp:57
virtual LocaleConstant GetSessionDbcLocale() const
Definition: Chat.cpp:872
Definition: SpellInfo.h:316

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
1270 {
1271 if (!target)
1272 {
1273 target = PlayerIdentifier::FromTargetOrSelf(handler);
1274 }
1275
1276 WorldObject* object = handler->getSelectedUnit();
1277
1278 if (!object && !target)
1279 {
1280 return false;
1281 }
1282
1283 if (!object && target && target->IsConnected())
1284 {
1285 object = target->GetConnectedPlayer();
1286 }
1287
1288 if (!object)
1289 {
1290 return false;
1291 }
1292
1293 handler->PSendSysMessage(LANG_DISTANCE, handler->GetSession()->GetPlayer()->GetDistance(object), handler->GetSession()->GetPlayer()->GetDistance2d(object), handler->GetSession()->GetPlayer()->GetExactDist(object), handler->GetSession()->GetPlayer()->GetExactDist2d(object));
1294 return true;
1295 }
@ LANG_DISTANCE
Definition: Language.h:544
Definition: Object.h:403
float GetDistance2d(WorldObject const *obj) const
Definition: Object.cpp:1263
float GetDistance(WorldObject const *obj) const
Definition: Object.cpp:1245
float GetExactDist2d(const float x, const float y) const
Definition: Position.h:166
float GetExactDist(float x, float y, float z) const
Definition: Position.h:178

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
546 {
547 if (!target)
548 {
549 target = PlayerIdentifier::FromTargetOrSelf(handler);
550 }
551
552 WorldObject* object = handler->getSelectedUnit();
553
554 if (!object && !target)
555 {
556 return false;
557 }
558
559 if (!object && target && target->IsConnected())
560 {
561 object = target->GetConnectedPlayer();
562 }
563
564 if (!object)
565 {
566 return false;
567 }
568
569 Cell cell(Acore::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()));
570
571 uint32 zoneId, areaId;
572 object->GetZoneAndAreaId(zoneId, areaId);
573
574 MapEntry const* mapEntry = sMapStore.LookupEntry(object->GetMapId());
575 AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
576 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId);
577
578 float zoneX = object->GetPositionX();
579 float zoneY = object->GetPositionY();
580
581 Map2ZoneCoordinates(zoneX, zoneY, zoneId);
582
583 float groundZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT);
584 float floorZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ());
585
586 GridCoord gridCoord = Acore::ComputeGridCoord(object->GetPositionX(), object->GetPositionY());
587
588 // 63? WHY?
589 int gridX = 63 - gridCoord.x_coord;
590 int gridY = 63 - gridCoord.y_coord;
591
592 uint32 haveMap = Map::ExistMap(object->GetMapId(), gridX, gridY) ? 1 : 0;
593 uint32 haveVMap = Map::ExistVMap(object->GetMapId(), gridX, gridY) ? 1 : 0;
595
596 if (haveVMap)
597 {
598 if (object->IsOutdoors())
599 {
600 handler->PSendSysMessage("You are outdoors");
601 }
602 else
603 {
604 handler->PSendSysMessage("You are indoors");
605 }
606 }
607 else
608 {
609 handler->PSendSysMessage("no VMAP available for area info");
610 }
611
613 object->GetMapId(), (mapEntry ? mapEntry->name[handler->GetSessionDbcLocale()] : "<unknown>"),
614 zoneId, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
615 areaId, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
616 object->GetPhaseMask(),
617 object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation(),
618 cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(),
619 zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap, haveMMAP);
620
621 LiquidData const& liquidData = object->GetLiquidData();
622
623 if (liquidData.Status)
624 {
625 handler->PSendSysMessage(LANG_LIQUID_STATUS, liquidData.Level, liquidData.DepthLevel, liquidData.Entry, liquidData.Flags, liquidData.Status);
626 }
627
628 if (object->GetTransport())
629 {
630 handler->PSendSysMessage("Transport offset: %.2f, %.2f, %.2f, %.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());
631 }
632
633 return true;
634 }
#define MAX_HEIGHT
Definition: Map.h:164
void Map2ZoneCoordinates(float &x, float &y, uint32 zone)
Definition: DBCStores.cpp:748
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
@ LANG_LIQUID_STATUS
Definition: Language.h:215
@ LANG_MAP_POSITION
Definition: Language.h:133
GridCoord ComputeGridCoord(float x, float y)
Definition: GridDefines.h:186
CellCoord ComputeCellCoord(float x, float y)
Definition: GridDefines.h:191
static MMapMgr * createOrGetMMapMgr()
Definition: MMapFactory.cpp:27
dtNavMesh const * GetNavMesh(uint32 mapId)
Definition: MMapMgr.cpp:306
struct MovementInfo::TransportInfo transport
Position pos
Definition: Object.h:295
uint32 GetPhaseMask() const
Definition: Object.h:444
uint32 GetInstanceId() const
Definition: Object.h:441
bool IsOutdoors() const
Definition: Object.cpp:3166
Transport * GetTransport() const
Definition: Object.h:597
MovementInfo m_movementInfo
Definition: Object.h:607
uint32 GetMapId() const
Definition: Position.h:276
Definition: Cell.h:46
Definition: GridDefines.h:86
uint32 x_coord
Definition: GridDefines.h:153
uint32 y_coord
Definition: GridDefines.h:154
Definition: Map.h:171
float Level
Definition: Map.h:176
uint32 Flags
Definition: Map.h:175
uint32 Entry
Definition: Map.h:174
LiquidStatus Status
Definition: Map.h:178
float DepthLevel
Definition: Map.h:177
static bool ExistVMap(uint32 mapid, int gx, int gy)
Definition: Map.cpp:116
static bool ExistMap(uint32 mapid, int gx, int gy)
Definition: Map.cpp:85
Definition: DBCStructure.h:519
char const * area_name[16]
Definition: DBCStructure.h:527
Definition: DBCStructure.h:1325
char const * name[16]
Definition: DBCStructure.h:1331

References AreaTableEntry::area_name, Cell::CellX(), Cell::CellY(), Acore::ComputeCellCoord(), Acore::ComputeGridCoord(), MMAP::MMapFactory::createOrGetMMapMgr(), LiquidData::DepthLevel, LiquidData::Entry, Map::ExistMap(), Map::ExistVMap(), LiquidData::Flags, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), WorldObject::GetInstanceId(), WorldLocation::GetMapId(), MMAP::MMapMgr::GetNavMesh(), Position::GetOrientation(), 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, MovementInfo::transport, CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by GetCommands().

◆ HandleGroupSummonCommand()

static bool misc_commandscript::HandleGroupSummonCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
1013 {
1014 if (!target)
1015 {
1016 target = PlayerIdentifier::FromTargetOrSelf(handler);
1017 }
1018
1019 if (!target || !target->IsConnected())
1020 {
1021 return false;
1022 }
1023
1024 // check online security
1025 if (handler->HasLowerSecurity(target->GetConnectedPlayer()))
1026 {
1027 return false;
1028 }
1029
1030 auto targetPlayer = target->GetConnectedPlayer();
1031
1032 Group* group = targetPlayer->GetGroup();
1033
1034 std::string nameLink = handler->playerLink(target->GetName());
1035
1036 if (!group)
1037 {
1038 handler->SendErrorMessage(LANG_NOT_IN_GROUP, nameLink);
1039 return false;
1040 }
1041
1042 Map* gmMap = handler->GetSession()->GetPlayer()->GetMap();
1043 bool toInstance = gmMap->Instanceable();
1044
1045 // we are in instance, and can summon only player in our group with us as lead
1046 if (toInstance && (
1047 !handler->GetSession()->GetPlayer()->GetGroup() || (group->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
1048 (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID())))
1049 // the last check is a bit excessive, but let it be, just in case
1050 {
1052 return false;
1053 }
1054
1055 for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
1056 {
1057 Player* player = itr->GetSource();
1058
1059 if (!player || player == handler->GetSession()->GetPlayer() || !player->GetSession())
1060 {
1061 continue;
1062 }
1063
1064 // check online security
1065 if (handler->HasLowerSecurity(player))
1066 {
1067 return false;
1068 }
1069
1070 std::string plNameLink = handler->GetNameLink(player);
1071
1072 if (player->IsBeingTeleported())
1073 {
1074 handler->SendErrorMessage(LANG_IS_TELEPORTED, plNameLink);
1075 return false;
1076 }
1077
1078 if (toInstance)
1079 {
1080 Map* playerMap = player->GetMap();
1081
1082 if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
1083 {
1084 // cannot summon from instance to instance
1085 handler->SendErrorMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink);
1086 return false;
1087 }
1088 }
1089
1090 handler->PSendSysMessage(LANG_SUMMONING, plNameLink, "");
1091 if (handler->needReportToTarget(player))
1092 {
1094 }
1095
1096 // stop flight if need
1097 if (player->IsInFlight())
1098 {
1099 player->GetMotionMaster()->MovementExpired();
1100 player->CleanupAfterTaxiFlight();
1101 }
1102 // save only in non-flight case
1103 else
1104 {
1105 player->SaveRecallPosition();
1106 }
1107
1108 // before GM
1109 float x, y, z;
1110 handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize());
1111 player->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation(), 0, handler->GetSession()->GetPlayer());
1112 }
1113
1114 return true;
1115 }
@ LANG_SUMMONING
Definition: Language.h:140
@ LANG_NOT_IN_GROUP
Definition: Language.h:149
@ LANG_IS_TELEPORTED
Definition: Language.h:134
@ LANG_CANNOT_SUMMON_TO_INST
Definition: Language.h:135
@ LANG_SUMMONED_BY
Definition: Language.h:141
Definition: Chat.h:39
virtual bool needReportToTarget(Player *chr) const
Definition: Chat.cpp:866
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:2696
float GetObjectSize() const
Definition: Object.cpp:2768
bool IsBeingTeleported() const
Definition: Player.h:2066
Definition: Group.h:169
GroupReference * GetFirstMember()
Definition: Group.h:243
ObjectGuid GetLeaderGUID() const
Definition: Group.cpp:2296
Definition: GroupReference.h:27
GroupReference * next()
Definition: GroupReference.h:36
bool Instanceable() const
Definition: Map.h:447
uint32 GetInstanceId() const
Definition: Map.h:419

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(), GroupReference::next(), ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Player::SaveRecallPosition(), ChatHandler::SendErrorMessage(), and Player::TeleportTo().

Referenced by GetCommands().

◆ HandleGUIDCommand()

static bool misc_commandscript::HandleGUIDCommand ( ChatHandler handler)
inlinestatic
1214 {
1215 ObjectGuid guid = handler->GetSession()->GetPlayer()->GetTarget();
1216
1217 if (!guid)
1218 {
1220 return false;
1221 }
1222
1223 handler->PSendSysMessage(LANG_OBJECT_GUID, guid.ToString());
1224 return true;
1225 }
@ LANG_OBJECT_GUID
Definition: Language.h:238
@ LANG_NO_SELECTION
Definition: Language.h:237
Definition: ObjectGuid.h:118
std::string ToString() const
Definition: ObjectGuid.cpp:47

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
1228 {
1230
1231 if (cmd.empty())
1232 {
1234 }
1235
1236 return true;
1237 }

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleHideAreaCommand()

static bool misc_commandscript::HandleHideAreaCommand ( ChatHandler handler,
uint32  areaID 
)
inlinestatic
1661 {
1662 Player* playerTarget = handler->getSelectedPlayer();
1663 if (!playerTarget)
1664 {
1666 return false;
1667 }
1668
1669 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1670 if (!area)
1671 {
1673 return false;
1674 }
1675
1676 int32 offset = area->exploreFlag / 32;
1677 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1678 {
1680 return false;
1681 }
1682
1683 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1684 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1685 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields ^ val)));
1686
1688 return true;
1689 }
@ PLAYER_EXPLORED_ZONES_1
Definition: UpdateFields.h:357
#define PLAYER_EXPLORED_ZONES_SIZE
Definition: Player.h:72
@ LANG_UNEXPLORE_AREA
Definition: Language.h:617
@ LANG_NO_CHAR_SELECTED
Definition: Language.h:148
@ LANG_BAD_VALUE
Definition: Language.h:147
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:162
uint32 GetUInt32Value(uint16 index) const
Definition: Object.cpp:305
void SetUInt32Value(uint16 index, uint32 value)
Definition: Unit.cpp:21203
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
1374 {
1375 if (!target)
1376 {
1377 target = PlayerIdentifier::FromTargetOrSelf(handler);
1378 }
1379
1380 if (!target || !target->IsConnected())
1381 {
1382 return false;
1383 }
1384
1385 auto targetPlayer = target->GetConnectedPlayer();
1386
1387 if (handler->GetSession() && target->GetGUID() == handler->GetSession()->GetPlayer()->GetGUID())
1388 {
1390 return false;
1391 }
1392
1393 // check online security
1394 if (handler->HasLowerSecurity(targetPlayer))
1395 {
1396 return false;
1397 }
1398
1399 std::string kickReasonStr = handler->GetAcoreString(LANG_NO_REASON);
1400 if (reason && !reason->empty())
1401 {
1402 kickReasonStr = std::string{ *reason };
1403 }
1404
1405 if (sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
1406 {
1407 handler->SendWorldText(LANG_COMMAND_KICKMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server"), target->GetName(), kickReasonStr);
1408 }
1409 else
1410 {
1411 handler->PSendSysMessage(LANG_COMMAND_KICKMESSAGE, target->GetName());
1412 }
1413
1414 targetPlayer->GetSession()->KickPlayer("HandleKickPlayerCommand");
1415
1416 return true;
1417 }
@ LANG_COMMAND_KICKSELF
Definition: Language.h:326
@ LANG_COMMAND_KICKMESSAGE_WORLD
Definition: Language.h:1285
@ LANG_NO_REASON
Definition: Language.h:807
@ LANG_COMMAND_KICKMESSAGE
Definition: Language.h:327
@ CONFIG_SHOW_KICK_IN_WORLD
Definition: IWorld.h:136
void SendWorldText(std::string_view str)
Definition: Chat.cpp:133
std::string const & GetPlayerName() const
Definition: WorldSession.cpp:186

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
1502 {
1503 TeamId teamId;
1504
1505 if (!team)
1506 {
1507 teamId = TEAM_NEUTRAL;
1508 }
1509 else if (StringEqualI(team->substr(0, 6), "horde"))
1510 {
1511 teamId = TEAM_HORDE;
1512 }
1513 else if (StringEqualI(team->substr(0, 9), "alliance"))
1514 {
1515 teamId = TEAM_ALLIANCE;
1516 }
1517 else
1518 {
1519 return false;
1520 }
1521
1522 GraveyardStruct const* graveyard = sGraveyard->GetGraveyard(graveyardId);
1523
1524 if (!graveyard)
1525 {
1526 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDNOEXIST, graveyardId);
1527 return false;
1528 }
1529
1530 Player* player = handler->GetSession()->GetPlayer();
1531 uint32 zoneId = player->GetZoneId();
1532
1533 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId);
1534 if (!areaEntry || areaEntry->zone != 0)
1535 {
1536 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDWRONGZONE, graveyardId, zoneId);
1537 return false;
1538 }
1539
1540 if (sGraveyard->AddGraveyardLink(graveyardId, zoneId, teamId))
1541 {
1542 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDLINKED, graveyardId, zoneId);
1543 }
1544 else
1545 {
1546 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDALRLINKED, graveyardId, zoneId);
1547 }
1548
1549 return true;
1550 }
@ LANG_COMMAND_GRAVEYARDALRLINKED
Definition: Language.h:482
@ LANG_COMMAND_GRAVEYARDNOEXIST
Definition: Language.h:481
@ LANG_COMMAND_GRAVEYARDWRONGZONE
Definition: Language.h:484
@ LANG_COMMAND_GRAVEYARDLINKED
Definition: Language.h:483
#define sGraveyard
Definition: GameGraveyard.h:75
TeamId
Definition: SharedDefines.h:759
@ TEAM_ALLIANCE
Definition: SharedDefines.h:760
@ TEAM_HORDE
Definition: SharedDefines.h:761
bool StringEqualI(std::string_view a, std::string_view b)
Definition: Util.cpp:592
Definition: GameGraveyard.h:28
uint32 zone
Definition: DBCStructure.h:522

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
3016 {
3017 Player* player = handler->GetSession()->GetPlayer();
3018 handler->GetSession()->SendShowMailBox(player->GetGUID());
3019 return true;
3020 }
void SendShowMailBox(ObjectGuid guid)
Definition: NPCHandler.cpp:72

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

Referenced by GetCommands().

◆ HandleMaxSkillCommand()

static bool misc_commandscript::HandleMaxSkillCommand ( ChatHandler handler)
inlinestatic
1885 {
1886 Player* SelectedPlayer = handler->getSelectedPlayer();
1887 if (!SelectedPlayer)
1888 {
1890 return false;
1891 }
1892
1893 // each skills that have max skill value dependent from level seted to current level max skill value
1894 SelectedPlayer->UpdateSkillsToMaxSkillsForLevel();
1895 return true;
1896 }
void UpdateSkillsToMaxSkillsForLevel()
Definition: PlayerUpdates.cpp:1085

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

Referenced by GetCommands().

◆ HandleMovegensCommand()

static bool misc_commandscript::HandleMovegensCommand ( ChatHandler handler)
inlinestatic
2654 {
2655 Unit* unit = handler->getSelectedUnit();
2656 if (!unit)
2657 {
2659 return false;
2660 }
2661
2662 handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->IsPlayer() ? "Player" : "Creature"), unit->GetGUID().ToString());
2663
2664 MotionMaster* motionMaster = unit->GetMotionMaster();
2665 float x, y, z;
2666 motionMaster->GetDestination(x, y, z);
2667
2668 for (uint8 i = 0; i < MAX_MOTION_SLOT; ++i)
2669 {
2670 MovementGenerator* movementGenerator = motionMaster->GetMotionSlot(i);
2671 if (!movementGenerator)
2672 {
2673 handler->SendSysMessage("Empty");
2674 continue;
2675 }
2676
2677 switch (movementGenerator->GetMovementGeneratorType())
2678 {
2679 case IDLE_MOTION_TYPE:
2681 break;
2682 case RANDOM_MOTION_TYPE:
2684 break;
2687 break;
2690 break;
2693 break;
2694 case CHASE_MOTION_TYPE:
2695 {
2696 Unit* target = nullptr;
2697 if (unit->IsPlayer())
2698 {
2699 target = static_cast<ChaseMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
2700 }
2701 else
2702 {
2703 target = static_cast<ChaseMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
2704 }
2705
2706 if (!target)
2707 {
2709 }
2710 else if (target->IsPlayer())
2711 {
2712 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName(), target->GetGUID().ToString());
2713 }
2714 else
2715 {
2716 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName(), target->GetGUID().ToString());
2717 }
2718 break;
2719 }
2720 case FOLLOW_MOTION_TYPE:
2721 {
2722 Unit* target = nullptr;
2723 if (unit->IsPlayer())
2724 {
2725 target = static_cast<FollowMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
2726 }
2727 else
2728 {
2729 target = static_cast<FollowMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
2730 }
2731
2732 if (!target)
2733 {
2735 }
2736 else if (target->IsPlayer())
2737 {
2738 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName(), target->GetGUID().ToString());
2739 }
2740 else
2741 {
2742 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName(), target->GetGUID().ToString());
2743 }
2744 break;
2745 }
2746 case HOME_MOTION_TYPE:
2747 {
2748 if (unit->GetTypeId() == TYPEID_UNIT)
2749 {
2751 }
2752 else
2753 {
2755 }
2756 break;
2757 }
2758 case FLIGHT_MOTION_TYPE:
2760 break;
2761 case POINT_MOTION_TYPE:
2762 {
2763 handler->PSendSysMessage(LANG_MOVEGENS_POINT, x, y, z);
2764 break;
2765 }
2768 break;
2771 break;
2772 case EFFECT_MOTION_TYPE:
2774 break;
2775 default:
2776 handler->PSendSysMessage(LANG_MOVEGENS_UNKNOWN, movementGenerator->GetMovementGeneratorType());
2777 break;
2778 }
2779 }
2780 return true;
2781 }
@ MAX_MOTION_SLOT
Definition: MotionMaster.h:64
@ DISTRACT_MOTION_TYPE
Definition: MotionMaster.h:48
@ IDLE_MOTION_TYPE
Definition: MotionMaster.h:37
@ CHASE_MOTION_TYPE
Definition: MotionMaster.h:43
@ WAYPOINT_MOTION_TYPE
Definition: MotionMaster.h:39
@ FLEEING_MOTION_TYPE
Definition: MotionMaster.h:47
@ CONFUSED_MOTION_TYPE
Definition: MotionMaster.h:42
@ HOME_MOTION_TYPE
Definition: MotionMaster.h:44
@ POINT_MOTION_TYPE
Definition: MotionMaster.h:46
@ FLIGHT_MOTION_TYPE
Definition: MotionMaster.h:45
@ FOLLOW_MOTION_TYPE
Definition: MotionMaster.h:52
@ ANIMAL_RANDOM_MOTION_TYPE
Definition: MotionMaster.h:41
@ RANDOM_MOTION_TYPE
Definition: MotionMaster.h:38
@ EFFECT_MOTION_TYPE
Definition: MotionMaster.h:54
@ LANG_MOVEGENS_FOLLOW_PLAYER
Definition: Language.h:928
@ LANG_MOVEGENS_EFFECT
Definition: Language.h:931
@ LANG_MOVEGENS_UNKNOWN
Definition: Language.h:584
@ LANG_MOVEGENS_CHASE_PLAYER
Definition: Language.h:578
@ LANG_MOVEGENS_IDLE
Definition: Language.h:573
@ LANG_MOVEGENS_CONFUSED
Definition: Language.h:577
@ LANG_MOVEGENS_FOLLOW_CREATURE
Definition: Language.h:929
@ LANG_MOVEGENS_FOLLOW_NULL
Definition: Language.h:930
@ LANG_MOVEGENS_DISTRACT
Definition: Language.h:652
@ LANG_MOVEGENS_CHASE_CREATURE
Definition: Language.h:579
@ LANG_MOVEGENS_RANDOM
Definition: Language.h:574
@ LANG_MOVEGENS_WAYPOINT
Definition: Language.h:575
@ LANG_MOVEGENS_POINT
Definition: Language.h:650
@ LANG_MOVEGENS_ANIMAL_RANDOM
Definition: Language.h:576
@ LANG_MOVEGENS_CHASE_NULL
Definition: Language.h:580
@ LANG_MOVEGENS_FLIGHT
Definition: Language.h:583
@ LANG_MOVEGENS_HOME_CREATURE
Definition: Language.h:581
@ LANG_MOVEGENS_HOME_PLAYER
Definition: Language.h:582
@ LANG_MOVEGENS_LIST
Definition: Language.h:572
@ LANG_MOVEGENS_FEAR
Definition: Language.h:651
std::uint8_t uint8
Definition: Define.h:109
std::string const & GetName() const
Definition: Object.h:456
Definition: MotionMaster.h:110
_Ty GetMotionSlot(int slot) const
Definition: MotionMaster.h:153
bool GetDestination(float &x, float &y, float &z)
Definition: MotionMaster.cpp:959
Definition: MovementGenerator.h:30
virtual MovementGeneratorType GetMovementGeneratorType()=0
Definition: TargetedMovementGenerator.h:39
Definition: TargetedMovementGenerator.h:75

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(), Object::GetTypeId(), HOME_MOTION_TYPE, IDLE_MOTION_TYPE, 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(), TYPEID_UNIT, and WAYPOINT_MOTION_TYPE.

Referenced by GetCommands().

◆ HandleMuteCommand()

static bool misc_commandscript::HandleMuteCommand ( ChatHandler handler,
Optional< PlayerIdentifier player,
std::string  notSpeakTime,
Tail  muteReason 
)
inlinestatic
2430 {
2431 std::string muteReasonStr{ muteReason };
2432
2433 if (notSpeakTime.empty())
2434 {
2435 return false;
2436 }
2437
2438 if (Acore::StringTo<int32>(notSpeakTime).value_or(0) < 0)
2439 {
2441 return false;
2442 }
2443
2444 if (muteReason.empty())
2445 {
2446 muteReasonStr = handler->GetAcoreString(LANG_NO_REASON);
2447 }
2448
2449 if (!player)
2450 {
2451 player = PlayerIdentifier::FromTarget(handler);
2452 }
2453
2454 if (!player)
2455 {
2457 return false;
2458 }
2459
2460 Player* target = player->GetConnectedPlayer();
2461 uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
2462
2463 // find only player from same account if any
2464 if (!target)
2465 if (WorldSession* session = sWorld->FindSession(accountId))
2466 {
2467 target = session->GetPlayer();
2468 }
2469
2470 // must have strong lesser security level
2471 if (handler->HasLowerSecurity(target, player->GetGUID(), true))
2472 {
2473 return false;
2474 }
2475
2477 int32 muteDuration = TimeStringToSecs(notSpeakTime);
2478 if (muteDuration <= 0)
2479 {
2480 muteDuration = Acore::StringTo<int32>(notSpeakTime).value_or(0);
2481 }
2482
2483 if (muteDuration <= 0)
2484 {
2486 return false;
2487 }
2488
2489 std::string muteBy = "";
2490 if (handler->GetSession())
2491 {
2492 muteBy = handler->GetSession()->GetPlayerName();
2493 }
2494 else
2495 {
2496 muteBy = handler->GetAcoreString(LANG_CONSOLE);
2497 }
2498
2499 if (target)
2500 {
2501 // Target is online, mute will be in effect right away.
2502 int64 muteTime = GameTime::GetGameTime().count() + muteDuration;
2503 target->GetSession()->m_muteTime = muteTime;
2504 stmt->SetData(0, muteTime);
2505 std::string nameLink = handler->playerLink(player->GetName());
2506
2507 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
2508 {
2509 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2510 }
2511
2512 ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, secsToTimeString(muteDuration, true), muteBy, muteReasonStr);
2513 }
2514 else
2515 {
2516 // Target is offline, mute will be in effect starting from the next login.
2517 stmt->SetData(0, -int32(muteDuration));
2518 }
2519
2520 stmt->SetData(1, muteReasonStr);
2521 stmt->SetData(2, muteBy);
2522 stmt->SetData(3, accountId);
2523 LoginDatabase.Execute(stmt);
2524
2525 stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
2526 stmt->SetData(0, accountId);
2527 stmt->SetData(1, muteDuration / MINUTE);
2528 stmt->SetData(2, muteBy);
2529 stmt->SetData(3, muteReasonStr);
2530 LoginDatabase.Execute(stmt);
2531
2532 std::string nameLink = handler->playerLink(player->GetName());
2533
2534 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
2535 {
2536 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2537 }
2538 else
2539 {
2540 // pussywizard: notify all online GMs
2541 std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
2543 for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
2544 if (itr->second->GetSession()->GetSecurity())
2546 (handler->GetSession() ? handler->GetSession()->GetPlayerName() : handler->GetAcoreString(LANG_CONSOLE)), nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2547 }
2548
2549 return true;
2550 }
#define sCharacterCache
Definition: CharacterCache.h:83
@ LANG_COMMAND_DISABLE_CHAT_DELAYED
Definition: Language.h:328
@ LANG_YOUR_CHAT_DISABLED
Definition: Language.h:340
@ LANG_COMMAND_MUTEMESSAGE_WORLD
Definition: Language.h:1288
@ LANG_YOU_DISABLE_CHAT
Definition: Language.h:341
@ LANG_CONSOLE
Definition: Language.h:1086
@ CONFIG_SHOW_MUTE_IN_WORLD
Definition: IWorld.h:137
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition: DatabaseEnv.cpp:22
@ LOGIN_UPD_MUTE_TIME
Definition: LoginDatabase.h:72
@ LOGIN_INS_ACCOUNT_MUTE
Definition: LoginDatabase.h:109
constexpr auto MINUTE
Definition: Common.h:46
std::int64_t int64
Definition: Define.h:102
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition: Util.cpp:73
uint32 TimeStringToSecs(const std::string &timestring)
Definition: Util.cpp:163
HashMapHolder< Player >::MapType const & GetPlayers()
Definition: ObjectAccessor.cpp:78
Seconds GetGameTime()
Definition: GameTime.cpp:38
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
Definition: ObjectAccessor.h:45
std::unordered_map< ObjectGuid, T * > MapType
Definition: ObjectAccessor.h:51
uint32 GetAccountId() const
Definition: WorldSession.h:361
time_t m_muteTime
Definition: WorldSession.h:494

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, and TimeStringToSecs().

Referenced by GetCommands().

◆ HandleMuteInfoCommand()

static bool misc_commandscript::HandleMuteInfoCommand ( ChatHandler handler,
std::string  accountName 
)
inlinestatic
2613 {
2614 if (!Utf8ToUpperOnlyLatin(accountName))
2615 {
2616 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
2617 return false;
2618 }
2619
2620 uint32 accountId = AccountMgr::GetId(accountName);
2621 if (!accountId)
2622 {
2623 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
2624 return false;
2625 }
2626
2627 return HandleMuteInfoHelper(handler, accountId, accountName.c_str());
2628 }
@ LANG_ACCOUNT_NOT_EXIST
Definition: Language.h:442
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition: Util.cpp:532
uint32 GetId(std::string const &username)
Definition: AccountMgr.cpp:229
static bool HandleMuteInfoHelper(ChatHandler *handler, uint32 accountId, char const *accountName)
Definition: cs_misc.cpp:2631

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
2632 {
2634 stmt->SetData(0, accountId);
2635 PreparedQueryResult result = LoginDatabase.Query(stmt);
2636
2637 if (!result)
2638 {
2639 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
2640 return true;
2641 }
2642
2643 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
2644 do
2645 {
2646 Field* fields = result->Fetch();
2647 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>());
2648 } while (result->NextRow());
2649
2650 return true;
2651 }
@ LANG_COMMAND_MUTEHISTORY_OUTPUT
Definition: Language.h:1112
@ LANG_COMMAND_MUTEHISTORY_EMPTY
Definition: Language.h:1111
@ LANG_COMMAND_MUTEHISTORY
Definition: Language.h:1110
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:46
@ LOGIN_SEL_ACCOUNT_MUTE_INFO
Definition: LoginDatabase.h:110
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:30
AC_COMMON_API std::string TimeToHumanReadable(Seconds time=0s, std::string_view fmt={})
Definition: Timer.cpp:287
Class used to access individual fields of database query result.
Definition: Field.h:99

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
1553 {
1554 TeamId teamId;
1555
1556 if (!team)
1557 {
1558 teamId = TEAM_NEUTRAL;
1559 }
1560 else if (StringEqualI(team->substr(0, 6), "horde"))
1561 {
1562 teamId = TEAM_HORDE;
1563 }
1564 else if (StringEqualI(team->substr(0, 9), "alliance"))
1565 {
1566 teamId = TEAM_ALLIANCE;
1567 }
1568 else
1569 {
1570 return false;
1571 }
1572
1573 Player* player = handler->GetSession()->GetPlayer();
1574 uint32 zone_id = player->GetZoneId();
1575
1576 GraveyardStruct const* graveyard = sGraveyard->GetClosestGraveyard(player, teamId);
1577
1578 if (graveyard)
1579 {
1580 uint32 graveyardId = graveyard->ID;
1581
1582 GraveyardData const* data = sGraveyard->FindGraveyardData(graveyardId, zone_id);
1583 if (!data)
1584 {
1585 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDERROR, graveyardId);
1586 return false;
1587 }
1588
1589 std::string team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_NOTEAM);
1590
1591 if (data->teamId == TEAM_NEUTRAL)
1592 {
1593 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1594 }
1595 else if (data->teamId == TEAM_HORDE)
1596 {
1597 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1598 }
1599 else if (data->teamId == TEAM_ALLIANCE)
1600 {
1601 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1602 }
1603
1604 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDNEAREST, graveyardId, team_name, zone_id);
1605 }
1606 else
1607 {
1608 std::string team_name;
1609
1610 if (teamId == TEAM_NEUTRAL)
1611 {
1612 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1613 }
1614 else if (teamId == TEAM_HORDE)
1615 {
1616 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1617 }
1618 else if (teamId == TEAM_ALLIANCE)
1619 {
1620 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1621 }
1622
1623 handler->PSendSysMessage(LANG_COMMAND_ZONENOGRAFACTION, zone_id, team_name);
1624 }
1625
1626 return true;
1627 }
@ LANG_COMMAND_GRAVEYARD_ALLIANCE
Definition: Language.h:489
@ LANG_COMMAND_ZONENOGRAFACTION
Definition: Language.h:493
@ LANG_COMMAND_GRAVEYARDNEAREST
Definition: Language.h:491
@ LANG_COMMAND_GRAVEYARD_NOTEAM
Definition: Language.h:487
@ LANG_COMMAND_GRAVEYARDERROR
Definition: Language.h:486
@ LANG_COMMAND_GRAVEYARD_HORDE
Definition: Language.h:490
@ LANG_COMMAND_GRAVEYARD_ANY
Definition: Language.h:488
uint32 ID
Definition: GameGraveyard.h:29
Definition: GameGraveyard.h:39
TeamId teamId
Definition: GameGraveyard.h:41

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

◆ HandlePInfoCommand()

static bool misc_commandscript::HandlePInfoCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
1943 {
1944 if (!target)
1945 {
1946 target = PlayerIdentifier::FromTargetOrSelf(handler);
1947 }
1948
1949 if (!target)
1950 {
1951 return false;
1952 }
1953
1954 Player* playerTarget = target->GetConnectedPlayer();
1955
1956 CharacterDatabasePreparedStatement* stmt = nullptr;
1957 LoginDatabasePreparedStatement* loginStmt = nullptr;
1958
1959 // Account data print variables
1960 std::string userName = handler->GetAcoreString(LANG_ERROR);
1961 ObjectGuid::LowType lowguid = target->GetGUID().GetCounter();
1962 uint32 accId = 0;
1963 std::string eMail = handler->GetAcoreString(LANG_ERROR);
1964 std::string regMail = handler->GetAcoreString(LANG_ERROR);
1965 uint32 security = 0;
1966 std::string lastIp = handler->GetAcoreString(LANG_ERROR);
1967 uint8 locked = 0;
1968 std::string lastLogin = handler->GetAcoreString(LANG_ERROR);
1969 uint32 failedLogins = 0;
1970 uint32 latency = 0;
1971 std::string OS = handler->GetAcoreString(LANG_UNKNOWN);
1972
1973 // Mute data print variables
1974 int64 muteTime = -1;
1975 std::string muteReason = handler->GetAcoreString(LANG_NO_REASON);
1976 std::string muteBy = handler->GetAcoreString(LANG_UNKNOWN);
1977
1978 // Ban data print variables
1979 int64 banTime = -1;
1980 std::string banType = handler->GetAcoreString(LANG_UNKNOWN);
1981 std::string banReason = handler->GetAcoreString(LANG_NO_REASON);
1982 std::string bannedBy = handler->GetAcoreString(LANG_UNKNOWN);
1983
1984 // Character data print variables
1985 uint8 raceid, classid = 0; //RACE_NONE, CLASS_NONE
1986 std::string raceStr, classStr = handler->GetAcoreString(LANG_UNKNOWN);
1987 uint8 gender = 0;
1988 int8 locale = handler->GetSessionDbcLocale();
1989 uint32 totalPlayerTime = 0;
1990 uint8 level = 0;
1991 std::string alive = handler->GetAcoreString(LANG_ERROR);
1992 uint32 money = 0;
1993 uint32 xp = 0;
1994 uint32 xptotal = 0;
1995
1996 // Position data print
1997 uint32 mapId;
1998 uint32 areaId;
1999 uint32 phase = 0;
2000 char const* areaName = nullptr;
2001 char const* zoneName = nullptr;
2002
2003 // Guild data print variables defined so that they exist, but are not necessarily used
2004 uint32 guildId = 0;
2005 uint8 guildRankId = 0;
2006 std::string guildName;
2007 std::string guildRank;
2008 std::string note;
2009 std::string officeNote;
2010
2011 // get additional information from Player object
2012 if (playerTarget)
2013 {
2014 // check online security
2015 if (handler->HasLowerSecurity(playerTarget))
2016 {
2017 return false;
2018 }
2019
2020 accId = playerTarget->GetSession()->GetAccountId();
2021 money = playerTarget->GetMoney();
2022 totalPlayerTime = playerTarget->GetTotalPlayedTime();
2023 level = playerTarget->GetLevel();
2024 latency = playerTarget->GetSession()->GetLatency();
2025 raceid = playerTarget->getRace();
2026 classid = playerTarget->getClass();
2027 muteTime = playerTarget->GetSession()->m_muteTime;
2028 mapId = playerTarget->GetMapId();
2029 areaId = playerTarget->GetAreaId();
2030 alive = playerTarget->IsAlive() ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO);
2031 gender = playerTarget->getGender();
2032 phase = playerTarget->GetPhaseMask();
2033 }
2034 // get additional information from DB
2035 else
2036 {
2037 // check offline security
2038 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
2039 {
2040 return false;
2041 }
2042
2043 // Query informations from the DB
2044 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
2045 stmt->SetData(0, lowguid);
2046 PreparedQueryResult charInfoResult = CharacterDatabase.Query(stmt);
2047
2048 if (!charInfoResult)
2049 {
2050 return false;
2051 }
2052
2053 Field* fields = charInfoResult->Fetch();
2054 totalPlayerTime = fields[0].Get<uint32>();
2055 level = fields[1].Get<uint8>();
2056 money = fields[2].Get<uint32>();
2057 accId = fields[3].Get<uint32>();
2058 raceid = fields[4].Get<uint8>();
2059 classid = fields[5].Get<uint8>();
2060 mapId = fields[6].Get<uint16>();
2061 areaId = fields[7].Get<uint16>();
2062 gender = fields[8].Get<uint8>();
2063 uint32 health = fields[9].Get<uint32>();
2064 uint32 playerFlags = fields[10].Get<uint32>();
2065
2066 if (!health || playerFlags & PLAYER_FLAGS_GHOST)
2067 {
2068 alive = handler->GetAcoreString(LANG_NO);
2069 }
2070 else
2071 {
2072 alive = handler->GetAcoreString(LANG_YES);
2073 }
2074 }
2075
2076 // Query the prepared statement for login data
2077 loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
2078 loginStmt->SetData(0, int32(realm.Id.Realm));
2079 loginStmt->SetData(1, accId);
2080
2081 PreparedQueryResult accInfoResult = LoginDatabase.Query(loginStmt);
2082 if (accInfoResult)
2083 {
2084 Field* fields = accInfoResult->Fetch();
2085 userName = fields[0].Get<std::string>();
2086 security = fields[1].Get<uint8>();
2087
2088 // Only fetch these fields if commander has sufficient rights)
2089 if (!handler->GetSession() || handler->GetSession()->GetSecurity() >= AccountTypes(security))
2090 {
2091 eMail = fields[2].Get<std::string>();
2092 regMail = fields[3].Get<std::string>();
2093 lastIp = fields[4].Get<std::string>();
2094 lastLogin = fields[5].Get<std::string>();
2095
2096 if (IpLocationRecord const* location = sIPLocation->GetLocationRecord(lastIp))
2097 {
2098 lastIp.append(" (");
2099 lastIp.append(location->CountryName);
2100 lastIp.append(")");
2101 }
2102 }
2103 else
2104 {
2105 eMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2106 regMail = handler->GetAcoreString(LANG_UNAUTHORIZED);
2107 lastIp = handler->GetAcoreString(LANG_UNAUTHORIZED);
2108 lastLogin = handler->GetAcoreString(LANG_UNAUTHORIZED);
2109 }
2110
2111 muteTime = fields[6].Get<uint64>();
2112 muteReason = fields[7].Get<std::string>();
2113 muteBy = fields[8].Get<std::string>();
2114 failedLogins = fields[9].Get<uint32>();
2115 locked = fields[10].Get<uint8>();
2116 OS = fields[11].Get<std::string>();
2117 }
2118
2119 // Creates a chat link to the character. Returns nameLink
2120 std::string nameLink = handler->playerLink(target->GetName());
2121
2122 // Returns banType, banTime, bannedBy, banreason
2123 LoginDatabasePreparedStatement* banQuery = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO_BANS);
2124 banQuery->SetData(0, accId);
2125
2126 PreparedQueryResult accBannedResult = LoginDatabase.Query(banQuery);
2127 if (!accBannedResult)
2128 {
2129 banType = handler->GetAcoreString(LANG_CHARACTER);
2130 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_BANS);
2131 stmt->SetData(0, lowguid);
2132 accBannedResult = CharacterDatabase.Query(stmt);
2133 }
2134
2135 if (accBannedResult)
2136 {
2137 Field* fields = accBannedResult->Fetch();
2138 banTime = int64(fields[1].Get<uint64>() ? 0 : fields[0].Get<uint32>());
2139 bannedBy = fields[2].Get<std::string>();
2140 banReason = fields[3].Get<std::string>();
2141 }
2142
2143 // Can be used to query data from World database
2144 WorldDatabasePreparedStatement* xpQuery = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
2145 xpQuery->SetData(0, level);
2146
2147 PreparedQueryResult xpResult = WorldDatabase.Query(xpQuery);
2148 if (xpResult)
2149 {
2150 Field* fields = xpResult->Fetch();
2151 xptotal = fields[0].Get<uint32>();
2152 }
2153
2154 // Can be used to query data from Characters database
2155 CharacterDatabasePreparedStatement* charXpQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
2156 charXpQuery->SetData(0, lowguid);
2157
2158 PreparedQueryResult charXpResult = CharacterDatabase.Query(charXpQuery);
2159 if (charXpResult)
2160 {
2161 Field* fields = charXpResult->Fetch();
2162 xp = fields[0].Get<uint32>();
2163 ObjectGuid::LowType gguid = fields[1].Get<uint32>();
2164
2165 if (gguid != 0)
2166 {
2168 guildQuery->SetData(0, lowguid);
2169
2170 PreparedQueryResult guildInfoResult = CharacterDatabase.Query(guildQuery);
2171 if (guildInfoResult)
2172 {
2173 Field* guildInfoFields = guildInfoResult->Fetch();
2174 guildId = guildInfoFields[0].Get<uint32>();
2175 guildName = guildInfoFields[1].Get<std::string>();
2176 guildRank = guildInfoFields[2].Get<std::string>();
2177 note = guildInfoFields[3].Get<std::string>();
2178 officeNote = guildInfoFields[4].Get<std::string>();
2179 }
2180 }
2181 }
2182
2183 // Initiate output
2184 // Output I. LANG_PINFO_PLAYER
2185 handler->PSendSysMessage(LANG_PINFO_PLAYER, playerTarget ? "" : handler->GetAcoreString(LANG_OFFLINE), nameLink, target->GetGUID().ToString());
2186
2187 // Output II. LANG_PINFO_GM_ACTIVE if character is gamemaster
2188 if (playerTarget && playerTarget->IsGameMaster())
2189 {
2191 }
2192
2193 // Output III. LANG_PINFO_BANNED if ban exists and is applied
2194 if (banTime >= 0)
2195 {
2196 handler->PSendSysMessage(LANG_PINFO_BANNED, banType, banReason, banTime > 0 ? secsToTimeString(banTime - GameTime::GetGameTime().count(), true) : handler->GetAcoreString(LANG_PERMANENTLY), bannedBy);
2197 }
2198
2199 // Output IV. LANG_PINFO_MUTED if mute is applied
2200 if (muteTime > 0)
2201 {
2202 handler->PSendSysMessage(LANG_PINFO_MUTED, muteReason, secsToTimeString(muteTime - GameTime::GetGameTime().count(), true), muteBy);
2203 }
2204
2205 // Output V. LANG_PINFO_ACC_ACCOUNT
2206 handler->PSendSysMessage(LANG_PINFO_ACC_ACCOUNT, userName, accId, security);
2207
2208 // Output VI. LANG_PINFO_ACC_LASTLOGIN
2209 handler->PSendSysMessage(LANG_PINFO_ACC_LASTLOGIN, lastLogin, failedLogins);
2210
2211 // Output VII. LANG_PINFO_ACC_OS
2212 handler->PSendSysMessage(LANG_PINFO_ACC_OS, OS, latency);
2213
2214 // Output VIII. LANG_PINFO_ACC_REGMAILS
2215 handler->PSendSysMessage(LANG_PINFO_ACC_REGMAILS, regMail, eMail);
2216
2217 // Output IX. LANG_PINFO_ACC_IP
2218 handler->PSendSysMessage(LANG_PINFO_ACC_IP, lastIp, locked ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO));
2219
2220 // Output X. LANG_PINFO_CHR_LEVEL
2221 if (level != sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
2222 {
2223 handler->PSendSysMessage(LANG_PINFO_CHR_LEVEL_LOW, level, xp, xptotal, (xptotal - xp));
2224 }
2225 else
2226 {
2228 }
2229
2230 // Output XI. LANG_PINFO_CHR_RACE
2231 switch (raceid)
2232 {
2233 case RACE_HUMAN:
2234 raceStr = "Human";
2235 break;
2236 case RACE_ORC:
2237 raceStr = "Orc";
2238 break;
2239 case RACE_DWARF:
2240 raceStr = "Dwarf";
2241 break;
2242 case RACE_NIGHTELF:
2243 raceStr = "Night Elf";
2244 break;
2245 case RACE_UNDEAD_PLAYER:
2246 raceStr = "Undead";
2247 break;
2248 case RACE_TAUREN:
2249 raceStr = "Tauren";
2250 break;
2251 case RACE_GNOME:
2252 raceStr = "Gnome";
2253 break;
2254 case RACE_TROLL:
2255 raceStr = "Troll";
2256 break;
2257 case RACE_BLOODELF:
2258 raceStr = "Blood Elf";
2259 break;
2260 case RACE_DRAENEI:
2261 raceStr = "Draenei";
2262 break;
2263 }
2264
2265 switch (classid)
2266 {
2267 case CLASS_WARRIOR:
2268 classStr = "Warrior";
2269 break;
2270 case CLASS_PALADIN:
2271 classStr = "Paladin";
2272 break;
2273 case CLASS_HUNTER:
2274 classStr = "Hunter";
2275 break;
2276 case CLASS_ROGUE:
2277 classStr = "Rogue";
2278 break;
2279 case CLASS_PRIEST:
2280 classStr = "Priest";
2281 break;
2282 case CLASS_DEATH_KNIGHT:
2283 classStr = "Death Knight";
2284 break;
2285 case CLASS_SHAMAN:
2286 classStr = "Shaman";
2287 break;
2288 case CLASS_MAGE:
2289 classStr = "Mage";
2290 break;
2291 case CLASS_WARLOCK:
2292 classStr = "Warlock";
2293 break;
2294 case CLASS_DRUID:
2295 classStr = "Druid";
2296 break;
2297 }
2298
2299 handler->PSendSysMessage(LANG_PINFO_CHR_RACE, (gender == 0 ? handler->GetAcoreString(LANG_CHARACTER_GENDER_MALE) : handler->GetAcoreString(LANG_CHARACTER_GENDER_FEMALE)), raceStr, classStr);
2300
2301 // Output XII. LANG_PINFO_CHR_ALIVE
2302 handler->PSendSysMessage(LANG_PINFO_CHR_ALIVE, alive);
2303
2304 // Output XIII. LANG_PINFO_CHR_PHASE if player is not in GM mode (GM is in every phase)
2305 if (playerTarget && !playerTarget->IsGameMaster()) // IsInWorld() returns false on loadingscreen, so it's more
2306 {
2307 handler->PSendSysMessage(LANG_PINFO_CHR_PHASE, phase); // precise than just target (safer ?).
2308 }
2309
2310 // However, as we usually just require a target here, we use target instead.
2311 // Output XIV. LANG_PINFO_CHR_MONEY
2312 uint32 gold = money / GOLD;
2313 uint32 silv = (money % GOLD) / SILVER;
2314 uint32 copp = (money % GOLD) % SILVER;
2315 handler->PSendSysMessage(LANG_PINFO_CHR_MONEY, gold, silv, copp);
2316
2317 // Position data
2318 MapEntry const* map = sMapStore.LookupEntry(mapId);
2319 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);
2320
2321 if (area)
2322 {
2323 zoneName = area->area_name[locale];
2324
2325 AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->zone);
2326 if (zone)
2327 {
2328 areaName = zoneName;
2329 zoneName = zone->area_name[locale];
2330 }
2331 }
2332
2333 if (!zoneName)
2334 {
2335 zoneName = handler->GetAcoreString(LANG_UNKNOWN);
2336 }
2337
2338 if (areaName)
2339 {
2340 handler->PSendSysMessage(LANG_PINFO_CHR_MAP_WITH_AREA, map->name[locale], zoneName, areaName);
2341 }
2342 else
2343 {
2344 handler->PSendSysMessage(LANG_PINFO_CHR_MAP, map->name[locale], zoneName);
2345 }
2346
2347 // Output XVII. - XVIX. if they are not empty
2348 if (!guildName.empty())
2349 {
2350 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName, guildId);
2351 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank, uint32(guildRankId));
2352
2353 if (!note.empty())
2354 {
2356 }
2357
2358 if (!officeNote.empty())
2359 {
2360 handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_ONOTE, officeNote);
2361 }
2362 }
2363
2364 // Output XX. LANG_PINFO_CHR_PLAYEDTIME
2365 handler->PSendSysMessage(LANG_PINFO_CHR_PLAYEDTIME, (secsToTimeString(totalPlayerTime, true)));
2366
2367 // Mail Data - an own query, because it may or may not be useful.
2368 // SQL: "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?"
2370 mailQuery->SetData(0, lowguid);
2371
2372 PreparedQueryResult mailInfoResult = CharacterDatabase.Query(mailQuery);
2373 if (mailInfoResult)
2374 {
2375 Field* fields = mailInfoResult->Fetch();
2376 uint32 readmail = uint32(fields[0].Get<double>());
2377 uint32 totalmail = uint32(fields[1].Get<uint64>());
2378
2379 // Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given
2380 if (totalmail >= 1)
2381 {
2382 handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, readmail, totalmail);
2383 }
2384 }
2385
2386 return true;
2387 }
@ PLAYER_FLAGS_GHOST
Definition: Player.h:478
@ LANG_YES
Definition: Language.h:451
@ LANG_CHARACTER_GENDER_FEMALE
Definition: Language.h:812
@ LANG_PINFO_CHR_GUILD_NOTE
Definition: Language.h:802
@ LANG_PINFO_CHR_ALIVE
Definition: Language.h:796
@ LANG_PINFO_ACC_LASTLOGIN
Definition: Language.h:790
@ LANG_CHARACTER
Definition: Language.h:1087
@ LANG_UNKNOWN
Definition: Language.h:77
@ LANG_PINFO_CHR_PHASE
Definition: Language.h:797
@ LANG_ERROR
Definition: Language.h:78
@ LANG_PERMANENTLY
Definition: Language.h:1088
@ LANG_OFFLINE
Definition: Language.h:69
@ LANG_PINFO_CHR_LEVEL_LOW
Definition: Language.h:794
@ LANG_PINFO_CHR_PLAYEDTIME
Definition: Language.h:804
@ LANG_UNAUTHORIZED
Definition: Language.h:808
@ LANG_PINFO_CHR_RACE
Definition: Language.h:795
@ LANG_PINFO_CHR_MAP_WITH_AREA
Definition: Language.h:809
@ LANG_PINFO_PLAYER
Definition: Language.h:785
@ LANG_PINFO_ACC_OS
Definition: Language.h:791
@ LANG_CHARACTER_GENDER_MALE
Definition: Language.h:811
@ LANG_PINFO_CHR_MONEY
Definition: Language.h:798
@ LANG_PINFO_CHR_LEVEL_HIGH
Definition: Language.h:806
@ LANG_NO
Definition: Language.h:452
@ LANG_PINFO_CHR_MAP
Definition: Language.h:799
@ LANG_PINFO_ACC_IP
Definition: Language.h:793
@ LANG_PINFO_BANNED
Definition: Language.h:787
@ LANG_PINFO_CHR_GUILD_RANK
Definition: Language.h:801
@ LANG_PINFO_ACC_ACCOUNT
Definition: Language.h:789
@ LANG_PINFO_ACC_REGMAILS
Definition: Language.h:792
@ LANG_PINFO_GM_ACTIVE
Definition: Language.h:786
@ LANG_PINFO_CHR_MAILS
Definition: Language.h:805
@ LANG_PINFO_CHR_GUILD
Definition: Language.h:800
@ LANG_PINFO_CHR_GUILD_ONOTE
Definition: Language.h:803
@ LANG_PINFO_MUTED
Definition: Language.h:788
@ CONFIG_MAX_PLAYER_LEVEL
Definition: IWorld.h:240
phase
Definition: boss_skadi.cpp:103
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
@ WORLD_SEL_REQ_XP
Definition: WorldDatabase.h:101
@ LOGIN_SEL_PINFO
Definition: LoginDatabase.h:88
@ LOGIN_SEL_PINFO_BANS
Definition: LoginDatabase.h:89
@ CHAR_SEL_PINFO_XP
Definition: CharacterDatabase.h:336
@ CHAR_SEL_GUILD_MEMBER_EXTENDED
Definition: CharacterDatabase.h:146
@ CHAR_SEL_CHAR_PINFO
Definition: CharacterDatabase.h:335
@ CHAR_SEL_PINFO_MAILS
Definition: CharacterDatabase.h:337
@ CHAR_SEL_PINFO_BANS
Definition: CharacterDatabase.h:338
@ CLASS_HUNTER
Definition: SharedDefines.h:143
@ CLASS_DRUID
Definition: SharedDefines.h:151
@ CLASS_SHAMAN
Definition: SharedDefines.h:147
@ CLASS_PRIEST
Definition: SharedDefines.h:145
@ CLASS_WARRIOR
Definition: SharedDefines.h:141
@ CLASS_WARLOCK
Definition: SharedDefines.h:149
@ CLASS_MAGE
Definition: SharedDefines.h:148
@ CLASS_DEATH_KNIGHT
Definition: SharedDefines.h:146
@ CLASS_PALADIN
Definition: SharedDefines.h:142
@ CLASS_ROGUE
Definition: SharedDefines.h:144
@ SILVER
Definition: SharedDefines.h:252
@ GOLD
Definition: SharedDefines.h:253
@ 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
#define sIPLocation
Definition: IPLocation.h:49
AccountTypes
Definition: Common.h:55
std::int8_t int8
Definition: Define.h:105
std::uint64_t uint64
Definition: Define.h:106
std::uint16_t uint16
Definition: Define.h:108
Realm realm
Definition: World.cpp:112
Definition: IPLocation.h:23
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
uint32 GetAreaId() const
Definition: Object.cpp:3149
uint32 LowType
Definition: ObjectGuid.h:122
uint32 GetTotalPlayedTime()
Definition: Player.h:1185
uint32 GetMoney() const
Definition: Player.h:1592
uint8 getGender() const
Definition: Unit.h:768
uint8 getClass() const
Definition: Unit.h:765
uint8 getRace(bool original=false) const
Definition: Unit.cpp:20909
uint8 GetLevel() const
Definition: Unit.h:759
uint32 GetLatency() const
Definition: WorldSession.h:502
uint32 Realm
Definition: Realm.h:43
RealmHandle Id
Definition: Realm.h:69

References 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(), Field::Get(), 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_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_PHASE, LANG_PINFO_CHR_PLAYEDTIME, LANG_PINFO_CHR_RACE, LANG_PINFO_GM_ACTIVE, LANG_PINFO_MUTED, LANG_PINFO_PLAYER, LANG_UNAUTHORIZED, LANG_UNKNOWN, LANG_YES, LOGIN_SEL_PINFO, LOGIN_SEL_PINFO_BANS, LoginDatabase, WorldSession::m_muteTime, 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
2953 {
2954 if (!sSoundEntriesStore.LookupEntry(soundId))
2955 {
2956 handler->SendErrorMessage(LANG_SOUND_NOT_EXIST, soundId);
2957 return false;
2958 }
2959
2960 sWorld->SendGlobalMessage(WorldPackets::Misc::Playsound(soundId).Write());
2961
2963 return true;
2964 }
DBCStorage< SoundEntriesEntry > sSoundEntriesStore(SoundEntriesfmt)
@ LANG_COMMAND_PLAYED_TO_ALL
Definition: Language.h:1055
@ LANG_SOUND_NOT_EXIST
Definition: Language.h:210
Definition: MiscPackets.h:85

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

Referenced by GetCommands().

◆ HandlePossessCommand()

static bool misc_commandscript::HandlePossessCommand ( ChatHandler handler)
inlinestatic
2967 {
2968 Unit* unit = handler->getSelectedUnit();
2969 if (!unit)
2970 {
2971 return false;
2972 }
2973
2974 handler->GetSession()->GetPlayer()->CastSpell(unit, 530, true);
2975 return true;
2976 }

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

Referenced by GetCommands().

◆ HandleRecallCommand()

static bool misc_commandscript::HandleRecallCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
1298 {
1299 if (!target)
1300 {
1301 target = PlayerIdentifier::FromTargetOrSelf(handler);
1302 }
1303
1304 if (!target || !target->IsConnected())
1305 {
1306 return false;
1307 }
1308
1309 auto targetPlayer = target->GetConnectedPlayer();
1310
1311 // check online security
1312 if (handler->HasLowerSecurity(targetPlayer))
1313 {
1314 return false;
1315 }
1316
1317 if (targetPlayer->IsBeingTeleported())
1318 {
1319 handler->SendErrorMessage(LANG_IS_TELEPORTED, handler->playerLink(target->GetName()));
1320 return false;
1321 }
1322
1323 // stop flight if need
1324 if (targetPlayer->IsInFlight())
1325 {
1326 targetPlayer->GetMotionMaster()->MovementExpired();
1327 targetPlayer->CleanupAfterTaxiFlight();
1328 }
1329
1330 targetPlayer->TeleportTo(targetPlayer->m_recallMap, targetPlayer->m_recallX, targetPlayer->m_recallY, targetPlayer->m_recallZ, targetPlayer->m_recallO);
1331 return true;
1332 }

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
2414 {
2415 Player* player = handler->GetSession()->GetPlayer();
2416
2418 Cell cell(p);
2419 cell.SetNoCreate();
2420
2421 Acore::RespawnDo u_do;
2422 Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
2423 Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());
2424
2425 return true;
2426 }
float GetGridActivationRange() const
Definition: Object.cpp:1623
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:179
Definition: GridNotifiers.h:260
Definition: GridNotifiers.h:645

References Acore::ComputeCellCoord(), WorldObject::GetGridActivationRange(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), ChatHandler::GetSession(), Cell::SetNoCreate(), and Cell::VisitGridObjects().

Referenced by GetCommands().

◆ HandleRespawnCommand()

static bool misc_commandscript::HandleRespawnCommand ( ChatHandler handler)
inlinestatic
2390 {
2391 Player* player = handler->GetSession()->GetPlayer();
2392
2393 Unit* target = handler->getSelectedUnit();
2394 if (player->GetTarget() && target)
2395 {
2396 if (target->GetTypeId() != TYPEID_UNIT || target->IsPet())
2397 {
2399 return false;
2400 }
2401
2402 if (target->isDead())
2403 {
2404 target->ToCreature()->Respawn(true);
2405 }
2406 return true;
2407 }
2408
2410 return false;
2411 }
void Respawn(bool force=false)
Definition: Creature.cpp:2030
bool IsPet() const
Definition: Unit.h:754
bool isDead() const
Definition: Unit.h:1153

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

Referenced by GetCommands().

◆ HandleReviveCommand()

static bool misc_commandscript::HandleReviveCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
1161 {
1162 if (!target)
1163 {
1164 target = PlayerIdentifier::FromTargetOrSelf(handler);
1165 }
1166
1167 if (!target)
1168 {
1169 return false;
1170 }
1171
1172 if (target->IsConnected())
1173 {
1174 auto targetPlayer = target->GetConnectedPlayer();
1175
1176 targetPlayer->ResurrectPlayer(!AccountMgr::IsPlayerAccount(targetPlayer->GetSession()->GetSecurity()) ? 1.0f : 0.5f);
1177 targetPlayer->SpawnCorpseBones();
1178 targetPlayer->SaveToDB(false, false);
1179 }
1180 else
1181 {
1182 CharacterDatabaseTransaction trans(nullptr);
1183 Player::OfflineResurrect(target->GetGUID(), trans);
1184 }
1185
1186 return true;
1187 }
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition: DatabaseEnvFwd.h:70
static void OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans)
Definition: Player.cpp:4524

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

Referenced by GetCommands().

◆ HandleSaveAllCommand()

static bool misc_commandscript::HandleSaveAllCommand ( ChatHandler handler)
inlinestatic
1366 {
1369 return true;
1370 }
@ LANG_PLAYERS_SAVED
Definition: Language.h:47
void SaveAllPlayers()
Definition: ObjectAccessor.cpp:265

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

Referenced by GetCommands().

◆ HandleSaveCommand()

static bool misc_commandscript::HandleSaveCommand ( ChatHandler handler)
inlinestatic
1335 {
1336 Player* player = handler->GetSession()->GetPlayer();
1337
1338 // save GM account without delay and output message
1339 if (handler->GetSession()->GetSecurity() >= SEC_GAMEMASTER)
1340 {
1341 if (Player* target = handler->getSelectedPlayer())
1342 {
1343 target->SaveToDB(false, false);
1344 }
1345 else
1346 {
1347 player->SaveToDB(false, false);
1348 }
1349
1351 return true;
1352 }
1353
1354 // save if the player has last been saved over 20 seconds ago
1355 uint32 saveInterval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
1356 if (saveInterval == 0 || (saveInterval > 20 * IN_MILLISECONDS && player->GetSaveTimer() <= saveInterval - 20 * IN_MILLISECONDS))
1357 {
1358 player->SaveToDB(false, false);
1359 }
1360
1361 return true;
1362 }
@ LANG_PLAYER_SAVED
Definition: Language.h:46
@ CONFIG_INTERVAL_SAVE
Definition: IWorld.h:218
constexpr auto IN_MILLISECONDS
Definition: Common.h:52
void SaveToDB(bool create, bool logout)
Definition: PlayerStorage.cpp:7064
uint32 GetSaveTimer() const
Definition: Player.h:2331

References CONFIG_INTERVAL_SAVE, WorldSession::GetPlayer(), Player::GetSaveTimer(), WorldSession::GetSecurity(), ChatHandler::getSelectedPlayer(), ChatHandler::GetSession(), IN_MILLISECONDS, LANG_PLAYER_SAVED, Player::SaveToDB(), SEC_GAMEMASTER, 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
1899 {
1900 uint32 skillID = uint32(skillId);
1901
1902 if (skillID <= 0)
1903 {
1904 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, skillID);
1905 return false;
1906 }
1907
1908 Player* target = handler->getSelectedPlayer();
1909 if (!target)
1910 {
1912 return false;
1913 }
1914
1915 SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skillID);
1916 if (!skillLine)
1917 {
1918 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, uint32(skillID));
1919 return false;
1920 }
1921
1922 bool targetHasSkill = target->GetSkillValue(skillID);
1923
1924 // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes
1925 // the max level of the new profession.
1926 uint16 max = maxPureSkill ? *maxPureSkill : targetHasSkill ? target->GetPureMaxSkillValue(skillID) : uint16(level);
1927
1928 if (level <= 0 || level > max || max <= 0)
1929 {
1930 return false;
1931 }
1932
1933 // If the player has the skill, we get the current skill step. If they don't have the skill, we
1934 // add the skill to the player's book with step 1 (which is the first rank, in most cases something
1935 // like 'Apprentice <skill>'.
1936 target->SetSkill(skillID, targetHasSkill ? target->GetSkillStep(skillID) : 1, level, max);
1937 handler->PSendSysMessage(LANG_SET_SKILL, skillID, skillLine->name[handler->GetSessionDbcLocale()], handler->GetNameLink(target), level, max);
1938 return true;
1939 }
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ LANG_INVALID_SKILL_ID
Definition: Language.h:525
@ LANG_SET_SKILL
Definition: Language.h:522
uint16 GetSkillValue(uint32 skill) const
Definition: Player.cpp:5393
uint16 GetSkillStep(uint16 skill) const
Definition: Player.cpp:5381
uint16 GetPureMaxSkillValue(uint32 skill) const
Definition: Player.cpp:5428
void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
Definition: Player.cpp:5272
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
1630 {
1631 Player* playerTarget = handler->getSelectedPlayer();
1632 if (!playerTarget)
1633 {
1635 return false;
1636 }
1637
1638 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1639 if (!area)
1640 {
1642 return false;
1643 }
1644
1645 int32 offset = area->exploreFlag / 32;
1646 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1647 {
1649 return false;
1650 }
1651
1652 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1653 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1654 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields | val)));
1655
1657 return true;
1658 }
@ LANG_EXPLORE_AREA
Definition: Language.h:616

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
155 {
156 auto tokens = args;
157
158 if (args.empty() || !tokens.size())
159 {
160 handler->PSendSysMessage("Usage: .skirmish [arena] [XvX] [Nick1] [Nick2] ... [NickN]");
161 handler->PSendSysMessage("[arena] can be \"all\" or comma-separated list of possible arenas (NA, BE, RL, DS, RV).");
162 handler->PSendSysMessage("[XvX] can be 1v1, 2v2, 3v3, 5v5. After [XvX] specify enough nicknames for that mode.");
163 handler->SetSentErrorMessage(true);
164 return false;
165 }
166
167 auto tokensItr = tokens.begin();
168
169 std::vector<BattlegroundTypeId> allowedArenas;
170 std::string_view arenasStr = *(tokensItr++);
171
172 auto arenaTokens = Acore::Tokenize(arenasStr, ',', false);
173 for (auto const& arenaName : arenaTokens)
174 {
175 if (arenaName == "all")
176 {
177 if (arenaTokens.size() > 1)
178 {
179 handler->SendErrorMessage("Invalid [arena] specified.");
180 return false;
181 }
182
183 allowedArenas.emplace_back(BATTLEGROUND_NA);
184 allowedArenas.emplace_back(BATTLEGROUND_BE);
185 allowedArenas.emplace_back(BATTLEGROUND_RL);
186 allowedArenas.emplace_back(BATTLEGROUND_DS);
187 allowedArenas.emplace_back(BATTLEGROUND_RV);
188 }
189 else if (arenaName == "NA")
190 {
191 allowedArenas.emplace_back(BATTLEGROUND_NA);
192 }
193 else if (arenaName == "BE")
194 {
195 allowedArenas.emplace_back(BATTLEGROUND_BE);
196 }
197 else if (arenaName == "RL")
198 {
199 allowedArenas.emplace_back(BATTLEGROUND_RL);
200 }
201 else if (arenaName == "DS")
202 {
203 allowedArenas.emplace_back(BATTLEGROUND_DS);
204 }
205 else if (arenaName == "RV")
206 {
207 allowedArenas.emplace_back(BATTLEGROUND_RV);
208 }
209 else
210 {
211 handler->SendErrorMessage("Invalid [arena] specified.");
212 return false;
213 }
214 }
215
216 ASSERT(!allowedArenas.empty());
217 BattlegroundTypeId randomizedArenaBgTypeId = Acore::Containers::SelectRandomContainerElement(allowedArenas);
218
219 uint8 count = 0;
220 if (tokensItr != tokens.end())
221 {
222 std::string_view mode = *(tokensItr++);
223
224 if (mode == "1v1")
225 {
226 count = 2;
227 }
228 else if (mode == "2v2")
229 {
230 count = 4;
231 }
232 else if (mode == "3v3")
233 {
234 count = 6;
235 }
236 else if (mode == "5v5")
237 {
238 count = 10;
239 }
240 }
241
242 if (!count)
243 {
244 handler->SendErrorMessage("Invalid bracket. Can be 1v1, 2v2, 3v3, 5v5");
245 return false;
246 }
247
248 if (tokens.size() != uint16(count + 2))
249 {
250 handler->SendErrorMessage("Invalid number of nicknames for this bracket.");
251 return false;
252 }
253
254 uint8 hcnt = count / 2;
255 uint8 error = 0;
256 std::string last_name;
257 Player* plr = nullptr;
258 std::array<Player*, 10> players = {};
259 uint8 cnt = 0;
260
261 for (; tokensItr != tokens.end(); ++tokensItr)
262 {
263 last_name = std::string(*tokensItr);
264 plr = ObjectAccessor::FindPlayerByName(last_name, false);
265
266 if (!plr)
267 {
268 error = 1;
269 break;
270 }
271
272 if (!plr->IsInWorld() || !plr->FindMap() || plr->IsBeingTeleported())
273 {
274 error = 2;
275 break;
276 }
277
278 if (plr->GetMap()->GetEntry()->Instanceable())
279 {
280 error = 3;
281 break;
282 }
283
284 if (plr->isUsingLfg())
285 {
286 error = 4;
287 break;
288 }
289
290 if (plr->InBattlegroundQueue())
291 {
292 error = 5;
293 break;
294 }
295
296 if (plr->IsInFlight())
297 {
298 error = 10;
299 break;
300 }
301
302 if (!plr->IsAlive())
303 {
304 error = 11;
305 break;
306 }
307
308 const Group* g = plr->GetGroup();
309
310 if (hcnt > 1)
311 {
312 if (!g)
313 {
314 error = 6;
315 break;
316 }
317
318 if (g->isRaidGroup() || g->isBGGroup() || g->isBFGroup() || g->isLFGGroup())
319 {
320 error = 7;
321 break;
322 }
323
324 if (g->GetMembersCount() != hcnt)
325 {
326 error = 8;
327 break;
328 }
329
330 uint8 sti = (cnt < hcnt ? 0 : hcnt);
331 if (sti != cnt && players[sti]->GetGroup() != plr->GetGroup())
332 {
333 error = 9;
334 last_name += " and " + players[sti]->GetName();
335 break;
336 }
337 }
338 else // 1v1
339 {
340 if (g)
341 {
342 error = 12;
343 break;
344 }
345 }
346
347 players[cnt++] = plr;
348 }
349
350 for (uint8 i = 0; i < cnt && !error; ++i)
351 {
352 for (uint8 j = i + 1; j < cnt; ++j)
353 {
354 if (players[i]->GetGUID() == players[j]->GetGUID())
355 {
356 last_name = players[i]->GetName();
357 error = 13;
358 break;
359 }
360 }
361 }
362
363 switch (error)
364 {
365 case 1:
366 handler->PSendSysMessage("Player {} not found.", last_name);
367 break;
368 case 2:
369 handler->PSendSysMessage("Player {} is being teleported.", last_name);
370 break;
371 case 3:
372 handler->PSendSysMessage("Player {} is in instance/battleground/arena.", last_name);
373 break;
374 case 4:
375 handler->PSendSysMessage("Player {} is in LFG system.", last_name);
376 break;
377 case 5:
378 handler->PSendSysMessage("Player {} is queued for battleground/arena.", last_name);
379 break;
380 case 6:
381 handler->PSendSysMessage("Player {} is not in group.", last_name);
382 break;
383 case 7:
384 handler->PSendSysMessage("Player {} is not in normal group.", last_name);
385 break;
386 case 8:
387 handler->PSendSysMessage("Group of player {} has invalid member count.", last_name);
388 break;
389 case 9:
390 handler->PSendSysMessage("Players {} are not in the same group.", last_name);
391 break;
392 case 10:
393 handler->PSendSysMessage("Player {} is in flight.", last_name);
394 break;
395 case 11:
396 handler->PSendSysMessage("Player {} is dead.", last_name);
397 break;
398 case 12:
399 handler->PSendSysMessage("Player {} is in a group.", last_name);
400 break;
401 case 13:
402 handler->PSendSysMessage("Player {} occurs more than once.", last_name);
403 break;
404 }
405
406 if (error)
407 {
408 handler->SetSentErrorMessage(true);
409 return false;
410 }
411
412 Battleground* bgt = sBattlegroundMgr->GetBattlegroundTemplate(BATTLEGROUND_AA);
413 if (!bgt)
414 {
415 handler->SendErrorMessage("Couldn't create arena map!");
416 return false;
417 }
418
419 Battleground* bg = sBattlegroundMgr->CreateNewBattleground(randomizedArenaBgTypeId, GetBattlegroundBracketById(bgt->GetMapId(), bgt->GetBracketId()), ArenaType(hcnt >= 2 ? hcnt : 2), false);
420 if (!bg)
421 {
422 handler->SendErrorMessage("Couldn't create arena map!");
423 return false;
424 }
425
426 bg->StartBattleground();
427
428 BattlegroundTypeId bgTypeId = bg->GetBgTypeID();
429
430 TeamId teamId1 = Player::TeamIdForRace(players[0]->getRace());
431 TeamId teamId2 = (teamId1 == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
432
433 for (uint8 i = 0; i < cnt; ++i)
434 {
435 Player* player = players[i];
436
437 TeamId teamId = (i < hcnt ? teamId1 : teamId2);
438 player->SetEntryPoint();
439
440 uint32 queueSlot = 0;
441 WorldPacket data;
442 sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId);
443 player->GetSession()->SendPacket(&data);
444
445 // Remove from LFG queues
446 sLFGMgr->LeaveAllLfgQueues(player->GetGUID(), false);
447
448 player->SetBattlegroundId(bg->GetInstanceID(), bgTypeId, queueSlot, true, false, teamId);
449 sBattlegroundMgr->SendToBattleground(player, bg->GetInstanceID(), bgTypeId);
450 }
451
452 handler->PSendSysMessage("Success! Players are now being teleported to the arena.");
453 return true;
454 }
PvPDifficultyEntry const * GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id)
Definition: DBCStores.cpp:815
#define sBattlegroundMgr
Definition: BattlegroundMgr.h:188
@ STATUS_IN_PROGRESS
Definition: Battleground.h:197
ArenaType
Definition: Battleground.h:211
#define sLFGMgr
Definition: LFGMgr.h:641
BattlegroundTypeId
Definition: SharedDefines.h:3479
@ BATTLEGROUND_AA
Definition: SharedDefines.h:3486
@ BATTLEGROUND_BE
Definition: SharedDefines.h:3485
@ BATTLEGROUND_RV
Definition: SharedDefines.h:3491
@ BATTLEGROUND_NA
Definition: SharedDefines.h:3484
@ BATTLEGROUND_DS
Definition: SharedDefines.h:3490
@ BATTLEGROUND_RL
Definition: SharedDefines.h:3488
#define ASSERT
Definition: Errors.h:68
std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
Definition: Tokenize.cpp:20
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition: Containers.h:133
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition: ObjectAccessor.cpp:274
Definition: Battleground.h:298
uint32 GetMapId() const
Definition: Battleground.h:428
uint8 GetArenaType() const
Definition: Battleground.h:340
void StartBattleground()
Definition: Battleground.cpp:1095
uint32 GetInstanceID() const
Definition: Battleground.h:326
uint32 GetStartTime() const
Definition: Battleground.h:329
BattlegroundBracketId GetBracketId() const
Definition: Battleground.h:325
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition: Battleground.h:324
void SetSentErrorMessage(bool val)
Definition: Chat.h:240
bool IsInWorld() const
Definition: Object.h:104
Map * FindMap() const
Definition: Object.h:530
static TeamId TeamIdForRace(uint8 race)
Definition: Player.cpp:5786
bool isUsingLfg()
Definition: Player.cpp:13015
bool InBattlegroundQueue(bool ignoreArena=false) const
Definition: Player.cpp:12157
bool isLFGGroup(bool restricted=false) const
Definition: Group.cpp:2265
bool isBGGroup() const
Definition: Group.cpp:2276
uint32 GetMembersCount() const
Definition: Group.h:245
bool isBFGroup() const
Definition: Group.cpp:2281
bool isRaidGroup() const
Definition: Group.cpp:2271
MapEntry const * GetEntry() const
Definition: Map.h:319
Definition: WorldPacket.h:27
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition: WorldSession.cpp:214
bool Instanceable() const
Definition: DBCStructure.h:1353

References ASSERT, BATTLEGROUND_AA, BATTLEGROUND_BE, BATTLEGROUND_DS, BATTLEGROUND_NA, BATTLEGROUND_RL, BATTLEGROUND_RV, 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(), Player::GetSession(), Battleground::GetStartTime(), Player::InBattlegroundQueue(), MapEntry::Instanceable(), Unit::IsAlive(), Player::IsBeingTeleported(), Group::isBFGroup(), Group::isBGGroup(), Unit::IsInFlight(), Object::IsInWorld(), Group::isLFGGroup(), Group::isRaidGroup(), Player::isUsingLfg(), ChatHandler::PSendSysMessage(), sBattlegroundMgr, Acore::Containers::SelectRandomContainerElement(), ChatHandler::SendErrorMessage(), WorldSession::SendPacket(), Player::SetBattlegroundId(), Player::SetEntryPoint(), ChatHandler::SetSentErrorMessage(), sLFGMgr, Battleground::StartBattleground(), STATUS_IN_PROGRESS, TEAM_ALLIANCE, TEAM_HORDE, Player::TeamIdForRace(), and Acore::Tokenize().

Referenced by GetCommands().

◆ HandleStringCommand()

static bool misc_commandscript::HandleStringCommand ( ChatHandler handler,
uint32  id,
Optional< uint8 locale 
)
inlinestatic
3023 {
3024 if (!id)
3025 {
3027 return false;
3028 }
3029
3030 const char* str = sObjectMgr->GetAcoreString(id, locale ? static_cast<LocaleConstant>(*locale) : DEFAULT_LOCALE);
3031
3032 if (!strcmp(str, "<error>"))
3033 {
3035 return true;
3036 }
3037 else
3038 {
3039 handler->SendSysMessage(str);
3040 return true;
3041 }
3042 }
@ LANG_CMD_SYNTAX
Definition: Language.h:42
@ LANG_NO_ACORE_STRING_FOUND
Definition: Language.h:1169
LocaleConstant
Definition: Common.h:64
#define DEFAULT_LOCALE
Definition: Common.h:78

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

Referenced by GetCommands().

◆ HandleSummonCommand()

static bool misc_commandscript::HandleSummonCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
891 {
892 if (!target)
893 {
894 target = PlayerIdentifier::FromTarget(handler);
895 }
896
897 if (!target)
898 {
899 return false;
900 }
901
902 Player* _player = handler->GetSession()->GetPlayer();
903 if (target->GetGUID() == _player->GetGUID())
904 {
906 return false;
907 }
908
909 std::string nameLink = handler->playerLink(target->GetName());
910
911 if (target->IsConnected())
912 {
913 auto targetPlayer = target->GetConnectedPlayer();
914
915 // check online security
916 if (handler->HasLowerSecurity(targetPlayer))
917 {
918 return false;
919 }
920
921 if (targetPlayer->IsBeingTeleported())
922 {
923 handler->SendErrorMessage(LANG_IS_TELEPORTED, nameLink);
924 return false;
925 }
926
927 Map* map = handler->GetSession()->GetPlayer()->GetMap();
928
929 if (map->IsBattlegroundOrArena())
930 {
931 handler->SendErrorMessage("Can't summon to a battleground!");
932 return false;
933 }
934 else if (map->IsDungeon())
935 {
936 // Allow GM to summon players or only other GM accounts inside instances.
937 if (!sWorld->getBoolConfig(CONFIG_INSTANCE_GMSUMMON_PLAYER))
938 {
939 // pussywizard: prevent unbinding normal player's perm bind by just summoning him >_>
940 if (!targetPlayer->GetSession()->GetSecurity())
941 {
942 handler->SendErrorMessage("Only GMs can be summoned to an instance!");
943 return false;
944 }
945 }
946
947 Map* destMap = targetPlayer->GetMap();
948
949 if (destMap->Instanceable() && destMap->GetInstanceId() != map->GetInstanceId())
950 {
951 sInstanceSaveMgr->PlayerUnbindInstance(target->GetGUID(), map->GetInstanceId(), targetPlayer->GetDungeonDifficulty(), true, targetPlayer);
952 }
953
954 // we are in an instance, and can only summon players in our group with us as leader
955 if (!handler->GetSession()->GetPlayer()->GetGroup() || !targetPlayer->GetGroup() ||
956 (targetPlayer->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
957 (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()))
958 // the last check is a bit excessive, but let it be, just in case
959 {
961 return false;
962 }
963 }
964
965 handler->PSendSysMessage(LANG_SUMMONING, nameLink, "");
966 if (handler->needReportToTarget(targetPlayer))
967 {
968 ChatHandler(targetPlayer->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->playerLink(_player->GetName()));
969 }
970
971 // stop flight if need
972 if (targetPlayer->IsInFlight())
973 {
974 targetPlayer->GetMotionMaster()->MovementExpired();
975 targetPlayer->CleanupAfterTaxiFlight();
976 }
977 // save only in non-flight case
978 else
979 {
980 targetPlayer->SaveRecallPosition();
981 }
982
983 // before GM
984 float x, y, z;
985 handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, targetPlayer->GetObjectSize());
986 targetPlayer->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, targetPlayer->GetOrientation(), 0, handler->GetSession()->GetPlayer());
987 }
988 else
989 {
990 // check offline security
991 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
992 {
993 return false;
994 }
995
996 handler->PSendSysMessage(LANG_SUMMONING, nameLink, handler->GetAcoreString(LANG_OFFLINE));
997
998 // in point where GM stay
1000 handler->GetSession()->GetPlayer()->GetPositionX(),
1001 handler->GetSession()->GetPlayer()->GetPositionY(),
1002 handler->GetSession()->GetPlayer()->GetPositionZ(),
1003 handler->GetSession()->GetPlayer()->GetOrientation(),
1004 handler->GetSession()->GetPlayer()->GetZoneId(),
1005 target->GetGUID());
1006 }
1007
1008 return true;
1009 }
@ CONFIG_INSTANCE_GMSUMMON_PLAYER
Definition: IWorld.h:91
static void SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, ObjectGuid guid)
Definition: PlayerMisc.cpp:84

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
708 {
709 Unit* target = handler->getSelectedUnit();
710 if (!target)
711 {
713 return false;
714 }
715
716 if (spells.holds_alternative<std::string_view>() && spells.get<std::string_view>() == "all")
717 {
718 target->RemoveAllAuras();
719 return true;
720 }
721
722 if (!spells.holds_alternative<SpellInfo const*>())
723 {
725 return false;
726 }
727
728 auto spell = spells.get<SpellInfo const*>();
729
730 if (!SpellMgr::IsSpellValid(spell))
731 {
732 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
733 return false;
734 }
735
736 target->RemoveAurasDueToSpell(spell->Id);
737
738 return true;
739 }
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:4871
void RemoveAllAuras()
Definition: Unit.cpp:5270

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
3003 {
3004 Player* player = handler->GetSession()->GetPlayer();
3005
3006 if (player->isPossessing())
3007 {
3008 return false;
3009 }
3010
3011 player->StopCastingBindSight();
3012 return true;
3013 }
void StopCastingBindSight(Aura *except=nullptr)
Definition: Player.cpp:13103
bool isPossessing() const
Definition: Unit.h:1217

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
2911 {
2912 Creature* creatureTarget = handler->getSelectedCreature();
2913
2914 if (!target && !creatureTarget)
2915 {
2916 target = PlayerIdentifier::FromTargetOrSelf(handler);
2917 }
2918
2919 if (!target && !creatureTarget)
2920 {
2922 return false;
2923 }
2924
2925 Player* playerTarget = target->GetConnectedPlayer();
2926
2927 if (!creatureTarget && playerTarget && playerTarget->HasAura(SPELL_FREEZE))
2928 {
2929 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
2930 playerTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
2931 return true;
2932 }
2933 else if (creatureTarget && creatureTarget->HasAura(SPELL_FREEZE))
2934 {
2936 creatureTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
2937 return true;
2938 }
2939 else if (!creatureTarget && target && !target->IsConnected())
2940 {
2942 stmt->SetData(0, target->GetGUID().GetCounter());
2943 CharacterDatabase.Execute(stmt);
2944 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
2945 return true;
2946 }
2947
2949 return true;
2950 }
@ LANG_COMMAND_UNFREEZE
Definition: Language.h:1049
@ LANG_COMMAND_FREEZE_WRONG
Definition: Language.h:1048
@ CHAR_DEL_CHAR_AURA_FROZEN
Definition: CharacterDatabase.h:353
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5649

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
2554 {
2555 if (!target)
2556 {
2557 target = PlayerIdentifier::FromTargetOrSelf(handler);
2558 }
2559
2560 if (!target)
2561 {
2562 return false;
2563 }
2564
2565 Player* playerTarget = target->GetConnectedPlayer();
2566 uint32 accountId = playerTarget ? playerTarget->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(target->GetGUID());
2567
2568 // find only player from same account if any
2569 if (!playerTarget)
2570 {
2571 if (WorldSession* session = sWorld->FindSession(accountId))
2572 {
2573 playerTarget = session->GetPlayer();
2574 }
2575 }
2576
2577 // must have strong lesser security level
2578 if (handler->HasLowerSecurity(playerTarget, target->GetGUID(), true))
2579 {
2580 return false;
2581 }
2582
2583 if (playerTarget)
2584 {
2585 if (playerTarget->CanSpeak())
2586 {
2588 return false;
2589 }
2590
2591 playerTarget->GetSession()->m_muteTime = 0;
2592 }
2593
2595 stmt->SetData(0, 0);
2596 stmt->SetData(1, "");
2597 stmt->SetData(2, "");
2598 stmt->SetData(3, accountId);
2599 LoginDatabase.Execute(stmt);
2600
2601 if (playerTarget)
2602 {
2604 }
2605
2606 handler->PSendSysMessage(LANG_YOU_ENABLE_CHAT, handler->playerLink(target->GetName()));
2607
2608 return true;
2609 }
@ LANG_CHAT_ALREADY_ENABLED
Definition: Language.h:342
@ LANG_YOU_ENABLE_CHAT
Definition: Language.h:344
@ LANG_YOUR_CHAT_ENABLED
Definition: Language.h:343
bool CanSpeak() const
Definition: PlayerMisc.cpp:69

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 sWorld.

Referenced by GetCommands().

◆ HandleUnPossessCommand()

static bool misc_commandscript::HandleUnPossessCommand ( ChatHandler handler)
inlinestatic
2979 {
2980 Unit* unit = handler->getSelectedUnit();
2981 if (!unit)
2982 {
2983 unit = handler->GetSession()->GetPlayer();
2984 }
2985
2986 unit->RemoveCharmAuras();
2987 return true;
2988 }
void RemoveCharmAuras()
Definition: Unit.cpp:11132

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
1420 {
1421 // No args required for players
1422 if (handler->GetSession() && AccountMgr::IsPlayerAccount(handler->GetSession()->GetSecurity()))
1423 {
1424 if (Player* player = handler->GetSession()->GetPlayer())
1425 {
1426 player->CastSpell(player, SPELL_STUCK, false);
1427 }
1428
1429 return true;
1430 }
1431
1432 if (!target)
1433 {
1434 target = PlayerIdentifier::FromTargetOrSelf(handler);
1435 }
1436
1437 if (!target || !target->IsConnected())
1438 {
1439 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
1440 return false;
1441
1443 stmt->SetData(0, target->GetGUID().GetCounter());
1444
1445 PreparedQueryResult result = CharacterDatabase.Query(stmt);
1446
1447 if (result)
1448 {
1449 Field* fieldsDB = result->Fetch();
1450 WorldLocation loc(fieldsDB[0].Get<uint16>(), fieldsDB[2].Get<float>(), fieldsDB[3].Get<float>(), fieldsDB[4].Get<float>(), 0.0f);
1451 uint32 zoneId = fieldsDB[1].Get<uint16>();
1452
1453 Player::SavePositionInDB(loc, zoneId, target->GetGUID(), nullptr);
1454
1455 handler->PSendSysMessage(LANG_SUMMONING, target->GetName(), handler->GetAcoreString(LANG_OFFLINE));
1456 }
1457
1458 return true;
1459 }
1460
1461 Player* player = target->GetConnectedPlayer();
1462
1463 if (player->IsInFlight() || player->IsInCombat())
1464 {
1465 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(7355);
1466 if (!spellInfo)
1467 {
1468 return false;
1469 }
1470
1471 if (Player* caster = handler->GetSession()->GetPlayer())
1472 {
1474 }
1475
1476 return false;
1477 }
1478
1479 if (location->empty() || *location == "inn")
1480 {
1481 player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
1482 return true;
1483 }
1484
1485 if (*location == "graveyard")
1486 {
1487 player->RepopAtGraveyard();
1488 return true;
1489 }
1490
1491 if (*location == "startzone")
1492 {
1493 player->TeleportTo(player->GetStartPosition());
1494 return true;
1495 }
1496
1497 //Not a supported argument
1498 return false;
1499 }
constexpr auto SPELL_STUCK
Definition: cs_misc.cpp:54
@ CHAR_SEL_CHARACTER_HOMEBIND
Definition: CharacterDatabase.h:87
@ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW
Definition: SharedDefines.h:1122
Definition: Position.h:251
float m_homebindZ
Definition: Player.h:2349
uint32 m_homebindMapId
Definition: Player.h:2345
void RepopAtGraveyard()
Definition: Player.cpp:4862
float m_homebindY
Definition: Player.h:2348
WorldLocation GetStartPosition() const
Definition: Player.cpp:11355
float m_homebindX
Definition: Player.h:2347
bool IsInCombat() const
Definition: Unit.h:1032
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition: Spell.cpp:4659

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