using Microsoft.Xna.Framework; using Terraria; using Terraria.Audio; using Terraria.DataStructures; using Terraria.ID; using Terraria.ModLoader; using ForgottenWawiTech.Content.Rarities; namespace ForgottenWawiTech.Content.Items.Weapons.Magic { public class TomeOfUnyielding : ModItem { public override void SetDefaults() { Item.damage = 15000; Item.mana = 30; Item.crit = 100; Item.DamageType = DamageClass.Magic; Item.width = 40; Item.height = 40; Item.useTime = 20; Item.useAnimation = 20; Item.useStyle = ItemUseStyleID.Shoot; Item.knockBack = 6; Item.value = Item.buyPrice(platinum: 20); Item.rare = ModContent.RarityType(); Item.autoReuse = true; Item.noMelee = true; Item.shoot = ProjectileID.PurificationPowder; Item.shootSpeed = 50f; Item.useAmmo = AmmoID.None; } public override bool Shoot(Player player, Terraria.DataStructures.EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockBack) { // Shoot every projectile from vanilla Terraria magic weapons at once. int[] projectiles = new int[] { // Pre-Hardmode Magic Weapons ProjectileID.WandOfSparkingSpark, ProjectileID.AmethystBolt, ProjectileID.TopazBolt, ProjectileID.SapphireBolt, ProjectileID.EmeraldBolt, ProjectileID.RubyBolt, ProjectileID.DiamondBolt, ProjectileID.AmberBolt, ProjectileID.VilethornBase, ProjectileID.VilethornTip, ProjectileID.Bee, ProjectileID.WaterStream, ProjectileID.BookOfSkullsSkull, ProjectileID.DemonScythe, ProjectileID.ThunderSpear, ProjectileID.FlowerPetal, ProjectileID.Flamelash, ProjectileID.MagicMissile, // Hardmode Magic Weapons ProjectileID.SkyFracture, ProjectileID.CrystalShard, ProjectileID.CrystalStorm, ProjectileID.CursedFlameFriendly, ProjectileID.GoldenShowerFriendly, //ProjectileID.CrystalSerpent, ProjectileID.Meteor1, ProjectileID.Meteor2, ProjectileID.Meteor3, ProjectileID.RainbowRodBullet, //ProjectileID.MagicalHarp, ProjectileID.IceBlock, ProjectileID.RainCloudRaining, ProjectileID.PoisonFang, ProjectileID.VenomFang, ProjectileID.NettleBurstLeft, ProjectileID.NettleBurstRight, //ProjectileID.LeafBlowerLeaf, ProjectileID.ShadowBeamFriendly, ProjectileID.SpectreWrath, ProjectileID.InfernoFriendlyBolt, ProjectileID.MagnetSphereBall, ProjectileID.MagnetSphereBolt, ProjectileID.RainbowFront, ProjectileID.RainbowBack, ProjectileID.NorthPoleSnowflake, ProjectileID.Blizzard, ProjectileID.HeatRay, ProjectileID.LaserMachinegunLaser, ProjectileID.ChargedBlasterOrb, ProjectileID.Bubble, ProjectileID.NightBeam, ProjectileID.LightBeam, ProjectileID.LunarFlare, ProjectileID.NebulaArcanum, ProjectileID.NebulaBlaze1, ProjectileID.NebulaBlaze2, ProjectileID.LastPrismLaser, ProjectileID.ShadowFlame, ProjectileID.ToxicFlask, ProjectileID.BookStaffShot, // Special/Event Magic Weapons ProjectileID.FlaironBubble, ProjectileID.UnholyTridentFriendly, ProjectileID.RainFriendly, ProjectileID.IceSickle, ProjectileID.FrostBoltStaff, ProjectileID.CrystalLeafShot, ProjectileID.Spark, ProjectileID.BeeArrow, ProjectileID.Wasp, ProjectileID.DD2PhoenixBowShot, ProjectileID.MonkStaffT1, ProjectileID.MonkStaffT2, ProjectileID.MonkStaffT3, }; foreach (int projectileType in projectiles) { Terraria.Projectile.NewProjectile(source, position, velocity, projectileType, damage, knockBack, player.whoAmI); } return false; // return false to prevent tModLoader from shooting the default projectile } public override Vector2? HoldoutOffset() { return new Vector2(2f, -2f); } public override void ModifyShootStats(Player player, ref Vector2 position, ref Vector2 velocity, ref int type, ref int damage, ref float knockback) { Vector2 muzzleOffset = Vector2.Normalize(velocity) * 25f; if (Collision.CanHit(position, 0, 0, position + muzzleOffset, 0, 0)) { position += muzzleOffset; } } } }