Example #1
0
        public static void Kit(ISender sender, ArgumentList args)
        {
            Essentials Plugin = (Essentials)args.Plugin;

            Player player = args.GetOnlinePlayer(0);

            if (args.Count > 0)
            {
                if (KitManager.ContainsKit(args[0]))
                {
                    Kit kit = KitManager.GetKit(args[0]);
                    if (kit.ItemList != null && kit.ItemList.Count > 0)
                    {
                        foreach (KeyValuePair <Int32, Int32> ItemID in kit.ItemList)
                        {
                            Item.NewItem((int)player.Position.X, (int)player.Position.Y, player.Width, player.Height, ItemID.Key, ItemID.Value, false);
                        }

                        player.sendMessage("Recived the '" + kit.Name + "' Kit.");
                    }
                    else
                    {
                        player.sendMessage("Issue with null kit/list");
                    }
                }

                //Help ::: Shows what kits there are
                else if (args[0].Equals("help"))
                {
                    String Kits = "";
                    foreach (Kit kit in KitManager.KitList)
                    {
                        if (kit.Name.Trim().Length > 0)
                        {
                            Kits = Kits + ", " + kit.Name;
                        }
                    }
                    if (Kits.StartsWith(","))
                    {
                        Kits = Kits.Remove(0, 1).Trim();
                    }

                    if (Kits.Length > 0)
                    {
                        player.sendMessage("Available Kits: " + Kits);
                    }
                }

                //If kit does not exist
                else
                {
                    player.sendMessage("Error: specified kit " + args[0] + " does not exist. Please do /kit help");
                }
            }
            //Error message
            else
            {
                player.sendMessage("Error: You did not specify a kit! Do /kit help!");
            }
        }
Example #2
0
        public static void Slay(ISender sender, ArgumentList args)
        {
            var player = args.GetOnlinePlayer(0);

            NetMessage.SendData(26, -1, -1, " of unknown causes...", player.whoAmi, 0, (float)9999, (float)0);
            sender.sendMessage("OMG! You killed " + player.Name + "!", 255, 0f, 255f, 255f);
            Essentials.Log("Player " + player + " used /slay on " + player.Name);
        }
Example #3
0
        public static void MessagePlayer(ISender sender, ArgumentList args)
        {
            var Player  = args.GetOnlinePlayer(0);
            var Message = args.GetString(1);

            Player.sendMessage(String.Format("[{0}] PM: {1}", sender.Name, Message), ChatColor.DarkGray);
            Server.notifyOps(String.Format("PM {0} => {1}: {2}", sender.Name, Player.Name, Message));
        }
        public void PrivateMessageSend(ISender sender, ArgumentList args)
        {
            var playerFrom = sender as Player;
            if (playerFrom == null)
            {
                sender.SendMessage("This is a player command.", G: 0, B: 0);
                return;
            }

            var playerTo = args.GetOnlinePlayer(0);
            var msg = string.Join(" ", args.Skip(1).ToArray());

            playerTo.Message(255, Color.Orange, $"[PM] {sender.SenderName}: {msg}");

            playerFrom.SetPluginData("LastPM", playerTo.name);
        }
        public void PrivateMessageSend(ISender sender, ArgumentList args)
        {
            var playerFrom = sender as Player;

            if (playerFrom == null)
            {
                sender.SendMessage("This is a player command.", G: 0, B: 0);
                return;
            }

            var playerTo = args.GetOnlinePlayer(0);
            var msg      = string.Join(" ", args.Skip(1).ToArray());

            playerTo.Message(255, Color.Orange, $"[PM] {sender.SenderName}: {msg}");

            playerFrom.SetPluginData("LastPM", playerTo.name);
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        /// <remarks>This function also allows NPC custom health.</remarks>
        public static void SpawnNPC(ISender sender, ArgumentList args)
        {
            if (Main.stopSpawns && !Program.properties.NPCSpawnsOverride)
                throw new CommandError("NPC Spawing is disabled.");

            var health = -1;
            var customHealth = args.TryPopAny<Int32>("-health", out health);

            Player player = sender as Player;
            int NPCAmount;
            if (args.Count > 3)
                throw new CommandError(Languages.TooManyArguments);
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                if (!NetPlay.anyClients || !Server.TryGetFirstOnlinePlayer(out player))
                    throw new CommandError(Languages.NobodyOnline);
            }
            else if (args.Count == 3)
                player = args.GetOnlinePlayer(2);

            var npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            int realNPCId = 0;
            NPC fclass = Registries.NPC.FindClass(npcName);
            if (fclass.Name != String.Empty)
                realNPCId = fclass.Type;
            else
                throw new CommandError(Languages.NPCDoesntExist);

            try
            {
                NPCAmount = args.GetInt(0);
                if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                {
                    (sender as Player).Kick(Languages.DontSpawnThatMany);
                    return;
                }
            }
            catch
            {
                throw new CommandError(Languages.ExpectedSpawnInteger);
            }

            string realNPCName = String.Empty;
            for (int i = 0; i < NPCAmount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.Position.X / 16), ((int)player.Position.Y / 16), 100, true, 100, 50);
                int npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), fclass.Name, 0, Main.SpawnsOverride);

                if (customHealth)
                {
                    Main.npcs[npcIndex].life = health;
                    Main.npcs[npcIndex].lifeMax = health;
                }

                realNPCName = Main.npcs[npcIndex].Name;
            }
            Server.notifyOps("Spawned " + NPCAmount.ToString() + " of " +
                    realNPCName + " [" + player.Name + "]", true);
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        /// <remarks>This function also allows NPC custom health.</remarks>
        public void SpawnNPC(ISender sender, ArgumentList args)
        {
            //if (Main.stopSpawns && !Program.properties.NPCSpawnsOverride)
            //    throw new CommandError("NPC Spawing is disabled.");

            //var health = -1;
            //var customHealth = args.TryPopAny<Int32>("-health", out health);

            Player player = sender as Player;
            int amount, offset = -1;
            if (args.Count > 5)
                throw new CommandError("Too many arguments");
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                if (!Netplay.anyClients || !Tools.TryGetFirstOnlinePlayer(out player))
                    throw new CommandError("No players online.");
            }
            else if (args.Count == 3)
                player = args.GetOnlinePlayer(2);
            else if (args.Count >= 4)
            {
                player = args.GetOnlinePlayer(2);
                args.TryPopAny<Int32>("-item", out offset);
            }

            var npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            var npcs = DefinitionManager.FindNPC(npcName);
            if (npcs == null || npcs.Length == 0)
            {
                int npcId;
                if (Int32.TryParse(npcName, out npcId))
                {
                    npcs = DefinitionManager.FindNPC(npcId);
                    if (npcs == null || npcs.Length == 0)
                    {
                        throw new CommandError("No npc exists by type {0}", npcId);
                    }
                }
                else throw new CommandError("No npc exists {0}", npcName);
            }

            npcs = npcs.OrderBy(x => x.Name).ToArray();
            if (npcs.Length > 1)
            {
                if (offset == -1)
                {
                    sender.SendMessage("Npcs matching " + npcName + ':');
                    for (var x = 0; x < npcs.Length; x++)
                    {
                        if (sender is ConsoleSender)
                        {
                            sender.SendMessage($"\t{x}\t- {npcs[x].Name}");
                        }
                        else
                        {
                            sender.SendMessage($"{x} - {npcs[x].Name}");
                        }
                    }
                    return;
                }
            }
            else offset = 0;

            var npc = npcs[offset];
            if (npc.Boss.HasValue && npc.Boss == true)
                throw new CommandError("This NPC can only be summoned by the SPAWNBOSS command.");
            try
            {
                amount = args.GetInt(0);
                //if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                //{
                //    (sender as Player).Kick("Don't spawn that many.");
                //    return;
                //}
            }
            catch
            {
                throw new CommandError("Expected amount to spawn");
            }

            var max = Tools.AvailableNPCSlots; //Perhaps remove a few incase of spawns
            if (amount > max)
                throw new CommandError("Cannot spawn that many, available slots: {0}", max);

            string realNPCName = String.Empty;
            for (int i = 0; i < amount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.position.X / 16), ((int)player.position.Y / 16), 100, 100, 50);
                int npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), npc.Id, 0);

                //if (customHealth)
                //{
                //    Main.npc[npcIndex].life = health;
                //    Main.npc[npcIndex].lifeMax = health;
                //}
                Main.npc[npcIndex].netDefaults(npc.NetId);

                realNPCName = Main.npc[npcIndex].name;
            }
            Utils.NotifyAllOps("Spawned " + amount.ToString() + " of " + realNPCName + " [" + player.name + "]", true);
        }
        /// <summary>
        /// Gives specified item to the specified player.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public void Give(ISender sender, ArgumentList args)
        {
            // /give <player> <stack> <name>
            Player receiver = args.GetOnlinePlayer(0);
            int stack = args.GetInt(1);
            string name = args.GetString(2);

            var max = Tools.AvailableItemSlots; //Perhaps remove a few incase of new drops
            if (stack > max)
            {
                stack = max; // Set to Tools.AvailableItemSlots because number given was larger than this.
            }
            var results = DefinitionManager.FindItem(name);
            if (results != null && results.Length > 0)
            {
                if (results.Length > 1)
                    throw new CommandError(String.Format("More than 1 item found, total is: {0}", results.Length));

                var item = results[0];

                var index = receiver.GiveItem(item.Id, stack, sender, item.NetId, true, item.Prefix);

                if (item.NetId < 0)
                    Main.item[index].netDefaults(item.NetId);

                Main.item[index].Prefix(item.Prefix);
            }
            else
                throw new CommandError(String.Format("No item known by: {0}", name));
        }
Example #9
0
        public static void GodMode(ISender sender, ArgumentList args)
        {
            Essentials Plugin = (Essentials)args.Plugin;

            Player player = args.GetOnlinePlayer(0);

            //if (!(sender is Player))
            //{
            //    if (!args.TryGetOnlinePlayer(1, out player))
            //    {
            //        sender.sendMessage("As a non player, Please specify one!");
            //        return;
            //    }
            //}

            if (player.HasClientMod)
            {
                //Tell the client to use God.
                bool On;
                if (Plugin.essentialsRPGPlayerList.TryGetValue(player.whoAmi, out On))
                {
                    NetMessage.SendData((int)Packets.CLIENT_MOD_GOD, player.whoAmi, -1, "", 0);
                    if (!Server.AllowTDCMRPG)
                    {
                        Plugin.essentialsRPGPlayerList.Remove(player.whoAmi);
                    }
                }
                else
                {
                    NetMessage.SendData((int)Packets.CLIENT_MOD_GOD, player.whoAmi, -1, "", 1);
                    if (!Server.AllowTDCMRPG)
                    {
                        Plugin.essentialsRPGPlayerList.Add(player.whoAmi, true);
                    }
                }

                return;
            }

            bool found         = false;
            bool godModeStatus = false;

            for (int i = 0; i < Plugin.essentialsPlayerList.Count; i++)
            {
                int    PlayerID = Plugin.essentialsPlayerList.Keys.ElementAt(i);
                Player eplayer  = Main.players[PlayerID];
                if (eplayer.Name.Equals(player.Name))
                {
                    bool GodMode = !Plugin.essentialsPlayerList.Values.ElementAt(i);
                    Plugin.essentialsPlayerList.Remove(PlayerID);
                    Plugin.essentialsPlayerList.Add(PlayerID, GodMode);
                    godModeStatus = GodMode;
                    found         = true;
                    break;
                }
            }
            if (!found)
            {
                godModeStatus = true;
                Plugin.essentialsPlayerList.Add(player.whoAmi, godModeStatus);
            }

            player.sendMessage("God Mode Status: " + godModeStatus.ToString());
        }
        /// <summary>
        /// Gives specified item to the specified player.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public void Give(ISender sender, ArgumentList args)
        {
            // /give <player> <stack> <name>
            Player receiver = args.GetOnlinePlayer(0);
            int stack = args.GetInt(1);
            string name = args.GetString(2);

            var max = Tools.AvailableItemSlots; //Perhaps remove a few incase of new drops
            if (stack > max)
            {
                stack = max; // Set to Tools.AvailableItemSlots because number given was larger than this.
            }
            int id;
            var results = int.TryParse(name, out id) ? DefinitionManager.FindItem(id) : DefinitionManager.FindItem(name);
            if (results != null && results.Length > 0)
            {
                if (results.Length > 1)
                    throw new CommandError(String.Format("More than 1 item found, total is: {0}", results.Length));

                var item = results[0];
                try {
                    item.Prefix = (int)(Affix)Enum.Parse(typeof(Affix), args.GetString(3), true);
                }
                catch (CommandError)
                {

                }catch (ArgumentException)
                {
                    throw new CommandError(String.Format("Error, the Prefix you entered was not found: {0}", args.GetString(3)));
                }

                var index = receiver.GiveItem(item.Id, stack, sender, item.NetId, true, item.Prefix);

                if (item.NetId < 0)
                    Main.item[index].netDefaults(item.NetId);

                Main.item[index].Prefix(item.Prefix);
            }
            else
                throw new CommandError(String.Format("No item known by: {0}", name));
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        /// <remarks>This function also allows NPC custom health.</remarks>
        public void SpawnNPC(ISender sender, ArgumentList args)
        {
            //if (Main.stopSpawns && !Program.properties.NPCSpawnsOverride)
            //    throw new CommandError("NPC Spawing is disabled.");

            //var health = -1;
            //var customHealth = args.TryPopAny<Int32>("-health", out health);

            Player player = sender as Player;
            int amount;
            if (args.Count > 4)
                throw new CommandError("Too many arguments");
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                if (!Netplay.anyClients || !Tools.TryGetFirstOnlinePlayer(out player))
                    throw new CommandError("No players online.");
            }
            else if (args.Count >= 3)
                player = args.GetOnlinePlayer(2);

            var npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            var npcs = DefinitionManager.FindNPC(npcName);
            if (npcs.Length == 0)
                throw new CommandError("No npc exists by the name {0}", npcName);
            else if (npcs.Length > 1)
            {
                bool first;
                args.TryGetBool(3, out first);

                if (!first)
                    throw new CommandError("Too many results for {0}, total count {1}", npcName, npcs.Length);
            }

            var npc = npcs[0];
            if (npc.Boss.HasValue && npc.Boss == true)
                throw new CommandError("This NPC can only be summoned by the SPAWNBOSS command.");
            try
            {
                amount = args.GetInt(0);
                //if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                //{
                //    (sender as Player).Kick("Don't spawn that many.");
                //    return;
                //}
            }
            catch
            {
                throw new CommandError("Expected amount to spawn");
            }

            var max = Tools.AvailableNPCSlots; //Perhaps remove a few incase of spawns
            if (amount > max)
                throw new CommandError("Cannot spawn that many, available slots: {0}", max);

            string realNPCName = String.Empty;
            for (int i = 0; i < amount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.position.X / 16), ((int)player.position.Y / 16), 100, 100, 50);
                int npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), npc.Id, 0);

                //if (customHealth)
                //{
                //    Main.npc[npcIndex].life = health;
                //    Main.npc[npcIndex].lifeMax = health;
                //}
                Main.npc[npcIndex].netDefaults(npc.NetId);

                realNPCName = Main.npc[npcIndex].name;
            }
            Tools.NotifyAllOps("Spawned " + amount.ToString() + " of " +
                realNPCName + " [" + player.name + "]", true);
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        /// <remarks>This function also allows NPC custom health.</remarks>
        public void SpawnNPC(ISender sender, ArgumentList args)
        {
            //if (Main.stopSpawns && !Program.properties.NPCSpawnsOverride)
            //    throw new CommandError("NPC Spawing is disabled.");

            //var health = -1;
            //var customHealth = args.TryPopAny<Int32>("-health", out health);

            Player player = sender as Player;
            int    amount, offset = -1;

            if (args.Count > 5)
            {
                throw new CommandError("Too many arguments");
            }
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                if (!Netplay.anyClients || !Tools.TryGetFirstOnlinePlayer(out player))
                {
                    throw new CommandError("No players online.");
                }
            }
            else if (args.Count == 3)
            {
                player = args.GetOnlinePlayer(2);
            }
            else if (args.Count >= 4)
            {
                player = args.GetOnlinePlayer(2);
                args.TryPopAny <Int32>("-item", out offset);
            }

            var npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            var npcs = DefinitionManager.FindNPC(npcName);

            if (npcs == null || npcs.Length == 0)
            {
                int npcId;
                if (Int32.TryParse(npcName, out npcId))
                {
                    npcs = DefinitionManager.FindNPC(npcId);
                    if (npcs == null || npcs.Length == 0)
                    {
                        throw new CommandError("No npc exists by type {0}", npcId);
                    }
                }
                else
                {
                    throw new CommandError("No npc exists {0}", npcName);
                }
            }

            npcs = npcs.OrderBy(x => x.Name).ToArray();
            if (npcs.Length > 1)
            {
                if (offset == -1)
                {
                    sender.SendMessage("Npcs matching " + npcName + ':');
                    for (var x = 0; x < npcs.Length; x++)
                    {
                        if (sender is ConsoleSender)
                        {
                            sender.SendMessage($"\t{x}\t- {npcs[x].Name}");
                        }
                        else
                        {
                            sender.SendMessage($"{x} - {npcs[x].Name}");
                        }
                    }
                    return;
                }
            }
            else
            {
                offset = 0;
            }

            var npc = npcs[offset];

            if (npc.Boss.HasValue && npc.Boss == true)
            {
                throw new CommandError("This NPC can only be summoned by the SPAWNBOSS command.");
            }
            try
            {
                amount = args.GetInt(0);
                //if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                //{
                //    (sender as Player).Kick("Don't spawn that many.");
                //    return;
                //}
            }
            catch
            {
                throw new CommandError("Expected amount to spawn");
            }

            var max = Tools.AvailableNPCSlots; //Perhaps remove a few incase of spawns

            if (amount > max)
            {
                throw new CommandError("Cannot spawn that many, available slots: {0}", max);
            }

            string realNPCName = String.Empty;

            for (int i = 0; i < amount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.position.X / 16), ((int)player.position.Y / 16), 100, 100, 50);
                int     npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), npc.Id, 0);

                //if (customHealth)
                //{
                //    Main.npc[npcIndex].life = health;
                //    Main.npc[npcIndex].lifeMax = health;
                //}
                Main.npc[npcIndex].netDefaults(npc.NetId);

                realNPCName = Main.npc[npcIndex].name;
            }
            Utils.NotifyAllOps("Spawned " + amount.ToString() + " of " + realNPCName + " [" + player.name + "]", true);
        }
Example #13
0
        public static void Slay(ISender sender, ArgumentList args)
        {
            var player = args.GetOnlinePlayer(0);

            NetMessage.SendData(26, -1, -1, " died of unknown causes...", player.whoAmi, 0, (float)9999, (float)0);
            sender.sendMessage("You killed " + player.Name + "!", 255, 0f, 255f, 255f);
            Essentials.Log("Player " + player + " used /slay on " + player.Name);
        }
Example #14
0
        public static void MessagePlayer(ISender sender, ArgumentList args)
        {
            var Player = args.GetOnlinePlayer(0);
            var Message = args.GetString(1);

            Player.sendMessage(String.Format("[{0}] PM: {1}", sender.Name, Message), ChatColor.DarkGray);
            Server.notifyOps(String.Format("PM {0} => {1}: {2}", sender.Name, Player.Name, Message));
        }
Example #15
0
        public static void Kit(ISender sender, ArgumentList args)
        {
            Essentials Plugin = (Essentials)args.Plugin;

            Player player = args.GetOnlinePlayer(0);

            if (args.Count > 0)
            {
                if (KitManager.ContainsKit(args[0]))
                {
                    Kit kit = KitManager.GetKit(args[0]);
                    if (kit.ItemList != null && kit.ItemList.Count > 0)
                    {
                        foreach (KeyValuePair<Int32, Int32> ItemID in kit.ItemList)
                            Item.NewItem((int)player.Position.X, (int)player.Position.Y, player.Width, player.Height, ItemID.Key, ItemID.Value, false);

                        player.sendMessage("Recived the '" + kit.Name + "' Kit.");
                    }
                    else
                        player.sendMessage("Issue with null kit/list");
                }

                //Help ::: Shows what kits there are
                else if (args[0].Equals("help"))
                {
                    String Kits = "";
                    foreach (Kit kit in KitManager.KitList)
                    {
                        if (kit.Name.Trim().Length > 0)
                            Kits = Kits + ", " + kit.Name;
                    }
                    if (Kits.StartsWith(","))
                        Kits = Kits.Remove(0, 1).Trim();

                    if (Kits.Length > 0)
                        player.sendMessage("Available Kits: " + Kits);

                }

                //If kit does not exist
                else
                    player.sendMessage("Error: specified kit " + args[0] + " does not exist. Please do /kit help");
            }
            //Error message
            else
                player.sendMessage("Error: You did not specify a kit! Do /kit help!");
        }
Example #16
0
        public static void GodMode(ISender sender, ArgumentList args)
        {
            Essentials Plugin = (Essentials)args.Plugin;

            Player player = args.GetOnlinePlayer(0);
            //if (!(sender is Player))
            //{
            //    if (!args.TryGetOnlinePlayer(1, out player))
            //    {
            //        sender.sendMessage("As a non player, Please specify one!");
            //        return;
            //    }
            //}

            if (player.HasClientMod)
            {
                //Tell the client to use God.
                bool On;
                if (Plugin.essentialsRPGPlayerList.TryGetValue(player.whoAmi, out On))
                {
                    NetMessage.SendData((int)Packets.CLIENT_MOD_GOD, player.whoAmi, -1, "", 0);
                    if (!Server.AllowTDCMRPG)
                        Plugin.essentialsRPGPlayerList.Remove(player.whoAmi);
                }
                else
                {
                    NetMessage.SendData((int)Packets.CLIENT_MOD_GOD, player.whoAmi, -1, "", 1);
                    if (!Server.AllowTDCMRPG)
                        Plugin.essentialsRPGPlayerList.Add(player.whoAmi, true);
                }

                return;
            }

            bool found = false;
            bool godModeStatus = false;
            for (int i = 0; i < Plugin.essentialsPlayerList.Count; i++)
            {
                int PlayerID = Plugin.essentialsPlayerList.Keys.ElementAt(i);
                Player eplayer = Main.players[PlayerID];
                if (eplayer.Name.Equals(player.Name))
                {
                    bool GodMode = !Plugin.essentialsPlayerList.Values.ElementAt(i);
                    Plugin.essentialsPlayerList.Remove(PlayerID);
                    Plugin.essentialsPlayerList.Add(PlayerID, GodMode);
                    godModeStatus = GodMode;
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                godModeStatus = true;
                Plugin.essentialsPlayerList.Add(player.whoAmi, godModeStatus);
            }

            player.sendMessage("God Mode Status: " + godModeStatus.ToString());
        }
        /// <summary>
        /// Gives specified item to the specified player.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public static void Give(ISender sender, ArgumentList args)
        {
            // /give <player> <stack> <name>

            string _prefix;
            args.TryPopAny("-prefix", out _prefix);

            byte prefix;
            if (!Byte.TryParse(_prefix, out prefix))
            {
                Affix affix;
                if (!AffixExtensions.Parse(_prefix ?? String.Empty, out affix, true)) prefix = 0;
                else prefix = (byte)affix;
            }

            Player receiver = args.GetOnlinePlayer(0);
            int stack = args.GetInt(1);
            string NameOrId = args.GetString(2);

            List<ItemInfo> itemlist;
            if (Server.TryFindItemByName(NameOrId, out itemlist) && itemlist.Count > 0)
            {
                if (itemlist.Count > 1)
                    throw new CommandError(String.Format(Languages.MoreThanOneItemFoundNameId, itemlist.Count));

                var item = itemlist[0];

                var index = receiver.GiveItem(item.Type, stack, sender, item.NetID, true, prefix);

                if (item.NetID < 0)
                    Main.item[index] = Item.netDefaults(item.NetID);

                Main.item[index].Prefix = prefix;
            }
            else
            {
                int Id = -1;
                try
                {
                    Id = Int32.Parse(NameOrId);
                }
                catch
                {
                    throw new CommandError(String.Format(Languages.MoreThanOneItemFoundNameId, itemlist.Count));
                }

                if (Server.TryFindItemByType(Id, out itemlist) && itemlist.Count > 0)
                {
                    if (itemlist.Count > 1)
                        throw new CommandError(String.Format(Languages.MoreThanOneItemFoundType, itemlist.Count));

                    //receiver.GiveItem(itemlist[0].Type, stack, sender);
                    var item = itemlist[0];

                    var index = receiver.GiveItem(item.Type, stack, sender, item.NetID, true, prefix);

                    if (item.NetID < 0)
                        Main.item[index] = Item.netDefaults(item.NetID);

                    Main.item[index].Prefix = prefix;
                }
                else
                {
                    throw new CommandError(String.Format(Languages.MoreThanOneItemFoundNameId, "no"));
                }
            }
        }
        /// <summary>
        /// Gives specified item to the specified player.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public static void Give(ISender sender, ArgumentList args)
        {
            // /give <player> <stack> <name>

            Player receiver = args.GetOnlinePlayer(0);
            int stack = args.GetInt(1);
            string NameOrId = args.GetString(2);

            List<Int32> itemlist;
            if (Server.TryFindItemByName(NameOrId, out itemlist) && itemlist.Count > 0)
            {
                if (itemlist.Count > 1)
                    throw new CommandError("There were {0} Items found regarding the specified name", itemlist.Count);

                foreach (int id in itemlist)
                    receiver.GiveItem(id, stack, sender);
            }
            else
            {
                int Id = -1;
                try
                {
                    Id = Int32.Parse(NameOrId);
                }
                catch
                {
                    throw new CommandError("There were {0} Items found regarding the specified Item Id/Name", itemlist.Count);
                }

                if (Server.TryFindItemByType(Id, out itemlist) && itemlist.Count > 0)
                {
                    if (itemlist.Count > 1)
                        throw new CommandError("There were {0} Items found regarding the specified Type Id", itemlist.Count);

                    foreach (int id in itemlist)
                        receiver.GiveItem(id, stack, sender);
                }
                else
                {
                    throw new CommandError("There were no Items found regarding the specified Item Id/Name");
                }
            }
        }
        /// <summary>
        /// Gives specified item to the specified player.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public void Give(ISender sender, ArgumentList args)
        {
            // /give <player> <stack> <name>
            Player receiver = args.GetOnlinePlayer(0);
            int stack = args.GetInt(1);
            string name = args.GetString(2);

            int id;
            var results = Int32.TryParse(name, out id) ? DefinitionManager.FindItem(id) : DefinitionManager.FindItem(name);
            if (results != null && results.Length > 0)
            {
                if (results.Length > 1)
                    throw new CommandError(String.Format("More than 1 item found, total is: {0}", results.Length));

                var item = results[0];
                string prefix;
                if (args.TryGetString(3, out prefix))
                {
                    try
                    {
                        item.Prefix = (int)(Affix)Enum.Parse(typeof(Affix), prefix, true);
                    }
                    catch (ArgumentException)
                    {
                        throw new CommandError(String.Format("Error, the Prefix you entered was not found: {0}", args.GetString(3)));
                    }
                }

                receiver.GiveItem(item.Id, stack, item.MaxStack, sender, item.NetId, true, item.Prefix);
            }
            else
                throw new CommandError(String.Format("No item known by: {0}", name));
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="server">Current Server instance</param>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public static void SpawnNPC(Server server, ISender sender, ArgumentList args)
        {
            Player player = sender as Player;
            if (args.Count > 3)
            {
                throw new CommandError("Too many arguments. NPC and player names with spaces require quotes.");
            }
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                throw new CommandError("As console you need to specify the player to spawn near.");
            }
            else if (args.Count == 3)
            {
                player = args.GetOnlinePlayer(2);
            }

            String npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            Int32 realNPCId = 0;
            NPC fclass = Registries.NPC.FindClass(npcName);
            if (fclass.type != Registries.NPC.Default.type)
            {
                realNPCId = fclass.Type;
            }
            else
            {
                try
                {
                    realNPCId = Int32.Parse(npcName);
                }
                catch
                {
                    throw new CommandError("Specified NPC does not exist");
                }
            }

            int NPCAmount = 0;

            try
            {
                NPCAmount = Int32.Parse(args[0]);
                if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                {
                    (sender as Player).Kick ("Don't spawn that many.");
                    return;
                }
            }
            catch
            {
                throw new CommandError("Expected integer for number to spawn.");
            }

            String realNPCName = "";
            for (int i = 0; i < NPCAmount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.Position.X / 16), ((int)player.Position.Y / 16), 100, true, 100, 50);
                int npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), fclass.Name);
                //Registries.NPC.Alter(Main.npcs[npcIndex], fclass.Name);
                realNPCName = Main.npcs[npcIndex].Name;
            }
            Program.server.notifyOps("Spawned " + NPCAmount.ToString() + " of " +
                    realNPCName + " {" + player.Name + "}", true);
        }
        /// <summary>
        /// Spawns specified NPC type.
        /// </summary>
        /// <param name="sender">Sending player</param>
        /// <param name="args">Arguments sent with command</param>
        public static void SpawnNPC(ISender sender, ArgumentList args)
        {
            Player player = sender as Player;
            if (args.Count > 3)
            {
                throw new CommandError("Too many arguments. NPC and player names with spaces require quotes.");
            }
            else if (sender is ConsoleSender && args.Count <= 2)
            {
                throw new CommandError("As console you need to specify the player to spawn near.");
            }
            else if (args.Count == 3)
            {
                player = args.GetOnlinePlayer(2);
            }

            string npcName = args.GetString(1).ToLower().Trim();

            // Get the class id of the npc
            int realNPCId = 0;
            NPC fclass = Registries.NPC.FindClass(npcName);
            if (fclass.type != Registries.NPC.Default.type)
            {
                realNPCId = fclass.Type;
            }
            else
            {
                try
                {
                    realNPCId = Int32.Parse(npcName);
                }
                catch
                {
                    throw new CommandError("Specified NPC does not exist");
                }
            }

            int NPCAmount = 0;

            try
            {
                NPCAmount = Int32.Parse(args[0]);
                if (NPCAmount > Program.properties.SpawnNPCMax && sender is Player)
                {
                    (sender as Player).Kick ("Don't spawn that many.");
                    return;
                }
            }
            catch
            {
                throw new CommandError("Expected integer for number to spawn.");
            }

            string realNPCName = "";
            for (int i = 0; i < NPCAmount; i++)
            {
                Vector2 location = World.GetRandomClearTile(((int)player.Position.X / 16), ((int)player.Position.Y / 16), 100, true, 100, 50);
                int npcIndex = NPC.NewNPC(((int)location.X * 16), ((int)location.Y * 16), fclass.Name);
                //Registries.NPC.Alter(Main.npcs[npcIndex], fclass.Name);
                realNPCName = Main.npcs[npcIndex].Name;
            //				var npc = Main.npcs[npcIndex];
            //				Console.WriteLine ("Name: {0}, Type: {1}, NetID: {2}, Scale: {3}, Height: {4}, Width: {5}, Ghost: {6}, Flying: {7}, Life: {8}/{9}, Debuffs: {10}/{11}",
            //					npc.Name, npc.Type, npc.NetID, npc.scale, npc.Height, npc.Width, npc.noTileCollide, npc.noGravity, npc.life, npc.lifeMax, string.Join(",", npc.buffType), string.Join(",", npc.buffTime));
            }
            Server.notifyOps("Spawned " + NPCAmount.ToString() + " of " +
                    realNPCName + " {" + player.Name + "}", true);
        }