示例#1
0
        private void OnPlayerUpdated(object sender, PlayerUpdateArgs e)
        {
            e.player.TPlayer.vortexStealthActive = (e.pulley & 8) == 8;

            if (!PvPController.config.enablePlugin)
            {
                return;
            }

            if (e.player.previousSelectedItem != e.selectedSlot)
            {
                if (e.player.seeTooltip)
                {
                    PvPItem item = PvPUtils.ConvertToPvPItem(e.player.TPlayer.inventory[e.selectedSlot]);

                    int damage = TerrariaUtils.GetWeaponDamage(e.player, item);
                    damage += PvPUtils.GetAmmoDamage(e.player, item);
                    damage += PvPUtils.GetVortexDamage(e.player, item, damage);

                    if (damage > 0)
                    {
                        string message = item.Name + ": " + damage + " damage";
                        PvPUtils.PlayerTextPopup(e.player, message, Color.Goldenrod);
                    }
                }

                e.player.previousSelectedItem = e.selectedSlot;
            }
        }
示例#2
0
        /// <summary>
        /// Damages players. Criticals and custom knockback will apply if enabled.
        /// </summary>
        public void DamagePlayer(PvPPlayer attacker, PvPItem weapon, int damage, int hitDirection, bool isCrit)
        {
            damage *= isCrit ? 2 : 1;
            string star  = isCrit ? "!!" : "*";
            var    color = isCrit ? Color.SlateBlue : Color.DarkTurquoise;

            NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(attacker, this, weapon)),
                                      damage, hitDirection, false, true, 5);
            Interface.PlayerTextPopup(attacker, this, star + TerrariaUtils.GetHurtDamage(this, damage) + star, color);
        }
示例#3
0
        /// <summary>
        /// Applies nebula, spectre, and frost armor effects.
        /// </summary>
        public void ApplyArmorEffects(PvPPlayer target, PvPItem weapon, PvPProjectile projectile)
        {
            if (TPlayer.setNebula && TPlayer.nebulaCD == 0 && Main.rand.Next(3) == 0 && PvPModifier.Config.EnableNebula && weapon.magic)
            {
                TPlayer.nebulaCD = 30;
                int type = Terraria.Utils.SelectRandom(Main.rand, 3453, 3454, 3455);

                int index = Item.NewItem((int)TPlayer.position.X, (int)TPlayer.position.Y, TPlayer.width, TPlayer.height, type);

                float velocityY = Main.rand.Next(-20, 1) * 0.2f;
                float velocityX = Main.rand.Next(10, 31) * 0.2f * Main.rand.Next(-1, 1).Replace(0, 1);

                var itemDrop = new PacketWriter()
                               .SetType((int)PacketTypes.UpdateItemDrop)
                               .PackInt16((short)index)
                               .PackSingle(target.TPlayer.position.X)
                               .PackSingle(target.TPlayer.position.Y)
                               .PackSingle(velocityX)
                               .PackSingle(velocityY)
                               .PackInt16(1)
                               .PackByte(0)
                               .PackByte(0)
                               .PackInt16((short)type)
                               .GetByteData();
                var itemOwner = new PacketWriter()
                                .SetType((int)PacketTypes.ItemOwner)
                                .PackInt16((short)index)
                                .PackByte((byte)Index)
                                .GetByteData();

                foreach (var pvper in PvPModifier.ActivePlayers)
                {
                    pvper.SendRawData(itemDrop);
                    pvper.SendRawData(itemOwner);
                }
            }

            if ((weapon.ranged || weapon.melee) && TPlayer.frostArmor && PvPModifier.Config.EnableFrost)
            {
                target.SetBuff(44, (int)(PvPModifier.Config.FrostDuration * 30));
            }

            if (TPlayer.ghostHurt && projectile?.type != 356)
            {
                TerrariaUtils.ActivateSpectreBolt(this, target, weapon, weapon.ConfigDamage);
            }
        }
示例#4
0
 /// <summary>
 /// Gets the damage received from an attack.
 /// </summary>
 public int DamageReceived(int damage) => (int)TerrariaUtils.
 GetHurtDamage(this, damage);
示例#5
0
 /// <summary>
 /// Applies effects that normally won't work in vanilla pvp.
 /// Effects include nebula/frost armor, yoyo-bag projectiles, and thorns/turtle damage.
 /// </summary>
 public void ApplyPvPEffects(PvPPlayer attacker, PvPItem weapon, PvPProjectile projectile, int damage)
 {
     this.ApplyReflectDamage(attacker, damage, weapon);
     this.ApplyArmorEffects(attacker, weapon, projectile);
     TerrariaUtils.ActivateYoyoBag(this, attacker, damage, weapon.knockBack);
 }
示例#6
0
 /// <summary>
 /// Gets raw damage based off Terraria damage calculations.
 /// </summary>
 /// <param Name="owner"></param>
 /// <returns></returns>
 public int GetPvPDamage(PvPPlayer owner) => TerrariaUtils.GetWeaponDamage(owner, this);
示例#7
0
 public int GetPvPDamage(PvPPlayer owner)
 {
     return(TerrariaUtils.GetWeaponDamage(owner, this));
 }
示例#8
0
 public void DamagePlayer(PvPPlayer attacker, PvPItem weapon, int damage, int hitDirection)
 {
     NetMessage.SendPlayerHurt(this.Index, PlayerDeathReason.ByCustomReason(PvPUtils.GetPvPDeathMessage(attacker, this, weapon.name, 1)),
                               damage, hitDirection, false, true, 5);
     PvPUtils.PlayerTextPopup(attacker, this, "*" + TerrariaUtils.GetHurtDamage(this, damage) + "*", Color.DarkTurquoise);
 }
示例#9
0
 public int GetDamageReceived(int damage)
 {
     return((int)TerrariaUtils.GetHurtDamage(this, damage));
 }