예제 #1
0
        private void Punishment()
        {
            switch (config.SelectedOption)
            {
            case "disableA":
                player.Disable();
                SlimyBroadcast("disabled");
                break;

            case "disableS":
                player.Disable();
                SlimyLogWarn("disabled");
                break;

            case "killA":
                player.KillPlayer();
                SlimyBroadcast("killed");
                break;

            case "killS":
                NetMessage.SendPlayerDeath(player.Index, Terraria.DataStructures.PlayerDeathReason.LegacyEmpty(), 99999, (new Random()).Next(-1, 1), false, -1, -1);
                SlimyLogWarn("killed", true);
                break;

            case "slapKill":
                player.KillPlayer();
                TShock.Utils.Broadcast($"Server has slapped {player.Name} to death for attempting to abuse an exploit.", broadcastColor);
                break;

            case "kick":
                TShock.Utils.ForceKick(player, "Attempted exploit abuse.", false, true);
                SlimyLogWarn("kicked");
                break;

            case "skick":
                TShock.Utils.ForceKick(player, "Attempted exploit abuse.", true, true);
                SlimyLogWarn("kicked", true);
                break;

            case "ban":
                TShockAPI.Commands.HandleCommand(TSPlayer.Server, $"{TShock.Config.CommandSpecifier}ban add {player.Name} \"Attempted invulnerability exploit.\"");
                SlimyLogWarn("banned");
                break;

            case "sban":
                TShock.Utils.ForceKick(player, "Attempted invulnerability exploit", true, true);
                TShock.Bans.AddBan(player.IP, player.Name, player.UUID, "Attempted abuse of slime mount invulnerability exploit.", false, "Server");
                SlimyLogWarn("banned");
                break;

            default:
                player.Disable();
                SlimyLogWarn("disabled");
                break;
            }
        }
예제 #2
0
        /// <summary>
        ///   Adds the player's IP to the warned list,
        ///   disables the player and removes their summons.
        /// </summary>
        /// <param name="player">The <see cref="TSPlayer" /> to warn.</param>
        private static void Warn(TSPlayer player)
        {
            Warned.Add(player.IP, DateTime.UtcNow);

            player.Disable(WarnMessage);
            player.SendErrorMessage(WarnMessage, player.Group.GetDynamicPermission(Permission));

            foreach (var proj in Main.projectile.Where(p => p != null &&
                                                       p.active &&
                                                       p.owner == player.Index &&
                                                       IsMinion(p)))
            {
                player.RemoveProjectile(proj.identity, proj.owner);
            }
        }
예제 #3
0
        private void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventArgs args)
        {
            TSPlayer player = TShock.Players[args.Owner];

            if (!player.TPlayer.hostile)
            {
                return;
            }
            if (player.HasPermission("pvpchecks.ignore"))
            {
                return;
            }

            if (cfg.projBans.Contains(args.Type))
            {
                player.Disable("Used banned projectile in pvp.", DisableFlags.None);
                player.SendErrorMessage("You cannot create this projectile in PvP. See /pvpprojbans.");
            }
        }
예제 #4
0
        public void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args)
        {
            TSPlayer player = TShock.Players[args.PlayerId];

            //If the player isn't in pvp or using an item, skip pvp checking
            if (!player.TPlayer.hostile || (args.Control & 32) == 0)
            {
                return;
            }

            //If the player has this permission, skip pvp checking
            if (player.HasPermission("pvpchecks.useall"))
            {
                return;
            }

            //Checks whether a player is using a banned item
            if (!player.HasPermission("pvpchecks.usebannedweps"))
            {
                foreach (string weapon in weaponbans)
                {
                    if (player.ItemInHand.Name == weapon || player.SelectedItem.Name == weapon)
                    {
                        player.Disable("Used banned pvp weapon.", DisableFlags.WriteToLog);
                        player.SendErrorMessage(weapon + " cannot be used in PvP. See /pvpweaponbans.");
                        break;
                    }
                }
            }

            //Checks whether a player has a banned buff
            if (!player.HasPermission("pvpchecks.usebannedweps"))
            {
                foreach (int buff in buffbans)
                {
                    foreach (int playerbuff in player.TPlayer.buffType)
                    {
                        if (playerbuff == buff)
                        {
                            player.Disable("Used banned buff.", DisableFlags.WriteToLog);
                            player.SendErrorMessage(TShock.Utils.GetBuffName(playerbuff) + " cannot be used in PvP. See /pvpbuffbans.");
                            break;
                        }
                    }
                }
            }

            //Checks whether a player has illegal prefixed items
            if (!player.HasPermission("pvpchecks.useillegalweps"))
            {
                if (player.ItemInHand.maxStack > 1 || player.SelectedItem.maxStack > 1)
                {
                    if (player.ItemInHand.prefix != 0 || player.SelectedItem.prefix != 0)
                    {
                        player.Disable("Used illegal weapon.", DisableFlags.WriteToLog);
                        player.SendErrorMessage("Illegally prefixed weapons are not allowed in PvP");
                    }
                }
                else if (player.ItemInHand.melee || player.SelectedItem.melee)
                {
                    foreach (int prefixes in illegalMeleePrefixes)
                    {
                        if (player.ItemInHand.prefix == prefixes || player.SelectedItem.prefix == prefixes)
                        {
                            player.Disable("Used illegal weapon.", DisableFlags.WriteToLog);
                            player.SendErrorMessage("Illegally prefixed weapons are not allowed in PvP");
                            break;
                        }
                    }
                }
                else if (player.ItemInHand.ranged || player.SelectedItem.ranged)
                {
                    foreach (int prefixes in illegalRangedPrefixes)
                    {
                        if (player.ItemInHand.prefix == prefixes || player.SelectedItem.prefix == prefixes)
                        {
                            player.Disable("Used illegal weapon.", DisableFlags.WriteToLog);
                            player.SendErrorMessage("Illegally prefixed weapons are not allowed in PvP");
                            break;
                        }
                    }
                }
                else if (player.ItemInHand.magic || player.SelectedItem.magic || player.ItemInHand.summon || player.SelectedItem.summon || player.ItemInHand.DD2Summon || player.SelectedItem.DD2Summon)
                {
                    foreach (int prefixes in illegalMagicPrefixes)
                    {
                        if (player.ItemInHand.prefix == prefixes || player.SelectedItem.prefix == prefixes)
                        {
                            player.Disable("Used illegal weapon.", DisableFlags.WriteToLog);
                            player.SendErrorMessage("Illegally prefixed weapons are not allowed in PvP");
                            break;
                        }
                    }
                }
            }

            //Checks whether a player has prefixed ammo
            if (!player.HasPermission("pvpchecks.useprefixedammo") && (player.ItemInHand.ranged || player.SelectedItem.ranged))
            {
                foreach (int ammo in DataIDs.ammoIDs)
                {
                    foreach (Item inventory in player.TPlayer.inventory)
                    {
                        if (inventory.netID == ammo && inventory.prefix != 0)
                        {
                            player.Disable("Used prefixed ammo.", DisableFlags.WriteToLog);
                            player.SendErrorMessage("Please remove the prefixed ammo for PvP: " + inventory.Name);
                            break;
                        }
                    }
                }
            }

            //Checks whether a player is wearing prefixed armour
            if (!player.HasPermission("pvpchecks.useprefixedarmor"))
            {
                for (int index = 0; index < 3; index++)
                {
                    if (player.TPlayer.armor[index].prefix != 0)
                    {
                        player.Disable("Used prefixed armour.", DisableFlags.WriteToLog);
                        player.SendErrorMessage("Please remove the prefixed armour for PvP: " + player.TPlayer.armor[index].Name);
                        break;
                    }
                }
            }

            //Checks whether a player is wearing duplicate accessories/armor
            //To all you code diggers, the bool in the Dictionary serves no purpose here
            if (!player.HasPermission("pvpchecks.havedupeaccessories"))
            {
                Dictionary <int, bool> duplicate = new Dictionary <int, bool>();
                foreach (Item equips in player.TPlayer.armor)
                {
                    if (duplicate.ContainsKey(equips.netID))
                    {
                        player.Disable("Used duplicate accessories.", DisableFlags.WriteToLog);
                        player.SendErrorMessage("Please remove the duplicate accessory for PvP: " + equips.Name);
                        break;
                    }
                    else if (equips.netID != 0)
                    {
                        duplicate.Add(equips.netID, true);
                    }
                }
            }

            //Checks whether the player is using the unobtainable 7th accessory slot
            if (!player.HasPermission("pvpchecks.use7thslot"))
            {
                if (player.TPlayer.armor[9].netID != 0)
                {
                    player.Disable("Used 7th accessory slot.", DisableFlags.WriteToLog);
                    player.SendErrorMessage("The 7th accessory slot cannot be used in PvP.");
                }
            }
        }
예제 #5
0
        private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args)
        {
            TSPlayer player = TShock.Players[args.PlayerId];

            //If the player isn't in pvp or using an item, skip pvp checking
            if (!player.TPlayer.hostile || !args.Control.IsUsingItem)
            {
                return;                                                       // byDii 32 = IsUsingItem - bitsbyte[5]
            }
            if (player.HasPermission("pvpchecks.ignore"))
            {
                return;
            }

            //Check weapon
            foreach (int weapon in cfg.weaponBans)
            {
                if (player.SelectedItem.type == weapon || player.ItemInHand.type == weapon)
                {
                    player.Disable("Used banned weapon in pvp.", DisableFlags.None);
                    if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                    {
                        player.SendErrorMessage("[i:{0}] {1} cannot be used in PvP. See /pvpitembans.", weapon, TShock.Utils.GetItemById(weapon).Name);
                        WarningMsgCooldown[player.Index] = DateTime.Now;
                    }
                    return;
                }
            }

            //Check armor
            for (int a = 0; a < 3; a++)
            {
                foreach (int armorBan in cfg.armorBans)
                {
                    if (player.TPlayer.armor[a].type == armorBan)
                    {
                        player.Disable("Used banned armor in pvp.", DisableFlags.None);
                        Console.WriteLine("47: " + player.TPlayer.buffType.Contains(47));
                        if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                        {
                            player.SendErrorMessage("[i:{0}] {1} cannot be used in PvP. See /pvpitembans.", armorBan, TShock.Utils.GetItemById(armorBan).Name);
                            WarningMsgCooldown[player.Index] = DateTime.Now;
                        }
                        return;
                    }
                }
            }

            //Check accs
            for (int a = 3; a < 9; a++)
            {
                foreach (int accBan in cfg.accsBans)
                {
                    if (player.TPlayer.armor[a].type == accBan)
                    {
                        player.Disable("Used banned accessory in pvp.", DisableFlags.None);
                        if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                        {
                            player.SendErrorMessage("[i:{0}] {1} cannot be used in PvP. See /pvpitembans.", accBan, TShock.Utils.GetItemById(accBan).Name);
                            WarningMsgCooldown[player.Index] = DateTime.Now;
                        }
                        return;
                    }
                }
            }

            //Checks buffs
            foreach (int buff in cfg.buffBans)
            {
                foreach (int playerbuff in player.TPlayer.buffType)
                {
                    if (playerbuff == buff)
                    {
                        player.Disable("Used banned buff.", DisableFlags.None);
                        if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                        {
                            player.SendErrorMessage(TShock.Utils.GetBuffName(playerbuff) + " cannot be used in PvP. See /pvpbuffbans.");
                            WarningMsgCooldown[player.Index] = DateTime.Now;
                        }
                        return;
                    }
                }
            }

            //Checks whether a player is wearing duplicate accessories/armor
            List <int> duplicate = new List <int>();

            foreach (Item equip in player.TPlayer.armor)
            {
                if (duplicate.Contains(equip.type))
                {
                    player.Disable("Used duplicate accessories.", DisableFlags.None);
                    if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                    {
                        player.SendErrorMessage("Please remove the duplicate accessory for PvP: " + equip.Name);
                        WarningMsgCooldown[player.Index] = DateTime.Now;
                    }
                    return;
                }
                else if (equip.type != 0)
                {
                    duplicate.Add(equip.type);
                }
            }

            //Checks whether the player is using the unobtainable 7th accessory slot
            if (player.TPlayer.armor[9].netID != 0)
            {
                player.Disable("Used 7th accessory slot.", DisableFlags.None);
                if ((DateTime.Now - WarningMsgCooldown[player.Index]).TotalSeconds > 3)
                {
                    player.SendErrorMessage("The 7th accessory slot cannot be used in PvP.");
                    WarningMsgCooldown[player.Index] = DateTime.Now;
                }
                return;
            }
        }