public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { projectile.aiStyle = -1; double mul = 1.00; JavelinProj.JavelinOnHit(target, projectile, ref mul); damage = (int)(damage * mul); int foundsticker = 0; for (int i = 0; i < Main.maxProjectiles; i++) // Loop all projectiles { Projectile currentProjectile = Main.projectile[i]; if (i != projectile.whoAmI && // Make sure the looped projectile is not the current javelin currentProjectile.active && // Make sure the projectile is active currentProjectile.owner == Main.myPlayer && // Make sure the projectile's owner is the client's player currentProjectile.type == projectile.type && // Make sure the projectile is of the same type as this javelin currentProjectile.modProjectile is JavelinProj JavelinProjz && // Use a pattern match cast so we can access the projectile like an ExampleJavelinProjectile JavelinProjz.stickin == target.whoAmI) { foundsticker += 1; //projectile.Kill(); } } if (foundsticker < maxstick) { if (projectile.penetrate > 1) { offset = (target.Center - projectile.Center); stickin = target.whoAmI; projectile.netUpdate = true; } } }
public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { double blank = 1.0; JavelinProj.JavelinOnHit(target, projectile, ref blank); }
public override void AI() { projectile.localAI[0] -= 1f; float facingleft = projectile.velocity.X > 0 ? 1f : -1f; projectile.rotation = ((float)Math.Atan2((double)projectile.velocity.Y, (double)projectile.velocity.X) + 1.57f) + (float)((Math.PI) * -0.25f); if (projectile.ignoreWater == true) { projectile.ignoreWater = false; if (Main.dedServ) { Texture2D texture = ModContent.GetTexture(JavelinProj.tex[(int)projectile.ai[1]]); int xx = (texture.Width - (int)(projectile.width)) / 2; int yy = (texture.Height - (int)(projectile.height)) / 2; projectile.position.X -= (xx / 2); projectile.position.Y -= (yy / 2); projectile.width = texture.Width / 2; projectile.height = texture.Height / 2; } } if (stickin > -1) { NPC himz = Main.npc[stickin]; projectile.tileCollide = false; if ((himz != null && himz.active) && projectile.penetrate > 0) { projectile.Center = (himz.Center - offset) - (projectile.velocity * 0.2f); if (projectile.timeLeft < 100) { projectile.penetrate -= 1; projectile.timeLeft = 100 + maxStickTime; double damageperc = 0.75; if (Main.player[projectile.owner].GetModPlayer <SGAPlayer>().JavelinBaseBundle) { damageperc += 0.25; } JavelinProj.JavelinOnHit(himz, projectile, ref damageperc); int theDamage = (int)(projectile.damage * damageperc); himz.StrikeNPC(theDamage, 0, 1); Main.player[projectile.owner].addDPS(theDamage); if (Main.netMode != NetmodeID.SinglePlayer) { NetMessage.SendData(MessageID.StrikeNPC, -1, -1, null, himz.whoAmI, (float)(projectile.damage * damageperc), 16f, (float)1, 0, 0, 0); } } } else { projectile.Kill(); } } else { if (projectile.ai[1] == (int)JavelinType.CrimsonCatastrophe)//Sanguine Bident { if (stickin < 0) { for (float i = 2f; i > 0.25f; i -= Main.rand.NextFloat(0.25f, 1.25f)) { Vector2 position = projectile.position + Vector2.Normalize(projectile.velocity) * Main.rand.NextFloat(0f, 48f); position -= new Vector2(projectile.width, projectile.height) / 2f; Dust dust = Dust.NewDustDirect(position, projectile.height, projectile.width, DustID.Fire, 0, 0, 200, Scale: 0.5f); dust.velocity = new Vector2((projectile.velocity.X / 3f) * i, projectile.velocity.Y * i); dust = Dust.NewDustDirect(position, projectile.height, projectile.width, DustID.Blood, 0, 0, 200, Scale: 0.5f); dust.velocity = new Vector2(projectile.velocity.X * i, (projectile.velocity.Y / 3f) * i); } } } else { if (Main.rand.NextBool(3)) { Dust dust = Dust.NewDustDirect(projectile.position, projectile.height, projectile.width, DustID.LunarOre, projectile.velocity.X * .2f, projectile.velocity.Y * .2f, 200, Scale: 0.5f); dust.velocity += projectile.velocity * 0.3f; dust.velocity *= 0.2f; } } if (projectile.ai[1] == (int)JavelinType.CrimsonCatastrophe) { if (projectile.aiStyle != 0) { float rotvalue = projectile.timeLeft / 300f; projectile.velocity = projectile.velocity.RotatedBy(((projectile.aiStyle + 100f) / 1200f) * -rotvalue); } return; } if (projectile.velocity.Y < 16f) { if (projectile.aiStyle < 1) { projectile.velocity = projectile.velocity + new Vector2(0, 0.1f); } } } }
public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { JavelinProj.JavelinOnHit(target, projectile); }
public override void AI() { float facingleft = projectile.velocity.X > 0 ? 1f : -1f; projectile.rotation = ((float)Math.Atan2((double)projectile.velocity.Y, (double)projectile.velocity.X) + 1.57f) + (float)((Math.PI) * -0.25f); Texture2D texture = ModContent.GetTexture(JavelinProj.tex[(int)projectile.ai[1]]); if (!hitboxchange) { hitboxchange = true; int xx = (texture.Width - (int)(projectile.width)) / 2; int yy = (texture.Height - (int)(projectile.height)) / 2; projectile.position.X -= (xx / 2); projectile.position.Y -= (yy / 2); projectile.width = texture.Width / 2; projectile.height = texture.Height / 2; } if (stickin > -1) { NPC himz = Main.npc[stickin]; projectile.tileCollide = false; if ((himz != null && himz.active) && projectile.penetrate > 0) { projectile.Center = (himz.Center - offset) - (projectile.velocity * 0.2f); if (projectile.timeLeft < 100) { projectile.penetrate -= 1; projectile.timeLeft = 200; JavelinProj.JavelinOnHit(himz, projectile); double damageperc = 0.75; if (Main.player[projectile.owner].GetModPlayer <SGAPlayer>().JavelinBaseBundle) { damageperc += 0.25; } himz.StrikeNPC((int)(projectile.damage * damageperc), 0, 1); } } else { projectile.Kill(); } } else { if (Main.rand.NextBool(3)) { Dust dust = Dust.NewDustDirect(projectile.position, projectile.height, projectile.width, DustID.LunarOre, projectile.velocity.X * .2f, projectile.velocity.Y * .2f, 200, Scale: 0.5f); dust.velocity += projectile.velocity * 0.3f; dust.velocity *= 0.2f; } if (projectile.velocity.Y < 16f) { if (projectile.aiStyle < 1) { projectile.velocity = projectile.velocity + new Vector2(0, 0.1f); } } } }