tModLoader Double Shot bow isn't working

ChadBroski01

Terrarian
So, I'm getting an error message that says "error CS 0115: TestBow.Shoot(Player, Item, ref Vector2, ref float, ref float, ref int, ref int, ref float) No suitable method to override.

Here is my code:

namespace CoolSword.Items
{
class TestBow : ModItem
{

public override void SetStaticDefaults()
{
DisplayName.SetDefault("What the heck");
Tooltip.SetDefault("maybe");
}

public override void SetDefaults()
{
Item.damage = 29;
Item.DamageType = DamageClass.Melee;
Item.width = 40;
Item.height = 40;
Item.useTime = 17;
Item.useAnimation = 25;
Item.useStyle = 1;
Item.knockBack = 11;
Item.value = 10000;
Item.rare = 3;
Item.UseSound = SoundID.Item1;
Item.autoReuse = true;
Item.shoot = ProjectileID.WoodenArrowFriendly;
Item.shootSpeed = 9f;
Item.useAmmo = AmmoID.Arrow;
}

public override void AddRecipes()
{
Recipe recipe = CreateRecipe();
recipe.AddIngredient(ItemID.DirtBlock, 1);
recipe.AddTile(TileID.Anvils);
recipe.Register();
}

public override bool Shoot(Player player, Item item, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
{
Vector2 offset = new Vector2(speedX * 3, speedY * 3);
position += offset;
for (var i = 0; i < 2; i++)
{
Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedBy(MathHelper.ToRadians(20));
Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI);
}
return false;
}
}
}
 
Shoot() and Projectile.NewProjectile have both changed in 1.4. They require a source.

public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockback)

Projectile.NewProjectile(source, position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI);
 
Well, now I have a new error. It says "error CS0246: The type or namespace name 'EntitySource_ItemUse_WithAmmo' could not be found (are you missing a using directive or an assembly reference?)

The new code is below

C#:
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Microsoft.Xna.Framework;

namespace CoolSword.Items
{
    class TestBow : ModItem
    {

        public override void SetStaticDefaults()
        {
            DisplayName.SetDefault("What the heck");
            Tooltip.SetDefault("maybe");
        }

        public override void SetDefaults()
        {
            Item.damage = 29;
            Item.DamageType = DamageClass.Melee;
            Item.width = 40;
            Item.height = 40;
            Item.useTime = 17;
            Item.useAnimation = 25;
            Item.useStyle = 1;
            Item.knockBack = 11;
            Item.value = 10000;
            Item.rare = 3;
            Item.UseSound = SoundID.Item1;
            Item.autoReuse = true;
            Item.shoot = ProjectileID.WoodenArrowFriendly;
            Item.shootSpeed = 9f;
            Item.useAmmo = AmmoID.Arrow;
        }

        public override void AddRecipes()
        {
            Recipe recipe = CreateRecipe();
            recipe.AddIngredient(ItemID.DirtBlock, 1);
            recipe.AddTile(TileID.Anvils);
            recipe.Register();
        }
        public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockback)
        {
            Vector2 offset = new Vector2(speedX * 3, speedY * 3);
            position += offset;
            for (var i = 0; i < 2; i++)
            {
                Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedBy(MathHelper.ToRadians(20));
                Projectile.NewProjectile(source, position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI);
            } return false;
        }
    }

}
 
You need using Terraria.DataStructures;
You should really install VS2022, it's free and it can fix these types of errors for you.
 
Well, I updated to VS2022 and fixed all the errors (and defined some variables that were undefined for some reason), but there's another problem. The bow now only shoots towards the bottom-right, regardless of the player's cursor.

C#:
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Microsoft.Xna.Framework;
using Terraria.DataStructures;

namespace CoolSword.Items
{
    class TestBow : ModItem
    {

        public override void SetStaticDefaults()
        {
            DisplayName.SetDefault("What the heck");
            Tooltip.SetDefault("maybe");
        }

        public override void SetDefaults()
        {
            Item.damage = 29;
            Item.DamageType = DamageClass.Melee;
            Item.width = 40;
            Item.height = 40;
            Item.useTime = 17;
            Item.useAnimation = 25;
            Item.useStyle = 1;
            Item.knockBack = 11;
            Item.value = 10000;
            Item.rare = 3;
            Item.UseSound = SoundID.Item1;
            Item.autoReuse = true;
            Item.shoot = ProjectileID.WoodenArrowFriendly;
            Item.shootSpeed = 9f;
            Item.useAmmo = AmmoID.Arrow;
        }
        int speedX = 100;
        int speedY = 100;

        public override void AddRecipes()
        {
            Recipe recipe = CreateRecipe();
            recipe.AddIngredient(ItemID.DirtBlock, 1);
            recipe.AddTile(TileID.Anvils);
            recipe.Register();
        }
        public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockback)
        {
            Vector2 offset = new Vector2(speedX * 3, speedY * 3);
            position += offset;
            for (var i = 0; i < 2; i++)
            {
                Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedBy(MathHelper.ToRadians(20));
                Projectile.NewProjectile(source, position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockback, player.whoAmI);
            } return false;
        }
    }

}
 
So you're making perturbedSpeed equal to basically (100,100) which is causing your problem. Giving the projectile a velocity of 100,100 is down and to the right. Try this, I simplified your code. I removed speedX and speedY to use the velocity instead, and I removed the offset, I wasn't sure what you were trying to do with an offset of 300f, 300f.

C#:
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Microsoft.Xna.Framework;
using Terraria.DataStructures;

namespace CoolSword.Items
{
    class TestBow : ModItem
    {

        public override void SetStaticDefaults()
        {
            DisplayName.SetDefault("What the heck");
            Tooltip.SetDefault("maybe");
        }

        public override void SetDefaults()
        {
            Item.damage = 29;
            Item.DamageType = DamageClass.Melee;
            Item.width = 40;
            Item.height = 40;
            Item.useTime = 17;
            Item.useAnimation = 25;
            Item.useStyle = 1;
            Item.knockBack = 11;
            Item.value = 10000;
            Item.rare = 3;
            Item.UseSound = SoundID.Item1;
            Item.autoReuse = true;
            Item.shoot = ProjectileID.WoodenArrowFriendly;
            Item.shootSpeed = 9f;
            Item.useAmmo = AmmoID.Arrow;
        }

        public override void AddRecipes()
        {
            Recipe recipe = CreateRecipe();
            recipe.AddIngredient(ItemID.DirtBlock, 1);
            recipe.AddTile(TileID.Anvils);
            recipe.Register();
        }
        public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockback)
        {
            for (var i = 0; i < 2; i++)
            {
                Vector2 perturbedSpeed = velocity.RotatedBy(MathHelper.ToRadians(20));
                Projectile.NewProjectile(source, position, perturbedSpeed, type, damage, knockback, player.whoAmI);
            }
        return false;
        }
    }
}
 
Back
Top Bottom