public List <BuffFacade> BuildBuffForRound() { List <BuffFacade> buffs = new List <BuffFacade>(); int nR = RoundManager.Round.Level; if (nR <= 10) { BuffFacade facade = BuffFacade.CreateFromBuff((Buff)ScriptableObject.CreateInstance(typeof(Buff))); facade.Buff.Target = Buff.TargetType.Ally; facade.Buff.Effect = Buff.EffectType.Decrease; facade.Buff.Stat = Buff.StatAffect.Random; facade.Buff.Percent = 30f - ((nR - 1) * 3f); if (facade.Buff.Percent > 0) { buffs.Add(facade); } } else { List <StatAffect> stats = new List <StatAffect>(); float maxPercent = (nR - 10f) * 1f; while (maxPercent > 0) { StatAffect randomStat = BuffFacade.RandomStatAffect(null, stats); BuffFacade facade = BuffFacade.CreateFromBuff((Buff)ScriptableObject.CreateInstance(typeof(Buff))); facade.Buff.Target = Buff.TargetType.Ally; facade.Buff.Effect = Buff.EffectType.Increase; if (randomStat == Buff.StatAffect.Random) { buffs[buffs.Count - 1].Buff.Percent += maxPercent; maxPercent = 0; break; } else { stats.Add(randomStat); facade.Buff.Stat = randomStat; } facade.Buff.Percent = (maxPercent <= 1 ? maxPercent : (int)Random.Range(1f, maxPercent)); maxPercent -= facade.Buff.Percent; buffs.Add(facade); } } return(buffs); }
private void DefeatScenariosManager_ActivateDefeatScenario(On.DefeatScenariosManager.orig_ActivateDefeatScenario orig, DefeatScenariosManager self, DefeatScenario _scenario) { try { AreaManager.AreaEnum areaN = (AreaManager.AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); if (_scenario is DefeatScenarioRespawn) { OLogger.Log($"DefeatScenarioRespawn"); } //OLogger.Log($"ActivateDefeatScenario={SceneManagerHelper.ActiveSceneName}"); if (areaN != AreaManager.AreaEnum.CierzoOutside && areaN != AreaManager.AreaEnum.Abrassar && areaN != AreaManager.AreaEnum.Emercar && areaN != AreaManager.AreaEnum.HallowedMarsh && areaN != AreaManager.AreaEnum.Tutorial && areaN != AreaManager.AreaEnum.CierzoDungeon /*&& * (_scenario is DefeatScenarioChangeScene)*/) { OLogger.Log($"FailSafeDefeat!"); /*_scenario = new DefeatScenarioRespawn(); * (_scenario as DefeatScenarioRespawn).AffectBackpack = false; * (_scenario as DefeatScenarioRespawn).RespawnAnimation = SpellCastType.GetUpBelly; * (_scenario as DefeatScenarioRespawn).SpawnSelectionType = SpawnSelectionTypes.Random; * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_respawnTimeLapse").SetValue(_scenario, RespawnTimeLapseType.Hour); * * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntHealthModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.3f, 0.4f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntManaModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntStaminaModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_drinkModifier").SetValue(_scenario, new StatAffect(ChangeType.Multiplier, new Vector2(1.5f, 2.5f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_foodModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_healthModifier").SetValue(_scenario, new StatAffect(ChangeType.TargetRangeRatio, new Vector2(0.4f, 0.5f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_manaModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_sleepModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_staminaModifier").SetValue(_scenario, new StatAffect(ChangeType.Unchanged, new Vector2(0.0f, 0.0f))); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_temperatureModifier").SetValue(_scenario, new StatAffect(ChangeType.TargetRangeRatio, new Vector2(0.5f, 0.5f))); * * //AccessTools.Field(typeof(DefeatScenarioRespawn), "ContractedStatuses").SetValue(_scenario, new StatAffect(ChangeType.TargetRangeRatio, new Vector2(0.5f, 0.5f))); * * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_hourRange").SetValue(_scenario, new Vector2(8.0f, 12.0f)); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_lastSpawn").SetValue(_scenario, 0); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_nextTimeSlotJumpRange").SetValue(_scenario, new Vector2(1.0f, 1.0f)); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_samePlacePos").SetValue(_scenario, new Vector3(0.0f, 0.0f, 0.0f)); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_samePlaceSpawnIndex").SetValue(_scenario, -1); * AccessTools.Field(typeof(DefeatScenarioRespawn), "m_respawnTimeLapse").SetValue(_scenario, DefeatScenarioRespawn.RespawnTimeLapseType.Hour); * orig(self, _scenario); * return;*/ SendNotificationToAllPlayers($"{SceneManagerHelper.ActiveSceneName}"); //self.FailSafeDefeat(); for (int i = 0; i < CharacterManager.Instance.PlayerCharacters.Count; i++) { Character character = CharacterManager.Instance.GetCharacter(CharacterManager.Instance.PlayerCharacters.Values[i]); if (!(bool)character) { continue; } character.StatusEffectMngr.Purge(); character.Stats.RefreshVitalMaxStat(); PlayerSaveData playerSaveData = new PlayerSaveData(character); /*playerSaveData.BurntHealth += character.Stats.MaxHealth * 0.10f; // Reduce burnt health by 10% * playerSaveData.BurntHealth = Mathf.Clamp(playerSaveData.BurntHealth, 0f, character.Stats.MaxHealth * 0.9f); * playerSaveData.Health = character.Stats.MaxHealth;// Mathf.Clamp(playerSaveData.Health, character.Stats.MaxHealth * 0.1f, character.Stats.MaxHealth); * playerSaveData.BurntStamina += character.Stats.MaxStamina * 0.10f; // Reduce burnt stamina by 10% * playerSaveData.BurntStamina = Mathf.Clamp(playerSaveData.BurntStamina, 0f, character.Stats.MaxStamina * 0.9f); * playerSaveData.Stamina = character.Stats.MaxStamina; // Mathf.Clamp(playerSaveData.Stamina, character.Stats.MaxStamina * 0.1f, character.Stats.MaxStamina); * playerSaveData.BurntMana = Mathf.Clamp(playerSaveData.BurntMana, 0f, character.Stats.MaxMana * 0.9f);*/ StatAffect m_burntHealthModifier = new StatAffect(ChangeType.TargetRangeRatio, new Vector2(0.7f, 0.8f)); playerSaveData.BurntHealth = Mathf.Clamp(m_burntHealthModifier.ProcessStat(character.Stats.MaxHealth), 0f, character.Stats.MaxHealth); StatAffect m_healthModifier = new StatAffect(ChangeType.TargetRangeRatio, new Vector2(0.3f, 0.4f)); playerSaveData.Health = Mathf.Clamp(m_healthModifier.ProcessStat(character.Stats.MaxHealth), 0f, character.Stats.MaxHealth); character.Resurrect(playerSaveData, _playAnim: true); character.PlayerStats.RestLastNeedsUpdateTime(); character.ResetCombat(); } NetworkLevelLoader.Instance.RequestReloadLevel(0); return; } } catch (Exception ex) { OLogger.Log($"[{_modName}] DefeatScenariosManager_ActivateDefeatScenario: {ex.Message}"); Debug.Log($"[{_modName}] DefeatScenariosManager_ActivateDefeatScenario: {ex.Message}"); } orig(self, _scenario); }