public override bool?CanHitNPC(Projectile projectile, NPC target) { NPCEdits modTarget = target.GetGlobalNPC <NPCEdits>(); ProjectileEdits modProjectile = projectile.GetGlobalProjectile <ProjectileEdits>(); if (modProjectile.minionProjectile && target.friendly) { return(false); } return(base.CanHitNPC(projectile, target)); }
public override void SetDefaults(Projectile projectile) { base.SetDefaults(projectile); ProjectileEdits modProjectile = projectile.GetGlobalProjectile <ProjectileEdits>(); if (projectile.type == ProjectileID.BeeArrow || projectile.type == ProjectileID.Hellwing || projectile.type == ProjectileID.SpectreWrath || projectile.type == ProjectileID.Skull || projectile.type == ProjectileID.Bat || projectile.type == ProjectileID.Wasp || projectile.type == ProjectileID.Bee || projectile.type == ProjectileID.MechanicalPiranha || projectile.type == ProjectileID.EatersBite || projectile.type == ProjectileID.TinyEater) { projectile.ranged = false; projectile.arrow = false; projectile.magic = false; projectile.minion = true; } if (projectile.type == ProjectileID.GreenLaser || projectile.type == ProjectileID.PurpleLaser || projectile.type == ProjectileID.HeatRay || projectile.type == ProjectileID.LaserMachinegun || projectile.type == ProjectileID.LaserMachinegunLaser || projectile.type == ProjectileID.ChargedBlasterCannon || projectile.type == ProjectileID.ChargedBlasterLaser || projectile.type == ProjectileID.ChargedBlasterOrb || projectile.type == ProjectileID.Leaf || projectile.type == ProjectileID.PineNeedleFriendly) { projectile.magic = false; projectile.ranged = true; } if (projectile.type == ProjectileID.WoodenBoomerang || projectile.type == ProjectileID.EnchantedBoomerang || projectile.type == ProjectileID.IceBoomerang || projectile.type == ProjectileID.FruitcakeChakram || projectile.type == ProjectileID.ThornChakram || projectile.type == ProjectileID.Flamarang || projectile.type == ProjectileID.FlyingKnife || projectile.type == ProjectileID.LightDisc || projectile.type == ProjectileID.Bananarang || projectile.type == ProjectileID.PossessedHatchet || projectile.type == ProjectileID.ShadowFlameKnife || projectile.type == ProjectileID.VampireKnife || projectile.type == ProjectileID.Daybreak || projectile.type == ProjectileID.Anchor || projectile.type == ProjectileID.ChainGuillotine || projectile.type == ProjectileID.BoxingGlove || projectile.type == ProjectileID.GolemFist || projectile.type == ProjectileID.WoodYoyo || projectile.type == ProjectileID.CorruptYoyo || projectile.type == ProjectileID.CrimsonYoyo || projectile.type == ProjectileID.JungleYoyo || projectile.type == ProjectileID.Code1 || projectile.type == ProjectileID.Valor || projectile.type == ProjectileID.Cascade || projectile.type == ProjectileID.FormatC || projectile.type == ProjectileID.Gradient || projectile.type == ProjectileID.Chik || projectile.type == ProjectileID.HelFire || projectile.type == ProjectileID.Amarok || projectile.type == ProjectileID.Code2 || projectile.type == ProjectileID.Yelets || projectile.type == ProjectileID.RedsYoyo || projectile.type == ProjectileID.ValkyrieYoyo || projectile.type == ProjectileID.Kraken || projectile.type == ProjectileID.TheEyeOfCthulhu || projectile.type == ProjectileID.Terrarian) { projectile.melee = false; projectile.magic = false; projectile.thrown = true; } ProjectileMethods.SetDefaults(projectile); }
public override void ModifyHitByProjectile(NPC npc, Projectile projectile, ref int damage, ref float knockback, ref bool crit, ref int hitDirection) { ProjectileEdits modProjectile = projectile.GetGlobalProjectile <ProjectileEdits>(); NPCEdits modNPC = npc.GetGlobalNPC <NPCEdits>(); if (projectile.magic || modProjectile.chemical) { damage += npc.defense / 2; if (projectile.magic) { damage -= modNPC.magicDefense / 2; } if (modProjectile.chemical) { damage -= modNPC.magicDefense / 4 - npc.defense / 4; } } base.ModifyHitByProjectile(npc, projectile, ref damage, ref knockback, ref crit, ref hitDirection); }
public override bool PreHurt(bool pvp, bool quiet, ref int damage, ref int hitDirection, ref bool crit, ref bool customDamage, ref bool playSound, ref bool genGore, ref PlayerDeathReason damageSource) { if (immune) { return(false); } if (damageSource.SourceNPCIndex >= 0 && damageSource.SourceNPCIndex < Main.maxNPCs && Main.npc[damageSource.SourceNPCIndex] != null) { if (player.aggro < -250 && enInvis) { return(false); } NPCEdits modNPC = Main.npc[damageSource.SourceNPCIndex].GetGlobalNPC <NPCEdits>(); if (modNPC.atkCooldown > 0) { return(false); } } if (crit) { damage /= 2; } if (damageSource.SourceProjectileIndex >= 0 && damageSource.SourceProjectileIndex < Main.maxProjectiles && Main.projectile[damageSource.SourceProjectileIndex] != null) { Projectile projectile = Main.projectile[damageSource.SourceProjectileIndex]; ProjectileEdits modProjectile = projectile.GetGlobalProjectile <ProjectileEdits>(); if (projectile.magic || modProjectile.chemical) { if (Main.expertMode) { damage += player.statDefense * 3 / 4; if (projectile.owner < 255) { if (Main.player[projectile.owner].armorPenetration > 0) { damage -= Main.player[projectile.owner].armorPenetration; } } if (projectile.magic) { damage -= magicDefense * 3 / 4; } if (modProjectile.chemical) { damage -= magicDefense * 3 / 8 - player.statDefense * 3 / 8; } } else { damage += player.statDefense / 2; if (projectile.magic) { damage -= magicDefense / 2; } if (modProjectile.chemical) { damage -= magicDefense / 4 - player.statDefense / 4; } } } } if (pvp && damageSource.SourceItemType > 0 && damageSource.SourcePlayerIndex >= 0 && damageSource.SourcePlayerIndex < Main.maxPlayers && Main.player[damageSource.SourcePlayerIndex] != null) { Player sourcePlayer = Main.player[damageSource.SourcePlayerIndex]; Item item = sourcePlayer.HeldItem; if (damageSource.SourceItemType == item.type) { ItemEdits modItem = item.GetGlobalItem <ItemEdits>(); if (item.magic || modItem.chemical) { if (sourcePlayer.armorPenetration > 0) { damage -= player.armorPenetration; } if (Main.expertMode) { damage += player.statDefense * 3 / 4; if (item.magic) { damage -= magicDefense * 3 / 4; } if (modItem.chemical) { damage -= magicDefense * 3 / 8 - player.statDefense * 3 / 8; } } else { damage += player.statDefense / 2; if (item.magic) { damage -= magicDefense / 2; } if (modItem.chemical) { damage -= magicDefense / 4 - player.statDefense / 4; } } } } } if (crit) { damage *= 2; } if (gellyfishArmor) { if (damageSource.SourceNPCIndex >= 0 && damageSource.SourceNPCIndex < Main.maxNPCs && Main.npc[damageSource.SourceNPCIndex] != null) { NPC npc = Main.npc[damageSource.SourceNPCIndex]; player.ApplyDamageToNPC(npc, (int)((1 + (player.statDefense / 2)) * player.minionDamage), 5f, npc.direction * -1, false); } else if (damageSource.SourcePlayerIndex >= 0 && damageSource.SourcePlayerIndex < Main.maxPlayers && Main.player[damageSource.SourcePlayerIndex] != null) { Player sourcePlayer = Main.player[damageSource.SourcePlayerIndex]; PlayerDeathReason reason = new PlayerDeathReason(); reason.SourcePlayerIndex = player.whoAmI; reason.SourceCustomReason = Language.GetTextValue("Mods.ClassOverhaul.CommonName.Gellyfish"); sourcePlayer.Hurt(reason, (int)((1 + (player.statDefense / 2)) * player.minionDamage), sourcePlayer.direction * -1, true, false, false); } } return(base.PreHurt(pvp, quiet, ref damage, ref hitDirection, ref crit, ref customDamage, ref playSound, ref genGore, ref damageSource)); }