예제 #1
0
        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.");
                }
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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()); }
            }
        }
예제 #4
0
        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());
                }
            }
        }
예제 #5
0
파일: BTMain.cs 프로젝트: Jewsus/BindTool
        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()); }
            }
        }
예제 #6
0
        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.");
                }
            }
        }
예제 #7
0
        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;
            }
        }
예제 #8
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.");
                }
            }
        }
예제 #9
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;
            }
        }
        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;
            }
        }