/// <summary> /// Handles projectile creation. /// </summary> private void OnNewProjectile(object sender, ProjectileNewArgs e) { if (!PvPModifier.Config.EnablePlugin) { return; } var projectile = Main.projectile[e.Identity]; if (projectile.active && projectile.type == e.Type) { return; } if ((TShock.Players[e.Owner]?.TPlayer?.hostile ?? false) && PvPUtils.IsModifiedProjectile(e.Type)) { e.Args.Handled = true; DbProjectile proj = Cache.Projectiles[e.Type]; projectile.SetDefaults(proj.Shoot != -1 ? proj.Shoot : e.Type); projectile.velocity = e.Velocity * proj.VelocityMultiplier; projectile.damage = proj.Damage != -1 ? proj.Damage : e.Damage; projectile.active = true; projectile.identity = e.Identity; projectile.owner = e.Owner; projectile.position = e.Position; NetMessage.SendData(27, -1, -1, null, e.Identity); } e.Attacker.ProjTracker.InsertProjectile(e.Identity, e.Type, e.Owner, e.Weapon); e.Attacker.ProjTracker.Projectiles[e.Type].PerformProjectileAction(); }
/// <summary> /// Stores projectiles to an array with its originated weapon. /// Changes projectile types and shootspeed based off server config. /// </summary> /// <param Name="sender"></param> /// <param Name="args"></param> private void OnNewProjectile(object sender, ProjectileNewArgs e) { if (!PvPController.Config.EnablePlugin) { return; } if (Main.projectile[e.Identity].active && Main.projectile[e.Identity].type == e.Type) { return; } var isModified = false; if (e.Attacker == null || !e.Attacker.TPlayer.hostile) { return; } if (Database.GetData <int>(DbConsts.ItemTable, e.Weapon.netID, DbConsts.Shoot) > 0 && Database.GetData <bool>(DbConsts.ItemTable, e.Weapon.netID, DbConsts.IsShootModded)) { e.Type = Database.GetData <int>(DbConsts.ItemTable, e.Weapon.netID, DbConsts.Shoot); isModified = true; } if (Database.GetData <float>(DbConsts.ItemTable, e.Weapon.netID, DbConsts.ShootSpeed) > 0) { e.Velocity = Vector2.Normalize(e.Velocity) * Database.GetData <float>(DbConsts.ItemTable, e.Weapon.netID, DbConsts.ShootSpeed); isModified = true; } if (isModified) { e.Args.Handled = true; var projectile = Main.projectile[e.Identity]; projectile.SetDefaults(e.Type); projectile.identity = e.Identity; projectile.damage = e.Damage; projectile.active = true; projectile.owner = e.Owner; projectile.velocity = e.Velocity; projectile.position = e.Position; NetMessage.SendData(27, -1, -1, null, e.Identity); } e.Attacker.ProjTracker.InsertProjectile(e.Identity, e.Type, e.Owner, e.Weapon); e.Attacker.ProjTracker.Projectiles[e.Type].PerformProjectileAction(); }