public ColoredDamageTypes()
 {
     Properties = new ModProperties()
     {
         Autoload = true
     };
     instance = this;
 }
        public override void OnHitByProjectile(NPC npc, Projectile projectile, int damage, float knockback, bool crit)
        {
            if (!Config.Instance.ChangeDamageColor)
            {
                return;
            }

            int recent = -1;

            for (int i = 99; i >= 0; i--)
            {
                CombatText ctToCheck = Main.combatText[i];
                if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120)
                {
                    if (ctToCheck.alpha == 1f)
                    {
                        if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit))
                        {
                            recent = i;
                            break;
                        }
                    }
                }
            }
            if (recent == -1)
            {
                return;
            }
            else
            {
                Color             newcolor;
                DamageTypes.Types dmgtype = DamageTypes.GetType(projectile);

                if (Config.Instance.DebugMode)
                {
                    ColoredDamageTypes.Log("HitByProjectile: " + damage + " " + projectile.Name + "/" + projectile.type + ": " + dmgtype.ToString());
                }

                newcolor = DamageTypes.CheckDamageColor(dmgtype, crit);

                //Main.combatText[recent].active = false;
                //Main.combatText[recent].lifeTime = 0;
                //CombatText.NewText(new Rectangle((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height), newcolor, damage, crit, false);
                //NetMessage.SendData
                //ColoredDamageTypes.instance.SendColorPacket(newcolor.R, newcolor.G, newcolor.B, newcolor.A, damage, crit);
                Main.combatText[recent].color = newcolor;
            }
        }
        //public override void UpdateLifeRegen(NPC npc, ref int damage)
        //{

        //}

        public override void OnHitByItem(NPC npc, Player player, Item item, int damage, float knockback, bool crit)
        {
            if (!Config.Instance.ChangeDamageColor)
            {
                return;
            }

            int recent = -1;

            for (int i = 99; i >= 0; i--)
            {
                CombatText ctToCheck = Main.combatText[i];
                if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120 || (ctToCheck.dot && ctToCheck.lifeTime == 40))
                {
                    if (ctToCheck.alpha == 1f)
                    {
                        if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit))
                        {
                            recent = i;
                            break;
                        }
                    }
                }
            }
            if (recent == -1)
            {
                return;
            }
            else
            {
                Color             newcolor;
                DamageTypes.Types dmgtype = DamageTypes.GetType(item);

                if (Config.Instance.DebugMode)
                {
                    ColoredDamageTypes.Log("HitByItem: " + damage + item.Name + "/" + item.type + ": " + item.shoot + " " + dmgtype.ToString());
                }

                newcolor = DamageTypes.CheckDamageColor(dmgtype, crit);

                Main.combatText[recent].color = newcolor;
            }
        }
Exemple #4
0
        public static Types GetType(Item item)
        {
            //ThoriumMod Check

            if (ItemOverrideList.ContainsKey(item.Name))
            {
                return(ItemOverrideList[item.Name]);
            }

            ModItem mitem = item.modItem;

            if (mitem != null)
            {
                Type mitemtype = mitem.GetType();
                if (ItemOverrideList.ContainsKey(mitemtype.ToString()))
                {
                    return(ItemOverrideList[mitemtype.ToString()]);
                }
                if (Config.Instance.DebugMode && Config.Instance.DebugModeTooltips)
                {
                    ColoredDamageTypes.Log("Item: " + mitemtype.ToString());
                }
            }

            if (ColoredDamageTypes.ThoriumMod != null && mitem != null && mitem.mod == ColoredDamageTypes.ThoriumMod)
            {
                Type mitemType = mitem.GetType();

                /*
                 * ColoredDamageTypes.Log("---------------------------------------");
                 * foreach ( FieldInfo f in mitemType.GetFields() ) {
                 *      ColoredDamageTypes.Log(f.Name + ": " + f.FieldType+": "+f.Attributes+": "+f.GetValue(mitem));
                 * }
                 */
                var fieldRadiant   = mitemType.GetField("radiant");
                var fieldSymphonic = mitemType.GetField("Empowerments");
                var fieldThrowing  = mitemType.GetField("throwing");
                if (fieldRadiant != null && (bool)fieldRadiant.GetValue(mitem) == true)
                {
                    return(Types.Radiant);
                }
                else if (fieldSymphonic != null)
                {
                    return(Types.Symphonic);
                }
                else if (fieldThrowing != null && (bool)fieldThrowing.GetValue(mitem) == true)
                {
                    return(Types.Thrown);
                }
            }

            /*
             * if (ColoredDamageTypes.TremorMod != null && mitem != null && mitem.mod == ColoredDamageTypes.TremorMod) {
             *      Type mitemType = mitem.GetType();
             *      string mitemTypestr = mitemType.ToString();
             *      bool isAlchemic = mitemTypestr.Contains("Alchemist.") || mitemTypestr.Contains("Alchemic.") || mitemTypestr.Contains("NovaPillar.");
             *      if (mitemType != null && isAlchemic == true) return Types.Alchemic;
             * }
             */

            if (item.melee && !item.magic && !item.thrown)
            {
                return(Types.Melee);
            }
            else if (item.ranged && !item.magic && !item.thrown)
            {
                return(Types.Ranged);
            }
            else if (item.magic)
            {
                return(Types.Magic);
            }
            else if (item.thrown)
            {
                return(Types.Thrown);
            }
            else if (item.sentry)
            {
                return(Types.Sentry);
            }
            else if (item.summon)
            {
                return(Types.Summon);
            }

            return(Types.Unknown);
        }
Exemple #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);
            }
        }