222 lines
8.3 KiB
C#
222 lines
8.3 KiB
C#
/*
|
|
* Copyright (C) 2012-2020 CypherCore <http://github.com/CypherCore>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
using Framework.Constants;
|
|
using Framework.IO;
|
|
using Game.Entities;
|
|
using Game.Guilds;
|
|
|
|
namespace Game.Chat
|
|
{
|
|
[CommandGroup("guild")]
|
|
class GuildCommands
|
|
{
|
|
[Command("create", RBACPermissions.CommandGuildCreate, true)]
|
|
static bool HandleGuildCreateCommand(CommandHandler handler, StringArguments args)
|
|
{
|
|
if (args.Empty())
|
|
return false;
|
|
|
|
Player target;
|
|
if (!handler.ExtractPlayerTarget(args[0] != '"' ? args : null, out target))
|
|
return false;
|
|
|
|
string guildName = handler.ExtractQuotedArg(args.NextString());
|
|
if (string.IsNullOrEmpty(guildName))
|
|
return false;
|
|
|
|
if (target.GetGuildId() != 0)
|
|
{
|
|
handler.SendSysMessage(CypherStrings.PlayerInGuild);
|
|
return false;
|
|
}
|
|
|
|
if (Global.GuildMgr.GetGuildByName(guildName))
|
|
{
|
|
handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists);
|
|
return false;
|
|
}
|
|
|
|
if (Global.ObjectMgr.IsReservedName(guildName) || !ObjectManager.IsValidCharterName(guildName))
|
|
{
|
|
handler.SendSysMessage(CypherStrings.BadValue);
|
|
return false;
|
|
}
|
|
|
|
Guild guild = new();
|
|
if (!guild.Create(target, guildName))
|
|
{
|
|
handler.SendSysMessage(CypherStrings.GuildNotCreated);
|
|
return false;
|
|
}
|
|
|
|
Global.GuildMgr.AddGuild(guild);
|
|
|
|
return true;
|
|
}
|
|
|
|
[Command("delete", RBACPermissions.CommandGuildDelete, true)]
|
|
static bool HandleGuildDeleteCommand(CommandHandler handler, QuotedString guildName)
|
|
{
|
|
if (guildName.IsEmpty())
|
|
return false;
|
|
|
|
Guild guild = Global.GuildMgr.GetGuildByName(guildName);
|
|
if (guild == null)
|
|
return false;
|
|
|
|
guild.Disband();
|
|
return true;
|
|
}
|
|
|
|
[Command("invite", RBACPermissions.CommandGuildInvite, true)]
|
|
static bool HandleGuildInviteCommand(CommandHandler handler, PlayerIdentifier targetIdentifier, QuotedString guildName)
|
|
{
|
|
if (targetIdentifier == null)
|
|
targetIdentifier = PlayerIdentifier.FromTargetOrSelf(handler);
|
|
if (targetIdentifier == null)
|
|
return false;
|
|
|
|
if (guildName.IsEmpty())
|
|
return false;
|
|
|
|
Guild targetGuild = Global.GuildMgr.GetGuildByName(guildName);
|
|
if (targetGuild == null)
|
|
return false;
|
|
|
|
targetGuild.AddMember(null, targetIdentifier.GetGUID());
|
|
|
|
return true;
|
|
}
|
|
|
|
[Command("uninvite", RBACPermissions.CommandGuildUninvite, true)]
|
|
static bool HandleGuildUninviteCommand(CommandHandler handler, PlayerIdentifier targetIdentifier, QuotedString guildName)
|
|
{
|
|
if (targetIdentifier == null)
|
|
targetIdentifier = PlayerIdentifier.FromTargetOrSelf(handler);
|
|
if (targetIdentifier == null)
|
|
return false;
|
|
|
|
ulong guildId = targetIdentifier.IsConnected() ? targetIdentifier.GetConnectedPlayer().GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(targetIdentifier.GetGUID());
|
|
if (guildId == 0)
|
|
return false;
|
|
|
|
Guild targetGuild = Global.GuildMgr.GetGuildById(guildId);
|
|
if (targetGuild == null)
|
|
return false;
|
|
|
|
targetGuild.DeleteMember(null, targetIdentifier.GetGUID(), false, true, true);
|
|
return true;
|
|
}
|
|
|
|
[Command("rank", RBACPermissions.CommandGuildRank, true)]
|
|
static bool HandleGuildRankCommand(CommandHandler handler, PlayerIdentifier player, byte rank)
|
|
{
|
|
if (player == null)
|
|
player = PlayerIdentifier.FromTargetOrSelf(handler);
|
|
if (player == null)
|
|
return false;
|
|
|
|
ulong guildId = player.IsConnected() ? player.GetConnectedPlayer().GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(player.GetGUID());
|
|
if (guildId == 0)
|
|
return false;
|
|
|
|
Guild targetGuild = Global.GuildMgr.GetGuildById(guildId);
|
|
if (!targetGuild)
|
|
return false;
|
|
|
|
return targetGuild.ChangeMemberRank(null, player.GetGUID(), (GuildRankId)rank);
|
|
}
|
|
|
|
[Command("rename", RBACPermissions.CommandGuildRename, true)]
|
|
static bool HandleGuildRenameCommand(CommandHandler handler, QuotedString oldGuildName, QuotedString newGuildName)
|
|
{
|
|
if (oldGuildName.IsEmpty())
|
|
{
|
|
handler.SendSysMessage(CypherStrings.BadValue);
|
|
return false;
|
|
}
|
|
|
|
if (newGuildName.IsEmpty())
|
|
{
|
|
handler.SendSysMessage(CypherStrings.InsertGuildName);
|
|
return false;
|
|
}
|
|
|
|
Guild guild = Global.GuildMgr.GetGuildByName(oldGuildName);
|
|
if (!guild)
|
|
{
|
|
handler.SendSysMessage(CypherStrings.CommandCouldnotfind, oldGuildName);
|
|
return false;
|
|
}
|
|
|
|
if (Global.GuildMgr.GetGuildByName(newGuildName))
|
|
{
|
|
handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists, newGuildName);
|
|
return false;
|
|
}
|
|
|
|
if (!guild.SetName(newGuildName))
|
|
{
|
|
handler.SendSysMessage(CypherStrings.BadValue);
|
|
return false;
|
|
}
|
|
|
|
handler.SendSysMessage(CypherStrings.GuildRenameDone, oldGuildName, newGuildName);
|
|
return true;
|
|
}
|
|
|
|
[Command("info", RBACPermissions.CommandGuildInfo, true)]
|
|
static bool HandleGuildInfoCommand(CommandHandler handler, StringArguments args)
|
|
{
|
|
Guild guild = null;
|
|
Player target = handler.GetSelectedPlayerOrSelf();
|
|
|
|
if (!args.Empty() && args[0] != '\0')
|
|
{
|
|
if (char.IsDigit(args[0]))
|
|
guild = Global.GuildMgr.GetGuildById(args.NextUInt64());
|
|
else
|
|
guild = Global.GuildMgr.GetGuildByName(args.NextString());
|
|
}
|
|
else if (target)
|
|
guild = target.GetGuild();
|
|
|
|
if (!guild)
|
|
return false;
|
|
|
|
// Display Guild Information
|
|
handler.SendSysMessage(CypherStrings.GuildInfoName, guild.GetName(), guild.GetId()); // Guild Id + Name
|
|
|
|
string guildMasterName;
|
|
if (Global.CharacterCacheStorage.GetCharacterNameByGuid(guild.GetLeaderGUID(), out guildMasterName))
|
|
handler.SendSysMessage(CypherStrings.GuildInfoGuildMaster, guildMasterName, guild.GetLeaderGUID().ToString()); // Guild Master
|
|
|
|
// Format creation date
|
|
|
|
var createdDateTime = Time.UnixTimeToDateTime(guild.GetCreatedDate());
|
|
handler.SendSysMessage(CypherStrings.GuildInfoCreationDate, createdDateTime.ToLongDateString()); // Creation Date
|
|
handler.SendSysMessage(CypherStrings.GuildInfoMemberCount, guild.GetMembersCount()); // Number of Members
|
|
handler.SendSysMessage(CypherStrings.GuildInfoBankGold, guild.GetBankMoney() / 100 / 100); // Bank Gold (in gold coins)
|
|
handler.SendSysMessage(CypherStrings.GuildInfoLevel, guild.GetLevel()); // Level
|
|
handler.SendSysMessage(CypherStrings.GuildInfoMotd, guild.GetMOTD()); // Message of the Day
|
|
handler.SendSysMessage(CypherStrings.GuildInfoExtraInfo, guild.GetInfo()); // Extra Information
|
|
return true;
|
|
}
|
|
}
|
|
}
|