public override void Arrived(List <ActiveArtilleryStrike> artilleryStrikes, int tile)
        {
            if (Find.WorldObjects.WorldObjectAt(tile, RimWorld.WorldObjectDefOf.PeaceTalks) is PeaceTalks peaceTalks)
            {
                if (artilleryStrikes.Any(s => s.shellDef.projectile.damageDef.harmsHealth))
                {
                    var faction = peaceTalks.Faction;
                    faction.TryAffectGoodwillWith(Faction.OfPlayer, -99999, reason: DefDatabase <HistoryEventDef> .GetNamed("VFES_ArtilleryStrike"), lookTarget: peaceTalks);

                    // 50% chance of causing a raid
                    if (Rand.Bool)
                    {
                        var parms = new IncidentParms
                        {
                            target  = sourceMap,
                            points  = StorytellerUtility.DefaultThreatPointsNow(sourceMap),
                            faction = faction,
                            generateFightersOnly = true,
                            forced = true
                        };
                        Find.Storyteller.incidentQueue.Add(IncidentDefOf.RaidEnemy, Find.TickManager.TicksGame + RaidIntervalRange.RandomInRange, parms);
                    }

                    Find.QuestManager.QuestsListForReading.Where(q => q.QuestLookTargets.Contains(peaceTalks)).ToList().ForEach(q => q.End(QuestEndOutcome.Fail));
                    Find.LetterStack.ReceiveLetter("VFESecurity.ArtilleryStrikeProvokedGeneric_Letter".Translate(peaceTalks.def.label), "VFESecurity.ArtilleryStrikePeaceTalks_LetterText".Translate(faction.Name), LetterDefOf.NegativeEvent);
                    Find.WorldObjects.Remove(peaceTalks);

                    if (ArtilleryComp != null)
                    {
                        ArtilleryComp.ResetForcedTarget();
                    }
                }
            }
        }
Beispiel #2
0
        public override void Arrived(List <ActiveArtilleryStrike> artilleryStrikes, int tile)
        {
            // Boom
            var map = mapParent.Map;

            if (map != null)
            {
                for (int i = 0; i < artilleryStrikes.Count; i++)
                {
                    var strike         = artilleryStrikes[i];
                    var potentialCells = ArtilleryStrikeUtility.PotentialStrikeCells(map, strike.missRadius);
                    for (int j = 0; j < strike.shellCount; j++)
                    {
                        ArtilleryStrikeUtility.SpawnArtilleryStrikeSkyfaller(strike.shellDef, map, potentialCells.RandomElement());
                    }
                }
            }
            else
            {
                ArtilleryComp.ResetForcedTarget();
            }
        }