public override void GameComponentOnGUI() { if (debug) { DrawDebugButtons(); } if (LevelEventQueue.Count == 0) { return; } LevelEvent levelEvent = LevelEventQueue.Dequeue(); switch (levelEvent.LevelType) { case LevelEventType.LevelUp: levelEvent.NotifyLevelUp(); break; case LevelEventType.LevelDown: levelEvent.NotifyLevelDown(); break; } }
// If original method increased or decreased skill level, add it to queue for level event notifications. static void Postfix(int __state, int ___levelInt, Pawn ___pawn, SkillRecord __instance) { if (__state == ___levelInt) { return; } if (___pawn.Faction == null) { return; } if (!___pawn.Faction.IsPlayer) { return; } // Ignores level downs 10 -> 9. Fix for some pawns immediately leveling down again after lvl 10. if (__state == 10 && ___levelInt == 9) { if (Settings.ignoreLvl10To9) { return; } } if (!TimerAllowsNotifications(___pawn)) { return; } if (!LevelRecord.ContainsKey(___pawn)) { LevelRecord.Add(___pawn, new Dictionary <SkillDef, int>()); } if (!LevelRecord[___pawn].ContainsKey(__instance.def)) { LevelRecord[___pawn].Add(__instance.def, ___levelInt); } else if (LevelRecord[___pawn][__instance.def] == ___levelInt) { return; } LevelRecord[___pawn][__instance.def] = ___levelInt; LevelEventType levelEventType = __state < ___levelInt ? LevelEventType.LevelUp : LevelEventType.LevelDown; LevelEventQueue.Enqueue(new LevelEvent(___pawn, __instance, levelEventType)); }