public static void CopperProc(FargoSoulsPlayer modPlayer, NPC target) { if (modPlayer.Player.GetToggleValue("Copper") && modPlayer.CopperProcCD == 0) { target.AddBuff(BuffID.Electrified, 180); int dmg = 20; int maxTargets = 1; int cdLength = 300; if (modPlayer.TerraForce) { dmg = 100; maxTargets = 10; cdLength = 200; } List <int> npcIndexes = new List <int>(); float closestDist = 500f; NPC closestNPC; for (int i = 0; i < maxTargets; i++) { closestNPC = null; //find closest npc to target that has not been chained to yet for (int j = 0; j < Main.maxNPCs; j++) { NPC npc = Main.npc[j]; if (npc.active && npc.whoAmI != target.whoAmI && npc.CanBeChasedBy() && npc.Distance(target.Center) < closestDist && !npcIndexes.Contains(npc.whoAmI) && Collision.CanHitLine(npc.Center, 0, 0, target.Center, 0, 0)) { closestNPC = npc; closestDist = npc.Distance(target.Center); //break; } } if (closestNPC != null) { npcIndexes.Add(closestNPC.whoAmI); Vector2 ai = closestNPC.Center - target.Center; float ai2 = Main.rand.Next(100); Vector2 velocity = Vector2.Normalize(ai) * 20; Projectile p = FargoSoulsUtil.NewProjectileDirectSafe(modPlayer.Player.GetSource_ItemUse(modPlayer.Player.HeldItem), target.Center, velocity, ModContent.ProjectileType <CopperLightning>(), FargoSoulsUtil.HighestDamageTypeScaling(modPlayer.Player, dmg), 0f, modPlayer.Player.whoAmI, ai.ToRotation(), ai2); } else { break; } target = closestNPC; } modPlayer.CopperProcCD = cdLength; } }
public override void AI() { if (!yoyosSpawned && projectile.owner == Main.myPlayer) { int maxYoyos = 5; for (int i = 0; i < maxYoyos; i++) { float radians = (360f / (float)maxYoyos) * i * (float)(Math.PI / 180); Projectile yoyo = FargoSoulsUtil.NewProjectileDirectSafe(projectile.Center, Vector2.Zero, ModContent.ProjectileType <BlenderOrbital>(), projectile.damage, projectile.knockBack, projectile.owner, i, radians); yoyo.localAI[0] = projectile.identity; } yoyosSpawned = true; } if (soundtimer > 0) { soundtimer--; } if (Main.player[projectile.owner].HeldItem.type == ModContent.ItemType <Items.Weapons.SwarmDrops.Blender>()) { projectile.damage = Main.player[projectile.owner].GetWeaponDamage(Main.player[projectile.owner].HeldItem); projectile.knockBack = Main.player[projectile.owner].GetWeaponKnockback(Main.player[projectile.owner].HeldItem, Main.player[projectile.owner].HeldItem.knockBack); } }
public override void AI() { if (!yoyosSpawned && Projectile.owner == Main.myPlayer) { float localAI1 = 0; for (int i = 0; i < Main.maxProjectiles; i++) { if (Main.projectile[i].active && Main.projectile[i].friendly && Main.projectile[i].owner == Projectile.owner && Main.projectile[i].type == ModContent.ProjectileType <BlenderOrbital>()) { localAI1 = Main.projectile[i].localAI[1] + MathHelper.Pi; break; } } int maxYoyos = 5; for (int i = 0; i < maxYoyos; i++) { float radians = (360f / (float)maxYoyos) * i * (float)(Math.PI / 180); Projectile yoyo = FargoSoulsUtil.NewProjectileDirectSafe(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.Zero, ModContent.ProjectileType <BlenderOrbital>(), Projectile.damage, Projectile.knockBack, Projectile.owner, i, radians); if (yoyo != null) { yoyo.localAI[0] = Projectile.identity; yoyo.localAI[1] = localAI1; } } yoyosSpawned = true; } if (soundtimer > 0) { soundtimer--; } if (Main.player[Projectile.owner].HeldItem.type == ModContent.ItemType <Items.Weapons.SwarmDrops.Blender>()) { Projectile.damage = Main.player[Projectile.owner].GetWeaponDamage(Main.player[Projectile.owner].HeldItem); Projectile.knockBack = Main.player[Projectile.owner].GetWeaponKnockback(Main.player[Projectile.owner].HeldItem, Main.player[Projectile.owner].HeldItem.knockBack); } }
public static void CobaltHurt(Player player, double damage) { if (player.GetToggleValue("Cobalt") && player.whoAmI == Main.myPlayer) { FargoSoulsPlayer modPlayer = player.GetModPlayer <FargoSoulsPlayer>(); int baseDamage = 50; int multiplier = 2; int cap = 150; if (modPlayer.EarthForce) { baseDamage = 50; multiplier = 4; cap = 250; } if (modPlayer.TerrariaSoul) { baseDamage = 250; multiplier = 5; cap = 500; } int explosionDamage = baseDamage + (int)damage * multiplier; if (explosionDamage > cap) { explosionDamage = cap; } Projectile p = FargoSoulsUtil.NewProjectileDirectSafe(player.GetSource_Accessory(modPlayer.CobaltEnchantItem), player.Center, Vector2.Zero, ModContent.ProjectileType <Explosion>(), (int)(explosionDamage * player.ActualClassDamage(DamageClass.Melee)), 0f, Main.myPlayer); if (p != null) { p.GetGlobalProjectile <FargoSoulsGlobalProjectile>().CanSplit = false; } } }