示例#1
0
    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);
                }
            }
        }
    }