private void UpdateVitals(CharacterStats stats, VitalsInfo ratios, ModConfig config) { float _hp, _hpb, _sp, _spb, _mp, _mpb; stats.RefreshVitalMaxStat(); if (!(bool)config.GetValue(Settings.GameBehaviour) && stats.GetComponent <Character>().IsLocalPlayer) { _hp = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.Health; _hpb = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.BurntHealth; _sp = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.Stamina; _spb = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.BurntStamina; _mp = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.Mana; _mpb = SaveManager.Instance.GetCharacterSave(stats.GetComponent <Character>().UID).PSave.BurntMana; } else { _hp = stats.MaxHealth * ratios.HealthRatio; _hpb = stats.MaxHealth * ratios.BurntHealthRatio; _sp = stats.MaxStamina * ratios.StaminaRatio; _spb = stats.MaxStamina * ratios.BurntStaminaRatio; _mp = stats.MaxMana * ratios.ManaRatio; _mpb = stats.MaxMana * ratios.BurntManaRatio; } stats.SetHealth(_hp); AT.SetValue(_hpb, typeof(CharacterStats), stats, "m_burntHealth"); AT.SetValue(_sp, typeof(CharacterStats), stats, "m_stamina"); AT.SetValue(_spb, typeof(CharacterStats), stats, "m_burntStamina"); stats.SetMana(_mp); AT.SetValue(_mpb, typeof(CharacterStats), stats, "m_burntMana"); }
//util public static void PseudoRegister(ModConfig config) { Dictionary <string, BBSetting> _dict = new Dictionary <string, BBSetting>(); foreach (BBSetting _bbs in config.Settings) { _dict.Add(_bbs.Name, _bbs); } AT.SetValue(_dict, typeof(ModConfig), config, "m_Settings"); }
private void ApplyCustomStats(Character character, ModConfig config, string stackSource, bool flag) { character.Stats.RefreshVitalMaxStat(); character.Stats.RestoreAllVitals(); VitalsInfo _ratios = LoadVitalsInfo(character.UID) ?? new VitalsInfo { HealthRatio = character.HealthRatio, BurntHealthRatio = character.Stats.BurntHealthRatio, StaminaRatio = character.StaminaRatio, BurntStaminaRatio = character.Stats.BurntStaminaRatio, ManaRatio = character.ManaRatio, BurntManaRatio = character.Stats.BurntManaRatio }; foreach (BBSetting _bbs in config.Settings) { if (_bbs is FloatSetting _f) { Tag _tag = TagSourceManager.Instance.GetTag(AT.GetTagUid(_f.Name)); //bool _mult = (bool)config.GetValue(_f.Name + Settings.ModMult); if (flag) { SetCustomStat(character.Stats, stackSource, _tag, (_f.m_value / 100f), false, config); } else { ClearCustomStat(character.Stats, _tag, stackSource, false); } } } UpdateVitals(character.Stats, _ratios, config); if (!character.IsAI) { SaveVitalsInfo(character.UID); } }
// monster switch statement ahead... private void SetCustomStat(CharacterStats stats, string stackSource, Tag statTag, float value, bool mult, ModConfig config) { ClearCustomStat(stats, statTag, stackSource, mult); stats.RefreshVitalMaxStat(); Stat[] _dmg = (Stat[])AT.GetValue(typeof(CharacterStats), stats, "m_damageTypesModifier"); Stat[] _pro = (Stat[])AT.GetValue(typeof(CharacterStats), stats, "m_damageProtection"); Stat[] _res = (Stat[])AT.GetValue(typeof(CharacterStats), stats, "m_damageResistance"); switch (statTag.TagName) { case "MaxHealth": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_maxHealthStat"), value, CharacterStats.MIN_MAXHEALTH_LIMIT, config)), mult); break; case "HealthRegen": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_healthRegen"), value, Settings.Minimum, config)), mult); break; case "MaxStamina": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_maxStamina"), value, CharacterStats.MIN_MAXSTAMINA_LIMIT, config)), mult); break; case "StaminaRegen": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_staminaRegen"), value, Settings.MinimumMod, config)), mult); break; case "StaminaUse": case "StaminaCostReduction": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_staminaUseModifiers"), value, Settings.Minimum, config)), mult); break; case "MaxMana": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_maxManaStat"), value, Settings.Minimum, config)), mult); break; case "ManaRegen": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_manaRegen"), value, Settings.Minimum, config)), mult); break; case "ManaUse": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_manaUseModifiers"), value, Settings.Minimum, config)), mult); break; case "Impact": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_impactModifier"), value, Settings.Minimum, config)), mult); break; case "AllDamages": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_damageModifiers"), value, Settings.Minimum, config)), mult); break; case "ImpactResistance": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_impactResistance"), value, Settings.Minimum, config)), mult); break; case "StabilityRegen": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_stabilityRegen"), value, Settings.MinimumMod, config)), mult); break; case "MovementSpeed": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_movementSpeed"), value, Settings.MinimumMod, config)), mult); break; case "AttackSpeed": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_attackSpeedModifier"), value, Settings.MinimumMod, config)), mult); break; case "DodgeInvulnerabilityModifier": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_dodgeInvulneratiblityModifier"), value, Settings.MinimumMod, config)), mult); break; case "Detectability": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_detectability"), value, Settings.Minimum, config)), mult); break; case "VisualDetectability": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_visualDetectability"), value, Settings.Minimum, config)), mult); break; case "SkillCooldownModifier": stats.AddStatStack(statTag, new StatStack(stackSource, Modify(mult, AT.GetCharacterStat(stats, "m_skillCooldownModifier"), value, Settings.MinimumMod, config)), mult); break; } }