public static void ProjectileTypeCheck(Projectile projectile, Item item, ref Item returnitem) { Dictionary <int, int[]> ProjectileTypeOverride = new Dictionary <int, int[]>() { { 469, new int[] { 181, 566 } } }; string[] ProjectileTypeNameOverride = new string[] { "CrystiliumMod.Projectiles.DiamondBomb", "CrystiliumMod.Projectiles.Shatter1", "CrystiliumMod.Projectiles.Shatter2", "CrystiliumMod.Projectiles.Shatter3", "SacredTools.Projectiles.FrostExplosion", "SacredTools.Projectiles.CerniumMist", "SacredTools.Projectiles.DarkExplosion", "SacredTools.Projectiles.FlameExplosion", "SacredTools.Projectiles.JusticeSpark", "SpiritMod.Projectiles.Fire" }; if (item.shoot == projectile.type || (ProjectileTypeOverride.ContainsKey(item.shoot) && ProjectileTypeOverride[item.shoot].Contains(projectile.type))) { returnitem = item; } else { ModProjectile mproj = projectile.modProjectile; if (mproj != null) { Type mprojtype = mproj.GetType(); //Main.NewText(mprojtype.ToString()); if (ProjectileTypeNameOverride.Contains(mprojtype.ToString())) { returnitem = ColoredDamageTypes.ProjectileWeaponSpawns[projectile.identity]; } } } }
public override void PostSetupContent() { List <int> tempList = new List <int>(); for (int i = Main.maxProjectileTypes; i < ProjectileLoader.ProjectileCount; i++) { ModProjectile mProj = ProjectileLoader.GetProjectile(i); if (mProj != null && mProj.mod.Name == "AssortedCrazyThings" && mProj.GetType().Name.StartsWith("CuteSlime")) { tempList.Add(mProj.projectile.type); } } ACTPetsWithSmallVerticalHitbox = tempList.ToArray(); Array.Sort(ACTPetsWithSmallVerticalHitbox); }
private bool ModProjectileAction(int pWhoAmI) { ModProjectile mProj = ProjectileObject(pWhoAmI).modProjectile; if (mProj.mod.Name == modInstance.Name) { try { FieldInfo field = mProj.GetType().GetField(damageType, BindingFlags.Public | BindingFlags.Instance); return((bool)field.GetValue(mProj)); } catch { return(false); } } else { return(false); } }
public static void JavelinOnHit(NPC target, Projectile projectile, ref double damage) { if (projectile.ai[1] == (int)JavelinType.Ice)//Ice { if (Main.rand.Next(0, 4) == 1) { target.AddBuff(BuffID.Frostburn, 60 * (projectile.type == ModContent.ProjectileType <JavelinProj>() ? 2 : 3)); } } if (projectile.ai[1] == (int)JavelinType.Dynasty)//Dynasty { if (projectile.penetrate > 1) { int thisoned = Projectile.NewProjectile(projectile.Center.X + Main.rand.NextFloat(-64, 64), projectile.Center.Y - 800, Main.rand.NextFloat(-2, 2), 14f, projectile.type, projectile.damage, projectile.knockBack, Main.player[projectile.owner].whoAmI); Main.projectile[thisoned].ai[1] = projectile.ai[1]; Main.projectile[thisoned].Throwing().thrown = true; Main.projectile[thisoned].penetrate = projectile.penetrate - 1; Main.projectile[thisoned].netUpdate = true; } } if (projectile.ai[1] == (int)JavelinType.Hallowed)//Hallow { if (Main.rand.Next(0, projectile.modProjectile.GetType() == typeof(JavelinProjMelee) ? 2 : 0) == 0) { int thisoned = Projectile.NewProjectile(projectile.Center.X + Main.rand.NextFloat(-64, 64), projectile.Center.Y - 800, Main.rand.NextFloat(-2, 2), 14f, ProjectileID.HallowStar, (int)(projectile.damage * damage), projectile.knockBack, projectile.owner); Main.projectile[thisoned].Throwing().thrown = true; Main.projectile[thisoned].penetrate = 2; Main.projectile[thisoned].netUpdate = true; IdgProjectile.Sync(thisoned); NetMessage.SendData(MessageID.SyncProjectile, -1, -1, null, thisoned); } } if (projectile.ai[1] == (int)JavelinType.Shadow)//Shadow { if (Main.rand.Next(0, 4) == 1) { target.AddBuff(BuffID.ShadowFlame, 60 * (projectile.type == ModContent.ProjectileType <JavelinProj>() ? 3 : 5)); } } if (projectile.ai[1] == (int)JavelinType.SanguineBident)//Sanguine Bident { int bleed = ModContent.BuffType <MassiveBleeding>(); if (target.buffImmune[BuffID.Bleeding]) { damage += 0.25; } if (projectile.modProjectile.GetType() == typeof(JavelinProj)) { if (target.active && target.life > 0 && Main.rand.Next(0, 12) < (target.HasBuff(bleed) || target.HasBuff(BuffID.Bleeding) ? 8 : 1)) { projectile.vampireHeal((int)(projectile.damage / 2f), projectile.Center); } } else { target.AddBuff(ModContent.BuffType <MassiveBleeding>(), 60 * 5); } projectile.netUpdate = true; } if (projectile.ai[1] == (int)JavelinType.TerraTrident)//Terra Trident { if (projectile.modProjectile.GetType() == typeof(JavelinProj)) { Main.PlaySound(SoundID.Item, (int)projectile.Center.X, (int)projectile.Center.Y, 60, 0.6f, 0.25f); Vector2 velo = projectile.velocity; velo.Normalize(); int prog = Projectile.NewProjectile(projectile.Center.X + (velo.X * 20f), projectile.Center.Y + (velo.Y * 20f), velo.X * 6f, velo.Y * 6f, SGAmod.Instance.ProjectileType("TerraTridentProj"), (int)(projectile.damage * 0.75), projectile.knockBack / 2f, Main.myPlayer); Main.projectile[prog].penetrate = 3; Main.projectile[prog].timeLeft /= 4; Main.projectile[prog].melee = false; Main.projectile[prog].Throwing().thrown = true; Main.projectile[prog].netUpdate = true; IdgProjectile.Sync(prog); NetMessage.SendData(MessageID.SyncProjectile, -1, -1, null, prog); } } if (projectile.ai[1] == (int)JavelinType.CrimsonCatastrophe)//Crimson Catastrophe { int bleed = ModContent.BuffType <MassiveBleeding>(); if (target.buffImmune[BuffID.Bleeding]) { damage += 0.50; } ModProjectile modproj = projectile.modProjectile; if (modproj.GetType() == typeof(JavelinProj)) { (modproj as JavelinProj).maxStickTime = (int)((modproj as JavelinProj).maxStickTime / 1.25); foreach (NPC enemy in Main.npc.Where(enemy => enemy.active && enemy.active && enemy.life > 0 && !enemy.friendly && !enemy.dontTakeDamage && enemy.Distance(projectile.Center) < 500 && (modproj as JavelinProj).stickin != enemy.whoAmI && enemy.HasBuff(bleed))) { CrimsonCatastrophe.BloodyExplosion(enemy, projectile); } } else { target.AddBuff(bleed, 60 * 5); } projectile.netUpdate = true; } if (projectile.ai[1] == (int)JavelinType.Thermal)//Thermal { target.AddBuff(ModContent.BuffType <ThermalBlaze>(), 60 * (projectile.type == ModContent.ProjectileType <JavelinProj>() ? 2 : 5)); } if (projectile.ai[1] == (int)JavelinType.SwampSovnya)//Swamp Sovnya { if (!target.buffImmune[BuffID.Poisoned]) { ModProjectile modproj = projectile.modProjectile; if (modproj.GetType() == typeof(JavelinProj)) { if (Main.rand.Next(0, 100) < 50 && !target.boss) { target.AddBuff(ModContent.BuffType <DankSlow>(), (int)(60 * 3f)); } } } else { damage += 0.25f; } } }
public static Types GetType(Projectile projectile) { if (ProjectileOverrideList.ContainsKey(projectile.Name)) { return(ProjectileOverrideList[projectile.Name]); } ModProjectile mproj = projectile.modProjectile; if (mproj != null) { Type mprojtype = mproj.GetType(); if (ProjectileOverrideList.ContainsKey(mprojtype.ToString())) { return(ProjectileOverrideList[mprojtype.ToString()]); } if (Config.Instance.DebugMode) { ColoredDamageTypes.Log("Projectile: " + mprojtype.ToString()); } } //ThoriumMod Check if (ColoredDamageTypes.ThoriumMod != null && mproj != null && mproj.mod == ColoredDamageTypes.ThoriumMod) { Type mprojtype = mproj.GetType(); string typestr = mprojtype.ToString(); if (typestr.Contains("ThoriumMod.Projectiles.Scythe") || typestr.Contains("ThoriumMod.Projectiles.Healer")) { return(Types.Radiant); } else if (typestr.Contains("ThoriumMod.Projectiles.Bard")) { return(Types.Symphonic); } else if (typestr.Contains("ThoriumMod.Items.ThrownItems")) { return(Types.Thrown); } } /* * if (ColoredDamageTypes.TremorMod != null && mproj != null && mproj.mod == ColoredDamageTypes.TremorMod) { * Type mprojType = mproj.GetType(); * string mitemTypestr = mprojType.ToString(); * bool isAlchemic = mitemTypestr.Contains("Alchemist.") || mitemTypestr.Contains("Alchemic.") || mitemTypestr.Contains("NovaPillar."); * if (mprojType != null && isAlchemic == true) return Types.Alchemic; * } */ Item item = null; Item selecteditem = Main.player[projectile.owner].inventory[Main.player[projectile.owner].selectedItem]; ProjectileTypeCheck(projectile, selecteditem, ref item); if (item == null) { foreach (Item i in Main.player[projectile.owner].inventory) { if (i.shoot == projectile.type) { item = i; break; } } } if (item != null) // Found item in inventory { return(GetType(item)); } else // Didn't find item. Use projectile type { int fromsummon = 0; for (int i = 0; i < 1000; i++) { Projectile CheckProjectile = Main.projectile[i]; if (CheckProjectile.active && (CheckProjectile.sentry) && CheckProjectile.type + 1 == projectile.type) { fromsummon = 2; // Is a sentry break; } else if (CheckProjectile.active && (CheckProjectile.minion) && CheckProjectile.type + 1 == projectile.type) { fromsummon = 1; // Is a minion break; } } if (projectile.melee && !projectile.magic && !projectile.thrown) { return(Types.Melee); } else if (projectile.ranged && !projectile.magic && !projectile.thrown) { return(Types.Ranged); } else if (projectile.magic) { return(Types.Magic); } else if (projectile.thrown) { return(Types.Thrown); } else if (fromsummon == 2 || projectile.sentry) { return(Types.Sentry); } else if (fromsummon == 1 || projectile.minion) { return(Types.Summon); } return(Types.Unknown); } }