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

Public Member Functions

 misc_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
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)
 
static bool HandleOpenDoorCommand (ChatHandler *handler, Optional< float > range)
 

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
89: CommandScript("misc_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable misc_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

92 {
93 static ChatCommandTable auraCommandTable =
94 {
95 { "stack", HandleAuraStacksCommand, SEC_GAMEMASTER, Console::No },
96 { "", HandleAuraCommand, SEC_GAMEMASTER, Console::No }
97 };
98
99 static ChatCommandTable commandTable =
100 {
101 { "commentator", HandleCommentatorCommand, SEC_MODERATOR, Console::No },
102 { "dev", HandleDevCommand, SEC_ADMINISTRATOR, Console::No },
103 { "gps", HandleGPSCommand, SEC_MODERATOR, Console::No },
104 { "aura", auraCommandTable },
105 { "unaura", HandleUnAuraCommand, SEC_GAMEMASTER, Console::No },
106 { "appear", HandleAppearCommand, SEC_MODERATOR, Console::No },
107 { "summon", HandleSummonCommand, SEC_GAMEMASTER, Console::No },
108 { "groupsummon", HandleGroupSummonCommand, SEC_GAMEMASTER, Console::No },
109 { "commands", HandleCommandsCommand, SEC_PLAYER, Console::Yes },
110 { "die", HandleDieCommand, SEC_GAMEMASTER, Console::No },
111 { "revive", HandleReviveCommand, SEC_GAMEMASTER, Console::Yes },
112 { "dismount", HandleDismountCommand, SEC_PLAYER, Console::No },
113 { "guid", HandleGUIDCommand, SEC_GAMEMASTER, Console::No },
114 { "help", HandleHelpCommand, SEC_PLAYER, Console::Yes },
115 { "cooldown", HandleCooldownCommand, SEC_GAMEMASTER, Console::No },
116 { "distance", HandleGetDistanceCommand, SEC_ADMINISTRATOR, Console::No },
117 { "recall", HandleRecallCommand, SEC_GAMEMASTER, Console::No },
118 { "save", HandleSaveCommand, SEC_PLAYER, Console::No },
119 { "saveall", HandleSaveAllCommand, SEC_GAMEMASTER, Console::Yes },
120 { "kick", HandleKickPlayerCommand, SEC_GAMEMASTER, Console::Yes },
121 { "unstuck", HandleUnstuckCommand, SEC_GAMEMASTER, Console::Yes },
122 { "linkgrave", HandleLinkGraveCommand, SEC_ADMINISTRATOR, Console::No },
123 { "neargrave", HandleNearGraveCommand, SEC_GAMEMASTER, Console::No },
124 { "showarea", HandleShowAreaCommand, SEC_GAMEMASTER, Console::No },
125 { "hidearea", HandleHideAreaCommand, SEC_ADMINISTRATOR, Console::No },
126 { "additem", HandleAddItemCommand, SEC_GAMEMASTER, Console::Yes },
127 { "additem set", HandleAddItemSetCommand, SEC_GAMEMASTER, Console::No },
128 { "wchange", HandleChangeWeather, SEC_ADMINISTRATOR, Console::No },
129 { "maxskill", HandleMaxSkillCommand, SEC_GAMEMASTER, Console::No },
130 { "setskill", HandleSetSkillCommand, SEC_GAMEMASTER, Console::No },
131 { "pinfo", HandlePInfoCommand, SEC_GAMEMASTER, Console::Yes },
132 { "respawn", HandleRespawnCommand, SEC_GAMEMASTER, Console::No },
133 { "respawn all", HandleRespawnAllCommand, SEC_GAMEMASTER, Console::No },
134 { "mute", HandleMuteCommand, SEC_GAMEMASTER, Console::Yes },
135 { "mutehistory", HandleMuteInfoCommand, SEC_GAMEMASTER, Console::Yes },
136 { "unmute", HandleUnmuteCommand, SEC_GAMEMASTER, Console::Yes },
137 { "movegens", HandleMovegensCommand, SEC_ADMINISTRATOR, Console::No },
138 { "cometome", HandleComeToMeCommand, SEC_ADMINISTRATOR, Console::No },
139 { "damage", HandleDamageCommand, SEC_GAMEMASTER, Console::No },
140 { "combatstop", HandleCombatStopCommand, SEC_GAMEMASTER, Console::Yes },
141 { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes },
142 { "freeze", HandleFreezeCommand, SEC_GAMEMASTER, Console::No },
143 { "unfreeze", HandleUnFreezeCommand, SEC_GAMEMASTER, Console::No },
144 { "possess", HandlePossessCommand, SEC_GAMEMASTER, Console::No },
145 { "unpossess", HandleUnPossessCommand, SEC_GAMEMASTER, Console::No },
146 { "bindsight", HandleBindSightCommand, SEC_ADMINISTRATOR, Console::No },
147 { "unbindsight", HandleUnbindSightCommand, SEC_ADMINISTRATOR, Console::No },
148 { "playall", HandlePlayAllCommand, SEC_GAMEMASTER, Console::No },
149 { "skirmish", HandleSkirmishCommand, SEC_ADMINISTRATOR, Console::No },
150 { "mailbox", HandleMailBoxCommand, SEC_MODERATOR, Console::No },
151 { "string", HandleStringCommand, SEC_GAMEMASTER, Console::No },
152 { "opendoor", HandleOpenDoorCommand, SEC_GAMEMASTER, Console::No }
153 };
154
155 return commandTable;
156 }
@ SEC_PLAYER
Definition Common.h:57
@ SEC_ADMINISTRATOR
Definition Common.h:60
@ SEC_GAMEMASTER
Definition Common.h:59
@ SEC_MODERATOR
Definition Common.h:58
static bool HandleCommentatorCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:457
static bool HandleDevCommand(ChatHandler *handler, Optional< bool > enableArg)
Definition cs_misc.cpp:501
static bool HandleDamageCommand(ChatHandler *handler, uint32 damage, Optional< std::string > percent)
Definition cs_misc.cpp:2781
static bool HandleSaveCommand(ChatHandler *handler)
Definition cs_misc.cpp:1326
static bool HandleAuraStacksCommand(ChatHandler *handler, SpellInfo const *spell, int16 stacks)
Definition cs_misc.cpp:658
static bool HandleLinkGraveCommand(ChatHandler *handler, uint32 graveyardId, Optional< std::string_view > team)
Definition cs_misc.cpp:1489
static bool HandlePlayAllCommand(ChatHandler *handler, uint32 soundId)
Definition cs_misc.cpp:2930
static bool HandleAddItemCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, ItemTemplate const *itemTemplate, Optional< int32 > _count)
Definition cs_misc.cpp:1679
static bool HandleAuraCommand(ChatHandler *handler, SpellInfo const *spell)
Definition cs_misc.cpp:632
static bool HandleUnstuckCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > location)
Definition cs_misc.cpp:1411
static bool HandleRespawnAllCommand(ChatHandler *handler)
Definition cs_misc.cpp:2395
static bool HandleSkirmishCommand(ChatHandler *handler, std::vector< std::string_view > args)
Definition cs_misc.cpp:158
static bool HandleUnbindSightCommand(ChatHandler *handler)
Definition cs_misc.cpp:2980
static bool HandleShowAreaCommand(ChatHandler *handler, uint32 areaID)
Definition cs_misc.cpp:1617
static bool HandleStringCommand(ChatHandler *handler, uint32 id, Optional< uint8 > locale)
Definition cs_misc.cpp:3000
static bool HandleChangeWeather(ChatHandler *handler, uint32 type, float grade)
Definition cs_misc.cpp:1842
static bool HandlePInfoCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1930
static bool HandleSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:886
static bool HandleCooldownCommand(ChatHandler *handler, Optional< SpellInfo const * > spell)
Definition cs_misc.cpp:1231
static bool HandleReviveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1156
static bool HandleOpenDoorCommand(ChatHandler *handler, Optional< float > range)
Definition cs_misc.cpp:3013
static bool HandleCommandsCommand(ChatHandler *handler)
Definition cs_misc.cpp:1113
static bool HandleMailBoxCommand(ChatHandler *handler)
Definition cs_misc.cpp:2993
static bool HandleDieCommand(ChatHandler *handler)
Definition cs_misc.cpp:1119
static bool HandleAppearCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:737
static bool HandleHelpCommand(ChatHandler *handler, Tail cmd)
Definition cs_misc.cpp:1219
static bool HandleRespawnCommand(ChatHandler *handler)
Definition cs_misc.cpp:2371
static bool HandleNearGraveCommand(ChatHandler *handler, Optional< std::string_view > team)
Definition cs_misc.cpp:1540
static bool HandleMovegensCommand(ChatHandler *handler)
Definition cs_misc.cpp:2631
static bool HandleGUIDCommand(ChatHandler *handler)
Definition cs_misc.cpp:1205
static bool HandleAddItemSetCommand(ChatHandler *handler, Variant< Hyperlink< itemset >, uint32 > itemSetId)
Definition cs_misc.cpp:1781
static bool HandleSaveAllCommand(ChatHandler *handler)
Definition cs_misc.cpp:1357
static bool HandleGPSCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:546
static bool HandleKickPlayerCommand(ChatHandler *handler, Optional< PlayerIdentifier > target, Optional< std::string_view > reason)
Definition cs_misc.cpp:1365
static bool HandleHideAreaCommand(ChatHandler *handler, uint32 areaID)
Definition cs_misc.cpp:1648
static bool HandleSetSkillCommand(ChatHandler *handler, Variant< Hyperlink< skill >, uint32 > skillId, int32 level, Optional< uint16 > maxPureSkill)
Definition cs_misc.cpp:1886
static bool HandleUnmuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2531
static bool HandleRecallCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1289
static bool HandleBindSightCommand(ChatHandler *handler)
Definition cs_misc.cpp:2968
static bool HandleComeToMeCommand(ChatHandler *handler)
Definition cs_misc.cpp:2765
static bool HandleUnPossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:2956
static bool HandleDismountCommand(ChatHandler *handler)
Definition cs_misc.cpp:1181
static bool HandleGroupSummonCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1008
static bool HandleCombatStopCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2813
static bool HandleUnAuraCommand(ChatHandler *handler, Variant< SpellInfo const *, std::string_view > spells)
Definition cs_misc.cpp:703
static bool HandleGetDistanceCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:1261
static bool HandleMaxSkillCommand(ChatHandler *handler)
Definition cs_misc.cpp:1872
static bool HandleFlushArenaPointsCommand(ChatHandler *)
Definition cs_misc.cpp:2839
static bool HandleFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2845
static bool HandleMuteInfoCommand(ChatHandler *handler, std::string accountName)
Definition cs_misc.cpp:2590
static bool HandleUnFreezeCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_misc.cpp:2888
static bool HandleMuteCommand(ChatHandler *handler, Optional< PlayerIdentifier > player, std::string notSpeakTime, Tail muteReason)
Definition cs_misc.cpp:2407
static bool HandlePossessCommand(ChatHandler *handler)
Definition cs_misc.cpp:2944
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46

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(), HandleOpenDoorCommand(), 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
1680 {
1681 if (!sObjectMgr->GetItemTemplate(itemTemplate->ItemId))
1682 {
1683 handler->SendErrorMessage(LANG_COMMAND_ITEMIDINVALID, itemTemplate->ItemId);
1684 return false;
1685 }
1686
1687 uint32 itemId = itemTemplate->ItemId;
1688 int32 count = 1;
1689
1690 if (_count)
1691 count = *_count;
1692
1693 if (!count)
1694 count = 1;
1695
1696 if (!player)
1697 player = PlayerIdentifier::FromTargetOrSelf(handler);
1698
1699 if (!player)
1700 return false;
1701
1702 Player* playerTarget = player->GetConnectedPlayer();
1703
1704 if (!playerTarget)
1705 return false;
1706
1707 // Subtract
1708 if (count < 0)
1709 {
1710 // Only have scam check on player accounts
1711 if (playerTarget->GetSession()->GetSecurity() == SEC_PLAYER)
1712 {
1713 if (!playerTarget->HasItemCount(itemId, 0))
1714 {
1715 // output that player don't have any items to destroy
1716 handler->SendErrorMessage(LANG_REMOVEITEM_FAILURE, handler->GetNameLink(playerTarget), itemId);
1717 return false;
1718 }
1719
1720 if (!playerTarget->HasItemCount(itemId, -count))
1721 {
1722 // output that player don't have as many items that you want to destroy
1723 handler->SendErrorMessage(LANG_REMOVEITEM_ERROR, handler->GetNameLink(playerTarget), itemId);
1724 return false;
1725 }
1726 }
1727
1728 // output successful amount of destroyed items
1729 playerTarget->DestroyItemCount(itemId, -count, true, false);
1730 handler->PSendSysMessage(LANG_REMOVEITEM, itemId, -count, handler->GetNameLink(playerTarget));
1731 return true;
1732 }
1733
1734 // Adding items
1735 uint32 noSpaceForCount = 0;
1736
1737 // check space and find places
1738 ItemPosCountVec dest;
1739 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
1740
1741 if (msg != EQUIP_ERR_OK) // convert to possible store amount
1742 count -= noSpaceForCount;
1743
1744 if (!count || dest.empty()) // can't add any
1745 {
1746 handler->SendErrorMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1747 return false;
1748 }
1749
1750 Item* item = playerTarget->StoreNewItem(dest, itemId, true);
1751
1752 Player* p = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
1753 // remove binding (let GM give it to another player later)
1754 if (p && p == playerTarget)
1755 {
1756 for (auto const& itemPos : dest)
1757 {
1758 if (Item* item1 = p->GetItemByPos(itemPos.pos))
1759 {
1760 item1->SetBinding(false);
1761 }
1762 }
1763 }
1764
1765 if (p && count && item)
1766 {
1767 p->SendNewItem(item, count, false, true);
1768
1769 if (p != playerTarget)
1770 {
1771 playerTarget->SendNewItem(item, count, true, false);
1772 }
1773 }
1774
1775 if (noSpaceForCount)
1776 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
1777
1778 return true;
1779 }
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
InventoryResult
Definition Item.h:46
@ EQUIP_ERR_OK
Definition Item.h:47
@ NULL_BAG
Definition Item.h:40
@ NULL_SLOT
Definition Item.h:41
@ LANG_ITEM_CANNOT_CREATE
Definition Language.h:538
@ LANG_REMOVEITEM_FAILURE
Definition Language.h:1323
@ LANG_REMOVEITEM_ERROR
Definition Language.h:1324
@ LANG_REMOVEITEM
Definition Language.h:537
@ LANG_COMMAND_ITEMIDINVALID
Definition Language.h:468
#define sObjectMgr
Definition ObjectMgr.h:1636
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:776
virtual std::string GetNameLink() const
Definition Chat.h:198
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
Definition Item.h:220
Definition Player.h:1081
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition PlayerStorage.cpp:655
WorldSession * GetSession() const
Definition Player.h:2005
Item * GetItemByPos(uint16 pos) const
Definition PlayerStorage.cpp:441
void SendNewItem(Item *item, uint32 count, bool received, bool created, bool broadcast=false, bool sendChatMessage=true)
Definition PlayerStorage.cpp:4750
void DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Definition PlayerStorage.cpp:3121
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0)
Definition PlayerStorage.cpp:2524
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
Definition Player.h:1291
AccountTypes GetSecurity() const
Definition WorldSession.h:373
Player * GetPlayer() const
Definition WorldSession.h:376
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition ChatCommandTags.h:184

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
1782 {
1783 // prevent generation all items with itemset field value '0'
1784 if (!*itemSetId)
1785 {
1787 return false;
1788 }
1789
1790 Player* player = handler->GetSession()->GetPlayer();
1791 Player* playerTarget = handler->getSelectedPlayer();
1792
1793 if (!playerTarget)
1794 {
1795 playerTarget = player;
1796 }
1797
1798 bool found = false;
1799
1800 for (auto const& [itemid, itemTemplate] : *sObjectMgr->GetItemTemplateStore())
1801 {
1802 if (itemTemplate.ItemSet == uint32(itemSetId))
1803 {
1804 found = true;
1805 ItemPosCountVec dest;
1806 InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate.ItemId, 1);
1807
1808 if (msg == EQUIP_ERR_OK)
1809 {
1810 Item* item = playerTarget->StoreNewItem(dest, itemTemplate.ItemId, true);
1811
1812 // remove binding (let GM give it to another player later)
1813 if (player == playerTarget)
1814 {
1815 item->SetBinding(false);
1816 }
1817
1818 player->SendNewItem(item, 1, false, true);
1819
1820 if (player != playerTarget)
1821 {
1822 playerTarget->SendNewItem(item, 1, true, false);
1823 }
1824 }
1825 else
1826 {
1827 player->SendEquipError(msg, nullptr, nullptr, itemTemplate.ItemId);
1828 handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate.ItemId, 1);
1829 }
1830 }
1831 }
1832
1833 if (!found)
1834 {
1836 return false;
1837 }
1838
1839 return true;
1840 }
@ LANG_NO_ITEMS_FROM_ITEMSET_FOUND
Definition Language.h:543
Player * getSelectedPlayer() const
Definition Chat.cpp:374
void SetBinding(bool val)
Definition Item.h:235
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=nullptr, uint32 itemid=0)
Definition PlayerStorage.cpp:4021

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

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
633 {
634 if (!spell)
635 {
637 return false;
638 }
639
640 if (!SpellMgr::IsSpellValid(spell))
641 {
642 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
643 return false;
644 }
645
646 Unit* target = handler->getSelectedUnit();
647 if (!target)
648 {
650 return false;
651 }
652
653 Aura::TryRefreshStackOrCreate(spell, MAX_EFFECT_MASK, target, target);
654
655 return true;
656 }
#define MAX_EFFECT_MASK
Definition DBCStructure.h:1637
@ LANG_COMMAND_NOSPELLFOUND
Definition Language.h:478
@ LANG_SELECT_CHAR_OR_CREATURE
Definition Language.h:31
@ LANG_COMMAND_SPELL_BROKEN
Definition Language.h:521
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
Unit * getSelectedUnit() const
Definition Chat.cpp:386
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:441
Definition Unit.h:636

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

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
2969 {
2970 Unit* unit = handler->getSelectedUnit();
2971 if (!unit)
2972 {
2973 return false;
2974 }
2975
2976 handler->GetSession()->GetPlayer()->CastSpell(unit, 6277, true);
2977 return true;
2978 }
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:1178

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
1843 {
1844 // Weather is OFF
1845 if (!sWorld->getBoolConfig(CONFIG_WEATHER))
1846 {
1848 return false;
1849 }
1850
1851 Player* player = handler->GetSession()->GetPlayer();
1852 uint32 zoneid = player->GetZoneId();
1853
1854 Weather* weather = WeatherMgr::FindWeather(zoneid);
1855
1856 if (!weather)
1857 {
1858 weather = WeatherMgr::AddWeather(zoneid);
1859 }
1860
1861 if (!weather)
1862 {
1864 return false;
1865 }
1866
1867 weather->SetWeather(WeatherType(type), grade);
1868
1869 return true;
1870 }
@ CONFIG_WEATHER
Definition IWorld.h:92
@ LANG_NO_WEATHER
Definition Language.h:433
@ LANG_WEATHER_DISABLED
Definition Language.h:434
WeatherType
Definition SharedDefines.h:3137
Weather for one zone.
Definition Weather.h:64
uint32 GetZoneId() const
Definition Object.cpp:3148
#define sWorld
Definition World.h:363
Weather * AddWeather(uint32 zone_id)
Add a Weather object to the list.
Definition WeatherMgr.cpp:66
void SetWeather(WeatherType type, float grade)
Set the weather.
Definition Weather.cpp:262
Weather * FindWeather(uint32 id)
Find a Weather object by the given zoneid.
Definition WeatherMgr.cpp:49

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
2814 {
2815 if (!target)
2816 {
2817 target = PlayerIdentifier::FromTargetOrSelf(handler);
2818 }
2819
2820 if (!target || !target->IsConnected())
2821 {
2823 return false;
2824 }
2825
2826 Player* playerTarget = target->GetConnectedPlayer();
2827
2828 // check online security
2829 if (handler->HasLowerSecurity(playerTarget))
2830 {
2831 return false;
2832 }
2833
2834 playerTarget->CombatStop();
2835 playerTarget->getHostileRefMgr().deleteReferences();
2836 return true;
2837 }
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:540
void deleteReferences(bool removeFromMap=false)
Definition HostileRefMgr.cpp:125
void CombatStop(bool includingCast=false)
Definition Unit.cpp:10481
HostileRefMgr & getHostileRefMgr()
Definition Unit.h:916

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
2766 {
2767 Creature* caster = handler->getSelectedCreature();
2768 if (!caster)
2769 {
2771 return false;
2772 }
2773
2774 Player* player = handler->GetSession()->GetPlayer();
2775
2776 caster->GetMotionMaster()->MovePoint(0, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
2777
2778 return true;
2779 }
@ LANG_SELECT_CREATURE
Definition Language.h:32
Creature * getSelectedCreature() const
Definition Chat.cpp:410
Definition Creature.h:43
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition MotionMaster.h:213
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

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

Referenced by GetCommands().

◆ HandleCommandsCommand()

static bool misc_commandscript::HandleCommandsCommand ( ChatHandler handler)
inlinestatic
1114 {
1115 SendCommandHelpFor(*handler, "");
1116 return true;
1117 }
AC_GAME_API void SendCommandHelpFor(ChatHandler &handler, std::string_view cmd)
Definition ChatCommand.cpp:533

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleCommentatorCommand()

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

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
1232 {
1233 Player* target = handler->getSelectedPlayer();
1234 if (!target)
1235 {
1237 return false;
1238 }
1239
1240 std::string nameLink = handler->GetNameLink(target);
1241
1242 if (!spell)
1243 {
1244 target->RemoveAllSpellCooldown();
1245 handler->PSendSysMessage(LANG_REMOVEALL_COOLDOWN, nameLink);
1246 }
1247 else
1248 {
1249 if (!SpellMgr::IsSpellValid(*spell))
1250 {
1251 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell.value()->Id);
1252 return false;
1253 }
1254
1255 target->RemoveSpellCooldown(spell.value()->Id, true);
1256 handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, spell.value()->Id, target == handler->GetSession()->GetPlayer() ? handler->GetAcoreString(LANG_YOU) : nameLink);
1257 }
1258 return true;
1259 }
@ LANG_YOU
Definition Language.h:76
@ LANG_REMOVE_COOLDOWN
Definition Language.h:533
@ LANG_REMOVEALL_COOLDOWN
Definition Language.h:532
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:41
void RemoveAllSpellCooldown()
Definition Player.cpp:3594
void RemoveSpellCooldown(uint32 spell_id, bool update=false)
Definition Player.cpp:3543

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
2782 {
2783 Unit* target = handler->getSelectedUnit();
2784 if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
2785 {
2787 return false;
2788 }
2789
2790 if (target->IsPlayer())
2791 if (handler->HasLowerSecurity(target->ToPlayer()))
2792 return false;
2793
2794 if (!target->IsAlive() || !damage)
2795 return true;
2796
2797 if (target->IsCreature() && handler->GetSession()->GetSecurity() == SEC_CONSOLE) // pussywizard
2798 target->ToCreature()->LowerPlayerDamageReq(target->GetMaxHealth());
2799
2800 if (percent)
2801 if (StringStartsWith("pct", *percent))
2802 if (damage <= 100)
2803 damage = target->CountPctFromMaxHealth(damage);
2804
2805 Unit::DealDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false, true);
2806
2807 if (target != handler->GetSession()->GetPlayer())
2809
2810 return true;
2811 }
@ SEC_CONSOLE
Definition Common.h:61
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:297
@ VICTIMSTATE_HIT
Definition Unit.h:84
@ HITINFO_AFFECTS_VICTIM
Definition Unit.h:98
@ DIRECT_DAMAGE
Definition Unit.h:248
bool StringStartsWith(std::string_view haystack, std::string_view needle)
Definition Util.h:401
void LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer=true)
Definition Creature.cpp:3823
bool IsPlayer() const
Definition Object.h:200
Player * ToPlayer()
Definition Object.h:201
bool IsCreature() const
Definition Object.h:204
Creature * ToCreature()
Definition Object.h:205
void SendAttackStateUpdate(CalcDamageInfo *damageInfo)
Definition Unit.cpp:6534
uint32 GetMaxHealth() const
Definition Unit.h:1039
bool IsAlive() const
Definition Unit.h:1707
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:1051
ObjectGuid GetTarget() const
Definition Unit.h:827
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:810

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

Referenced by GetCommands().

◆ HandleDevCommand()

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

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

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

Referenced by GetCommands().

◆ HandleDismountCommand()

static bool misc_commandscript::HandleDismountCommand ( ChatHandler handler)
inlinestatic
1182 {
1183 Player* player = handler->GetSession()->GetPlayer();
1184
1185 // If player is not mounted, so go out :)
1186 if (!player->IsMounted())
1187 {
1189 return false;
1190 }
1191
1192 if (player->IsInFlight())
1193 {
1195 return false;
1196 }
1197
1198 player->Dismount();
1200 player->SetSpeed(MOVE_RUN, 1, true);
1201 player->SetSpeed(MOVE_FLIGHT, 1, true);
1202 return true;
1203 }
@ LANG_CHAR_NON_MOUNTED
Definition Language.h:54
@ LANG_YOU_IN_FLIGHT
Definition Language.h:50
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
@ MOVE_FLIGHT
Definition UnitDefines.h:355
@ MOVE_RUN
Definition UnitDefines.h:350
void Dismount()
Definition Unit.cpp:13569
bool IsMounted() const
Definition Unit.h:1800
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:14481
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5142

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
2840 {
2841 sArenaTeamMgr->DistributeArenaPoints();
2842 return true;
2843 }
#define sArenaTeamMgr
Definition ArenaTeamMgr.h:69

References sArenaTeamMgr.

Referenced by GetCommands().

◆ HandleFreezeCommand()

static bool misc_commandscript::HandleFreezeCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
2846 {
2847 Creature* creatureTarget = handler->getSelectedCreature();
2848
2849 if (!target && !creatureTarget)
2850 {
2851 target = PlayerIdentifier::FromTargetOrSelf(handler);
2852 }
2853
2854 if (!target && !creatureTarget)
2855 {
2857 return false;
2858 }
2859
2860 Player* playerTarget = target->GetConnectedPlayer();
2861 if (playerTarget && !creatureTarget)
2862 {
2863 handler->PSendSysMessage(LANG_COMMAND_FREEZE, target->GetName());
2864
2865 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
2866 {
2867 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, playerTarget, playerTarget);
2868 }
2869
2870 return true;
2871 }
2872 else if (creatureTarget && creatureTarget->IsAlive())
2873 {
2875
2876 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_FREEZE))
2877 {
2878 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, creatureTarget, creatureTarget);
2879 }
2880
2881 return true;
2882 }
2883
2885 return false;
2886 }
@ LANG_COMMAND_FREEZE
Definition Language.h:1047
#define sSpellMgr
Definition SpellMgr.h:825
virtual LocaleConstant GetSessionDbcLocale() const
Definition Chat.cpp:870
Definition SpellInfo.h:316
constexpr auto SPELL_FREEZE
Definition cs_misc.cpp:58
std::string const GetLocalizeCreatureName(Creature *creature, LocaleConstant locale)
Definition cs_misc.cpp:60

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
1262 {
1263 if (!target)
1264 {
1265 target = PlayerIdentifier::FromTargetOrSelf(handler);
1266 }
1267
1268 WorldObject* object = handler->getSelectedUnit();
1269
1270 if (!object && !target)
1271 {
1272 return false;
1273 }
1274
1275 if (!object && target && target->IsConnected())
1276 {
1277 object = target->GetConnectedPlayer();
1278 }
1279
1280 if (!object)
1281 {
1282 return false;
1283 }
1284
1285 handler->PSendSysMessage(LANG_DISTANCE, handler->GetSession()->GetPlayer()->GetDistance(object), handler->GetSession()->GetPlayer()->GetDistance2d(object), handler->GetSession()->GetPlayer()->GetExactDist(object), handler->GetSession()->GetPlayer()->GetExactDist2d(object));
1286 return true;
1287 }
@ LANG_DISTANCE
Definition Language.h:545
Definition Object.h:410
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1274
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1256
float GetExactDist2d(const float x, const float y) const
Definition Position.h:170
float GetExactDist(float x, float y, float z) const
Definition Position.h:182

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

Referenced by GetCommands().

◆ HandleGPSCommand()

static bool misc_commandscript::HandleGPSCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
547 {
548 if (!target)
549 {
550 target = PlayerIdentifier::FromTargetOrSelf(handler);
551 }
552
553 WorldObject* object = handler->getSelectedUnit();
554
555 if (!object && !target)
556 {
557 return false;
558 }
559
560 if (!object && target && target->IsConnected())
561 {
562 object = target->GetConnectedPlayer();
563 }
564
565 if (!object)
566 {
567 return false;
568 }
569
570 CellCoord const cellCoord = Acore::ComputeCellCoord(object->GetPositionX(), object->GetPositionY());
571 Cell cell(cellCoord);
572
573 uint32 zoneId, areaId;
574 object->GetZoneAndAreaId(zoneId, areaId);
575
576 MapEntry const* mapEntry = sMapStore.LookupEntry(object->GetMapId());
577 AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
578 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId);
579
580 float zoneX = object->GetPositionX();
581 float zoneY = object->GetPositionY();
582
583 Map2ZoneCoordinates(zoneX, zoneY, zoneId);
584
585 float groundZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT);
586 float floorZ = object->GetMapHeight(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ());
587
588 uint32 haveMap = GridTerrainLoader::ExistMap(object->GetMapId(), cell.GridX(), cell.GridY()) ? 1 : 0;
589 uint32 haveVMap = GridTerrainLoader::ExistVMap(object->GetMapId(), cell.GridX(), cell.GridY()) ? 1 : 0;
591
592 if (haveVMap)
593 {
594 if (object->IsOutdoors())
595 {
596 handler->PSendSysMessage("You are outdoors");
597 }
598 else
599 {
600 handler->PSendSysMessage("You are indoors");
601 }
602 }
603 else
604 {
605 handler->PSendSysMessage("no VMAP available for area info");
606 }
607
609 object->GetMapId(), (mapEntry ? mapEntry->name[handler->GetSessionDbcLocale()] : "<unknown>"),
610 zoneId, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
611 areaId, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
612 object->GetPhaseMask(),
613 object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation(),
614 cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(),
615 zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap, haveMMAP);
616
617 LiquidData const& liquidData = object->GetLiquidData();
618
619 if (liquidData.Status)
620 {
621 handler->PSendSysMessage(LANG_LIQUID_STATUS, liquidData.Level, liquidData.DepthLevel, liquidData.Entry, liquidData.Flags, liquidData.Status);
622 }
623
624 if (object->GetTransport())
625 {
626 handler->PSendSysMessage("Transport offset: {:0.2f}, {:0.2f}, {:0.2f}, {:0.2f}", object->m_movementInfo.transport.pos.GetPositionX(), object->m_movementInfo.transport.pos.GetPositionY(), object->m_movementInfo.transport.pos.GetPositionZ(), object->m_movementInfo.transport.pos.GetOrientation());
627 }
628
629 return true;
630 }
void Map2ZoneCoordinates(float &x, float &y, uint32 zone)
Definition DBCStores.cpp:748
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define MAX_HEIGHT
Definition GridTerrainData.h:26
@ LANG_LIQUID_STATUS
Definition Language.h:216
@ LANG_MAP_POSITION
Definition Language.h:134
static bool ExistVMap(uint32 mapid, int gx, int gy)
Definition GridTerrainLoader.cpp:122
static bool ExistMap(uint32 mapid, int gx, int gy)
Definition GridTerrainLoader.cpp:95
static MMapMgr * createOrGetMMapMgr()
Definition MMapFactory.cpp:27
dtNavMesh const * GetNavMesh(uint32 mapId)
Definition MMapMgr.cpp:306
uint32 GetMapId() const
Definition Position.h:280
bool IsOutdoors() const
Definition Object.cpp:3173
Transport * GetTransport() const
Definition Object.h:597
MovementInfo m_movementInfo
Definition Object.h:607
CellCoord ComputeCellCoord(float x, float y)
Definition GridDefines.h:193
Definition DBCStructure.h:518
Definition Cell.h:45
Definition GridTerrainData.h:199
float Level
Definition GridTerrainData.h:204
uint32 Flags
Definition GridTerrainData.h:203
uint32 Entry
Definition GridTerrainData.h:202
LiquidStatus Status
Definition GridTerrainData.h:206
float DepthLevel
Definition GridTerrainData.h:205
Definition DBCStructure.h:1324
char const * name[16]
Definition DBCStructure.h:1330
Position pos
Definition Object.h:302
struct MovementInfo::TransportInfo transport

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

Referenced by GetCommands().

◆ HandleGroupSummonCommand()

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

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

Referenced by GetCommands().

◆ HandleGUIDCommand()

static bool misc_commandscript::HandleGUIDCommand ( ChatHandler handler)
inlinestatic
1206 {
1207 ObjectGuid guid = handler->GetSession()->GetPlayer()->GetTarget();
1208
1209 if (!guid)
1210 {
1212 return false;
1213 }
1214
1215 handler->PSendSysMessage(LANG_OBJECT_GUID, guid.ToString());
1216 return true;
1217 }
@ LANG_OBJECT_GUID
Definition Language.h:239
@ LANG_NO_SELECTION
Definition Language.h:238
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
1220 {
1222
1223 if (cmd.empty())
1224 {
1226 }
1227
1228 return true;
1229 }

References Acore::ChatCommands::SendCommandHelpFor().

Referenced by GetCommands().

◆ HandleHideAreaCommand()

static bool misc_commandscript::HandleHideAreaCommand ( ChatHandler handler,
uint32  areaID 
)
inlinestatic
1649 {
1650 Player* playerTarget = handler->getSelectedPlayer();
1651 if (!playerTarget)
1652 {
1654 return false;
1655 }
1656
1657 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1658 if (!area)
1659 {
1661 return false;
1662 }
1663
1664 int32 offset = area->exploreFlag / 32;
1665 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1666 {
1668 return false;
1669 }
1670
1671 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1672 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1673 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields ^ val)));
1674
1676 return true;
1677 }
@ LANG_UNEXPLORE_AREA
Definition Language.h:618
@ LANG_NO_CHAR_SELECTED
Definition Language.h:149
@ LANG_BAD_VALUE
Definition Language.h:148
#define PLAYER_EXPLORED_ZONES_SIZE
Definition Player.h:72
@ PLAYER_EXPLORED_ZONES_1
Definition UpdateFields.h:357
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:160
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:305
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21372
uint32 exploreFlag
Definition DBCStructure.h:522

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
1366 {
1367 if (!target)
1368 {
1369 target = PlayerIdentifier::FromTargetOrSelf(handler);
1370 }
1371
1372 if (!target || !target->IsConnected())
1373 {
1374 return false;
1375 }
1376
1377 auto targetPlayer = target->GetConnectedPlayer();
1378
1379 if (handler->GetSession() && target->GetGUID() == handler->GetSession()->GetPlayer()->GetGUID())
1380 {
1382 return false;
1383 }
1384
1385 // check online security
1386 if (handler->HasLowerSecurity(targetPlayer))
1387 {
1388 return false;
1389 }
1390
1391 std::string kickReasonStr = handler->GetAcoreString(LANG_NO_REASON);
1392 if (reason && !reason->empty())
1393 {
1394 kickReasonStr = std::string{ *reason };
1395 }
1396
1397 if (sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
1398 {
1399 handler->SendWorldText(LANG_COMMAND_KICKMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server"), target->GetName(), kickReasonStr);
1400 }
1401 else
1402 {
1403 handler->PSendSysMessage(LANG_COMMAND_KICKMESSAGE, target->GetName());
1404 }
1405
1406 targetPlayer->GetSession()->KickPlayer("HandleKickPlayerCommand");
1407
1408 return true;
1409 }
@ CONFIG_SHOW_KICK_IN_WORLD
Definition IWorld.h:128
@ LANG_COMMAND_KICKSELF
Definition Language.h:327
@ LANG_COMMAND_KICKMESSAGE_WORLD
Definition Language.h:1288
@ LANG_NO_REASON
Definition Language.h:808
@ LANG_COMMAND_KICKMESSAGE
Definition Language.h:328
void SendWorldText(std::string_view str)
Definition Chat.cpp:131
const std::string & GetName() const
Definition ScriptObject.h:53
std::string const & GetPlayerName() const
Definition WorldSession.cpp:185

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
1490 {
1491 TeamId teamId;
1492
1493 if (!team)
1494 {
1495 teamId = TEAM_NEUTRAL;
1496 }
1497 else if (StringEqualI(team->substr(0, 6), "horde"))
1498 {
1499 teamId = TEAM_HORDE;
1500 }
1501 else if (StringEqualI(team->substr(0, 9), "alliance"))
1502 {
1503 teamId = TEAM_ALLIANCE;
1504 }
1505 else
1506 {
1507 return false;
1508 }
1509
1510 GraveyardStruct const* graveyard = sGraveyard->GetGraveyard(graveyardId);
1511
1512 if (!graveyard)
1513 {
1514 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDNOEXIST, graveyardId);
1515 return false;
1516 }
1517
1518 Player* player = handler->GetSession()->GetPlayer();
1519 uint32 zoneId = player->GetZoneId();
1520
1521 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId);
1522 if (!areaEntry || areaEntry->zone != 0)
1523 {
1524 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDWRONGZONE, graveyardId, zoneId);
1525 return false;
1526 }
1527
1528 if (sGraveyard->AddGraveyardLink(graveyardId, zoneId, teamId))
1529 {
1530 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDLINKED, graveyardId, zoneId);
1531 }
1532 else
1533 {
1534 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDALRLINKED, graveyardId, zoneId);
1535 }
1536
1537 return true;
1538 }
#define sGraveyard
Definition GameGraveyard.h:74
@ LANG_COMMAND_GRAVEYARDALRLINKED
Definition Language.h:483
@ LANG_COMMAND_GRAVEYARDNOEXIST
Definition Language.h:482
@ LANG_COMMAND_GRAVEYARDWRONGZONE
Definition Language.h:485
@ LANG_COMMAND_GRAVEYARDLINKED
Definition Language.h:484
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
uint32 zone
Definition DBCStructure.h:521
Definition GameGraveyard.h:27

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

Referenced by GetCommands().

◆ HandleMailBoxCommand()

static bool misc_commandscript::HandleMailBoxCommand ( ChatHandler handler)
inlinestatic
2994 {
2995 Player* player = handler->GetSession()->GetPlayer();
2996 handler->GetSession()->SendShowMailBox(player->GetGUID());
2997 return true;
2998 }
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
1873 {
1874 Player* SelectedPlayer = handler->getSelectedPlayer();
1875 if (!SelectedPlayer)
1876 {
1878 return false;
1879 }
1880
1881 // each skills that have max skill value dependent from level seted to current level max skill value
1882 SelectedPlayer->UpdateSkillsToMaxSkillsForLevel();
1883 return true;
1884 }
void UpdateSkillsToMaxSkillsForLevel()
Definition PlayerUpdates.cpp:1130

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

Referenced by GetCommands().

◆ HandleMovegensCommand()

static bool misc_commandscript::HandleMovegensCommand ( ChatHandler handler)
inlinestatic
2632 {
2633 Unit* unit = handler->getSelectedUnit();
2634 if (!unit)
2635 {
2637 return false;
2638 }
2639
2640 handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->IsPlayer() ? "Player" : "Creature"), unit->GetGUID().ToString());
2641
2642 MotionMaster* motionMaster = unit->GetMotionMaster();
2643 float x, y, z;
2644 motionMaster->GetDestination(x, y, z);
2645
2646 for (uint8 i = 0; i < MAX_MOTION_SLOT; ++i)
2647 {
2648 MovementGenerator* movementGenerator = motionMaster->GetMotionSlot(i);
2649 if (!movementGenerator)
2650 {
2651 handler->SendSysMessage("Empty");
2652 continue;
2653 }
2654
2655 switch (movementGenerator->GetMovementGeneratorType())
2656 {
2657 case IDLE_MOTION_TYPE:
2659 break;
2660 case RANDOM_MOTION_TYPE:
2662 break;
2665 break;
2668 break;
2671 break;
2672 case CHASE_MOTION_TYPE:
2673 {
2674 Unit* target = nullptr;
2675 if (unit->IsPlayer())
2676 {
2677 target = static_cast<ChaseMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
2678 }
2679 else
2680 {
2681 target = static_cast<ChaseMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
2682 }
2683
2684 if (!target)
2685 {
2687 }
2688 else if (target->IsPlayer())
2689 {
2690 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName(), target->GetGUID().ToString());
2691 }
2692 else
2693 {
2694 handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName(), target->GetGUID().ToString());
2695 }
2696 break;
2697 }
2698 case FOLLOW_MOTION_TYPE:
2699 {
2700 Unit* target = nullptr;
2701 if (unit->IsPlayer())
2702 {
2703 target = static_cast<FollowMovementGenerator<Player> const*>(movementGenerator)->GetTarget();
2704 }
2705 else
2706 {
2707 target = static_cast<FollowMovementGenerator<Creature> const*>(movementGenerator)->GetTarget();
2708 }
2709
2710 if (!target)
2711 {
2713 }
2714 else if (target->IsPlayer())
2715 {
2716 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName(), target->GetGUID().ToString());
2717 }
2718 else
2719 {
2720 handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName(), target->GetGUID().ToString());
2721 }
2722 break;
2723 }
2724 case HOME_MOTION_TYPE:
2725 {
2726 if (unit->IsCreature())
2727 {
2729 }
2730 else
2731 {
2733 }
2734 break;
2735 }
2736 case FLIGHT_MOTION_TYPE:
2738 break;
2739 case POINT_MOTION_TYPE:
2740 {
2741 handler->PSendSysMessage(LANG_MOVEGENS_POINT, x, y, z);
2742 break;
2743 }
2746 break;
2749 break;
2750 case EFFECT_MOTION_TYPE:
2752 break;
2753 default:
2754 handler->PSendSysMessage(LANG_MOVEGENS_UNKNOWN, movementGenerator->GetMovementGeneratorType());
2755 break;
2756 }
2757 }
2758 return true;
2759 }
std::uint8_t uint8
Definition Define.h:109
@ LANG_MOVEGENS_FOLLOW_PLAYER
Definition Language.h:929
@ LANG_MOVEGENS_EFFECT
Definition Language.h:932
@ LANG_MOVEGENS_UNKNOWN
Definition Language.h:585
@ LANG_MOVEGENS_CHASE_PLAYER
Definition Language.h:579
@ LANG_MOVEGENS_IDLE
Definition Language.h:574
@ LANG_MOVEGENS_CONFUSED
Definition Language.h:578
@ LANG_MOVEGENS_FOLLOW_CREATURE
Definition Language.h:930
@ LANG_MOVEGENS_FOLLOW_NULL
Definition Language.h:931
@ LANG_MOVEGENS_DISTRACT
Definition Language.h:653
@ LANG_MOVEGENS_CHASE_CREATURE
Definition Language.h:580
@ LANG_MOVEGENS_RANDOM
Definition Language.h:575
@ LANG_MOVEGENS_WAYPOINT
Definition Language.h:576
@ LANG_MOVEGENS_POINT
Definition Language.h:651
@ LANG_MOVEGENS_ANIMAL_RANDOM
Definition Language.h:577
@ LANG_MOVEGENS_CHASE_NULL
Definition Language.h:581
@ LANG_MOVEGENS_FLIGHT
Definition Language.h:584
@ LANG_MOVEGENS_HOME_CREATURE
Definition Language.h:582
@ LANG_MOVEGENS_HOME_PLAYER
Definition Language.h:583
@ LANG_MOVEGENS_LIST
Definition Language.h:573
@ LANG_MOVEGENS_FEAR
Definition Language.h:652
@ MAX_MOTION_SLOT
Definition MotionMaster.h:66
@ DISTRACT_MOTION_TYPE
Definition MotionMaster.h:50
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39
@ CHASE_MOTION_TYPE
Definition MotionMaster.h:45
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
@ FLEEING_MOTION_TYPE
Definition MotionMaster.h:49
@ CONFUSED_MOTION_TYPE
Definition MotionMaster.h:44
@ HOME_MOTION_TYPE
Definition MotionMaster.h:46
@ POINT_MOTION_TYPE
Definition MotionMaster.h:48
@ FLIGHT_MOTION_TYPE
Definition MotionMaster.h:47
@ FOLLOW_MOTION_TYPE
Definition MotionMaster.h:54
@ ANIMAL_RANDOM_MOTION_TYPE
Definition MotionMaster.h:43
@ RANDOM_MOTION_TYPE
Definition MotionMaster.h:40
@ EFFECT_MOTION_TYPE
Definition MotionMaster.h:56
Definition TargetedMovementGenerator.h:39
Definition TargetedMovementGenerator.h:76
Definition MotionMaster.h:112
_Ty GetMotionSlot(int slot) const
Definition MotionMaster.h:155
bool GetDestination(float &x, float &y, float &z)
Definition MotionMaster.cpp:962
Definition MovementGenerator.h:28
virtual MovementGeneratorType GetMovementGeneratorType()=0
std::string const & GetName() const
Definition Object.h:463
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250

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

Referenced by GetCommands().

◆ HandleMuteCommand()

static bool misc_commandscript::HandleMuteCommand ( ChatHandler handler,
Optional< PlayerIdentifier player,
std::string  notSpeakTime,
Tail  muteReason 
)
inlinestatic
2408 {
2409 std::string muteReasonStr{ muteReason };
2410
2411 if (notSpeakTime.empty())
2412 {
2413 return false;
2414 }
2415
2416 if (Acore::StringTo<int32>(notSpeakTime).value_or(0) < 0)
2417 {
2419 return false;
2420 }
2421
2422 if (muteReason.empty())
2423 {
2424 muteReasonStr = handler->GetAcoreString(LANG_NO_REASON);
2425 }
2426
2427 if (!player)
2428 {
2429 player = PlayerIdentifier::FromTarget(handler);
2430 }
2431
2432 if (!player)
2433 {
2435 return false;
2436 }
2437
2438 Player* target = player->GetConnectedPlayer();
2439 uint32 accountId = target ? target->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(player->GetGUID());
2440
2441 // find only player from same account if any
2442 if (!target)
2443 if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
2444 {
2445 target = session->GetPlayer();
2446 }
2447
2448 // must have strong lesser security level
2449 if (handler->HasLowerSecurity(target, player->GetGUID(), true))
2450 {
2451 return false;
2452 }
2453
2455 int32 muteDuration = TimeStringToSecs(notSpeakTime);
2456 if (muteDuration <= 0)
2457 {
2458 muteDuration = Acore::StringTo<int32>(notSpeakTime).value_or(0);
2459 }
2460
2461 if (muteDuration <= 0)
2462 {
2464 return false;
2465 }
2466
2467 std::string muteBy = "";
2468 if (handler->GetSession())
2469 {
2470 muteBy = handler->GetSession()->GetPlayerName();
2471 }
2472 else
2473 {
2474 muteBy = handler->GetAcoreString(LANG_CONSOLE);
2475 }
2476
2477 if (target)
2478 {
2479 // Target is online, mute will be in effect right away.
2480 int64 muteTime = GameTime::GetGameTime().count() + muteDuration;
2481 target->GetSession()->m_muteTime = muteTime;
2482 stmt->SetData(0, muteTime);
2483 std::string nameLink = handler->playerLink(player->GetName());
2484
2485 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
2486 {
2487 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2488 }
2489
2490 ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, secsToTimeString(muteDuration, true), muteBy, muteReasonStr);
2491 }
2492 else
2493 {
2494 // Target is offline, mute will be in effect starting from the next login.
2495 stmt->SetData(0, -int32(muteDuration));
2496 }
2497
2498 stmt->SetData(1, muteReasonStr);
2499 stmt->SetData(2, muteBy);
2500 stmt->SetData(3, accountId);
2501 LoginDatabase.Execute(stmt);
2502
2503 stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
2504 stmt->SetData(0, accountId);
2505 stmt->SetData(1, muteDuration / MINUTE);
2506 stmt->SetData(2, muteBy);
2507 stmt->SetData(3, muteReasonStr);
2508 LoginDatabase.Execute(stmt);
2509
2510 std::string nameLink = handler->playerLink(player->GetName());
2511
2512 if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
2513 {
2514 handler->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy, nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2515 }
2516 else
2517 {
2518 // pussywizard: notify all online GMs
2519 std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
2521 for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
2522 if (itr->second->GetSession()->GetSecurity())
2523 ChatHandler(itr->second->GetSession()).PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED,
2524 (handler->GetSession() ? handler->GetSession()->GetPlayerName() : handler->GetAcoreString(LANG_CONSOLE)), nameLink, secsToTimeString(muteDuration, true), muteReasonStr);
2525 }
2526
2527 return true;
2528 }
#define sCharacterCache
Definition CharacterCache.h:83
constexpr auto MINUTE
Definition Common.h:47
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition DatabaseEnv.cpp:22
std::int64_t int64
Definition Define.h:102
@ CONFIG_SHOW_MUTE_IN_WORLD
Definition IWorld.h:129
@ LANG_COMMAND_DISABLE_CHAT_DELAYED
Definition Language.h:329
@ LANG_YOUR_CHAT_DISABLED
Definition Language.h:341
@ LANG_COMMAND_MUTEMESSAGE_WORLD
Definition Language.h:1291
@ LANG_YOU_DISABLE_CHAT
Definition Language.h:342
@ LANG_CONSOLE
Definition Language.h:1087
@ LOGIN_UPD_MUTE_TIME
Definition LoginDatabase.h:72
@ LOGIN_INS_ACCOUNT_MUTE
Definition LoginDatabase.h:112
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
uint32 TimeStringToSecs(const std::string &timestring)
Definition Util.cpp:163
#define sWorldSessionMgr
Definition WorldSessionMgr.h:110
Definition ObjectAccessor.h:41
std::unordered_map< ObjectGuid, T * > MapType
Definition ObjectAccessor.h:47
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
uint32 GetAccountId() const
Definition WorldSession.h:375
time_t m_muteTime
Definition WorldSession.h:508
AC_GAME_API std::string GetAcoreString(ChatHandler const *handler, AcoreStrings which)
Definition ChatCommandHelpers.cpp:27
Seconds GetGameTime()
Definition GameTime.cpp:38
HashMapHolder< Player >::MapType const & GetPlayers()
Definition ObjectAccessor.cpp:75

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

Referenced by GetCommands().

◆ HandleMuteInfoCommand()

static bool misc_commandscript::HandleMuteInfoCommand ( ChatHandler handler,
std::string  accountName 
)
inlinestatic
2591 {
2592 if (!Utf8ToUpperOnlyLatin(accountName))
2593 {
2594 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
2595 return false;
2596 }
2597
2598 uint32 accountId = AccountMgr::GetId(accountName);
2599 if (!accountId)
2600 {
2601 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
2602 return false;
2603 }
2604
2605 return HandleMuteInfoHelper(handler, accountId, accountName.c_str());
2606 }
@ LANG_ACCOUNT_NOT_EXIST
Definition Language.h:443
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition Util.cpp:532
static bool HandleMuteInfoHelper(ChatHandler *handler, uint32 accountId, char const *accountName)
Definition cs_misc.cpp:2609
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:229

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
2610 {
2612 stmt->SetData(0, accountId);
2613 PreparedQueryResult result = LoginDatabase.Query(stmt);
2614
2615 if (!result)
2616 {
2617 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName);
2618 return true;
2619 }
2620
2621 handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY, accountName);
2622 do
2623 {
2624 Field* fields = result->Fetch();
2625 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>());
2626 } while (result->NextRow());
2627
2628 return true;
2629 }
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:30
@ LANG_COMMAND_MUTEHISTORY_OUTPUT
Definition Language.h:1113
@ LANG_COMMAND_MUTEHISTORY_EMPTY
Definition Language.h:1112
@ LANG_COMMAND_MUTEHISTORY
Definition Language.h:1111
@ LOGIN_SEL_ACCOUNT_MUTE_INFO
Definition LoginDatabase.h:113
Class used to access individual fields of database query result.
Definition Field.h:98
AC_COMMON_API std::string TimeToHumanReadable(Seconds time=0s, std::string_view fmt={})
Definition Timer.cpp:287

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

Referenced by HandleMuteInfoCommand().

◆ HandleNearGraveCommand()

static bool misc_commandscript::HandleNearGraveCommand ( ChatHandler handler,
Optional< std::string_view >  team 
)
inlinestatic
1541 {
1542 TeamId teamId;
1543
1544 if (!team)
1545 {
1546 teamId = TEAM_NEUTRAL;
1547 }
1548 else if (StringEqualI(team->substr(0, 6), "horde"))
1549 {
1550 teamId = TEAM_HORDE;
1551 }
1552 else if (StringEqualI(team->substr(0, 9), "alliance"))
1553 {
1554 teamId = TEAM_ALLIANCE;
1555 }
1556 else
1557 {
1558 return false;
1559 }
1560
1561 Player* player = handler->GetSession()->GetPlayer();
1562 uint32 zone_id = player->GetZoneId();
1563
1564 GraveyardStruct const* graveyard = sGraveyard->GetClosestGraveyard(player, teamId);
1565
1566 if (graveyard)
1567 {
1568 uint32 graveyardId = graveyard->ID;
1569
1570 GraveyardData const* data = sGraveyard->FindGraveyardData(graveyardId, zone_id);
1571 if (!data)
1572 {
1573 handler->SendErrorMessage(LANG_COMMAND_GRAVEYARDERROR, graveyardId);
1574 return false;
1575 }
1576
1577 std::string team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_NOTEAM);
1578
1579 if (data->teamId == TEAM_NEUTRAL)
1580 {
1581 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1582 }
1583 else if (data->teamId == TEAM_HORDE)
1584 {
1585 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1586 }
1587 else if (data->teamId == TEAM_ALLIANCE)
1588 {
1589 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1590 }
1591
1592 handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDNEAREST, graveyardId, team_name, zone_id);
1593 }
1594 else
1595 {
1596 std::string team_name;
1597
1598 if (teamId == TEAM_NEUTRAL)
1599 {
1600 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ANY);
1601 }
1602 else if (teamId == TEAM_HORDE)
1603 {
1604 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_HORDE);
1605 }
1606 else if (teamId == TEAM_ALLIANCE)
1607 {
1608 team_name = handler->GetAcoreString(LANG_COMMAND_GRAVEYARD_ALLIANCE);
1609 }
1610
1611 handler->PSendSysMessage(LANG_COMMAND_ZONENOGRAFACTION, zone_id, team_name);
1612 }
1613
1614 return true;
1615 }
@ LANG_COMMAND_GRAVEYARD_ALLIANCE
Definition Language.h:490
@ LANG_COMMAND_ZONENOGRAFACTION
Definition Language.h:494
@ LANG_COMMAND_GRAVEYARDNEAREST
Definition Language.h:492
@ LANG_COMMAND_GRAVEYARD_NOTEAM
Definition Language.h:488
@ LANG_COMMAND_GRAVEYARDERROR
Definition Language.h:487
@ LANG_COMMAND_GRAVEYARD_HORDE
Definition Language.h:491
@ LANG_COMMAND_GRAVEYARD_ANY
Definition Language.h:489
Definition GameGraveyard.h:38
TeamId teamId
Definition GameGraveyard.h:40
uint32 ID
Definition GameGraveyard.h:28

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

Referenced by GetCommands().

◆ HandleOpenDoorCommand()

static bool misc_commandscript::HandleOpenDoorCommand ( ChatHandler handler,
Optional< float >  range 
)
inlinestatic
3014 {
3015 if (GameObject* go = handler->GetPlayer()->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_DOOR, range ? *range : 5.0f))
3016 {
3017 go->SetGoState(GO_STATE_ACTIVE);
3018 handler->PSendSysMessage(LANG_CMD_DOOR_OPENED, go->GetName(), go->GetEntry());
3019 return true;
3020 }
3021
3022 handler->SendErrorMessage(LANG_CMD_NO_DOOR_FOUND, range ? *range : 5.0f);
3023 return false;
3024 }
@ GO_STATE_ACTIVE
Definition GameObjectData.h:689
@ LANG_CMD_NO_DOOR_FOUND
Definition Language.h:1149
@ LANG_CMD_DOOR_OPENED
Definition Language.h:1150
@ GAMEOBJECT_TYPE_DOOR
Definition SharedDefines.h:1560
Player * GetPlayer() const
Definition Chat.cpp:36
Definition GameObject.h:120
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition Object.cpp:2477

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

Referenced by GetCommands().

◆ HandlePInfoCommand()

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

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

Referenced by GetCommands().

◆ HandlePossessCommand()

static bool misc_commandscript::HandlePossessCommand ( ChatHandler handler)
inlinestatic
2945 {
2946 Unit* unit = handler->getSelectedUnit();
2947 if (!unit)
2948 {
2949 return false;
2950 }
2951
2952 handler->GetSession()->GetPlayer()->CastSpell(unit, 530, true);
2953 return true;
2954 }

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
1290 {
1291 if (!target)
1292 {
1293 target = PlayerIdentifier::FromTargetOrSelf(handler);
1294 }
1295
1296 if (!target || !target->IsConnected())
1297 {
1298 return false;
1299 }
1300
1301 auto targetPlayer = target->GetConnectedPlayer();
1302
1303 // check online security
1304 if (handler->HasLowerSecurity(targetPlayer))
1305 {
1306 return false;
1307 }
1308
1309 if (targetPlayer->IsBeingTeleported())
1310 {
1311 handler->SendErrorMessage(LANG_IS_TELEPORTED, handler->playerLink(target->GetName()));
1312 return false;
1313 }
1314
1315 // stop flight if need
1316 if (targetPlayer->IsInFlight())
1317 {
1318 targetPlayer->GetMotionMaster()->MovementExpired();
1319 targetPlayer->CleanupAfterTaxiFlight();
1320 }
1321
1322 targetPlayer->TeleportTo(targetPlayer->m_recallMap, targetPlayer->m_recallX, targetPlayer->m_recallY, targetPlayer->m_recallZ, targetPlayer->m_recallO);
1323 return true;
1324 }

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
2396 {
2397 Player* player = handler->GetSession()->GetPlayer();
2398
2399 Acore::RespawnDo u_do;
2400 Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
2401 Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());
2402
2403 return true;
2404 }
Definition GridNotifiers.h:645
float GetGridActivationRange() const
Definition Object.cpp:1634
Definition GridNotifiers.h:260
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References WorldObject::GetGridActivationRange(), WorldSession::GetPlayer(), ChatHandler::GetSession(), and Cell::VisitGridObjects().

Referenced by GetCommands().

◆ HandleRespawnCommand()

static bool misc_commandscript::HandleRespawnCommand ( ChatHandler handler)
inlinestatic
2372 {
2373 Player* player = handler->GetSession()->GetPlayer();
2374
2375 Unit* target = handler->getSelectedUnit();
2376 if (player->GetTarget() && target)
2377 {
2378 if (!target->IsCreature() || target->IsPet())
2379 {
2381 return false;
2382 }
2383
2384 if (target->isDead())
2385 {
2386 target->ToCreature()->Respawn(true);
2387 }
2388 return true;
2389 }
2390
2392 return false;
2393 }
void Respawn(bool force=false)
Definition Creature.cpp:2044
bool IsPet() const
Definition Unit.h:763
bool isDead() const
Definition Unit.h:1709

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

Referenced by GetCommands().

◆ HandleReviveCommand()

static bool misc_commandscript::HandleReviveCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
1157 {
1158 if (!target)
1159 target = PlayerIdentifier::FromTargetOrSelf(handler);
1160
1161 if (!target)
1162 return false;
1163
1164 if (target->IsConnected())
1165 {
1166 auto targetPlayer = target->GetConnectedPlayer();
1167 targetPlayer->RemoveAurasDueToSpell(27827); // Spirit of Redemption
1168 targetPlayer->ResurrectPlayer(!AccountMgr::IsPlayerAccount(targetPlayer->GetSession()->GetSecurity()) ? 1.0f : 0.5f);
1169 targetPlayer->SpawnCorpseBones();
1170 targetPlayer->SaveToDB(false, false);
1171 }
1172 else
1173 {
1174 CharacterDatabaseTransaction trans(nullptr);
1175 Player::OfflineResurrect(target->GetGUID(), trans);
1176 }
1177
1178 return true;
1179 }
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
static void OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans)
Definition Player.cpp:4611

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

Referenced by GetCommands().

◆ HandleSaveAllCommand()

static bool misc_commandscript::HandleSaveAllCommand ( ChatHandler handler)
inlinestatic
1358 {
1361 return true;
1362 }
@ LANG_PLAYERS_SAVED
Definition Language.h:47
void SaveAllPlayers()
Definition ObjectAccessor.cpp:262

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

Referenced by GetCommands().

◆ HandleSaveCommand()

static bool misc_commandscript::HandleSaveCommand ( ChatHandler handler)
inlinestatic
1327 {
1328 Player* player = handler->GetSession()->GetPlayer();
1329
1330 // save GM account without delay and output message
1331 if (handler->GetSession()->GetSecurity() >= SEC_GAMEMASTER)
1332 {
1333 if (Player* target = handler->getSelectedPlayer())
1334 {
1335 target->SaveToDB(false, false);
1336 }
1337 else
1338 {
1339 player->SaveToDB(false, false);
1340 }
1341
1343 return true;
1344 }
1345
1346 // save if the player has last been saved over 20 seconds ago
1347 uint32 saveInterval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
1348 if (saveInterval == 0 || (saveInterval > 20 * IN_MILLISECONDS && player->GetSaveTimer() <= saveInterval - 20 * IN_MILLISECONDS))
1349 {
1350 player->SaveToDB(false, false);
1351 }
1352
1353 return true;
1354 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
@ CONFIG_INTERVAL_SAVE
Definition IWorld.h:213
@ LANG_PLAYER_SAVED
Definition Language.h:46
void SaveToDB(bool create, bool logout)
Definition PlayerStorage.cpp:7050
uint32 GetSaveTimer() const
Definition Player.h:2363

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
1887 {
1888 uint32 skillID = uint32(skillId);
1889
1890 if (skillID <= 0)
1891 {
1892 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, skillID);
1893 return false;
1894 }
1895
1896 Player* target = handler->getSelectedPlayer();
1897 if (!target)
1898 {
1900 return false;
1901 }
1902
1903 SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skillID);
1904 if (!skillLine)
1905 {
1906 handler->SendErrorMessage(LANG_INVALID_SKILL_ID, uint32(skillID));
1907 return false;
1908 }
1909
1910 bool targetHasSkill = target->GetSkillValue(skillID);
1911
1912 // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes
1913 // the max level of the new profession.
1914 uint16 max = maxPureSkill ? *maxPureSkill : targetHasSkill ? target->GetPureMaxSkillValue(skillID) : uint16(level);
1915
1916 if (level <= 0 || level > max || max <= 0)
1917 {
1918 return false;
1919 }
1920
1921 // If the player has the skill, we get the current skill step. If they don't have the skill, we
1922 // add the skill to the player's book with step 1 (which is the first rank, in most cases something
1923 // like 'Apprentice <skill>'.
1924 target->SetSkill(skillID, targetHasSkill ? target->GetSkillStep(skillID) : 1, level, max);
1925 handler->PSendSysMessage(LANG_SET_SKILL, skillID, skillLine->name[handler->GetSessionDbcLocale()], handler->GetNameLink(target), level, max);
1926 return true;
1927 }
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ LANG_INVALID_SKILL_ID
Definition Language.h:526
@ LANG_SET_SKILL
Definition Language.h:523
uint16 GetSkillValue(uint32 skill) const
Definition Player.cpp:5478
uint16 GetSkillStep(uint16 skill) const
Definition Player.cpp:5466
uint16 GetPureMaxSkillValue(uint32 skill) const
Definition Player.cpp:5513
void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
Definition Player.cpp:5357
Definition DBCStructure.h:1582
char const * name[16]
Definition DBCStructure.h:1586

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
1618 {
1619 Player* playerTarget = handler->getSelectedPlayer();
1620 if (!playerTarget)
1621 {
1623 return false;
1624 }
1625
1626 AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaID);
1627 if (!area)
1628 {
1630 return false;
1631 }
1632
1633 int32 offset = area->exploreFlag / 32;
1634 if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
1635 {
1637 return false;
1638 }
1639
1640 uint32 val = uint32((1 << (area->exploreFlag % 32)));
1641 uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset);
1642 playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields | val)));
1643
1645 return true;
1646 }
@ LANG_EXPLORE_AREA
Definition Language.h:617

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

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
3001 {
3002 if (!id)
3003 {
3005 return false;
3006 }
3007
3008 std::string str = sObjectMgr->GetAcoreString(id, locale ? static_cast<LocaleConstant>(*locale) : DEFAULT_LOCALE);
3009 handler->SendSysMessage(str);
3010 return true;
3011 }
LocaleConstant
Definition Common.h:65
#define DEFAULT_LOCALE
Definition Common.h:79
@ LANG_CMD_SYNTAX
Definition Language.h:42

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

Referenced by GetCommands().

◆ HandleSummonCommand()

static bool misc_commandscript::HandleSummonCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
887 {
888 if (!target)
889 {
890 target = PlayerIdentifier::FromTarget(handler);
891 }
892
893 if (!target)
894 {
895 return false;
896 }
897
898 Player* _player = handler->GetSession()->GetPlayer();
899 if (target->GetGUID() == _player->GetGUID())
900 {
902 return false;
903 }
904
905 std::string nameLink = handler->playerLink(target->GetName());
906
907 if (target->IsConnected())
908 {
909 auto targetPlayer = target->GetConnectedPlayer();
910
911 // check online security
912 if (handler->HasLowerSecurity(targetPlayer))
913 {
914 return false;
915 }
916
917 if (targetPlayer->IsBeingTeleported())
918 {
919 handler->SendErrorMessage(LANG_IS_TELEPORTED, nameLink);
920 return false;
921 }
922
923 Map* map = handler->GetSession()->GetPlayer()->GetMap();
924
925 if (map->IsBattlegroundOrArena())
926 {
927 handler->SendErrorMessage("Can't summon to a battleground!");
928 return false;
929 }
930 else if (map->IsDungeon())
931 {
932 // Allow GM to summon players or only other GM accounts inside instances.
933 if (!sWorld->getBoolConfig(CONFIG_INSTANCE_GMSUMMON_PLAYER))
934 {
935 // pussywizard: prevent unbinding normal player's perm bind by just summoning him >_>
936 if (!targetPlayer->GetSession()->GetSecurity())
937 {
938 handler->SendErrorMessage("Only GMs can be summoned to an instance!");
939 return false;
940 }
941 }
942
943 Map* destMap = targetPlayer->GetMap();
944
945 if (destMap->Instanceable() && destMap->GetInstanceId() != map->GetInstanceId())
946 {
947 sInstanceSaveMgr->PlayerUnbindInstance(target->GetGUID(), map->GetInstanceId(), targetPlayer->GetDungeonDifficulty(), true, targetPlayer);
948 }
949
950 // we are in an instance, and can only summon players in our group with us as leader
951 if (!handler->GetSession()->GetPlayer()->GetGroup() || !targetPlayer->GetGroup() ||
952 (targetPlayer->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
953 (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()))
954 // the last check is a bit excessive, but let it be, just in case
955 {
957 return false;
958 }
959 }
960
961 handler->PSendSysMessage(LANG_SUMMONING, nameLink, "");
962 if (handler->needReportToTarget(targetPlayer))
963 {
964 ChatHandler(targetPlayer->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->playerLink(_player->GetName()));
965 }
966
967 // stop flight if need
968 if (targetPlayer->IsInFlight())
969 {
970 targetPlayer->GetMotionMaster()->MovementExpired();
971 targetPlayer->CleanupAfterTaxiFlight();
972 }
973 // save only in non-flight case
974 else
975 {
976 targetPlayer->SaveRecallPosition();
977 }
978
979 // before GM
980 float x, y, z;
981 handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, targetPlayer->GetObjectSize());
982 targetPlayer->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, targetPlayer->GetOrientation(), 0, handler->GetSession()->GetPlayer());
983 }
984 else
985 {
986 // check offline security
987 if (handler->HasLowerSecurity(nullptr, target->GetGUID()))
988 {
989 return false;
990 }
991
992 handler->PSendSysMessage(LANG_SUMMONING, nameLink, handler->GetAcoreString(LANG_OFFLINE));
993
994 // in point where GM stay
996 handler->GetSession()->GetPlayer()->GetPositionX(),
997 handler->GetSession()->GetPlayer()->GetPositionY(),
998 handler->GetSession()->GetPlayer()->GetPositionZ(),
999 handler->GetSession()->GetPlayer()->GetOrientation(),
1000 handler->GetSession()->GetPlayer()->GetZoneId(),
1001 target->GetGUID());
1002 }
1003
1004 return true;
1005 }
@ CONFIG_INSTANCE_GMSUMMON_PLAYER
Definition IWorld.h:84
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
704 {
705 Unit* target = handler->getSelectedUnit();
706 if (!target)
707 {
709 return false;
710 }
711
712 if (spells.holds_alternative<std::string_view>() && spells.get<std::string_view>() == "all")
713 {
714 target->RemoveAllAuras();
715 return true;
716 }
717
718 if (!spells.holds_alternative<SpellInfo const*>())
719 {
721 return false;
722 }
723
724 auto spell = spells.get<SpellInfo const*>();
725
726 if (!SpellMgr::IsSpellValid(spell))
727 {
728 handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
729 return false;
730 }
731
732 target->RemoveAurasDueToSpell(spell->Id);
733
734 return true;
735 }
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:4941
void RemoveAllAuras()
Definition Unit.cpp:5351

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
2981 {
2982 Player* player = handler->GetSession()->GetPlayer();
2983
2984 if (player->isPossessing())
2985 {
2986 return false;
2987 }
2988
2989 player->StopCastingBindSight();
2990 return true;
2991 }
void StopCastingBindSight(Aura *except=nullptr)
Definition Player.cpp:13214
bool isPossessing() const
Definition Unit.h:1247

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
2889 {
2890 Creature* creatureTarget = handler->getSelectedCreature();
2891
2892 if (!target && !creatureTarget)
2893 {
2894 target = PlayerIdentifier::FromTargetOrSelf(handler);
2895 }
2896
2897 if (!target && !creatureTarget)
2898 {
2900 return false;
2901 }
2902
2903 Player* playerTarget = target->GetConnectedPlayer();
2904
2905 if (!creatureTarget && playerTarget && playerTarget->HasAura(SPELL_FREEZE))
2906 {
2907 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
2908 playerTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
2909 return true;
2910 }
2911 else if (creatureTarget && creatureTarget->HasAura(SPELL_FREEZE))
2912 {
2914 creatureTarget->RemoveAurasDueToSpell(SPELL_FREEZE);
2915 return true;
2916 }
2917 else if (!creatureTarget && target && !target->IsConnected())
2918 {
2920 stmt->SetData(0, target->GetGUID().GetCounter());
2921 CharacterDatabase.Execute(stmt);
2922 handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, target->GetName());
2923 return true;
2924 }
2925
2927 return true;
2928 }
@ CHAR_DEL_CHAR_AURA_FROZEN
Definition CharacterDatabase.h:355
@ LANG_COMMAND_UNFREEZE
Definition Language.h:1050
@ LANG_COMMAND_FREEZE_WRONG
Definition Language.h:1049
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5753

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
2532 {
2533 if (!target)
2534 {
2535 target = PlayerIdentifier::FromTargetOrSelf(handler);
2536 }
2537
2538 if (!target)
2539 {
2540 return false;
2541 }
2542
2543 Player* playerTarget = target->GetConnectedPlayer();
2544 uint32 accountId = playerTarget ? playerTarget->GetSession()->GetAccountId() : sCharacterCache->GetCharacterAccountIdByGuid(target->GetGUID());
2545
2546 // find only player from same account if any
2547 if (!playerTarget)
2548 {
2549 if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
2550 {
2551 playerTarget = session->GetPlayer();
2552 }
2553 }
2554
2555 // must have strong lesser security level
2556 if (handler->HasLowerSecurity(playerTarget, target->GetGUID(), true))
2557 {
2558 return false;
2559 }
2560
2561 if (playerTarget)
2562 {
2563 if (playerTarget->CanSpeak())
2564 {
2566 return false;
2567 }
2568
2569 playerTarget->GetSession()->m_muteTime = 0;
2570 }
2571
2573 stmt->SetData(0, 0);
2574 stmt->SetData(1, "");
2575 stmt->SetData(2, "");
2576 stmt->SetData(3, accountId);
2577 LoginDatabase.Execute(stmt);
2578
2579 if (playerTarget)
2580 {
2582 }
2583
2584 handler->PSendSysMessage(LANG_YOU_ENABLE_CHAT, handler->playerLink(target->GetName()));
2585
2586 return true;
2587 }
@ LANG_CHAT_ALREADY_ENABLED
Definition Language.h:343
@ LANG_YOU_ENABLE_CHAT
Definition Language.h:345
@ LANG_YOUR_CHAT_ENABLED
Definition Language.h:344
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 sWorldSessionMgr.

Referenced by GetCommands().

◆ HandleUnPossessCommand()

static bool misc_commandscript::HandleUnPossessCommand ( ChatHandler handler)
inlinestatic
2957 {
2958 Unit* unit = handler->getSelectedUnit();
2959 if (!unit)
2960 {
2961 unit = handler->GetSession()->GetPlayer();
2962 }
2963
2964 unit->RemoveCharmAuras();
2965 return true;
2966 }
void RemoveCharmAuras()
Definition Unit.cpp:11242

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

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

Referenced by GetCommands().


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