working arcane missle

This commit is contained in:
2022-12-14 23:45:26 +01:00
parent 4a0f37f652
commit eb1bf9014d
4 changed files with 48 additions and 9 deletions
+11 -3
View File
@@ -4,6 +4,7 @@ using Terraria.GameContent.ItemDropRules;
using Terraria.ID; using Terraria.ID;
using Terraria.ModLoader; using Terraria.ModLoader;
using YHTMod.Items; using YHTMod.Items;
using YHTMod.Items.ArcaneMissle;
namespace YHTMod.Changes; namespace YHTMod.Changes;
@@ -14,11 +15,18 @@ public class NpcLoot : GlobalNPC
int id = npc.type; int id = npc.type;
if (NPCID.Sets.CountsAsCritter[id]) { if (NPCID.Sets.CountsAsCritter[id]) {
npcLoot.Add(ItemDropRule.Common(ModContent.ItemType<MithrilPebbleOfPigSmiting>(), 400, 1, 1)); npcLoot.Add(ItemDropRule.Common(ModContent.ItemType<MithrilPebbleOfPigSmiting>(), 400));
} }
if (NPCID.Plantera == id) { switch (id) {
npcLoot.Add(ItemDropRule.Common(ItemID.ChlorophyteOre, 1, 60, 80)); case NPCID.Plantera:
npcLoot.Add(ItemDropRule.Common(ItemID.ChlorophyteOre, 1, 60, 80));
break;
case NPCID.Tim:
npcLoot.Add(ItemDropRule.Common(ModContent.ItemType<ArcaneMissle>()));
break;
} }
} }
} }
+7 -2
View File
@@ -1,5 +1,6 @@
using Terraria; using Terraria;
using Terraria.GameContent.Creative; using Terraria.GameContent.Creative;
using Terraria.ID;
using Terraria.ModLoader; using Terraria.ModLoader;
namespace YHTMod.Items.ArcaneMissle; namespace YHTMod.Items.ArcaneMissle;
@@ -8,7 +9,10 @@ public class ArcaneMissle : ModItem {
public override void SetStaticDefaults() { public override void SetStaticDefaults() {
DisplayName.SetDefault("Arcane Missle"); 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; CreativeItemSacrificesCatalog.Instance.SacrificeCountNeededByItemId[Type] = 1;
} }
@@ -17,6 +21,7 @@ public class ArcaneMissle : ModItem {
Item.height = 64; Item.height = 64;
Item.accessory = true; Item.accessory = true;
Item.damage = 10; Item.damage = 10;
Item.rare = ItemRarityID.LightRed;
Item.DamageType = DamageClass.Magic; Item.DamageType = DamageClass.Magic;
Item.noMelee = true; Item.noMelee = true;
Item.noUseGraphic = true; Item.noUseGraphic = true;
@@ -24,7 +29,7 @@ public class ArcaneMissle : ModItem {
public override void UpdateAccessory(Player player, bool hideVisual) { public override void UpdateAccessory(Player player, bool hideVisual) {
player.GetModPlayer<YhtPlayer>().arcaneMissle = true; player.GetModPlayer<YhtPlayer>().arcaneMissle = Item.damage;
base.UpdateAccessory(player, hideVisual); base.UpdateAccessory(player, hideVisual);
} }
+28 -2
View File
@@ -1,4 +1,6 @@
using System;
using Terraria; using Terraria;
using Terraria.ID;
using Terraria.ModLoader; using Terraria.ModLoader;
namespace YHTMod.Items.ArcaneMissle; namespace YHTMod.Items.ArcaneMissle;
@@ -10,10 +12,34 @@ public class ArcaneMissleBehavior : GlobalNPC {
base.OnHitByProjectile(npc, projectile, damage, knockback, false); base.OnHitByProjectile(npc, projectile, damage, knockback, false);
return; return;
} }
if (Main.netMode == NetmodeID.Server) {
return;
}
Player player = Main.LocalPlayer; Player player = Main.LocalPlayer;
if (player.GetModPlayer<YhtPlayer>().arcaneMissle && projectile.DamageType == DamageClass.Magic) { if (player.GetModPlayer<YhtPlayer>().arcaneMissle != 0 && projectile.DamageType == DamageClass.Magic) {
// player just crit with magic weapon while having arcane missle accessory equipped // 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<YhtPlayer>().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); base.OnHitByProjectile(npc, projectile, damage, knockback, true);
+2 -2
View File
@@ -4,11 +4,11 @@ namespace YHTMod;
public class YhtPlayer : ModPlayer { public class YhtPlayer : ModPlayer {
public bool arcaneMissle = false; public int arcaneMissle = 0;
public override void ResetEffects() { public override void ResetEffects() {
this.arcaneMissle = false; this.arcaneMissle = 0;
base.ResetEffects(); base.ResetEffects();
} }