private bool HandlePrefixToItemIfItHasNoHistory(On.Terraria.Item.orig_Prefix orig, Item self, int pre)
        {
            bool ret = orig(self, pre);

            if (pre == -2)
            {
                return(ret);                       //Reforging, as this code should only run for non-reforge contexts
            }
            if (self.IsAir)
            {
                return(ret);
            }

            self.GetGlobalItem <CRGlobalItem>().AddPrefixToItemIfItHasNoHistory(self);

            return(ret);
        }
Example #2
0
        private bool Item_Prefix(On.Terraria.Item.orig_Prefix orig, Item self, int pre)
        {
            int originalRarity = 0;

            if (self.rare > ItemRarityID.Purple)
            {
                originalRarity = self.rare;
            }

            orig(self, pre);

            if (originalRarity != 0)
            {
                self.rare = originalRarity;
            }

            return(true);
        }
Example #3
0
        private bool UpdateRarity(On.Terraria.Item.orig_Prefix orig, Terraria.Item item, int pre)
        {
            orig(item, pre);
            Terraria.Item It = new Terraria.Item();
            It.SetDefaults(item.type);
            int baseRarity  = It.rare;
            int baseDamage  = It.damage;
            int baseUseTime = It.useTime;

            int   baseMana       = It.mana;
            float baseKnockback  = It.knockBack;
            float baseScale      = It.scale;
            float baseShootspeed = It.shootSpeed;
            int   baseCrit       = It.crit;

            item.rare = baseRarity;
            if (_isFixedRarity.Contains(item.rare))
            {
                return(true);
            }

            float DamageInc = 1;

            if (baseDamage != 0)
            {
                DamageInc = item.damage / baseDamage;
            }
            float KnockBack = 1;

            if (baseKnockback != 0)
            {
                KnockBack = item.knockBack / baseKnockback;
            }
            float UseTimeMult = 1;

            if (baseUseTime != 0)
            {
                UseTimeMult = item.useTime / baseUseTime;
            }
            float ScaleMult = 1;

            if (baseScale != 0)
            {
                ScaleMult = item.scale / baseScale;
            }
            float ShootspeedMult = 1;

            if (baseShootspeed != 0)
            {
                ShootspeedMult = item.shootSpeed / baseShootspeed;
            }
            float ManaMult = 1;

            if (baseMana != 0)
            {
                ManaMult = item.mana / baseMana;
            }
            float CritMult = 1;

            if (baseCrit != 0)
            {
                CritMult = item.crit / baseCrit;
            }
            ;



            int   i          = item.prefix;
            float TotalValue = 1f * DamageInc * (2f - UseTimeMult) * (2f - ManaMult) * ScaleMult * KnockBack * ShootspeedMult * (1f + (float)CritMult * 0.02f);

            if (i == 62 || i == 69 || i == 73 || i == 77)
            {
                TotalValue *= 1.05f;
            }
            if (i == 63 || i == 70 || i == 74 || i == 78 || i == 67)
            {
                TotalValue *= 1.1f;
            }
            if (i == 64 || i == 71 || i == 75 || i == 79 || i == 66)
            {
                TotalValue *= 1.15f;
            }
            if (i == PrefixID.Warding || i == PrefixID.Menacing || i == PrefixID.Lucky || i == PrefixID.Quick || i == PrefixID.Violent)
            {
                TotalValue *= 1.2f;
            }
            if (i == ModContent.PrefixType <Shielding>() || i == ModContent.PrefixType <Wrathful>() || i == ModContent.PrefixType <Weighted>() || i == ModContent.PrefixType <Rapid>() || i == ModContent.PrefixType <Beserk>())
            {
                TotalValue *= 1.5f;
            }
            if ((double)TotalValue >= 1.5)
            {
                item.rare += 3;
            }
            else if ((double)TotalValue >= 1.2)
            {
                item.rare += 2;
            }
            else if ((double)TotalValue >= 1.05)
            {
                item.rare++;
            }
            else if ((double)TotalValue <= 0.8)
            {
                item.rare -= 2;
            }
            else if ((double)TotalValue <= 0.95)
            {
                item.rare--;
            }

            if (item.rare > MaxRarity)
            {
                item.rare = MaxRarity;
            }
            return(true);
        }