Example #1
0
 private void OnTriggerExit2D(Collider2D collision)
 {
     if (collision.GetComponent <PlayerCharacterStats>())
     {
         playerStatsThatEntered = null;
     }
 }
Example #2
0
            public static Exception Finalizer(PlayerCharacterStats __instance)
            {
                var character = __instance.GetComponent <Character>();

                if (!character)
                {
                    return(null);
                }

                var charging = (bool)At.GetValue(typeof(Character), character, "m_currentlyChargingAttack");
                var bowDrawn = (bool)At.GetValue(typeof(Character), character, "m_bowDrawn");

                if (!charging || !bowDrawn)
                {
                    return(null);
                }

                if (character.CurrentWeapon && character.CurrentWeapon.Type == Weapon.WeaponType.Bow)
                {
                    var charger = (WeaponCharger)character.CurrentWeapon.GetExtension(nameof(WeaponCharger));
                    if (!charger.ChargeStarted && charger.StartChargeTime < 0)
                    {
                        At.SetValue(false, typeof(Character), character, "m_currentlyChargingAttack");
                        At.SetValue(false, typeof(Character), character, "m_bowDrawn");
                    }
                }

                return(null);
            }
Example #3
0
            public static Exception Finalizer(PlayerCharacterStats __instance)
            {
                var character = __instance.GetComponent <Character>();

                if (!character)
                {
                    return(null);
                }

                if (!character.m_currentlyChargingAttack || !character.m_bowDrawn)
                {
                    return(null);
                }

                if (character.CurrentWeapon && character.CurrentWeapon.Type == Weapon.WeaponType.Bow)
                {
                    var charger = (WeaponCharger)character.CurrentWeapon.GetExtension(nameof(WeaponCharger));
                    if (!charger.ChargeStarted && charger.StartChargeTime < 0)
                    {
                        character.m_currentlyChargingAttack = false;
                        character.m_bowDrawn = false;
                    }
                }

                return(null);
            }
Example #4
0
        private static void UpdateStats(PlayerCharacterStats instance, string fieldName, float configValue, float maxValue, float modifier)
        {
            FieldInfo field = typeof(CharacterStats).GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            if (configValue != 0)
            {
                field.SetValue(instance, Mathf.Clamp((float)field.GetValue(instance) - configValue * UpdateDeltaTime(instance), 0f, maxValue * modifier));
            }
        }
Example #5
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        PlayerCharacterStats playerStats = collision.GetComponent <PlayerCharacterStats>();

        if (playerStats)
        {
            playerStatsThatEntered = playerStats;
        }
    }
Example #6
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        PlayerCharacterStats playerStats = collision.GetComponent <PlayerCharacterStats>();

        if (playerStats)
        {
            playerStats.inventoryManager.AddItemToInventory(associatedItem, 1);
            Destroy(this.gameObject);
        }
    }
Example #7
0
        static void InteractionRevive_OnActivate_Post(ref Character __state, ref Character ___m_character)
        {
            // receive m_character from prefix
            ___m_character = __state;

            if (___m_character != null)
            {
                if (___m_character.IsPetrified)
                {
                    ___m_character.Unpetrify();
                }
                else
                {
                    // Common
                    PlayerSaveData       data  = new PlayerSaveData(___m_character);
                    PlayerCharacterStats stats = ___m_character.PlayerStats;

                    // Affect burns
                    if (_maxVitalsToggle)
                    {
                        data.BurntHealth  += (stats.MaxHealth - data.BurntHealth) * -_maxHealthLost.Value / 100f;
                        data.BurntStamina += (stats.MaxStamina - data.BurntStamina) * -_maxStaminaLost.Value / 100f;
                        if (stats.MaxMana > 0)
                        {
                            data.BurntMana += (stats.MaxMana - data.BurntMana) * -_maxManaLost.Value / 100f;
                        }
                    }

                    // Affect current vitals
                    if (_vitalsToggle)
                    {
                        data.Health  = (stats.MaxHealth - data.BurntHealth) * _newHealth.Value / 100f;
                        data.Stamina = (stats.MaxStamina - data.BurntStamina) * _newStamina.Value / 100f;
                        if (stats.MaxMana > 0)
                        {
                            data.Mana += stats.CurrentMana * _manaLost.Value / 100f;
                        }
                    }

                    // Affect needs
                    if (_needsToggle)
                    {
                        data.Food       += stats.Food * _foodLost.Value / 100f;
                        data.Drink      += stats.Drink * _drinkLost.Value / 100f;
                        data.Sleep      += stats.Sleep * _sleepLost.Value / 100f;
                        data.Corruption += (1000f - stats.Corruption) * _corruptionGained.Value / 100f;
                    }

                    // Finalize
                    data.Health = data.Health.ClampMin(1f);
                    ___m_character.Resurrect(data, true);
                }
            }
        }
Example #8
0
        static bool Prefix(PlayerCharacterStats __instance)
        {
            FieldInfo m_character = typeof(CharacterStats).GetField("m_character", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            Character character = (Character)m_character.GetValue(__instance);

            if (character.CurrentSpellCast == Character.SpellCastType.Sit)
            {
                ApplySittingRegen(__instance);
            }
            return(true);
        }
Example #9
0
 public void applyStatsRegen(PlayerCharacterStats instance)
 {
     if (gameData.StamRegenRate != 0)
     {
         stamRegenField.SetValue(instance, new Stat(2.4f + gameData.StamRegenRate));
     }
     if (gameData.HealthRegenRate != 0)
     {
         healthRegenField.SetValue(instance, new Stat(instance.HealthRegen + gameData.HealthRegenRate));
     }
     if (gameData.ManaRegenRate != 0)
     {
         manaRegenField.SetValue(instance, new Stat(instance.ManaRegen + gameData.ManaRegenRate));
     }
 }
Example #10
0
 /// <summary>
 /// Regens burnt stats by the amount requested within the config file (per second), until the burn has completely worn off.
 /// </summary>
 /// <param name="instance">Instance of the player's stats.</param>
 public void applyBurntRegen(PlayerCharacterStats instance)
 {
     if (gameData.BurntStaminaRegen != 0)
     {
         burntStamField.SetValue(instance, Mathf.Clamp((float)burntStamField.GetValue(instance) - gameData.BurntStaminaRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxStamina * 0.9f));
     }
     if (gameData.BurntHealthRegen != 0)
     {
         burntHealthField.SetValue(instance, Mathf.Clamp((float)burntHealthField.GetValue(instance) - gameData.BurntHealthRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxHealth * 0.9f));
     }
     if (gameData.BurntManaRegen != 0)
     {
         burntManaField.SetValue(instance, Mathf.Clamp((float)burntManaField.GetValue(instance) - gameData.BurntManaRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxMana * 0.5f));
     }
 }
Example #11
0
 /// <summary>
 /// Sets the current regen amount to the amount specified within the config file (per second).
 /// Doesn't need to handle maximum values as the game does that internally.
 /// </summary>
 /// <param name="instance">Instance of the player's stats.</param>
 public void applyCurrentRegen(PlayerCharacterStats instance)
 {
     if (gameData.CurrentStaminaRegen != 0)
     {
         curStamField.SetValue(instance, Mathf.Clamp((float)curStamField.GetValue(instance) + gameData.CurrentStaminaRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxStamina));
     }
     if (gameData.CurrentHealthRegen != 0)
     {
         curHealthField.SetValue(instance, Mathf.Clamp((float)curHealthField.GetValue(instance) + gameData.CurrentHealthRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxHealth));
     }
     if (gameData.CurrentManaRegen != 0)
     {
         curManaField.SetValue(instance, Mathf.Clamp((float)curManaField.GetValue(instance) + gameData.CurrentManaRegen * UpdateDeltaTime(instance), 0f, instance.ActiveMaxMana));
     }
 }
Example #12
0
 private static void ApplySittingRegen(PlayerCharacterStats instance)
 {
     if (Meditation.EnableBurntSitRegen.Value)
     {
         UpdateStats(instance, "m_burntStamina", Meditation.BurntStaminaRegen.Value, instance.ActiveMaxStamina, 0.9f);
         UpdateStats(instance, "m_burntHealth", Meditation.BurntHealthRegen.Value, instance.ActiveMaxHealth, 0.9f);
         UpdateStats(instance, "m_burntMana", Meditation.BurntManaRegen.Value, instance.ActiveMaxMana, 0.5f);
     }
     if (Meditation.EnableCurrentSitRegen.Value)
     {
         UpdateStats(instance, "m_stamina", Meditation.CurrentStaminaRegen.Value, instance.ActiveMaxStamina, 1.0f);
         UpdateStats(instance, "m_health", Meditation.CurrentHealthRegen.Value, instance.ActiveMaxHealth, 1.0f);
         UpdateStats(instance, "m_mana", Meditation.CurrentManaRegen.Value, instance.ActiveMaxMana, 1.0f);
     }
 }
Example #13
0
        private void ApplyMod(On.PlayerCharacterStats.orig_OnUpdateStats original, PlayerCharacterStats instance)
        {
            // Update the instance before applying changes so that all the stats are normalised again.
            original.Invoke(instance);

            // Get the required player details.
            Character character = (Character)m_character.GetValue(instance);
            int       playerId  = character.OwnerPlayerSys.PlayerID;

            // If sprinting, modify the movement speed.
            if (m_playerInputManager[playerId].GetButton("Sprint"))
            {
                m_movementSpeed.SetValue(instance, new Stat(defaultMoveSpeed * modOptions.SprintSpeedMultiplier));
                // UNTESTED.
                //character.Speed = moveSpeed.CurrentValue * modOptions.SprintSpeedMultiplier;
            }
            else
            {
                m_movementSpeed.SetValue(instance, new Stat(defaultMoveSpeed));
            }
        }
Example #14
0
        private void onUpdateStatsHook(On.PlayerCharacterStats.orig_OnUpdateStats orig, PlayerCharacterStats self)
        {
            orig(self);

            if (Input.GetKeyDown(KeyCode.F12))
            {
                FieldInfo pcStatsInfo = typeof(PlayerCharacterStats).GetField("m_usedBreakthroughCount", BindingFlags.Instance | BindingFlags.NonPublic);

                Debug.Log("Breakthrough use count : BEFORE " + pcStatsInfo.GetValue(self));
                pcStatsInfo.SetValue(self, 0);
                Debug.Log("Breakthrough use count : AFTER " + pcStatsInfo.GetValue(self));
            }
        }
Example #15
0
 private void GetDetails(On.PlayerCharacterStats.orig_OnStart original, PlayerCharacterStats instance)
 {
     this.defaultMoveSpeed = instance.MovementSpeed;
 }
 private void Start()
 {
     anim           = GetComponent <Animator>();
     characterStats = (PlayerCharacterStats)GetComponent <PlayerCharacterStats>();
 }
Example #17
0
            public static bool Prefix(PlayerCharacterStats __instance)
            {
                var self      = __instance;
                var character = self.GetComponent <Character>();

                // get config
                var nolimits        = NO_CONTAINER_LIMIT.Value;
                var removeAllBurden = DISABLE_ALL_BURDENS.Value || character.Cheats.NotAffectedByWeightPenalties;

                float totalWeight = removeAllBurden ? 0f : character.Inventory.TotalWeight;

                // update general burden
                if (totalWeight > 30f)
                {
                    self.m_generalBurdenPenaltyActive = true;

                    float weightRatio = totalWeight / 30f;

                    if (weightRatio != self.m_generalBurdenRatio)
                    {
                        self.m_generalBurdenRatio = weightRatio;

                        self.m_movementSpeed.AddMultiplierStack("Burden", weightRatio * -0.02f);
                        self.m_staminaRegen.AddMultiplierStack("Burden", weightRatio * -0.05f);
                        self.m_staminaUseModifiers.AddMultiplierStack("Burden_Dodge", weightRatio * 0.05f, TagSourceManager.Dodge);
                        self.m_staminaUseModifiers.AddMultiplierStack("Burden_Sprint", weightRatio * 0.05f, TagSourceManager.Sprint);
                    }
                }
                else if (self.m_generalBurdenPenaltyActive)
                {
                    self.m_generalBurdenRatio         = 1f;
                    self.m_generalBurdenPenaltyActive = false;

                    self.m_movementSpeed.RemoveMultiplierStack("Burden");
                    self.m_staminaRegen.RemoveMultiplierStack("Burden");
                    self.m_staminaUseModifiers.RemoveMultiplierStack("Burden_Dodge");
                    self.m_staminaUseModifiers.RemoveMultiplierStack("Burden_Sprint");
                }

                // update pouch burden
                float pouchWeightCapacityRatio = (removeAllBurden || nolimits)
                                                    ? -1f
                                                    : character.Inventory.PouchWeightCapacityRatio;

                if (pouchWeightCapacityRatio != self.m_pouchBurdenRatio)
                {
                    self.m_pouchBurdenRatio = pouchWeightCapacityRatio;

                    if (self.m_pouchBurdenThreshold)
                    {
                        self.m_pouchBurdenThreshold.UpdateThresholds(Mathf.Clamp01(pouchWeightCapacityRatio - 1f), 1f, true);
                    }

                    if (self.m_pouchBurdenRatio > 1f)
                    {
                        self.m_pouchBurdenPenaltyActive = true;

                        self.m_movementSpeed.AddMultiplierStack("PouchBurden", self.m_pouchBurdenPenaltyCurve.Evaluate(self.m_pouchBurdenRatio - 1f));

                        if (character.CharacterUI)
                        {
                            character.CharacterUI.ShowInfoNotification(LocalizationManager.Instance.GetLoc("Notification_Inventory_PouchOverweight"));
                        }
                    }
                    else if (self.m_pouchBurdenPenaltyActive)
                    {
                        self.m_pouchBurdenPenaltyActive = false;
                        self.m_movementSpeed.RemoveMultiplierStack("PouchBurden");
                    }
                }

                // update bag burden
                float bagWeightCapacityRatio = (removeAllBurden || nolimits)
                                                ? -1f
                                                : character.Inventory.BagWeightCapacityRatio;

                if (bagWeightCapacityRatio != self.m_bagBurdenRatio)
                {
                    self.m_bagBurdenRatio = bagWeightCapacityRatio;

                    if (self.m_bagBurdenThreshold)
                    {
                        self.m_bagBurdenThreshold.UpdateThresholds(Mathf.Clamp01(bagWeightCapacityRatio - 1f), 1f, true);
                    }

                    if (self.m_bagBurdenRatio > 1f)
                    {
                        self.m_backBurdenPenaltyActive = true;
                        self.m_movementSpeed.AddMultiplierStack("BagBurden", self.m_bagBurdenPenaltyCurve.Evaluate(self.m_bagBurdenRatio - 1f));

                        if (character.CharacterUI)
                        {
                            character.CharacterUI.ShowInfoNotification(LocalizationManager.Instance.GetLoc("Notification_Inventory_BagOverweight"));
                        }
                    }
                    else if (self.m_backBurdenPenaltyActive)
                    {
                        self.m_backBurdenPenaltyActive = false;
                        self.m_movementSpeed.RemoveMultiplierStack("BagBurden");
                    }
                }

                //Instance.UpdatePlayer(m_character);

                return(false);
            }
Example #18
0
        //public void CustomDifficultyManaAugmentPatch(On.CharacterStats.orig_RefreshVitalMaxStat original, CharacterStats instance, bool _updateNeeds = false)
        //{
        //    if (gameData.ManaStaminaReduction != 0 || gameData.ManaHealthReduction != 0 || gameData.ManaAugment != 0)
        //    {
        //        FieldInfo m_character = typeof(CharacterStats).GetField("m_character", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
        //        Character character = (Character)m_character.GetValue(instance);
        //        Stat maxHealthStat = (Stat)healthField.GetValue(instance);
        //        Stat maxStamina = (Stat)stamField.GetValue(instance);
        //        Stat maxManaStat = (Stat)manaField.GetValue(instance);
        //        StatStack manaHealthReduction = (StatStack)m_manaHealthReduction.GetValue(instance);
        //        StatStack manaStaminaReduction = (StatStack)m_manaStaminaReduction.GetValue(instance);
        //        StatStack manaAugmentation = (StatStack)m_manaAugmentation.GetValue(instance);
        //        if (manaHealthReduction != null && gameData.ManaHealthReduction != 0)
        //        {
        //            manaHealthReduction.Refresh((int)m_manaPoint.GetValue(instance) * gameData.ManaHealthReduction + character.Inventory.Equipment.GetMaxHealthBonus());
        //        }
        //        if (manaStaminaReduction != null && gameData.ManaStaminaReduction != 0)
        //        {
        //            manaStaminaReduction.Refresh((int)m_manaPoint.GetValue(instance) * gameData.ManaStaminaReduction);
        //        }
        //        if (manaAugmentation != null && gameData.ManaAugment != 0)
        //        {
        //            manaAugmentation.Refresh((int)m_manaPoint.GetValue(instance) * gameData.ManaAugment);
        //        }
        //        maxHealthStat.Update();
        //        maxStamina.Update();
        //        maxManaStat.Update();
        //    }
        //    else
        //    {
        //        original.Invoke(instance, _updateNeeds);
        //    }

        //}

        public void CustomDifficultyPlayerStatsPatch(On.PlayerCharacterStats.orig_OnAwake original, PlayerCharacterStats instance)
        {
            original.Invoke(instance);
            applyStatsRegen(instance);
            if (gameData.StamBoost != 0)
            {
                stamField.SetValue(instance, new Stat(instance.MaxStamina + gameData.StamBoost));
            }
            if (gameData.HealthBoost != 0)
            {
                healthField.SetValue(instance, new Stat(instance.MaxHealth + gameData.HealthBoost));
            }
            if (gameData.ManaBoost != 0)
            {
                manaField.SetValue(instance, new Stat(instance.MaxMana + gameData.ManaBoost));
            }
            if (gameData.MoveBoost != 0)
            {
                moveField.SetValue(instance, new Stat(instance.MovementSpeed + gameData.MoveBoost));
            }
            if (gameData.FoodDepleteRate != 0)
            {
                foodRateField.SetValue(instance, new Stat((float)foodRateField.GetValue(instance) - gameData.FoodDepleteRate));
            }
            if (gameData.DrinkDepleteRate != 0)
            {
                drinkRateField.SetValue(instance, new Stat((float)drinkRateField.GetValue(instance) - gameData.DrinkDepleteRate));
            }
            if (gameData.SleepDepleteRate != 0)
            {
                sleepRateField.SetValue(instance, new Stat((float)sleepRateField.GetValue(instance) - gameData.SleepDepleteRate));
            }
            if (gameData.StabRegen != 0)
            {
                m_stabilityRegen.SetValue(instance, new Stat((float)m_stabilityRegen.GetValue(instance) + gameData.StabRegen));
            }
        }
Example #19
0
        public static float UpdateDeltaTime(PlayerCharacterStats instance)
        {
            FieldInfo m_lastUpdateTime = typeof(CharacterStats).GetField("m_lastUpdateTime", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            return(((float)m_lastUpdateTime.GetValue(instance) == -999f) ? 0f : (Time.time - (float)m_lastUpdateTime.GetValue(instance)));
        }
Example #20
0
 public void CustomDifficultyBurntStatPatch(On.PlayerCharacterStats.orig_OnUpdateStats original, PlayerCharacterStats instance)
 {
     if (gameData.BurntStaminaRegen != 0 || gameData.BurntHealthRegen != 0 || gameData.BurntManaRegen != 0)
     {
         Character character = (Character)m_character.GetValue(instance);
         if (gameData.EnableBurntRegenSit)
         {
             if ((Character.SpellCastType)m_currentSpellCastType.GetValue(character) == Character.SpellCastType.Sit)
             {
                 applyBurntRegen(instance);
             }
         }
         else
         {
             applyBurntRegen(instance);
         }
     }
     original.Invoke(instance);
 }
Example #21
0
        public static float GetPlayerStat(PlayerCharacterStats stats, string field)
        {
            Stat _stat = (Stat)GetValue(typeof(PlayerCharacterStats), stats, field);

            return(_stat.CurrentValue);
        }
Example #22
0
        /// <summary>
        /// Regens stats if any of them aren't at full.
        /// </summary>
        /// <param name="original">Update stats function which this is hooked onto.</param>
        /// <param name="instance">Instance of the player's stats.</param>
        public void MeditationBurntStatPatch(On.PlayerCharacterStats.orig_OnUpdateStats original, PlayerCharacterStats instance)
        {
            bool burntRegenEnabled   = gameData.BurntStaminaRegen != 0 || gameData.BurntHealthRegen != 0 || gameData.BurntManaRegen != 0;
            bool currentRegenEnabled = gameData.CurrentStaminaRegen != 0 || gameData.CurrentHealthRegen != 0 || gameData.CurrentManaRegen != 0;

            if (burntRegenEnabled || currentRegenEnabled)
            {
                // Get the player.
                Character character = (Character)m_character.GetValue(instance);

                // Apply regen if we're sitting.
                if ((Character.SpellCastType)m_currentSpellCastType.GetValue(character) == Character.SpellCastType.Sit)
                {
                    if (burntRegenEnabled)
                    {
                        applyBurntRegen(instance);
                    }
                    if (currentRegenEnabled)
                    {
                        applyCurrentRegen(instance);
                    }
                }
            }


            // Call the hooked function with the overridden player stats.

            original.Invoke(instance);
        }
Example #23
0
 static void PlayerCharacterStats_OnStart_Post(PlayerCharacterStats __instance)
 => UpdateBaseStaminaRegen(__instance);
Example #24
0
            public static bool Prefix(PlayerCharacterStats __instance)
            {
                var self = __instance;

                // get private fields
                var m_character = self.GetComponent <Character>();

                var m_generalBurdenPenaltyActive = (bool)At.GetValue(typeof(PlayerCharacterStats), self, "m_generalBurdenPenaltyActive");
                var m_pouchBurdenPenaltyActive   = (bool)At.GetValue(typeof(PlayerCharacterStats), self, "m_pouchBurdenPenaltyActive");
                var m_backBurdenPenaltyActive    = (bool)At.GetValue(typeof(PlayerCharacterStats), self, "m_backBurdenPenaltyActive");

                var m_movementSpeed       = (Stat)At.GetValue(typeof(CharacterStats), self as CharacterStats, "m_movementSpeed");
                var m_staminaRegen        = (Stat)At.GetValue(typeof(CharacterStats), self as CharacterStats, "m_staminaRegen");
                var m_staminaUseModifiers = (Stat)At.GetValue(typeof(CharacterStats), self as CharacterStats, "m_staminaUseModifiers");

                // get config
                var nolimits        = (bool)Instance.config.GetValue(Settings.NoContainerLimit);
                var removeAllBurden = (bool)Instance.config.GetValue(Settings.DisableAllBurdens) || m_character.Cheats.NotAffectedByWeightPenalties;

                float totalWeight = removeAllBurden ? 0f : m_character.Inventory.TotalWeight;

                // update general burden
                if (totalWeight > 30f)
                {
                    At.SetValue(true, typeof(PlayerCharacterStats), self, "m_generalBurdenPenaltyActive");

                    float num = totalWeight / 30f;

                    float m_generalBurdenRatio = (float)At.GetValue(typeof(PlayerCharacterStats), self, "m_generalBurdenRatio");

                    if (num != m_generalBurdenRatio)
                    {
                        At.SetValue(num, typeof(PlayerCharacterStats), self, "m_generalBurdenRatio");

                        m_movementSpeed.AddMultiplierStack("Burden", num * -0.02f);
                        m_staminaRegen.AddMultiplierStack("Burden", num * -0.05f);
                        m_staminaUseModifiers.AddMultiplierStack("Burden_Dodge", num * 0.05f, TagSourceManager.Dodge);
                        m_staminaUseModifiers.AddMultiplierStack("Burden_Sprint", num * 0.05f, TagSourceManager.Sprint);
                    }
                }
                else if (m_generalBurdenPenaltyActive)
                {
                    At.SetValue(1f, typeof(PlayerCharacterStats), self, "m_generalBurdenRatio");
                    At.SetValue(false, typeof(PlayerCharacterStats), self, "m_generalBurdenPenaltyActive");

                    m_movementSpeed.RemoveMultiplierStack("Burden");
                    m_staminaRegen.RemoveMultiplierStack("Burden");
                    m_staminaUseModifiers.RemoveMultiplierStack("Burden_Dodge");
                    m_staminaUseModifiers.RemoveMultiplierStack("Burden_Sprint");
                }

                // update pouch burden
                float pouchWeightCapacityRatio = (removeAllBurden || nolimits) ? -1f : m_character.Inventory.PouchWeightCapacityRatio;
                float m_pouchBurdenRatio       = (float)At.GetValue(typeof(PlayerCharacterStats), self, "m_pouchBurdenRatio");

                if (pouchWeightCapacityRatio != m_pouchBurdenRatio)
                {
                    At.SetValue(pouchWeightCapacityRatio, typeof(PlayerCharacterStats), self, "m_pouchBurdenRatio");
                    m_pouchBurdenRatio = pouchWeightCapacityRatio;

                    var m_pouchBurdenThreshold = (StatThreshold)At.GetValue(typeof(PlayerCharacterStats), self, "m_pouchBurdenThreshold");

                    if (m_pouchBurdenThreshold)
                    {
                        m_pouchBurdenThreshold.UpdateThresholds(Mathf.Clamp01(pouchWeightCapacityRatio - 1f), 1f, true);
                    }

                    if (m_pouchBurdenRatio > 1f)
                    {
                        At.SetValue(true, typeof(PlayerCharacterStats), self, "m_pouchBurdenPenaltyActive");

                        var   m_pouchBurdenPenaltyCurve = (AnimationCurve)At.GetValue(typeof(PlayerCharacterStats), self, "m_pouchBurdenPenaltyCurve");
                        float value = m_pouchBurdenPenaltyCurve.Evaluate(m_pouchBurdenRatio - 1f);

                        m_movementSpeed.AddMultiplierStack("PouchBurden", value);
                        if (m_character.CharacterUI)
                        {
                            m_character.CharacterUI.ShowInfoNotification(LocalizationManager.Instance.GetLoc("Notification_Inventory_PouchOverweight"));
                        }
                    }
                    else if (m_pouchBurdenPenaltyActive)
                    {
                        At.SetValue(false, typeof(PlayerCharacterStats), self, "m_pouchBurdenPenaltyActive");
                        m_movementSpeed.RemoveMultiplierStack("PouchBurden");
                    }
                }

                // update bag burden
                float bagWeightCapacityRatio = (removeAllBurden || nolimits) ? -1f : m_character.Inventory.BagWeightCapacityRatio;
                float m_bagBurdenRatio       = (float)At.GetValue(typeof(PlayerCharacterStats), self, "m_bagBurdenRatio");

                if (bagWeightCapacityRatio != m_bagBurdenRatio)
                {
                    m_bagBurdenRatio = bagWeightCapacityRatio;

                    At.SetValue(bagWeightCapacityRatio, typeof(PlayerCharacterStats), self, "m_bagBurdenRatio");

                    var m_bagBurdenThreshold = (StatThreshold)At.GetValue(typeof(PlayerCharacterStats), self, "m_bagBurdenThreshold");

                    if (m_bagBurdenThreshold)
                    {
                        m_bagBurdenThreshold.UpdateThresholds(Mathf.Clamp01(bagWeightCapacityRatio - 1f), 1f, true);
                    }
                    if (m_bagBurdenRatio > 1f)
                    {
                        At.SetValue(true, typeof(PlayerCharacterStats), self, "m_backBurdenPenaltyActive");

                        var m_bagBurdenPenaltyCurve = (AnimationCurve)At.GetValue(typeof(PlayerCharacterStats), self, "m_bagBurdenPenaltyCurve");

                        float value2 = m_bagBurdenPenaltyCurve.Evaluate(m_bagBurdenRatio - 1f);
                        m_movementSpeed.AddMultiplierStack("BagBurden", value2);
                        if (m_character.CharacterUI)
                        {
                            m_character.CharacterUI.ShowInfoNotification(LocalizationManager.Instance.GetLoc("Notification_Inventory_BagOverweight"));
                        }
                    }
                    else if (m_backBurdenPenaltyActive)
                    {
                        At.SetValue(false, typeof(PlayerCharacterStats), self, "m_backBurdenPenaltyActive");
                        m_movementSpeed.RemoveMultiplierStack("BagBurden");
                    }
                }

                //Instance.UpdatePlayer(m_character);

                return(false);
            }
Example #25
0
 public void CustomDifficultyWeightPatch(On.PlayerCharacterStats.orig_OnUpdateWeight original, PlayerCharacterStats instance)
 {
     original.Invoke(instance);
     if (gameData.PouchCapacity != 0 || gameData.BackpackCapacity != 0)
     {
         Character character = (Character)m_character.GetValue(instance);
         Stat      s1        = (Stat)moveField.GetValue(instance);
         Stat      s2        = (Stat)stamRegenField.GetValue(instance);
         Stat      s3        = (Stat)m_staminaUseModifiers.GetValue(instance);
         if ((bool)m_generalBurdenPenaltyActive.GetValue(instance))
         {
             m_generalBurdenRatio.SetValue(instance, 1f);
             m_generalBurdenPenaltyActive.SetValue(instance, false);
             s1.RemoveMultiplierStack("Burden");
             s2.RemoveMultiplierStack("Burden");
             s3.RemoveMultiplierStack("Burden_Dodge");
             s3.RemoveMultiplierStack("Burden_Sprint");
         }
         if (!character.Cheats.NotAffectedByWeightPenalties)
         {
             float totalWeight = character.Inventory.TotalWeight;
             if (totalWeight > gameData.PouchCapacity + gameData.BackpackCapacity)
             {
                 m_generalBurdenPenaltyActive.SetValue(instance, true);
                 float num = totalWeight / gameData.PouchCapacity + gameData.BackpackCapacity;
                 if (num != (float)m_generalBurdenRatio.GetValue(instance))
                 {
                     m_generalBurdenRatio.SetValue(instance, num);
                     s1.AddMultiplierStack("Burden", num * -0.02f);
                     s2.AddMultiplierStack("Burden", num * -0.05f);
                     s3.AddMultiplierStack("Burden_Dodge", num * 0.05f, TagSourceManager.Dodge);
                     s3.AddMultiplierStack("Burden_Sprint", num * 0.05f, TagSourceManager.Sprint);
                 }
             }
         }
         moveField.SetValue(instance, s1);
         stamRegenField.SetValue(instance, s2);
         m_staminaUseModifiers.SetValue(instance, s3);
     }
 }