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); }
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); }
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); } } } }
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); } }
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); }
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); }
public override void DoAction(CommunicationDialog dialog, Pawn speaker, Pawn defendant) { Log.Message($"TRIGGER --> {dialog.CardLabel}: {speaker.Name} : {defendant?.Name}"); }