public void OnEvent(IEvent e) { switch (e) { case WentDownStairs down: if (!FavorPerTeam.ContainsKey(down.Agent.Team)) { FavorPerTeam[down.Agent.Team] = 0; } FavorPerTeam[down.Agent.Team] -= 5; break; case UsedItem used: foreach (var material in GetPreferredMaterials()) { var wasGood = used.PreviousItem?.MadeOf == material; var good = used.Item?.MadeOf == material; if (good && !wasGood) { Like(e.Level, used.Agent, $"your {material} {used.Item.DisplayName}"); } else if (!good && wasGood) { Dislike(e.Level, used.Agent, $"your non-{material} {used.Item.DisplayName}"); } } break; } Archetype.OnEvent(this, e); foreach (var domain in Domains) { domain.OnEvent(this, e); } if (e is NextTurn turn) { if (FavorPerTeam[turn.Player.Team] < 0) { if (Globals.Random.Next(200) < -FavorPerTeam[turn.Player.Team]) { FavorCheck(e.Level, turn.Player); } } else { if (Globals.Random.Next(200) < FavorPerTeam[turn.Player.Team]) { FavorCheck(e.Level, turn.Player); } } } }