public bool Paid(Map map) { CompetitionTableRecord playerRecord = competitionTableRecords?.FirstOrDefault(x => x.Faction == Faction.OfPlayer); if (playerRecord == null) { Messages.Message("Competitions_NeedToStartForPaid".Translate(), MessageTypeDefOf.NeutralEvent); return(false); } if (playerRecord.Paid) { Messages.Message("Competitions_AlreadyPaid".Translate(), MessageTypeDefOf.NeutralEvent); return(false); } if (PriceUtils.TakeSilverFromPlayer(600, map)) { playerRecord.Paid = true; Find.LetterStack.ReceiveLetter("Competitions_JudgPaidTitle".Translate(), "Competitions_JudgPaidDesc".Translate(), LetterDefOf.PositiveEvent); return(true); } return(false); }
public void DayPassed() { if (competitionTableRecords != null) { foreach (var competition in competitionTableRecords) { int factor = Rand.Range(10, 20) + competition.SkillLevel; if (Rand.Chance(0.12f)) { factor += Rand.Range(4, 8); } if (competition.Paid) { factor += 7; } competition.Score += factor; } competitionTableRecords.ForEach(x => { if (x.Pawn == null) { Pawn p = PawnGenerator.GeneratePawn(x.Faction.RandomPawnKind()); Find.WorldPawns.PassToWorld(p); } }); competitionTableRecords.SortByDescending(x => x.Score); CompetitionTableRecord dayLeader = competitionTableRecords.FirstOrDefault(); StringBuilder builder = new StringBuilder(); string dayTitle = "Competitions_DayResultTitle".Translate(day, dayLeader.Pawn.Name.ToStringFull, dayLeader.Faction.Name); builder.AppendLine(dayTitle); for (int i = 0; i < competitionTableRecords.Count; i++) { CompetitionTableRecord competitionTableRecord = competitionTableRecords[i]; if (competitionTableRecord.Faction == Faction.OfPlayer) { builder.Append($"{i + 1}. {competitionTableRecord.Pawn.Name.ToStringFull} - {competitionTableRecord.Score} {ScorePlaceholder} [{YouPlaceholder}]\n"); } else { builder.Append($"{i + 1}. {competitionTableRecord.Pawn.Name.ToStringFull} - {competitionTableRecord.Score} {ScorePlaceholder}\n"); } } Find.LetterStack.ReceiveLetter("Competitions_DayResultTitle2".Translate(day), builder.ToString(), LetterDefOf.PositiveEvent); day++; } }
public void EndCompetitions() { CompEnd = true; CompStarted = false; if (competitionTableRecords != null) { CompetitionTableRecord winner = competitionTableRecords.FirstOrDefault(); Find.LetterStack.ReceiveLetter("Competitions_WinnerTitle".Translate(), "Competitions_WinnerDesc".Translate(CompetitionSkill.LabelCap, winner.Faction.Name, winner.Pawn.Name.ToStringFull, winner.Score, RewardCount), LetterDefOf.PositiveEvent); if (winner.Faction == Faction.OfPlayer) { Thing reward = ThingMaker.MakeThing(ThingDefOf.Silver); reward.stackCount = RewardCount; Map map = Find.AnyPlayerHomeMap; IntVec3 intVec = DropCellFinder.TradeDropSpot(map); DropPodUtility.DropThingsNear(intVec, map, new List <Thing> { reward }, 110, canInstaDropDuringInit: false, leaveSlag: false, canRoofPunch: false); if (winner.Paid && Rand.Chance(0.15f)) { Find.LetterStack.ReceiveLetter("Competitions_JudgePaidFailTitle".Translate(), "Competitions_JudgePaidFailDesc".Translate(), LetterDefOf.NegativeEvent); competitionTableRecords.ForEach(x => { if (x.Faction != Faction.OfPlayer) { x.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -15, reason: "Competitions_JudgePaidReason".Translate()); } }); } var playerAlliance = QuestsManager.Communications.FactionManager.PlayerAlliance; if (playerAlliance != null) { playerAlliance.GiveTrustToAllFactions(5); } } foreach (var comp in competitionTableRecords) { Find.WorldPawns.RemovePawn(comp.Pawn); } if (PlayerPawn != null) { PlayerPawn.skills.GetSkill(CompetitionSkill).Learn(35000); Find.WorldPawns.PassToWorld(PlayerPawn); PlayerPawn.SetFaction(Faction.OfPlayer); CaravanMaker.MakeCaravan(new List <Pawn> { PlayerPawn }, RimWorld.Faction.OfPlayer, Tile, false); } } else { Find.LetterStack.ReceiveLetter("Competitions_JustEndTitle".Translate(), "Competitions_JustEndDesc".Translate(CompetitionSkill.LabelCap), LetterDefOf.PositiveEvent); } if (Dialog != null) { QuestsManager.Communications.RemoveCommunication(Dialog); } Find.WorldObjects.Remove(this); }