private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { var ply = TShock.Players[args.PlayerId]; if (ply.CurrentRegion == null) { return; } var rt = RtRegions.GetRtRegionByRegionId(ply.CurrentRegion.ID); if (rt == null || !rt.HasEvent(Events.Itemban)) { return; } BitsByte control = args.Control; if (control[5]) { var itemName = ply.TPlayer.inventory[args.Item].name; if (rt.ItemIsBanned(itemName) && !ply.HasPermission("regiontrigger.bypass.itemban")) { control[5] = false; args.Control = control; ply.Disable($"using a banned item ({itemName})", DisableFlags.WriteToLogAndConsole); ply.SendErrorMessage($"You can't use {itemName} here."); } } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs e) { var player = e.Player; // Store the player's last known region and update the current based on known regions at their coordinates. var oldRegion = player.CurrentRegion; player.CurrentRegion = _regionManager.GetTopRegion(_regionManager.InAreaRegion(player.TileX, player.TileY)); // Do not fire any hooks if the player has not left and/or entered a region. if (player.CurrentRegion == oldRegion) { return; } // Ensure that the player has left a region before invoking the RegionLeft event if (oldRegion != null) { RegionHooks.OnRegionLeft(player, oldRegion); } // Ensure that the player has entered a valid region before invoking the RegionEntered event if (player.CurrentRegion != null) { RegionHooks.OnRegionEntered(player, player.CurrentRegion); } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { BTPlayer player = BTPlayers[args.PlayerId]; if ((player == null) || (player.tsPlayer == null) || ((player.bindTools.Count == 0) && (GlobalBinds.Count == 0))) { return; } if ((args.Control & 32) == 32) { try { Item Selected = Main.player[args.PlayerId].inventory[args.Item]; var GB = BTExtensions.GetGlobalBind(Selected, args.Item); var BT = player.GetBindTool(Selected, args.Item); if ((GB.Name != null) && (player.tsPlayer.HasPermission(GB.Permission)) && (BT == null)) { GB.DoCommand(player.tsPlayer); } else if (BT != null) { BT.DoCommand(player.tsPlayer); } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); } } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { TSPlayer tsplayer = TShock.Players[args.PlayerId]; if (tsplayer == null) { return; } BTPlayer player = BTPlayers[args.PlayerId]; if (player == null) { return; } if ((args.Control & 32) == 32) { try { var BT = player.GetBindTool(Main.player[args.PlayerId].inventory[args.Item]); if (BT != null) { BT.DoCommand(tsplayer); } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); } } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { BTPlayer player = BTPlayers[args.PlayerId]; if ((player == null) || (player.TSPlayer == null)) { return; } if ((args.Control & 32) == 32) { try { Item Selected = Main.player[args.PlayerId].inventory[args.Item]; var BT = player.GetBindTool(Selected, args.Item); if ((BT != null) && ((BT.slot == -1) || (BT.slot == player.TSPlayer.TPlayer.selectedItem)) && ((BT.prefix == -1) || (BT.prefix == Selected.prefix))) { BT.DoCommand(player.TSPlayer); } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); } } }
private static void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { var ply = TShock.Players[args.PlayerId]; var rt = RtPlayer.GetPlayerInfo(ply).CurrentRegion; if (rt?.HasEvent(Event.Itemban) != true) { return; } /*BitsByte control = args.Control; * if (control[5]) * { * var itemName = ply.TPlayer.inventory[args.Item].Name; * if (rt.ItemIsBanned(itemName) && !ply.HasPermission("regiontrigger.bypass.itemban")) * { * control[5] = false; * args.Control = control; * ply.Disable($"using a banned item ({itemName})", DisableFlags.WriteToLogAndConsole); * ply.SendErrorMessage($"You can't use {itemName} here."); * } * }*/ ControlSet control = args.Control; if (control.bitsbyte[5]) { string name = ply.TPlayer.inventory[(int)args.SelectedItem].Name; if (rt.ItemIsBanned(name) && !ply.HasPermission("regiontrigger.bypass.itemban")) { control.bitsbyte[5] = false; args.Control = control; ply.Disable("using a banned item (" + name + ")", DisableFlags.WriteToLogAndConsole); ply.SendErrorMessage("You can't use " + name + " here."); } } }
public void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { var player = TShock.Players[args.PlayerId]; var arena = ArenaManager.InArea(player); if (arena == null || player.HasPermission(Permissions.Ignore)) { return; } if (ParamContains(arena, "autopvp")) { if (!player.TPlayer.hostile) { ChangePvpStatus(player); } return; } if (ParamContains(arena, "autoinvise")) { if (!player.TPlayer.hostile) { BuffInvise(player); } return; } if (ParamContains(arena, "autotp")) { if (!player.TPlayer.hostile) { player.Teleport(Terraria.Main.spawnTileX * 16, Terraria.Main.spawnTileY * 16); } return; } }
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; } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { if ((args.Control & 32) != 32) { Using[args.PlayerId] = false; return; } if (Using[args.PlayerId]) { return; } Using[args.PlayerId] = true; TSPlayer p = TShock.Players[args.PlayerId]; Item it = TShock.Players[args.PlayerId].TPlayer.inventory[args.Item]; if (p.HasPermission("mw.warpback") && config.returnItemTypes.Count() > 0) { WarpbackData wb = WarpbackData.Get(TShock.Players[args.PlayerId]); // If you use the return item while warpback is available... if (config.returnItemTypes.Contains(it.type) && wb.Available) { SendInfoMessageIfPresent(p, config.msgOnLensSuccess); if (config.returnItemConsume && Main.ServerSideCharacter) { if (p.TPlayer.inventory[args.Item].stack > 1) { p.TPlayer.inventory[args.Item].stack -= 1; } else { p.TPlayer.inventory[args.Item].type = 0; } NetMessage.SendData((int)PacketTypes.PlayerSlot, number: p.Index, number2: args.Item); } // If an item that warps you to spawn is your return item, set the state to return once you get there instead of immediately. if (new int[] { Terraria.ID.ItemID.MagicMirror, Terraria.ID.ItemID.IceMirror, Terraria.ID.ItemID.CellPhone, Terraria.ID.ItemID.RecallPotion }.Contains(it.type)) { wb.TeleportOnSpawn(); } else { wb.Teleport(); } } // If you use a reset item while warpback is available... else if (config.resetItemTypes.Contains(it.type)) { wb.Clear(); SendInfoMessageIfPresent(p, config.msgOnReset); } // If you use a mirror-type, so long as that type isn't your warpback item while it is available... else if (it.type == Terraria.ID.ItemID.MagicMirror || it.type == Terraria.ID.ItemID.CellPhone || it.type == Terraria.ID.ItemID.IceMirror || (config.returnFromRecallPotion && it.type == Terraria.ID.ItemID.RecallPotion)) { if (!WarpbackData.InSpawnRange(p)) { if (config.msgOnMirrorWithLens != config.msgOnMirrorNoLens) { bool haslens = false; foreach (NetItem thing in p.TPlayer.inventory) { if (config.returnItemTypes.Contains(thing.NetId)) { haslens = true; } } if (haslens) { SendInfoMessageIfPresent(p, config.msgOnMirrorWithLens); } else { SendInfoMessageIfPresent(p, config.msgOnMirrorNoLens); } } else { SendInfoMessageIfPresent(p, config.msgOnMirrorWithLens); } wb.Set(p.X, p.Y); } } // If you use a return item, but the above conditions were not met... else if (config.returnItemTypes.Contains(it.type)) { SendInfoMessageIfPresent(p, config.msgOnLensFailure); } } if (config.graveReturnItemTypes.Count() > 0 && p.HasPermission("mw.gravewarp") && config.graveReturnItemTypes.Contains(it.type)) { if (p.TPlayer.lastDeathTime.Year > 1980) { SendInfoMessageIfPresent(p, config.msgOnWormholeSuccess); if (config.graveReturnItemConsume && Main.ServerSideCharacter) { if (p.TPlayer.inventory[args.Item].stack > 1) { p.TPlayer.inventory[args.Item].stack -= 1; } else { p.TPlayer.inventory[args.Item].type = 0; } NetMessage.SendData((int)PacketTypes.PlayerSlot, number: p.Index, number2: args.Item); } // If an item that warps you to spawn is your grave return item, set the state to return once you get there instead of immediately. // NOTE: If this is done, gravewarping will cost the player any original return spot they might've had! if (new int[] { Terraria.ID.ItemID.MagicMirror, Terraria.ID.ItemID.IceMirror, Terraria.ID.ItemID.CellPhone, Terraria.ID.ItemID.RecallPotion }.Contains(it.type)) { WarpbackData wb = WarpbackData.Get(TShock.Players[args.PlayerId]); wb.Set(p.TPlayer.lastDeathPostion.X, p.TPlayer.lastDeathPostion.Y); wb.TeleportOnSpawn(); } else { p.Teleport(p.TPlayer.lastDeathPostion.X, p.TPlayer.lastDeathPostion.Y, config.graveReturnEffect); } } else { SendInfoMessageIfPresent(TShock.Players[args.PlayerId], config.msgOnWormholeFailure); } } }
private void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { if ((args.Control & 32) == 32) { if (Using[args.PlayerId]) { return; } Using[args.PlayerId] = true; //int uid = TShock.Players[args.PlayerId].User.ID; Item it = TShock.Players[args.PlayerId].TPlayer.inventory[args.Item]; if ((it.type == 50 || it.type == 3124 || it.type == 3199) && (config.returnItemType != 0)) // Magic Mirror, Cell Phone, Ice Mirror { TSPlayer p = TShock.Players[args.PlayerId]; WarpbackData wb = WarpbackData.Get(TShock.Players[args.PlayerId]); if (p.HasPermission("mw.warpback")) { bool haslens = false; foreach (NetItem thing in p.TPlayer.inventory) { if (thing.NetId == config.returnItemType) { haslens = true; } } if (haslens) { SendInfoMessageIfPresent(p, config.msgOnMirrorWithLens); } else { SendInfoMessageIfPresent(p, config.msgOnMirrorNoLens); } wb.Set(p.X, p.Y); } } else if (it.type == config.returnItemType && config.returnItemType != 0) { TSPlayer p = TShock.Players[args.PlayerId]; WarpbackData wb = WarpbackData.Get(TShock.Players[args.PlayerId]); if (p.HasPermission("mw.warpback")) { if (wb.Available) { SendInfoMessageIfPresent(p, config.msgOnLensSuccess); if (config.returnItemConsume && Main.ServerSideCharacter) { if (p.TPlayer.inventory[args.Item].stack > 1) { p.TPlayer.inventory[args.Item].stack -= 1; } else { p.TPlayer.inventory[args.Item].type = 0; } NetMessage.SendData((int)PacketTypes.PlayerSlot, number: p.Index, number2: args.Item); } wb.Teleport(config.returnEffect); } else { SendInfoMessageIfPresent(p, config.msgOnLensFailure); } } } else if (it.type == config.graveReturnItemType && config.graveReturnItemType != 0) { TSPlayer p = TShock.Players[args.PlayerId]; if (p.HasPermission("mw.gravewarp")) { if (p.TPlayer.lastDeathTime.Year > 1980) { SendInfoMessageIfPresent(p, config.msgOnWormholeSuccess); if (config.graveReturnItemConsume && Main.ServerSideCharacter) { if (p.TPlayer.inventory[args.Item].stack > 1) { p.TPlayer.inventory[args.Item].stack -= 1; } else { p.TPlayer.inventory[args.Item].type = 0; } NetMessage.SendData((int)PacketTypes.PlayerSlot, number: p.Index, number2: args.Item); } p.Teleport(p.TPlayer.lastDeathPostion.X, p.TPlayer.lastDeathPostion.Y, config.graveReturnEffect); } else { SendInfoMessageIfPresent(TShock.Players[args.PlayerId], config.msgOnWormholeFailure); } } } } // fi ((args.Control & 32) == 32) else { Using[args.PlayerId] = false; } }