Example #1
0
        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];
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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;
                }
            }
        }
Example #5
0
        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);
            }
        }