/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-GPL2 * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS */ /* ScriptData Name: guild_commandscript %Complete: 100 Comment: All guild related commands Category: commandscripts EndScriptData */ #include "Chat.h" #include "Language.h" #include "Guild.h" #include "GuildMgr.h" #include "ObjectAccessor.h" #include "ScriptMgr.h" class guild_commandscript : public CommandScript { public: guild_commandscript() : CommandScript("guild_commandscript") { } std::vector GetCommands() const override { static std::vector guildCommandTable = { { "create", SEC_GAMEMASTER, true, &HandleGuildCreateCommand, "" }, { "delete", SEC_GAMEMASTER, true, &HandleGuildDeleteCommand, "" }, { "invite", SEC_GAMEMASTER, true, &HandleGuildInviteCommand, "" }, { "uninvite", SEC_GAMEMASTER, true, &HandleGuildUninviteCommand, "" }, { "rank", SEC_GAMEMASTER, true, &HandleGuildRankCommand, "" }, { "info", SEC_GAMEMASTER, true, &HandleGuildInfoCommand, "" } }; static std::vector commandTable = { { "guild", SEC_GAMEMASTER, true, nullptr, "", guildCommandTable } }; return commandTable; } /** \brief GM command level 3 - Create a guild. * * This command allows a GM (level 3) to create a guild. * * The "args" parameter contains the name of the guild leader * and then the name of the guild. * */ static bool HandleGuildCreateCommand(ChatHandler* handler, char const* args) { if (!*args) return false; // if not guild name only (in "") then player name Player* target; if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, &target)) return false; char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; if (!tailStr) return false; char* guildStr = handler->extractQuotedArg(tailStr); if (!guildStr) return false; std::string guildName = guildStr; if (target->GetGuildId()) { handler->SendSysMessage(LANG_PLAYER_IN_GUILD); return true; } Guild* guild = new Guild; if (!guild->Create(target, guildName)) { delete guild; handler->SendSysMessage(LANG_GUILD_NOT_CREATED); handler->SetSentErrorMessage(true); return false; } sGuildMgr->AddGuild(guild); return true; } static bool HandleGuildDeleteCommand(ChatHandler* handler, char const* args) { if (!*args) return false; char* guildStr = handler->extractQuotedArg((char*)args); if (!guildStr) return false; std::string guildName = guildStr; Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); if (!targetGuild) return false; targetGuild->Disband(); delete targetGuild; return true; } static bool HandleGuildInviteCommand(ChatHandler* handler, char const* args) { if (!*args) return false; // if not guild name only (in "") then player name uint64 targetGuid; if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, nullptr, &targetGuid)) return false; char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; if (!tailStr) return false; char* guildStr = handler->extractQuotedArg(tailStr); if (!guildStr) return false; std::string guildName = guildStr; Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); if (!targetGuild) return false; // player's guild membership checked in AddMember before add return targetGuild->AddMember(targetGuid); } static bool HandleGuildUninviteCommand(ChatHandler* handler, char const* args) { Player* target; uint64 targetGuid; if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) return false; uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromStorage(GUID_LOPART(targetGuid)); if (!guildId) return false; Guild* targetGuild = sGuildMgr->GetGuildById(guildId); if (!targetGuild) return false; targetGuild->DeleteMember(targetGuid, false, true, true); return true; } static bool HandleGuildRankCommand(ChatHandler* handler, char const* args) { char* nameStr; char* rankStr; handler->extractOptFirstArg((char*)args, &nameStr, &rankStr); if (!rankStr) return false; Player* target; uint64 targetGuid; std::string target_name; if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name)) return false; uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromStorage(GUID_LOPART(targetGuid)); if (!guildId) return false; Guild* targetGuild = sGuildMgr->GetGuildById(guildId); if (!targetGuild) return false; uint8 newRank = uint8(atoi(rankStr)); return targetGuild->ChangeMemberRank(targetGuid, newRank); } static bool HandleGuildInfoCommand(ChatHandler* handler, char const* args) { Guild* guild = nullptr; if (args && args[0] != '\0') { if (isNumeric(args)) guild = sGuildMgr->GetGuildById(strtoull(args, nullptr, 10)); else guild = sGuildMgr->GetGuildByName(args); } else if (Player* target = handler->getSelectedPlayerOrSelf()) guild = target->GetGuild(); if (!guild) return false; // Display Guild Information handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name std::string guildMasterName; if (sObjectMgr->GetPlayerNameByGUID(guild->GetLeaderGUID(), guildMasterName)) handler->PSendSysMessage(LANG_GUILD_INFO_GUILD_MASTER, guildMasterName.c_str(), GUID_LOPART(guild->GetLeaderGUID())); // Guild Master // Format creation date char createdDateStr[20]; time_t createdDate = guild->GetCreatedDate(); tm localTm; ACE_OS::localtime_r(&createdDate, &localTm); strftime(createdDateStr, 20, "%Y-%m-%d %H:%M:%S", &localTm); handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, createdDateStr); // Creation Date handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMemberCount()); // Number of Members handler->PSendSysMessage(LANG_GUILD_INFO_BANK_GOLD, guild->GetTotalBankMoney() / 100 / 100); // Bank Gold (in gold coins) handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the day handler->PSendSysMessage(LANG_GUILD_INFO_EXTRA_INFO, guild->GetInfo().c_str()); // Extra Information return true; } }; void AddSC_guild_commandscript() { new guild_commandscript(); }