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; } }
/// <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); } }
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."); } }
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."); } } }
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; } }