From eb1bf9014d4e03e0713c06364b872c957c965ebb Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Wed, 14 Dec 2022 23:45:26 +0100 Subject: [PATCH] working arcane missle --- Changes/NPCLoot.cs | 14 +++++++--- Items/ArcaneMissle/ArcaneMissle.cs | 9 +++++-- Items/ArcaneMissle/ArcaneMissleBehavior.cs | 30 ++++++++++++++++++++-- YhtPlayer.cs | 4 +-- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/Changes/NPCLoot.cs b/Changes/NPCLoot.cs index bdaeb9c..0ef874c 100644 --- a/Changes/NPCLoot.cs +++ b/Changes/NPCLoot.cs @@ -4,6 +4,7 @@ using Terraria.GameContent.ItemDropRules; using Terraria.ID; using Terraria.ModLoader; using YHTMod.Items; +using YHTMod.Items.ArcaneMissle; namespace YHTMod.Changes; @@ -14,11 +15,18 @@ public class NpcLoot : GlobalNPC int id = npc.type; if (NPCID.Sets.CountsAsCritter[id]) { - npcLoot.Add(ItemDropRule.Common(ModContent.ItemType(), 400, 1, 1)); + npcLoot.Add(ItemDropRule.Common(ModContent.ItemType(), 400)); } - if (NPCID.Plantera == id) { - npcLoot.Add(ItemDropRule.Common(ItemID.ChlorophyteOre, 1, 60, 80)); + switch (id) { + case NPCID.Plantera: + npcLoot.Add(ItemDropRule.Common(ItemID.ChlorophyteOre, 1, 60, 80)); + break; + case NPCID.Tim: + npcLoot.Add(ItemDropRule.Common(ModContent.ItemType())); + break; } + + } } diff --git a/Items/ArcaneMissle/ArcaneMissle.cs b/Items/ArcaneMissle/ArcaneMissle.cs index f8ccf74..139e783 100644 --- a/Items/ArcaneMissle/ArcaneMissle.cs +++ b/Items/ArcaneMissle/ArcaneMissle.cs @@ -1,5 +1,6 @@ using Terraria; using Terraria.GameContent.Creative; +using Terraria.ID; using Terraria.ModLoader; namespace YHTMod.Items.ArcaneMissle; @@ -8,7 +9,10 @@ public class ArcaneMissle : ModItem { public override void SetStaticDefaults() { DisplayName.SetDefault("Arcane Missle"); - Tooltip.SetDefault("Magic damage crits have a chance to shoot a homing arcane missle"); + Tooltip.SetDefault( + "Magical projectile crits shoot a homing arcane missle\n" + + "Arcane missles cannot crit" + ); CreativeItemSacrificesCatalog.Instance.SacrificeCountNeededByItemId[Type] = 1; } @@ -17,6 +21,7 @@ public class ArcaneMissle : ModItem { Item.height = 64; Item.accessory = true; Item.damage = 10; + Item.rare = ItemRarityID.LightRed; Item.DamageType = DamageClass.Magic; Item.noMelee = true; Item.noUseGraphic = true; @@ -24,7 +29,7 @@ public class ArcaneMissle : ModItem { public override void UpdateAccessory(Player player, bool hideVisual) { - player.GetModPlayer().arcaneMissle = true; + player.GetModPlayer().arcaneMissle = Item.damage; base.UpdateAccessory(player, hideVisual); } diff --git a/Items/ArcaneMissle/ArcaneMissleBehavior.cs b/Items/ArcaneMissle/ArcaneMissleBehavior.cs index 591994d..5b7c174 100644 --- a/Items/ArcaneMissle/ArcaneMissleBehavior.cs +++ b/Items/ArcaneMissle/ArcaneMissleBehavior.cs @@ -1,4 +1,6 @@ +using System; using Terraria; +using Terraria.ID; using Terraria.ModLoader; namespace YHTMod.Items.ArcaneMissle; @@ -10,10 +12,34 @@ public class ArcaneMissleBehavior : GlobalNPC { base.OnHitByProjectile(npc, projectile, damage, knockback, false); return; } + + if (Main.netMode == NetmodeID.Server) { + return; + } + Player player = Main.LocalPlayer; - if (player.GetModPlayer().arcaneMissle && projectile.DamageType == DamageClass.Magic) { - // player just crit with magic weapon while having arcane missle accessory equipped + if (player.GetModPlayer().arcaneMissle != 0 && projectile.DamageType == DamageClass.Magic) { + // player just crit with magic weapon while having arcane missle accessory + Projectile proj = Projectile.NewProjectileDirect( + projectile.GetSource_FromThis("arcaneMissle"), + Main.LocalPlayer.position, + npc.position.DirectionFrom(Main.LocalPlayer.position), + ProjectileID.MagicMissile, + player.GetModPlayer().arcaneMissle, + 0, + Main.LocalPlayer.whoAmI + ); + proj.friendly = true; + proj.hostile = false; + proj.timeLeft = 300; + proj.maxPenetrate = 1; + proj.tileCollide = false; + proj.DamageType = DamageClass.Magic; + proj.aiStyle = ProjAIStyleID.MagicMissile; + + // Prevent crits for the missles + proj.CritChance = Int32.MinValue; } base.OnHitByProjectile(npc, projectile, damage, knockback, true); diff --git a/YhtPlayer.cs b/YhtPlayer.cs index 0e71015..344c6df 100644 --- a/YhtPlayer.cs +++ b/YhtPlayer.cs @@ -4,11 +4,11 @@ namespace YHTMod; public class YhtPlayer : ModPlayer { - public bool arcaneMissle = false; + public int arcaneMissle = 0; public override void ResetEffects() { - this.arcaneMissle = false; + this.arcaneMissle = 0; base.ResetEffects(); }