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; } }
/// <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); }
/// <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); } }
/// <summary> /// Gets the damage received from an attack. /// </summary> public int DamageReceived(int damage) => (int)TerrariaUtils. GetHurtDamage(this, damage);
/// <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); }
/// <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);
public int GetPvPDamage(PvPPlayer owner) { return(TerrariaUtils.GetWeaponDamage(owner, this)); }
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); }
public int GetDamageReceived(int damage) { return((int)TerrariaUtils.GetHurtDamage(this, damage)); }