public override IEnumerable <FiringIncident> MakeIntervalIncidents(IIncidentTarget target)
        {
            voteTracker = Current.Game.GetComponent <StoryTellerVoteTracker>();

            if (!VoteHandler.voteActive &&
                Rand.MTBEventOccurs(ToolkitSettings.ToryTalkerMTBDays, 60000f, 1000f))
            {
                List <VotingIncidentEntry> entries = VotingIncidentsByWeight();
                List <VotingIncidentEntry> winners = new List <VotingIncidentEntry>();

                for (int i = 0; i < ToolkitSettings.VoteOptions && i < 12; i++)
                {
                    winners.Add(
                        entries.Where(s =>
                                      !winners.Contains(s)
                                      ).RandomElementByWeight(
                            (VotingIncidentEntry vi) => vi.weight)
                        );

                    int index = Math.Max(winners.Count - 1, 0);

                    winners[index].incident.helper        = VotingIncidentMaker.makeVotingHelper(winners[index].incident);
                    winners[index].incident.helper.target = target;

                    if (!winners[index].incident.helper.IsPossible())
                    {
                        entries.RemoveAt(i);
                        i--;
                        winners.RemoveAt(index);
                    }
                }

                Dictionary <int, VotingIncident> incidents = new Dictionary <int, VotingIncident>();

                for (int i = 0; i < winners.Count; i++)
                {
                    incidents.Add(i, winners[i].incident);
                }

                StorytellerPack pack = DefDatabase <StorytellerPack> .GetNamed("ToryTalker");

                VoteHandler.QueueVote(new Vote_ToryTalker(incidents, pack, "Which event should happen next?"));
            }

            yield break;
        }
Ejemplo n.º 2
0
        public override IEnumerable <FiringIncident> MakeIntervalIncidents(IIncidentTarget target)
        {
            if (!VoteHandler.voteActive && Rand.MTBEventOccurs(ToolkitSettings.ToryTalkerMTBDays, 60000f, 1000f))
            {
                List <VotingIncidentEntry> entries = VotingIncidentsByWeight();
                List <VotingIncidentEntry> winners = new List <VotingIncidentEntry>();

                for (int i = 0; i < ToolkitSettings.VoteOptions && i < 12; i++)
                {
                    winners.Add(
                        entries.Where(s =>
                                      !winners.Contains(s)
                                      ).RandomElementByWeight(
                            (VotingIncidentEntry vi) => vi.weight)
                        );

                    int index = Math.Max(winners.Count - 1, 0);

                    winners[index].incident.helper        = VotingIncidentMaker.makeVotingHelper(winners[index].incident);
                    winners[index].incident.helper.target = target;

                    if (!winners[index].incident.helper.IsPossible())
                    {
                        entries.RemoveAt(i);
                        i--;
                        winners.RemoveAt(index);
                    }
                }

                Dictionary <int, VotingIncident> incidents = new Dictionary <int, VotingIncident>();

                for (int i = 0; i < winners.Count; i++)
                {
                    incidents.Add(i, winners[i].incident);
                }

                VoteHandler.QueueVote(new Vote_VotingIncident(incidents));
            }

            yield break;
        }