protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            int          spawnPoint = GetPlace();
            DoomsdaySite site       = (DoomsdaySite)WorldObjectMaker.MakeWorldObject(WorldObjectsDefOfLocal.DoomsdayUltimatumCamp);

            site.Tile = spawnPoint;
            site.SetFaction(GetEnemyFaction());
            var comp = site.GetComponent <DoomsdayUltimatumComp>();

            comp.SetTimer(Rand.Range(10, 20));

            CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), "DoomsdayCardLabel".Translate(), "DoomsdayDesc".Translate(site.Faction.Name), site.Faction, def, new List <CommOption> {
                new CommOption_DiscussWithOtherFactions(site, site.Faction)
            });

            comp.Dialog = dialog;

            site.comp = comp;
            List <Faction> factions = Find.FactionManager.AllFactionsListForReading.Where(f => !f.IsPlayer && !f.def.hidden && f != site.Faction && f.RelationKindWith(site.Faction) == FactionRelationKind.Hostile).ToList();

            comp.FactionSilver = Mathf.Clamp(factions.Count * Rand.Range(2000, 4000), 15000, 35000);

            Find.WorldObjects.Add(site);

            SendStandardLetter(parms, site);

            DoomsdaySite.ActiveSite = site;

            return(true);
        }
Beispiel #2
0
 public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
 {
     if (WorldObject_Competitions != null)
     {
         used = WorldObject_Competitions.Paid(speaker.Map);
     }
 }
 public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
 {
     if (defendant != null && defendant.Faction != null && speaker != null && speaker.Faction != null)
     {
         defendant.Faction.TryAffectGoodwillWith(speaker.Faction, GoodWill);
     }
 }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            int spawnPoint = GetPlace(Current.Game.AnyPlayerHomeMap);

            ClimateBombSite site = (ClimateBombSite)WorldObjectMaker.MakeWorldObject(WorldObjectsDefOfLocal.ClimateBombSite);

            site.Tile = spawnPoint;
            ClimateBombComp comp = site.GetComponent <ClimateBombComp>();

            comp.SetTimer();
            Find.WorldObjects.Add(site);

            CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), "ClimateBombTitle".Translate(), "ClimateBombDesc".Translate(), incident: def);

            comp.CommunicationDialog = dialog;

            SendStandardLetter(parms, site);

            return(true);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            List <int> tiles = new List <int>();

            for (int i = 0; i < Find.WorldGrid.TilesCount; i++)
            {
                Tile tile = Find.WorldGrid[i];
                if (tile.biome != BiomeDefOf.Ocean && tile.biome != BiomeDefOf.Lake && tile.hilliness != Hilliness.Impassable)
                {
                    tiles.Add(i);
                }
            }

            if (tiles.Count == 0)
            {
                return(false);
            }

            int partsCount = Rand.Range(minParts, maxParts);

            for (int i = 0; i < partsCount; i++)
            {
                int tileID = tiles.RandomElement();

                if (Find.WorldObjects.AnyMapParentAt(tileID))
                {
                    continue;
                }

                Faction f = RandomEnemyFaction();
                if (f == null)
                {
                    return(false);
                }

                ShipMapGenerator generator = GetGenerator();
                ShipCrash_Controller.MakeShipPart(generator, tileID, f);
            }

            SendStandardLetter(parms, null);

            CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), "Comm_ShipCrashTitle".Translate(), "Comm_ShipCrashDesc".Translate(), incident: def);

            TimeComp timeComp = new TimeComp(dialog, 7000);

            timeComp.id = QuestsManager.Communications.UniqueIdManager.GetNextComponentID();
            QuestsManager.Communications.RegisterComponent(timeComp);

            ShipCrash_Controller.ShipCount++;

            return(true);
        }
Beispiel #6
0
 public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
 {
     if (Quest != null)
     {
         QuestsManager.Communications.RemoveQuest(Quest, EndCondition);
         if (defendant.GetQuestPawn(out QuestPawn questPawn))
         {
             if (questPawn.Quests.Contains(Quest))
             {
                 questPawn.Quests.Remove(Quest);
             }
         }
     }
 }
Beispiel #7
0
        public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
        {
            if (QuestsManager.Communications.CommunicationDialogs.Contains(dialog))
            {
                QuestsManager.Communications.RemoveCommunication(dialog);
            }

            if (defendant.GetQuestPawn(out QuestPawn questPawn))
            {
                if (questPawn.Dialogs.Contains(dialog))
                {
                    questPawn.Dialogs.Remove(dialog);
                }
            }

            ExecuteOption.DoAction(dialog, speaker, defendant);
        }
        public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
        {
            OfferPawn.SetFaction(Faction.OfPlayer);

            Find.LetterStack.ReceiveLetter("CommOption_PawnOfferYesTitle".Translate(), "CommOption_PawnOfferYes".Translate(OfferPawn.Name.ToStringFull, defendant.Faction.Name), LetterDefOf.PositiveEvent);

            defendant.Faction.TryAffectGoodwillWith(speaker.Faction, 20);

            if (defendant.GetQuestPawn(out QuestPawn questPawn))
            {
                if (questPawn.Dialogs.Contains(dialog))
                {
                    questPawn.Dialogs.Remove(dialog);
                    QuestsManager.Communications.RemoveCommunication(dialog);
                }
            }
            else
            {
                QuestsManager.Communications.RemoveCommunication(dialog);
            }
        }
Beispiel #9
0
        public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
        {
            if (speaker != null)
            {
                List <FloatMenuOption> list = new List <FloatMenuOption>();
                if (site.comp.SupportFormed)
                {
                    list.Add(new FloatMenuOption("SupportFullDoomsday".Translate(), delegate
                    {
                        Messages.Message("SupportFullDoomsday".Translate(), MessageTypeDefOf.NeutralEvent, false);
                    }));
                }
                else
                {
                    foreach (var faction in factions)
                    {
                        if (faction.leader != null)
                        {
                            FactionRelationKind rel = faction.RelationKindWith(speaker.Faction);
                            Answer answer           = GetAnswer(faction);
                            list.Add(new FloatMenuOption($"{faction.Name} - {rel} [{answer.TranslateAnswer()}]", delegate
                            {
                                if (answer == Answer.None)
                                {
                                    currentFaction = faction;

                                    Dialog dia = new Dialog(Dialog, speaker, faction.leader);
                                    dia.Init();
                                    dia.CloseAction = CheckAnswer;
                                    Find.WindowStack.Add(dia);
                                }
                            }));
                        }
                    }
                }

                Find.WindowStack.Add(new FloatMenu(list));
            }
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            Map map = (Map)parms.target;

            int spawnPoint = GetPlace(map);

            if (spawnPoint >= 0)
            {
                Tile tile = Find.WorldGrid[spawnPoint];
                if (Rand.Chance(0.25f))
                {
                    tile.hilliness = Hilliness.SmallHills;
                }
                else
                {
                    tile.hilliness = Hilliness.Flat;
                }

                SiegeCampSite site = (SiegeCampSite)WorldObjectMaker.MakeWorldObject(WorldObjectsDefOfLocal.SiegeCampSite);
                site.Tile = spawnPoint;
                site.SetFaction(GetEnemyFaction());
                site.SetMap(map);
                Find.WorldObjects.Add(site);

                CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), "Comm_SiegeCampTitle".Translate(), "Comm_SiegeCampDesc".Translate(), incident: def);
                site.Dialog = dialog;

                SendStandardLetter(parms, site);

                return(true);
            }

            return(false);
        }
Beispiel #11
0
 public TimeComp(CommunicationDialog dialog, int ticks)
 {
     Dialog        = dialog;
     TicksToRemove = ticks;
 }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            DarkNet darkNet = Current.Game.GetComponent <DarkNet>();

            if (darkNet == null || darkNet.Traders == null)
            {
                return(false);
            }

            DarkNetTrader trader          = darkNet.Traders.RandomElement();
            List <Thing>  allTraderThings = new List <Thing>();
            Faction       attacker        = Find.FactionManager.RandomEnemyFaction();

            if (attacker == null)
            {
                return(false);
            }

            if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 5, 12, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i)))
            {
                return(false);
            }

            if (!trader.TryGetGoods(allTraderThings))
            {
                return(false);
            }

            Quest_DarkNetSupplyAttack quest = new Quest_DarkNetSupplyAttack(trader.def);
            int takeCount = Rand.Range(1, (int)Mathf.Max(1, allTraderThings.Count * 0.4f));
            IEnumerable <Thing> rewards = allTraderThings.TakeRandom(takeCount);

            quest.Rewards = new List <Thing>();
            foreach (var reward in rewards)
            {
                Thing copy = ThingMaker.MakeThing(reward.def, reward.Stuff);
                copy.stackCount = (int)Mathf.Max(1, reward.stackCount * 0.6f);

                quest.Rewards.Add(copy);
            }

            if (quest.Rewards.Count == 0)
            {
                return(false);
            }

            quest.id            = QuestsManager.Communications.UniqueIdManager.GetNextQuestID();
            quest.TicksToPass   = 6 * 60000;
            quest.ShowInConsole = false; //release = false
            quest.Faction       = attacker;

            string title = string.Format(def.letterLabel, trader.def.LabelCap);
            string desc  = string.Format(def.letterText, trader.def.LabelCap);

            CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), title, desc, incident: def);

            dialog.KnownFaction       = false;
            quest.CommunicationDialog = dialog;

            QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction);

            Find.WorldObjects.Add(site);

            QuestsManager.Communications.AddQuest(quest);

            Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site));

            return(true);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            DarkNet darkNet = Current.Game.GetComponent <DarkNet>();

            if (darkNet == null || darkNet.Traders == null)
            {
                return(false);
            }

            DarkNetTrader trader          = darkNet.Traders.RandomElement();
            List <Thing>  allTraderThings = new List <Thing>();
            Faction       buyer           = Find.FactionManager.RandomEnemyFaction();
            Faction       garant          = null;

            if (!(from x in Find.FactionManager.AllFactions
                  where !x.IsPlayer && !x.def.hidden && !x.defeated && x.def.humanlikeFaction && x.HostileTo(Faction.OfPlayer) && x != buyer
                  select x).TryRandomElement(out garant))
            {
                return(false);
            }

            if (buyer == null)
            {
                return(false);
            }

            if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 3, 6, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i)))
            {
                return(false);
            }

            if (!trader.TryGetGoods(allTraderThings))
            {
                return(false);
            }

            Quest_DarkNetTraderSupply quest = new Quest_DarkNetTraderSupply(trader.def, garant);
            int takeCount = Rand.Range(1, (int)Mathf.Max(1, allTraderThings.Count * 0.4f));
            IEnumerable <Thing> rewards = allTraderThings.Where(x => !(x is MinifiedThing)).ToList().TakeRandom(takeCount);

            quest.Rewards = new List <Thing>();
            foreach (var reward in rewards)
            {
                Thing copy = ThingMaker.MakeThing(reward.def, reward.Stuff);
                copy.stackCount = (int)Mathf.Max(1, reward.stackCount * 0.6f);

                quest.Rewards.Add(copy);
            }

            if (quest.Rewards.Count == 0)
            {
                return(false);
            }

            quest.id            = QuestsManager.Communications.UniqueIdManager.GetNextQuestID();
            quest.TicksToPass   = 4 * 60000;
            quest.Faction       = buyer;
            quest.ShowInConsole = false;

            string title = string.Format(def.letterLabel, trader.def.LabelCap);
            string desc  = string.Format(def.letterText, trader.def.LabelCap, buyer.Name, garant.Name);

            CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), title, desc, incident: def);

            dialog.KnownFaction       = true;
            quest.CommunicationDialog = dialog;

            QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction);

            Find.WorldObjects.Add(site);

            QuestsManager.Communications.AddQuest(quest);

            Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site));

            return(true);
        }
Beispiel #14
0
 public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant)
 {
     Log.Message($"TRIGGER --> {dialog.CardLabel}: {speaker.Name} : {defendant?.Name}");
 }