public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); if (projectile.owner == Main.myPlayer) { modTarget.gamblerDungeonCardCount++; if (modTarget.gamblerDungeonCardCount >= 3) { modTarget.gamblerDungeonCardCount = 0; OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 15, true, 1.3f, 1f, 8f, true, true, false, 0, 0, true); Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45); int projType = ProjectileType <Gambler.Projectiles.DungeonCardProjAlt>(); float scale = 10f - (Main.rand.NextFloat() * 2.5f); Vector2 vel = (projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20))); vel.Normalize(); vel *= scale; bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; int newProjInt = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, (int)(projectile.damage * 5), 0.1f, projectile.owner), dummy); Projectile newProj = Main.projectile[newProjInt]; newProj.ai[1] = (int)target.whoAmI; newProj.netUpdate = true; } } if (modPlayer.gamblerElementalLens) { target.AddBuff(31, 60 * 3); // Confused } }
public override void GamblerShoot(Player player, Vector2 position, float speedX, float speedY, int type, int damage, float knockBack, bool dummy = false) { int projType = ProjectileType <Gambler.Projectiles.DungeonCardProj>(); bool found = false; for (int l = 0; l < Main.projectile.Length; l++) { Projectile proj = Main.projectile[l]; if (proj.active && proj.type == projType && proj.owner == player.whoAmI) { found = true; break; } } if (!found) { for (int k = 0; k < Main.npc.Length; k++) { if (Main.npc[k].active) { OrchidModGlobalNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModGlobalNPC>(); modTarget.gamblerDungeonCardCount = 0; } } } int newProj = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(position.X, position.Y, speedX, speedY, projType, damage, knockBack, player.whoAmI), dummy); Main.projectile[newProj].ai[1] = Main.rand.Next(4); Main.projectile[newProj].netUpdate = true; Main.PlaySound(2, (int)player.Center.X, (int)player.Center.Y, 8); }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { if (!(target.boss || target.type == NPCID.TargetDummy) && target.knockBackResist > 0f) { target.AddBuff(mod.BuffType("SlimeSlow"), 90 * (alchProj.nbElements * 2)); } int rand = alchProj.nbElements; rand += alchProj.hasCloud() ? 2 : 0; if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn) { int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements); int proj = ProjectileType <Alchemist.Projectiles.Reactive.SlimeBubbleLava>(); Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20)); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner); } if (modTarget.alchemistFire > 0) { int nb = Main.rand.Next(3) + 3; int dmg = (int)(getSecondaryDamage(player, modPlayer, alchProj.nbElements) * 1.5); int proj = ProjectileType <Alchemist.Projectiles.Fire.HellSlimeFlaskProj>(); for (int i = 0; i < nb; i++) { Vector2 perturbedSpeed = projectile.velocity.RotatedByRandom(MathHelper.ToRadians(15)) * 0.75f; Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 1f, projectile.owner); } } }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { if (alchProj.fireFlask.type != 0) { modTarget.alchemistWater = 60 * 10; } }
public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { Player player = Main.player[projectile.owner]; OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>(); OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); modTarget.alchemistHit = true; SafeOnHitNPC(target, damage, knockback, crit, player, modPlayer); }
public override bool?CanHitNPC(NPC target) { if (target.friendly || target.dontTakeDamage) { return(false); } OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); return(modTarget.shamanSpearDamage <= 0); }
public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { Player player = Main.player[projectile.owner]; OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>(); OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); if (target.type != NPCID.TargetDummy && this.gamblingChipChance > 0) { OrchidModGamblerHelper.addGamblerChip(this.gamblingChipChance, player, modPlayer); } modTarget.gamblerHit = true; SafeOnHitNPC(target, damage, knockback, crit, player, modPlayer); }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { int rand = alchProj.nbElements; if (Main.rand.Next(10) < rand) { int dmg = OrchidModAlchemistHelper.getSecondaryDamage(player, modPlayer, alchProj.nbElements); int proj = ProjectileType <Alchemist.Projectiles.Reactive.AlchemistHive>(); Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20)); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner); } }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { target.AddBuff(BuffID.Poisoned, 60 * 5); int rand = alchProj.nbElements; rand += alchProj.hasCloud() ? 2 : 0; if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn) { int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements); int proj = ProjectileType <Alchemist.Projectiles.Reactive.PoisonBubble>(); Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20)); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner); } }
public override void SafeOnHitNPC(NPC target, OrchidModAlchemistNPC modTarget, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { if (this.projOwner) { if (modPlayer.alchemistCovent && this.nbElements > 2 && this.airFlaskGlobal == null) // Keystone of the Convent { float distance = 500f; bool keystoneCrit = (Main.rand.Next(101) <= modPlayer.alchemistCrit + 4); int keystoneDamage = (int)(22 * (modPlayer.alchemistDamage + player.allDamage - 1f)); int absorbedCount = 0; int spawnProj = ProjectileType <Alchemist.Projectiles.Air.KeystoneOfTheConventProj>(); for (int k = 0; k < Main.maxNPCs; k++) { if (Main.npc[k].active) { Vector2 newMove = Main.npc[k].Center - target.Center; float distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y); if (distanceTo < distance) { OrchidModAlchemistNPC modTargetSecondary = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>(); if (modTargetSecondary.alchemistAir > 0) { modTargetSecondary.alchemistAir = 0; absorbedCount++; newMove /= -10f; Projectile.NewProjectile(Main.npc[k].Center.X, Main.npc[k].Center.Y, newMove.X, newMove.Y, spawnProj, 0, 0f, projectile.owner); } } } } player.ApplyDamageToNPC(target, Main.DamageVar(keystoneDamage * absorbedCount), 0f, player.direction, keystoneCrit); } this.hitNPC = true; OrchidModGlobalNPC modTargetGlobal = target.GetGlobalNPC <OrchidModGlobalNPC>(); this.OnHitNPCFirst(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal); this.OnHitNPCSecond(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal); this.OnHitNPCThird(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal); } }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { if (alchProj.fireFlask.type != 0) { int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements); modTarget.spreadOilFire(target.Center, dmg, Main.player[projectile.owner]); Main.PlaySound(2, (int)target.position.X, (int)target.position.Y, 45); } int rand = alchProj.nbElements; rand += alchProj.hasCloud() ? 2 : 0; if (Main.rand.Next(6) < rand && !alchProj.noCatalyticSpawn) { int dmg = 0; int proj = ProjectileType <Alchemist.Projectiles.Reactive.OilBubble>(); Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20)); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner); } }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { if (!(target.boss || target.type == NPCID.TargetDummy) && target.knockBackResist > 0f) { target.AddBuff(mod.BuffType("SlimeSlow"), 90 * (alchProj.nbElements * 2)); } int rand = alchProj.nbElements; rand += alchProj.hasCloud() ? 2 : 0; rand += player.HasBuff(BuffType <Alchemist.Buffs.KingSlimeFlaskBuff>()) ? 2 : 0; if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn) { int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements); dmg += player.HasBuff(BuffType <Alchemist.Buffs.KingSlimeFlaskBuff>()) ? 5 : 0; int proj = ProjectileType <Alchemist.Projectiles.Reactive.SlimeBubble>(); Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20)); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner); } }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { target.AddBuff(BuffType <Alchemist.Buffs.Debuffs.Attraction>(), 60 * (alchProj.nbElements * 3)); }
public void OnHitNPCThird(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal) { if (this.fireFlaskGlobal != null) { fireFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.fireFlaskGlobal); } if (this.waterFlaskGlobal != null) { waterFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.waterFlaskGlobal); } if (this.natureFlaskGlobal != null) { natureFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.natureFlaskGlobal); } if (this.airFlaskGlobal != null) { airFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.airFlaskGlobal); } if (this.lightFlaskGlobal != null) { lightFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.lightFlaskGlobal); } if (this.darkFlaskGlobal != null) { darkFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.darkFlaskGlobal); } }
public override void OnHitNPCFirst(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { modTarget.alchemistNature = 60 * 10; }
public virtual void OnHitNPCThird(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { }
public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); modTarget.shamanSpearDamage = 60; }
public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { target.AddBuff(BuffID.OnFire, (60 * 3) + (60 * (alchProj.nbElements))); }