Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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++;
            }
        }
Esempio n. 3
0
        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);
        }