【Terraria Mod】 #3 弓を追加する

tModLoaderの画像

今回は弓を作ります!

1から作るのは大変そうなので、前回のソースをそのまま使いますね。

ソースコードを剣から弓に変更する

using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Microsoft.Xna.Framework;


namespace test.Items.Ranged
{
	public class yumi : ModItem
	{
		public override void SetStaticDefaults() 
		{
			// DisplayName.SetDefault("ken"); // By default, capitalization in classnames will add spaces to the display name. You can customize the display name here by uncommenting this line.
			Tooltip.SetDefault("This is a ranged.");
			DisplayName.SetDefault("Yumi");
		}

		public override void SetDefaults() 
		{
			item.damage = 50;
			item.ranged = true;
			item.noMelee = true;
			item.width = 40;
			item.height = 40;
			item.maxStack = 999;
			item.useTime = 30;
			item.useAnimation = 30;
			item.useStyle = ItemUseStyleID.HoldingOut;
			item.shoot = ProjectileID.WoodenArrowFriendly;
			item.useAmmo = AmmoID.Arrow;
			item.shootSpeed = 10f;
			item.knockBack = 6;
			item.value = 10000;
			item.rare = ItemRarityID.LightPurple;
			item.UseSound = SoundID.Item1;
			item.autoReuse = true;
		}

		public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
		{
			Projectile.NewProjectile(position.X, position.Y, speedX, speedY, ProjectileID.FrostburnArrow, damage, knockBack, player.whoAmI, 0f, 0f);
			Projectile.NewProjectile(position.X, position.Y - 10, speedX, speedY, ProjectileID.FrostburnArrow, damage, knockBack, player.whoAmI, 0f, 0f);
			Projectile.NewProjectile(position.X, position.Y + 10, speedX, speedY, ProjectileID.FrostburnArrow, damage, knockBack, player.whoAmI, 0f, 0f);
			Projectile.NewProjectile(position.X, position.Y - 20, speedX, speedY, ProjectileID.FrostburnArrow, damage, knockBack, player.whoAmI, 0f, 0f);
			Projectile.NewProjectile(position.X, position.Y + 20, speedX, speedY, ProjectileID.FrostburnArrow, damage, knockBack, player.whoAmI, 0f, 0f);
			return false;
		}

		public override void AddRecipes() 
		{
			ModRecipe recipe = new ModRecipe(mod);
			recipe.AddIngredient(ItemID.DirtBlock, 10);
			recipe.AddTile(TileID.WorkBenches);
			recipe.SetResult(this);
			recipe.AddRecipe();
		}
	}
}

前回から追加&書き換えした部分はハイライトしています。

新しく追加した項目を簡単に説明します。それ以外の項目は前回の記事を参考にしてみてください。

コードの解説

コード内容
using Terraria;
using Microsoft.Xna.Framework;
おまじないです。
そのまま書いておきましょう。
DisplayName.SetDefault("Yumi");ゲーム上で実際に表示される名前を設定する。
item.maxStack = 999;スタックできるアイテムの最大数を設定する。
item.useStyle = ItemUseStyleID.HoldingOut;前回と同じで、使用時のスタイルを設定する。
ItemUseStyleIDでスタイルIDが定義されています。
item.shoot = ProjectileID.WoodenArrowFriendly;発射体のIDを設定する。
ProjectileIDで発射体のIDが定義されています。
今回の場合は、「WoodenArrow」を使用する矢として設定しています。
item.useAmmo = AmmoID.Arrow;消費する弾薬アイテムを指定する。
AmmoIDで弾薬IDが定義されています。
今回は矢を指定しています。
item.shootSpeed = 10f;発射体が持つピクセル単位の移動速度を設定する。
基本は10fです。
public override bool Shoot(...)発射体の設定をする。
自作した発射体を使用する場合などにも利用します。
Projectile.NewProjectile(...)発射体を追加する。
5番目の引数で発射体のIDを指定すると、実際に発射する矢を追加できます。
今回は「FrostburnArrow」を5個分追加しました。

これでコードを弓仕様に書き換えられたと思います。早速、使ってみましょう。

タイトル画面 > Mod Sources > Build + Reload を忘れずに!

こんな感じになりました。

矢が当てやすくなって嬉しいです。

まとめ

「WoodenArrow」を1本消費して「FrostburnArrow」を一度に5本放つというチート武器ができてしまいました。

他にも改造できそうだったので、またやってみます。

次回は魔法武器を作ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA