예제 #1
0
        public static float ApplyBaseStatBonuses_Float(CharacterInstance source, BaseStatProperty prop, float baseAmount, [Optional, DefaultParameterValue(true)] bool includeBuffs)
        {
            float num = source.getBaseStatModifier(prop);

            if (includeBuffs)
            {
                num += GameLogic.Binder.BuffSystem.getBaseStatModifierSumFromActiveBuffs(source, prop);
            }
            switch (prop)
            {
            case BaseStatProperty.AttacksPerSecond:
                if (source.getPerkInstanceCount(PerkType.BerserkersBlood) > 0)
                {
                    num += (1f - source.CurrentHpNormalized) * source.getGenericModifierForPerkType(PerkType.BerserkersBlood);
                }
                if (source.IsBoss)
                {
                    num += source.getGenericModifierForPerkType(PerkType.BossBonusSpeed);
                }
                break;

            case BaseStatProperty.MovementSpeed:
                if (source.IsBoss)
                {
                    num += source.getGenericModifierForPerkType(PerkType.BossBonusSpeed);
                }
                break;
            }
            if (((includeBuffs && GameLogic.Binder.BuffSystem.hasBuffFromPerk(source, PerkType.DungeonBoostEnrageEnemies)) || (source.getPerkInstanceCount(PerkType.DungeonBoostEnrageEnemies) > 0)) && (prop == BaseStatProperty.AttacksPerSecond))
            {
                num += ConfigPerks.EnrageEnemies.AttacksPerSecondModifier;
            }
            return(!BASESTAT_MODIFIER_IS_ABSOLUTE[prop] ? ((baseAmount != 0f) ? (baseAmount + (baseAmount * num)) : num) : (baseAmount + num));
        }
예제 #2
0
        public float getBaseStatModifier(BaseStatProperty prop)
        {
            float num = 0f;

            for (int i = 0; i < this.Perks.PerkInstances.Count; i++)
            {
                PerkInstance instance = this.Perks.PerkInstances[i];
                float        num3     = instance.getBaseStatModifier(prop);
                num += num3;
                if (num3 != 0f)
                {
                    num += this.getEvolveBonusForPerk(instance.Type);
                }
            }
            for (int j = 0; j < this.Item.FixedPerks.PerkInstances.Count; j++)
            {
                PerkInstance instance2 = this.Item.FixedPerks.PerkInstances[j];
                float        num5      = instance2.getBaseStatModifier(prop);
                num += num5;
                if (num5 != 0f)
                {
                    num += this.getEvolveBonusForPerk(instance2.Type);
                }
            }
            return(num);
        }
예제 #3
0
        public void postDeserializeInitialization()
        {
            this.BaseStatsDouble.Clear();
            foreach (KeyValuePair <string, double> pair in this.BaseStats)
            {
                BaseStatProperty key = (BaseStatProperty)((int)Enum.Parse(typeof(BaseStatProperty), pair.Key));
                switch (key)
                {
                case BaseStatProperty.UNSPECIFIED:
                    break;

                case BaseStatProperty.DamagePerHit:
                case BaseStatProperty.Life:
                case BaseStatProperty.SkillDamage:
                    this.BaseStatsDouble.Add(key, pair.Value);
                    break;

                default:
                    this.BaseStatsFloat.Add(key, (float)pair.Value);
                    break;
                }
            }
            if (!string.IsNullOrEmpty(this.AvatarSpriteId))
            {
                this.AvatarSprite = new SpriteAtlasEntry("Menu", this.AvatarSpriteId);
            }
        }
예제 #4
0
 public float getBaseStatModifier(BaseStatProperty prop)
 {
     if (ConfigPerks.SHARED_DATA[this.Type].BaseStat == prop)
     {
         return(this.Modifier);
     }
     return(0f);
 }
예제 #5
0
        public float getBaseStatModifier(BaseStatProperty prop)
        {
            float num = 0f;

            for (int i = 0; i < this.PerkInstances.Count; i++)
            {
                num += this.PerkInstances[i].getBaseStatModifier(prop);
            }
            return(num);
        }
예제 #6
0
        public float getBaseStatModifier(int rank, BaseStatProperty prop)
        {
            float num = 0f;

            for (int i = 0; i < this.Entries.Count; i++)
            {
                if (rank >= this.Entries[i].RankReq)
                {
                    num += this.Entries[i].PerkInstance.getBaseStatModifier(prop);
                }
            }
            return(num);
        }
예제 #7
0
        public float getBaseStatModifierSumFromActiveBuffs(CharacterInstance c, BaseStatProperty baseStat)
        {
            float       a    = 0f;
            List <Buff> list = this.m_characterBuffLists[c];

            for (int i = 0; i < list.Count; i++)
            {
                Buff buff = list[i];
                if (!buff.Ended && ((buff.BaseStat1 == baseStat) || (buff.BaseStat2 == baseStat)))
                {
                    a += buff.TotalModifier;
                }
            }
            if (baseStat == BaseStatProperty.MovementSpeed)
            {
                return(Mathf.Max(a, ConfigGameplay.BUFFS_MOVEMENT_DEBUFF_TOTAL_MODIFIER_CAP));
            }
            if (baseStat == BaseStatProperty.AttacksPerSecond)
            {
                a = Mathf.Max(a, ConfigGameplay.BUFFS_ATTACKS_PER_SECOND_DEBUFF_TOTAL_MODIFIER_CAP);
            }
            return(a);
        }
예제 #8
0
        public float getBaseStatModifier(BaseStatProperty baseStat)
        {
            float num = 0f;

            for (int i = 0; i < this.SelectedRunestones.Count; i++)
            {
                if (this.SelectedRunestones[i].Source == RunestoneSelectionSource.Player)
                {
                    string    id = this.SelectedRunestones[i].Id;
                    SkillType skillTypeForRunestone = ConfigRunestones.GetSkillTypeForRunestone(id);
                    if ((skillTypeForRunestone != SkillType.NONE) && this.Player.ActiveCharacter.isSkillActive(skillTypeForRunestone))
                    {
                        ConfigRunestones.SharedData runestoneData = ConfigRunestones.GetRunestoneData(id);
                        if (runestoneData.PerkInstance != null)
                        {
                            PerkInstance perkInstance = runestoneData.PerkInstance;
                            num += perkInstance.getBaseStatModifier(baseStat);
                        }
                    }
                }
            }
            return(num);
        }
예제 #9
0
 public float getBaseStatModifier(BaseStatProperty baseStat)
 {
     return(this.m_quickLookup_baseStatModifier[baseStat]);
 }
예제 #10
0
 protected void refreshQuickLookup()
 {
     this.m_quickLookup_perkType.Clear();
     for (int i = 0; i < ConfigPerks.ALL_PERKS.Count; i++)
     {
         PerkType            perkType = ConfigPerks.ALL_PERKS[i];
         PerkTypeQuickLookup lookup   = new PerkTypeQuickLookup();
         int num2 = 0;
         for (int n = 0; n < this.QuickLookupPerkInstances.Count; n++)
         {
             PerkInstance instance = this.QuickLookupPerkInstances[n];
             num2 += instance.getPerkInstanceCount(perkType);
         }
         lookup.PerkInstanceCount = num2;
         float num4 = 0f;
         for (int num5 = 0; num5 < this.QuickLookupPerkInstances.Count; num5++)
         {
             float num6 = this.QuickLookupPerkInstances[num5].getGenericModifierForPerkType(perkType);
             num4 += num6;
         }
         lookup.GenericModifierForPerkType = num4;
         this.m_quickLookup_perkType.Add(perkType, lookup);
     }
     this.m_quickLookup_baseStatModifier.Clear();
     for (int j = 0; j < ConfigGameplay.ALL_BASE_STAT_PROPERTY_TYPES.Count; j++)
     {
         BaseStatProperty prop = ConfigGameplay.ALL_BASE_STAT_PROPERTY_TYPES[j];
         float            num8 = 0f;
         for (int num9 = 0; num9 < this.QuickLookupPerkInstances.Count; num9++)
         {
             float num10 = this.QuickLookupPerkInstances[num9].getBaseStatModifier(prop);
             num8 += num10;
         }
         this.m_quickLookup_baseStatModifier.Add(prop, num8);
     }
     this.m_quickLookup_skillType.Clear();
     for (int k = 0; k < ConfigSkills.ALL_HERO_SKILLS.Count; k++)
     {
         SkillType            skillType = ConfigSkills.ALL_HERO_SKILLS[k];
         SkillTypeQuickLookup lookup2   = new SkillTypeQuickLookup();
         float num12 = 0f;
         for (int num13 = 0; num13 < this.QuickLookupPerkInstances.Count; num13++)
         {
             float num14 = this.QuickLookupPerkInstances[num13].getSkillDamageModifier(skillType);
             num12 += num14;
         }
         lookup2.SkillDamageModifier = num12;
         int num15 = 0;
         for (int num16 = 0; num16 < this.QuickLookupPerkInstances.Count; num16++)
         {
             PerkInstance instance5 = this.QuickLookupPerkInstances[num16];
             num15 += instance5.getSkillExtraCharges(skillType);
         }
         lookup2.SkillExtraCharges = num15;
         bool flag = false;
         for (int num17 = 0; num17 < this.QuickLookupPerkInstances.Count; num17++)
         {
             PerkInstance instance6 = this.QuickLookupPerkInstances[num17];
             if (instance6.hasSkillInvulnerability(skillType))
             {
                 flag = true;
                 break;
             }
         }
         lookup2.SkillInvulnerability = flag;
         float num18 = 0f;
         for (int num19 = 0; num19 < this.QuickLookupPerkInstances.Count; num19++)
         {
             float num20 = this.QuickLookupPerkInstances[num19].getSkillCooldownModifier(skillType);
             num18 += num20;
         }
         lookup2.SkillCooldownModifier = num18;
         this.m_quickLookup_skillType.Add(skillType, lookup2);
     }
     this.m_quickLookup_characterType.Clear();
     for (int m = 0; m < ConfigGameplay.ALL_CHARACTER_TYPES_INCLUDING_UNSPECIFIED.Count; m++)
     {
         CharacterType            characterType = ConfigGameplay.ALL_CHARACTER_TYPES_INCLUDING_UNSPECIFIED[m];
         CharacterTypeQuickLookup lookup3       = new CharacterTypeQuickLookup();
         float num22 = 0f;
         for (int num23 = 0; num23 < this.QuickLookupPerkInstances.Count; num23++)
         {
             float num24 = this.QuickLookupPerkInstances[num23].getCharacterTypeDamageModifier(characterType);
             num22 += num24;
         }
         lookup3.CharacterTypeDamageModifier = num22;
         float num25 = 0f;
         for (int num26 = 0; num26 < this.QuickLookupPerkInstances.Count; num26++)
         {
             float num27 = this.QuickLookupPerkInstances[num26].getCharacterTypeArmorModifier(characterType);
             num25 += num27;
         }
         lookup3.CharacterTypeArmorModifier = num25;
         float num28 = 0f;
         for (int num29 = 0; num29 < this.QuickLookupPerkInstances.Count; num29++)
         {
             float num30 = this.QuickLookupPerkInstances[num29].getCharacterTypeXpModifier(characterType);
             num28 += num30;
         }
         lookup3.CharacterTypeXpModifier = num28;
         float num31 = 0f;
         for (int num32 = 0; num32 < this.QuickLookupPerkInstances.Count; num32++)
         {
             float num33 = this.QuickLookupPerkInstances[num32].getCharacterTypeCoinModifier(characterType);
             num31 += num33;
         }
         lookup3.CoinModifier = num31;
         this.m_quickLookup_characterType.Add(characterType, lookup3);
     }
 }
예제 #11
0
        public static double ApplyBaseStatBonuses_Double(CharacterInstance source, BaseStatProperty prop, double baseAmount, [Optional, DefaultParameterValue(true)] bool includeBuffs)
        {
            if (prop == BaseStatProperty.DamagePerHit)
            {
                baseAmount += baseAmount * source.getGenericModifierForPerkType(PerkType.CoreBonusDamagePerHit);
            }
            else if (prop == BaseStatProperty.Life)
            {
                baseAmount += baseAmount * source.getGenericModifierForPerkType(PerkType.CoreBonusLife);
            }
            else if (prop == BaseStatProperty.SkillDamage)
            {
                baseAmount += baseAmount * source.getGenericModifierForPerkType(PerkType.CoreBonusSkillDamage);
            }
            float num = source.getBaseStatModifier(prop);

            if (includeBuffs)
            {
                num += GameLogic.Binder.BuffSystem.getBaseStatModifierSumFromActiveBuffs(source, prop);
            }
            BaseStatProperty property = prop;

            switch (property)
            {
            case BaseStatProperty.Life:
                if (source.IsBoss)
                {
                    num += source.getGenericModifierForPerkType(PerkType.BossBonusLife);
                }
                break;

            case BaseStatProperty.DamagePerHit:
                if (source.IsBoss)
                {
                    num += source.getGenericModifierForPerkType(PerkType.BossBonusDamage);
                    num += source.getGenericModifierForPerkType(PerkType.BossBonusWeaponDamage);
                }
                break;

            default:
                if (property == BaseStatProperty.SkillDamage)
                {
                    num += source.getGenericModifierForPerkType(PerkType.DamageBonusAll);
                    if (source.IsBoss)
                    {
                        num += source.getGenericModifierForPerkType(PerkType.BossBonusDamage);
                        num += source.getGenericModifierForPerkType(PerkType.BossBonusSkillDamage);
                    }
                }
                break;
            }
            if (source.getPerkInstanceCount(PerkType.Berserk) > 0)
            {
                if (prop == BaseStatProperty.Life)
                {
                    num += ConfigPerks.Berserk.ArmorModifier;
                }
                else if (prop == BaseStatProperty.DamagePerHit)
                {
                    num += ConfigPerks.Berserk.DamagePerHitModifier;
                }
            }
            if (((includeBuffs && GameLogic.Binder.BuffSystem.hasBuffFromPerk(source, PerkType.DungeonBoostEnrageEnemies)) || (source.getPerkInstanceCount(PerkType.DungeonBoostEnrageEnemies) > 0)) && (prop == BaseStatProperty.Life))
            {
                num += ConfigPerks.EnrageEnemies.LifeModifier;
            }
            return(!BASESTAT_MODIFIER_IS_ABSOLUTE[prop] ? ((baseAmount != 0.0) ? (baseAmount + (baseAmount * num)) : ((double)num)) : (baseAmount + num));
        }
예제 #12
0
 public float getBaseStatFloat(BaseStatProperty prop)
 {
     return(this.BaseStatsFloat[prop]);
 }
예제 #13
0
 public double getBaseStatDouble(BaseStatProperty prop)
 {
     return(this.BaseStatsDouble[prop]);
 }