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; }
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; }