private DefeatScenario DefeatScenariosContainer_ChooseScenario(On.DefeatScenariosContainer.orig_ChooseScenario orig, DefeatScenariosContainer self)
    {
        DefeatScenario d = orig(self);

        OLogger.Log($"ChooseScenario={d}");
        return(d);
    }
    private void DefeatScenariosContainer_AwakeInit(On.DefeatScenariosContainer.orig_AwakeInit orig, DefeatScenariosContainer self)
    {
        orig(self);
        try
        {
            AreaManager.AreaEnum areaN = (AreaManager.AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(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)
            {
                //OLogger.Log($"{areaN}");
                DefeatTable         m_tbl = (DefeatTable)AccessTools.Field(typeof(DefeatScenariosContainer), "m_eventChances").GetValue(self);
                List <RandomChance> lstCh = new List <RandomChance>((List <RandomChance>)AccessTools.Field(typeof(DefeatTable), "m_chances").GetValue(m_tbl));
                //OLogger.Log($"DefeatScenarioRespawn_CNT={lstCh.Count(c => c.Element is DefeatScenarioRespawn && c.HasValidConditions())}");
                if (lstCh.Count(c => (c.Element is DefeatScenarioRespawn || c.Element is DefeatScenarioChangeScene && (c.Element as DefeatScenarioChangeScene).Area == areaN) &&
                                c.HasValidConditions()) == 0)
                {
                    //OLogger.Log("No good scenarios");
                    return;
                }
                m_tbl.Clear();
                foreach (var item in lstCh)
                {
                    //OLogger.Log($"   {item.Element.name} {(item.Element is DefeatScenarioChangeScene ? (item.Element as DefeatScenarioChangeScene).Area.ToString() : "")}");
                    if (item.Element is DefeatScenarioRespawn || item.Element is DefeatScenarioChangeScene && (item.Element as DefeatScenarioChangeScene).Area == areaN)
                    {
                        //OLogger.Log($"{item.ChanceReduction} {item.ConditionCount} {item.InitialChance} {item.Chance}");
                        m_tbl.AddChance(item);
                    }
                }

                /*DefeatScenario d = m_tbl.Throw();
                 * if (d == null)
                 * {
                 *  OLogger.Log($"RESET");
                 *  m_tbl.Clear();
                 *  foreach (var item in lstCh)
                 *  {
                 *      m_tbl.AddChance(item);
                 *  }
                 * }
                 * else
                 * {
                 *  OLogger.Log($"SEL={d.GetType().Name}");
                 * }*/
            }
        }
        catch (Exception ex)
        {
            OLogger.Error(ex.Message);
        }
    }
    private void DefeatScenariosContainer_StartInit(On.DefeatScenariosContainer.orig_StartInit orig, DefeatScenariosContainer self)
    {
        orig(self);
        try
        {
            DictionaryExt <string, DefeatScenario> m_events = (DictionaryExt <string, DefeatScenario>)AccessTools.Field(typeof(DefeatScenariosContainer), "m_events").GetValue(self);
            //OLogger.Log($"Count={m_events.Count}");
            for (int i = 0; i < m_events.Count; i++)
            {
                OLogger.Log($"{i}={m_events.Values[i].GetType().Name}");
                DefeatScenario _scenario = m_events.Values[i];
                if (_scenario is DefeatScenarioRespawn)
                {
                    //OLogger.Log($"DefeatScenarioRespawn");
                    DefeatScenarioRespawn test = _scenario as DefeatScenarioRespawn;

                    /*OLogger.Log($"AffectBackpack={test.AffectBackpack}");
                     * OLogger.Log($"RespawnAnimation={test.RespawnAnimation}");
                     * OLogger.Log($"SpawnSelectionType={test.SpawnSelectionType}");
                     * OLogger.Log($"m_respawnTimeLapse={(RespawnTimeLapseType)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_respawnTimeLapse").GetValue(test)}");*/
                    StatAffect s;
                    ChangeType c;
                    Vector2    r;
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntHealthModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_burntHealthModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntManaModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_burntManaModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_burntStaminaModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_burntStaminaModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_drinkModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_drinkModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_foodModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_foodModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_healthModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_healthModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_manaModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_manaModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_sleepModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_sleepModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_staminaModifer").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_staminaModifier={c} - {r}");
                    }
                    s = (StatAffect)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_temperatureModifier").GetValue(test);
                    c = (ChangeType)AccessTools.Field(typeof(StatAffect), "m_changeType").GetValue(s);
                    r = (Vector2)AccessTools.Field(typeof(StatAffect), "m_ratio").GetValue(s);
                    if (!s.IsUnchanged)
                    {
                        OLogger.Log($"m_temperatureModifier={c} - {r}");
                    }

                    //OLogger.Log($"ContractedStatuses_CNT={((StatusEffectContraction[])AccessTools.Field(typeof(DefeatScenarioRespawn), "ContractedStatuses").GetValue(test)).Length}");
                    foreach (var item in (StatusEffectContraction[])AccessTools.Field(typeof(DefeatScenarioRespawn), "ContractedStatuses").GetValue(test))
                    {
                        StatusEffect se = (StatusEffect)AccessTools.Field(typeof(StatusEffectContraction), "m_statusEffect").GetValue(item);
                        int          m_chancesToContract = (int)AccessTools.Field(typeof(StatusEffectContraction), "m_chancesToContract").GetValue(item);
                        OLogger.Log($"Status={se} ({m_chancesToContract}%)");
                    }

                    /*OLogger.Log($"m_addedQuestEvents_CNT={((QuestEventReference[])AccessTools.Field(typeof(DefeatScenarioRespawn), "m_addedQuestEvents").GetValue(test)).Length}");
                     * OLogger.Log($"m_defeatSpawns_CNT={((DefeatSpawn[])AccessTools.Field(typeof(DefeatScenarioRespawn), "m_defeatSpawns").GetValue(test)).Length}");
                     * foreach (var item in (DefeatSpawn[])AccessTools.Field(typeof(DefeatScenarioRespawn), "m_defeatSpawns").GetValue(test))
                     * {
                     *  OLogger.Log($"   {item.DefeatScenario.GetType().Name}");
                     * }
                     *
                     * OLogger.Log($"m_nextTimeSlots_CNT={((EnvironmentConditions.TimeOfDayTimeSlot[])AccessTools.Field(typeof(DefeatScenarioRespawn), "m_nextTimeSlots").GetValue(test)).Length}");
                     * OLogger.Log($"m_removedQuestEvents_CNT={((QuestEventReference[])AccessTools.Field(typeof(DefeatScenarioRespawn), "m_removedQuestEvents").GetValue(test)).Length}");
                     *
                     * /*OLogger.Log($"m_hourRange={(Vector2)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_hourRange").GetValue(test)}");
                     * OLogger.Log($"m_lastSpawn={(int)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_lastSpawn").GetValue(test)}");
                     * OLogger.Log($"m_nextTimeSlotJumpRange={(Vector2)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_nextTimeSlotJumpRange").GetValue(test)}");*/
                    //OLogger.Log($"m_samePlacePos={(Vector3)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_samePlacePos").GetValue(test)}");
                    //OLogger.Log($"m_samePlaceSpawnIndex={(int)AccessTools.Field(typeof(DefeatScenarioRespawn), "m_samePlaceSpawnIndex").GetValue(test)}");
                }
            }
        }
        catch (Exception ex)
        {
            OLogger.Error(ex.Message);
        }
    }