////////////////

        public bool TeleportToMirror(int tileX, int tileY)
        {
            int mmmTileType = ModContent.TileType <MountedMagicMirrorTile>();

            tileX++;

            Tile tile = Framing.GetTileSafely(tileX, tileY);

            if (tile.type != mmmTileType)
            {
                //bool isInvalid = Main.netMode != 1 || TileChunkHelpers.IsTileSyncedForCurrentClient( tileX, tileY );
                //if( isInvalid ) { }
                if (MMMPlayer.IsMirrorTileInvalid(tileX, tileY) != false)
                {
                    if (MMMConfig.Instance.DebugModeInfo)
                    {
                        Main.NewText("Cannot teleport - Invalid mirror tile at " + tileX + "," + tileY);
                    }
                    return(false);
                }
            }

            var pos = new Vector2((tileX << 4), (tileY << 4));

            PlayerWarpHelpers.Teleport(this.player, pos, PlayerWarpHelpers.MagicMirrorWarpStyle);

            return(true);
        }
Пример #2
0
        protected virtual void Teleport(Player player, Vector2 dest)
        {
            WormholesPlayer myplayer = player.GetModPlayer <WormholesPlayer>();

            if (myplayer.MyPortal == null || (myplayer.MyPortal != null && this.ID != myplayer.MyPortal.ID))
            {
                myplayer.ChartedLinks.Add(this.ID);
            }

            PlayerWarpHelpers.Teleport(player, dest);

            if (player.FindBuffIndex(BuffID.ChaosState) != -1)
            {
                int def = player.statDefense;
                player.statDefense = 0;
                var dmg = player.Hurt(PlayerDeathReason.ByOther(13), player.statLifeMax2 / 7, 0);
                player.statDefense = def;
            }

            player.AddBuff(BuffID.VortexDebuff, (int)(60f * 2.5f));     // Distorted
            player.AddBuff(BuffID.ChaosState, 60 * 10);                 // Chaos State

            float velX = player.velocity.X * 3;
            float velY = player.velocity.Y * 3;

            if (velX > 0 && velX < 1)
            {
                velX = 1;
            }
            else if (velX < 0 && velX > 1)
            {
                velX = -1;
            }
            if (velY > 0 && velY < 1)
            {
                velY = 1;
            }
            else if (velY < 0 && velY > 1)
            {
                velY = -1;
            }

            for (int i = 0; i < 24; i++)
            {
                Dust.NewDust(player.position, player.width, player.height, 245, velX, velY);
            }

            //Main.PlaySound( 2, player.position, 100 );
            var snd = SoundID.Item100.WithVolume(WormholesConfig.Instance.WormholeEntrySoundVolume);

            Main.PlaySound(snd, player.position);
        }
        public override bool ConsumeItem(Player player)
        {
            var playerPos = player.Center;
            var homePos   = PlayerWarpHelpers.GetSpawnPoint(player);

            playerPos.X -= WormholePortal.Width / 2;
            playerPos.Y -= 128 + player.height + 1;
            homePos.X   -= WormholePortal.Width / 2;
            homePos.Y   -= 128 + player.height + 1;

            TownPortalScrollItem.OpenPortal(player, playerPos, homePos);

            return(base.ConsumeItem(player));
        }