Esempio n. 1
0
        private Faction DoNewFaction()
        {
            Faction faction = new Faction();

            faction.def = Faction.def;
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);
            faction.Name = NameGenerator.GenerateName(faction.def.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible
                                                      select fac.Name);
            faction.centralMelanin = Rand.Value;
            foreach (Faction item in Find.FactionManager.AllFactions)
            {
                faction.TryMakeInitialRelationsWith(item);
            }

            Pawn   p          = PawnGenerator.GeneratePawn(PawnKindDefOf.AncientSoldier);
            string leaderName = p.Name.ToStringFull;

            faction.GenerateNewLeader();
            faction.leader.Name = new NameSingle(leaderName, true);
            faction.loadID      = Find.UniqueIDsManager.GetNextFactionID();

            Find.FactionManager.Add(faction);

            return(faction);
        }
Esempio n. 2
0
        protected void ValidateVariables(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            if (BossFightDefOf.AllowedBossKinds == null)
            {
                BossFightDefOf.AllowedBossKinds = DefDatabase <PawnKindDef> .AllDefs.Where(def =>
                                                                                           def.RaceProps?.Animal ?? false && CombatPowerCalculator.BodyMoveCoverages.Keys.Contains(def.RaceProps?.body?.defName)
                                                                                           ).ToList();
            }
            if (BossFightDefOf.AllowedBossDefs == null)
            {
                BossFightDefOf.AllowedBossDefs = new List <ThingDef>(DefDatabase <ThingDef> .AllDefs.Where(def =>
                                                                                                           def.race?.Animal ?? false && CombatPowerCalculator.BodyMoveCoverages.Keys.Contains(def.race?.body?.defName))
                                                                     );
            }

            //fix for having different factions across different games in same playthrough
            faction = Find.FactionManager.FirstFactionOfDef(BossFightDefOf.BossFaction);
            if (faction == null)
            {
                faction = FactionGenerator.NewGeneratedFaction(BossFightDefOf.BossFaction);
                Find.FactionManager.Add(faction);
                map.pawnDestinationReservationManager.RegisterFaction(faction);
            }

            bossLord = Find.VisibleMap.lordManager.lords.FirstOrDefault(lord => lord == bossLord);
            if (bossLord == null)
            {
                bossLord = LordMaker.MakeNewLord(faction, new LordJob_BossAssault(faction), (Map)parms.target);
                map.lordManager.AddLord(bossLord);
            }
        }
Esempio n. 3
0
        private void SendDrop()
        {
            GenDate.DayOfYear(ticks, Find.WorldGrid.LongLatOf(map.Tile).x);
            List <Thing> thingList = new List <Thing>();

            thingList.Add(ThingMaker.MakeThing(AvaliDefs.AvaliNexus));
            Scribe_Values.Look(ref hasDropped, "hasDropped", false);
            Map            target      = map;
            List <Faction> newFactions = new List <Faction>();
            IntVec3        intVec3     = DropCellFinder.TradeDropSpot(target);

            if (RimValiUtility.PawnOfRaceCount(Faction.OfPlayer, AvaliDefs.RimVali) >= 5 && !hasDropped)
            {
                hasDropped = true;
                for (int a = 0; a < random.Next(2, 5); a++)
                {
                    Faction faction = FactionGenerator.NewGeneratedFaction(AvaliDefs.AvaliFaction);
                    faction.Name = "IlluminateFactionName".Translate() + ": #" + a.ToString();
                    faction.SetRelationDirect(Faction.OfPlayer, FactionRelationKind.Ally);
                    newFactions.Add(faction);
                }
                DropPodUtility.DropThingsNear(intVec3, target, (IEnumerable <Thing>)thingList);
                ChoiceLetter choiceLetter = LetterMaker.MakeLetter("IlluminateAirdrop".Translate(), "AirdropEventDesc".Translate(), AvaliMod.AvaliDefs.IlluminateAirdrop, newFactions[random.Next(newFactions.Count)]);
                Find.LetterStack.ReceiveLetter(choiceLetter, null);
            }
        }
        public override void OnComplete()
        {
            var faction = Find.FactionManager.RandomNonHostileFaction(minTechLevel: TechLevel.Industrial);

            if (faction == null)
            {
                faction = FactionGenerator.NewGeneratedFaction();
            }
            faction.TryAffectGoodwillWith(Faction.OfPlayer, 50);
            target.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -50);
            faction.TryAffectGoodwillWith(target.Faction, -200);
            target.SetFaction(faction);

            var map = target.Map;

            if (map == null)
            {
                return;
            }
            var storyComp = Find.Storyteller.storytellerComps.First(x => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
            var parms     = storyComp.GenerateParms(IncidentCategoryDefOf.ThreatBig, map);

            parms.faction         = faction;
            parms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
            parms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;
            parms.raidArrivalModeForQuickMilitaryAid = true;
            parms.points = 4000;
            IncidentDefOf.RaidFriendly.Worker.TryExecute(parms);
        }
 public override void LoadedGame()
 {
     base.LoadedGame();
     PurpleIvyData.TotalFogProgress    = new Dictionary <WorldObjectComp_InfectedTile, float>();
     PurpleIvyData.TotalPollutedBiomes = new List <int>();
     foreach (var worldObject in Find.WorldObjects.AllWorldObjects)
     {
         var comp = worldObject.GetComponent <WorldObjectComp_InfectedTile>();
         if (comp != null)
         {
             PurpleIvyData.TotalFogProgress[comp] = PurpleIvyUtils.getFogProgress(comp.counter);
             //comp.fillRadius(forced: true); // causes crash when loading a save with infected sites
         }
     }
     for (int i = 0; i < Find.WorldGrid.TilesCount; i++)
     {
         if (Find.WorldGrid[i].biome.defName.Contains("PI_"))
         {
             PurpleIvyData.TotalPollutedBiomes.Add(i);
         }
     }
     if (Find.FactionManager.AllFactions.Where(x => x.def == PurpleIvyDefOf.Genny).Count() == 0)
     {
         Log.Message("No alien faction in the game, fixing it");
         Faction faction = FactionGenerator.NewGeneratedFaction(PurpleIvyDefOf.Genny);
         faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null);
         Find.FactionManager.Add(faction);
     }
 }
Esempio n. 6
0
 public static void FactionManagerPostLoadInit()
 {
     if (ModsConfig.RoyaltyActive && Find.FactionManager.FirstFactionOfDef(FactionDefOf.Empire) == null)
     {
         Faction faction = FactionGenerator.NewGeneratedFaction(FactionDefOf.Empire);
         Find.FactionManager.Add(faction);
     }
 }
        public void SetPlayerFactionVarsToNewGeneratedFaction(FactionDef def)
        {
            var generatedFaction = FactionGenerator.NewGeneratedFaction(def);

            generatedFaction.loadID = this.WorldData.FactionManager.OfPlayer.loadID;

            SetFactionVars(generatedFaction, this.WorldData.FactionManager.OfPlayer, FactionMode.Reset, true);
        }
        private void GiveRewardsAndSendLetter(bool giveTech, bool newFaction)
        {
            string text  = "RD_GratefulSurvivors".Translate();
            string text2 = "RD_GratefulSurvivorsDesc".Translate();             //"The survivors of the crash are very thankful for your help, and have send some supplies as a gesture of gratitude.";

            if (giveTech)
            {
                ThingDef.Named("Gun_ChargeRifle");
                ThingDef thingDef = this.RandomHiTechReward();
                ThingDef stuff    = null;
                if (thingDef.MadeFromStuff)
                {
                    stuff = GenStuff.DefaultStuffFor(thingDef);
                }
                this.rewards.TryAdd(ThingMaker.MakeThing(thingDef, stuff), true);
                text2 = "RD_GratefulSurvivorsAmazedDesc".Translate();                 //"The survivors of the crash are amazed by your rapid and professional emergency medical response, thanks to which no-one died. In gratitude, they have included a special system removed form the wreck.";
            }
            Find.LetterStack.ReceiveLetter(text, text2, LetterDefOf.PositiveEvent, null);
            Map map = Find.AnyPlayerHomeMap ?? ((MapParent)this.parent).Map;

            QuestComp_MedicalEmergency.tmpRewards.AddRange(this.rewards);
            this.rewards.Clear();
            IntVec3 dropCenter = DropCellFinder.TradeDropSpot(map);

            DropPodUtility.DropThingsNear(dropCenter, map, QuestComp_MedicalEmergency.tmpRewards, 110, false, false, true);
            QuestComp_MedicalEmergency.tmpRewards.Clear();
            if (newFaction)
            {
                int tile = this.parent.Tile;
                this.CloseMapImmediate();

                Faction faction = FactionGenerator.NewGeneratedFaction(FactionDefOf.Ancients);
                map.pawnDestinationReservationManager.GetPawnDestinationSetFor(faction);
                Find.FactionManager.Add(faction);
                Settlement settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlement.SetFaction(faction);
                settlement.Tile = tile;
                settlement.Name = SettlementNameGenerator.GenerateSettlementName(settlement, null);
                Find.WorldObjects.Add(settlement);
                faction.leader = null;
                foreach (Pawn pawn in this.injured)
                {
                    if (!pawn.Dead && pawn.Faction != Faction.OfPlayer)
                    {
                        pawn.SetFactionDirect(faction);
                        if (faction.leader == null)
                        {
                            faction.leader = pawn;
                        }
                    }
                }
                faction.TryAffectGoodwillWith(Faction.OfPlayer, 100);
                string text3 = "RD_NewFaction".Translate();                    //New Faction!
                string text4 = "RD_NewFactionDesc".Translate() + faction.Name; //"The survivors of the crash have decided to make a life for themselves here, and have founded a new faction"
                Find.LetterStack.ReceiveLetter(text3, text4, LetterDefOf.PositiveEvent, null);
            }
        }
        private void GenerateFaction()
        {
            FactionInstance faction = FactionGenerator.GenerateFaction();

            for (int h = 0; h < Random.Range(2, 6); h++)
            {
                HeroInstance hero = HeroGenerator.GenerateHero(Random.Range(1, 16));
                hero.Experience = Random.Range(0, 1000);

                ServiceLocator.AllegianceService.SetHeroAllegiance(hero, faction);
            }
        }
 public override void StartedNewGame()
 {
     base.StartedNewGame();
     PurpleIvyData.TotalFogProgress    = new Dictionary <WorldObjectComp_InfectedTile, float>();
     PurpleIvyData.TotalPollutedBiomes = new List <int>();
     if (Find.FactionManager.AllFactions.Where(x => x.def == PurpleIvyDefOf.Genny).Count() == 0)
     {
         Log.Message("No alien faction in the game, fixing it");
         Faction faction = FactionGenerator.NewGeneratedFaction(PurpleIvyDefOf.Genny);
         faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null);
         Find.FactionManager.Add(faction);
     }
 }
Esempio n. 11
0
        private Faction GenerateFaction()
        {
            if (newFaction != null && newFaction.leader != null)
            {
                Find.WorldPawns.RemoveAndDiscardPawnViaGC(newFaction.leader);
            }

            Faction    faction = new Faction();
            FactionDef facDef  = null;

            if (selectedFaction == null)
            {
                selectedFaction = avaliableFactions.RandomElement();
            }
            facDef      = selectedFaction;
            faction.def = facDef;
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);
            if (!facDef.isPlayer)
            {
                if (facDef.fixedName != null)
                {
                    faction.Name = facDef.fixedName;
                }
                else
                {
                    faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible
                                                              select fac.Name);
                }
            }
            faction.centralMelanin = Rand.Value;
            foreach (Faction item in Find.FactionManager.AllFactions)
            {
                faction.TryMakeInitialRelationsWith(item);
            }

            Pawn p = PawnGenerator.GeneratePawn(PawnKindDefOf.AncientSoldier);

            leaderName = p.Name.ToStringFull;

            FieldInfo relations = typeof(Faction).GetField("relations", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            newFactionRelation     = relations.GetValue(faction) as List <FactionRelation>;
            newFactionGoodwillBuff = new string[newFactionRelation.Count];

            for (int i = 0; i < newFactionRelation.Count; i++)
            {
                newFactionGoodwillBuff[i] = newFactionRelation[i].goodwill.ToString();
            }

            return(faction);
        }
Esempio n. 12
0
        public static Faction CreateFaction(FactionRelationKind kind, Func <FactionDef, bool> qualifier, bool isGameStart)
        {
            //Log.Message("Creating faction...");
            var factionDefs = (from fa in DefDatabase <FactionDef> .AllDefs
                               where fa.canMakeRandomly && qualifier(fa) &&
                               (!isGameStart || AllFactions.Count(f => f.def == fa) < fa.maxCountAtGameStart)
                               select fa).ToArray();
            var facDef = !AllFactions.Any()
                ? factionDefs.RandomElement()
                : factionDefs.RandomElementByWeight(FactionChance);
            Faction faction = FactionGenerator.NewGeneratedFaction(facDef);

            InitializeFaction(faction, kind);
            return(faction);
        }
Esempio n. 13
0
        public static Faction SpawnWithoutSettlements(FactionDef factionDef)
        {
            // Temporarily set to hidden, so FactionGenerator doesn't spawn a base
            var hidden = factionDef.hidden;

            factionDef.hidden = true;
            var faction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(factionDef, default(IdeoGenerationParms), null));

            factionDef.hidden = hidden;

            var relationKind = GetFactionKind(faction, true);

            InitializeFaction(faction, relationKind);
            return(faction);
        }
Esempio n. 14
0
        public override bool TryExecuteWorker(IncidentParms parms)
        {
            if (def.mechClusterBuilding == null)
            {
                return(false);
            }
            if (!def.mechClusterBuilding.HasModExtension <HiveDefExtension>())
            {
                return(false);
            }
            HiveDefExtension ext = def.mechClusterBuilding.GetModExtension <HiveDefExtension>();
            Map map = (Map)parms.target;

            if (parms.faction == null)
            {
                try
                {
                    IEnumerable <Faction> factions = Find.FactionManager.AllFactions.Where(x => x.def.defName.Contains(ext.Faction.defName));
                    if (!factions.EnumerableNullOrEmpty())
                    {
                        parms.faction = factions.RandomElement();
                    }
                    else
                    {
                        parms.faction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(ext.Faction));
                    }
                    //	Log.Message(parms.faction.def.defName);
                }
                catch (System.Exception)
                {
                    Faction faction = Find.FactionManager.FirstFactionOfDef(ext.Faction);
                    if (faction == null)
                    {
                        faction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(ext.Faction));
                    }
                    parms.faction = faction;
                }
            }
            CompProperties_SpawnerPawn spawnerPawn = def.mechClusterBuilding.GetCompProperties <CompProperties_SpawnerPawn>();
            float points = spawnerPawn?.initialPawnsPoints ?? 250f;
            int   count  = Mathf.Max(GenMath.RoundRandom(parms.points / points), 1);

            Thing t = InfestationUtility.SpawnTunnels(def.mechClusterBuilding, count, map, true, true, faction: parms.faction);

            SendStandardLetter(parms, t);
            Find.TickManager.slower.SignalForceNormalSpeedShort();
            return(true);
        }
        static bool Prefix(ScenPart_PlayerFaction __instance)
        {
            if (!PersistentWorldManager.GetInstance().PersistentWorldNotNull())
            {
                return(true);
            }

            // In order to prevent cloned factions :/
            PersistentWorldManager.GetInstance().PersistentWorld
            .SetPlayerFactionVarsToNewGeneratedFaction((FactionDef)FactionDefField.GetValue(__instance));

            Find.GameInitData.playerFaction = PersistentWorldManager.GetInstance().PersistentWorld.WorldData.FactionManager.OfPlayer;
            FactionGenerator.EnsureRequiredEnemies(Find.GameInitData.playerFaction);

            return(false);
        }
Esempio n. 16
0
        public static World GenerateWorld(float planetCoverage, string seedString, OverallRainfall overallRainfall, OverallTemperature overallTemperature)
        {
            Rand.Seed             = (GenText.StableStringHash(seedString) ^ 4323276);
            Current.CreatingWorld = new World();
            Current.CreatingWorld.info.planetCoverage     = planetCoverage;
            Current.CreatingWorld.info.seedString         = seedString;
            Current.CreatingWorld.info.overallRainfall    = overallRainfall;
            Current.CreatingWorld.info.overallTemperature = overallTemperature;
            Current.CreatingWorld.info.name = NameGenerator.GenerateName(RulePackDefOf.NamerWorld, null, false);
            WorldGenerator_Grid.GenerateGridIntoWorld(seedString);
            Current.CreatingWorld.ConstructComponents();
            FactionGenerator.GenerateFactionsIntoWorld(seedString);
            Current.CreatingWorld.FinalizeInit();
            World creatingWorld = Current.CreatingWorld;

            Current.CreatingWorld = null;
            return(creatingWorld);
        }
Esempio n. 17
0
        private static void DynamicallyAddFactions()
        {
            // Check if any carnival factions. If not, generate them.
            if (!Find.FactionManager.AllFactionsListForReading.Any(f => f.IsCarnival()))
            {
                var fdef = _DefOf.Carn_Faction_Roaming;
                int num  = Rand.RangeInclusive(fdef.requiredCountAtGameStart, fdef.maxCountAtGameStart);
                for (int i = 0; i < num; i++)
                {
                    var faction = FactionGenerator.NewGeneratedFaction(fdef);
                    Find.FactionManager.Add(faction);
                    Find.VisibleMap.pawnDestinationManager.RegisterFaction(faction);

                    if (Prefs.DevMode)
                    {
                        Log.Message("[Carnivale] Dynamically added new carnival faction " + faction + " to game.");
                    }
                }
            }
        }
        public static bool Prefix(FactionDef facDef, ref Faction __result)
        {
            if (Controller.Settings.usingFactionControl.Equals(true))
            {
                return(true);
            }
            Faction faction = new Faction();

            faction.def               = facDef;
            faction.loadID            = Find.UniqueIDsManager.GetNextFactionID();
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);
            if (!facDef.isPlayer)
            {
                if (facDef.fixedName == null)
                {
                    faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker,
                                                              from fac in Find.FactionManager.AllFactionsVisible
                                                              select fac.Name, false, null);
                }
                else
                {
                    faction.Name = facDef.fixedName;
                }
            }
            faction.centralMelanin = Rand.Value;
            foreach (Faction allFactionsListForReading in Find.FactionManager.AllFactionsListForReading)
            {
                faction.TryMakeInitialRelationsWith(allFactionsListForReading);
            }
            faction.GenerateNewLeader();
            if (!facDef.hidden && !facDef.isPlayer)
            {
                Settlement settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlement.SetFaction(faction);
                settlement.Tile = TileFinder.RandomSettlementTileFor(faction, false, null);
                settlement.Name = SettlementNameGenerator.GenerateSettlementName(settlement, null);
                Find.WorldObjects.Add(settlement);
            }
            __result = faction;
            return(false);
        }
Esempio n. 19
0
        public static void AddNewFaction(FactionOnline factionOnline)
        {
            FactionDef facDef = DefDatabase <FactionDef> .GetNamed(factionOnline.DefName);

            Faction faction = new Faction();

            faction.def               = facDef;
            faction.loadID            = factionOnline.loadID;
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);

            faction.Name           = factionOnline.Name;
            faction.centralMelanin = Rand.Value;
            foreach (Faction current in Find.FactionManager.AllFactionsListForReading)
            {
                faction.TryMakeInitialRelationsWith(current);
            }
            faction.TryGenerateNewLeader();

            Find.FactionManager.Add(faction);
            typeof(FactionManager).GetMethod("RecacheFactions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Invoke(Find.FactionManager, null);
        }
Esempio n. 20
0
        public static Faction SpawnNewFactionIntoWorld(CustomFactionDef newFaction)
        {
            if (Find.FactionManager.AllFactionsListForReading.Any(x => x.def == newFaction))
            {
                Log.Error($"Attempted to spawn existing faction, {newFaction.defName}, into the world.");
                return(null);
            }
            Faction faction = FactionGenerator.NewGeneratedFaction(newFaction);

            faction.GenerateNewLeader();
            if (faction.leader != null)
            {
                Log.Message($"{faction.Name} {faction.def.leaderTitle}, {faction.leader.Name} now exists.");
            }
            else
            {
                Log.Message($"{faction.Name} {faction.def.leaderTitle} failed to generate.");
            }
            Find.FactionManager.Add(faction);
            return(faction);
        }
Esempio n. 21
0
        public static void EnsureAllFactionsArePresent()
        {
            foreach (FactionDef current in DefDatabase <FactionDef> .AllDefs)
            {
                //if (!current.hidden) continue;

                if (current.isPlayer)
                {
                    continue;
                }

                var count = Find.FactionManager.AllFactions.Count(f => f.def == current);

                if (count >= Settings.minOfAnyFaction)
                {
                    continue;
                }
                if (count >= Settings.maxOfAnyFaction)
                {
                    continue;
                }

                int amount = current.requiredCountAtGameStart + (current.canMakeRandomly ? Rand.RangeInclusive(0, 1) : 0);
                amount = Mathf.Clamp(amount, Settings.minOfAnyFaction, Settings.maxOfAnyFaction);

                for (int j = count; j < amount; j++)
                {
                    Faction faction      = FactionGenerator.NewGeneratedFaction(current);
                    var     relationKind = GetFactionKind(faction, j == 0);
                    InitializeFaction(faction, relationKind);
                    Log.Message("Created faction for " + faction.def.LabelCap);

                    if (!faction.def.hidden)
                    {
                        CreateSettlements(faction);
                    }
                }
            }
        }
Esempio n. 22
0
        private Faction NewGeneratedFaction(FactionDef facDef)
        {
            Faction faction = new Faction();

            faction.def               = facDef;
            faction.loadID            = Find.UniqueIDsManager.GetNextFactionID();
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);
            if (!facDef.isPlayer)
            {
                if (facDef.fixedName != null)
                {
                    faction.Name = facDef.fixedName;
                }
                else
                {
                    faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible
                                                              select fac.Name);
                }
            }
            faction.centralMelanin = Rand.Value;
            foreach (Faction item in Find.FactionManager.AllFactions)
            {
                faction.TryMakeInitialRelationsWith(item);
            }

            faction.GenerateNewLeader();

            if (!facDef.hidden && !facDef.isPlayer)
            {
                Settlement settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlement.SetFaction(faction);
                settlement.Tile = TileFinder.RandomSettlementTileFor(faction);
                settlement.Name = SettlementNameGenerator.GenerateSettlementName(settlement);
                Find.WorldObjects.Add(settlement);
            }

            return(faction);
        }
Esempio n. 23
0
    public static void Main(string[] args)
    {
        var nameOne       = CitizenGenerator.Generate();
        var randomFaction = FactionGenerator.RandomFaction();

        var nameTwo             = CitizenGenerator.Generate();
        var secondRandomFaction = FactionGenerator.RandomFaction();

        var nameThree          = CitizenGenerator.Generate();
        var thirdRandomFaction = FactionGenerator.RandomFaction();

        Console.WriteLine($"Faction 1: {randomFaction}.
    
    Profile: {randomFaction.Description}

    Contact: {nameOne}
    ");

        Console.WriteLine($"Faction 2: {secondRandomFaction}.
    
    Profile: {secondRandomFaction.Description}

    Contact: {nameTwo}
    ");


        Console.WriteLine($"Faction 3: {thirdRandomFaction}.
    
    Profile: {thirdRandomFaction.Description}

    Contact: {nameThree}
    ");


        Console.WriteLine("The Plot:");

        Console.WriteLine(Plot.Generate(randomFaction, secondRandomFaction, thirdRandomFaction));
    }
Esempio n. 24
0
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            base.SpawnSetup(map, respawningAfterLoad);
            if (!respawningAfterLoad)
            {
                this.equipment = new Pawn_EquipmentTracker(this);
                if (this.Faction is null)
                {
                    var faction = Find.FactionManager.FirstFactionOfDef(WendigoDefOf.RCW_Wendigos);
                    if (faction is null)
                    {
                        faction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(WendigoDefOf.RCW_Wendigos));
                        Find.FactionManager.Add(faction);
                    }
                    this.SetFactionDirect(faction);
                }
            }
            else if (this.equipment is null)
            {
                Log.Error("Wendigo has no equipment... It is a bug");
            }

            this.needs.food.CurLevel = 0.1f;
        }
Esempio n. 25
0
        private bool TryResolveRaidFaction(IncidentParms parms)
        {
            parms.faction = Find.FactionManager.FirstFactionOfDef(DefOfs_ShiaSurprise.HollywoodCannibals);
            if (parms.faction == null)
            {
                Log.Message("Trying to generate new faction");
                var newfac =
                    FactionGenerator.NewGeneratedFaction(
                        new FactionGeneratorParms(DefOfs_ShiaSurprise.HollywoodCannibals));
                Find.FactionManager.Add(newfac);
                parms.faction = newfac;
                if (newfac != null && newfac.def == DefOfs_ShiaSurprise.HollywoodCannibals)
                {
                    Log.Message("Generated successfully");
                }
                else
                {
                    return(false);
                }
            }

            Find.TickManager.slower.SignalForceNormalSpeedShort();
            return(true);
        }
Esempio n. 26
0
        public static void InitializeServices(GameSetupData data)
        {
            //Factions and heroes
            for (int i = 0; i < data.factionCount; i++)
            {
                FactionInstance faction = FactionGenerator.GenerateFaction();
                foreach (HeroType heroType in Enum.GetValues(typeof(HeroType)))
                {
                    HeroInstance hero = HeroGenerator.GenerateHero(1, heroType);
                    ServiceLocator.AllegianceService.SetHeroAllegiance(hero, faction);
                }

                /*for (int h = 0; h < Random.Range(data.heroesPerFactionMin, data.heroesPerFactionMax + 1); h++) {
                 *      HeroInstance hero = HeroGenerator.GenerateHero(1);
                 *      ServiceLocator.AllegianceService.SetHeroAllegiance(hero, faction);
                 * }*/

                for (int q = 0; q < data.startQuests; q++)
                {
                    QuestInstance quest = QuestGenerator.GenerateQuest(1, QuestMakeupType.SOLO);
                    ServiceLocator.QuestService.RegisterQuest(quest, faction);
                }
            }
        }
        /*
         * Destructive prefix
         */
        public static bool Prefix()
        {
            int num = 0;
            // track actual faction count
            int actualFactionCount = 0;

            // track faction centers
            Controller.factionCenters.Clear();

            // Use CustomFaction instead, use Main.CustomFactions instead
            foreach (CustomFaction cf in Main.CustomFactions)
            {
                cf.FactionDef.requiredCountAtGameStart = (int)cf.RequiredCount;
                if (cf.RequiredCount == 0)
                {
                    cf.FactionDef.maxCountAtGameStart = 0;
                }
                else
                {
                    cf.FactionDef.maxCountAtGameStart = (int)cf.MaxCountAtStart;
                }
            }

            // Refactor into method
            // SetFactionCounts()
            // {
            foreach (FactionDef def in DefDatabase <FactionDef> .AllDefs)
            {
                if (def.isPlayer)
                {
                    continue;
                }

                switch (def.defName)
                {
                case "OutlanderCivil":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.outlanderCivilMin);
                    break;

                case "OutlanderRough":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.outlanderHostileMin);
                    break;

                case "TribeCivil":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.tribalCivilMin);
                    break;

                case "TribeRough":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.tribalHostileMin);
                    break;

                case "TribeSavage":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.tribalSavageMin);
                    break;

                case "Empire":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.empireMin);
                    break;

                case "Pirate":
                    SetFactionCount(def, (int)Controller_FactionOptions.Settings.pirateMin);
                    break;
                }
                // }

                actualFactionCount += def.requiredCountAtGameStart;
                for (int i = 0; i < def.requiredCountAtGameStart; i++)
                {
                    Faction faction = FactionGenerator.NewGeneratedFaction(def);
                    Find.FactionManager.Add(faction);
                    if (!def.hidden)
                    {
                        num++;
                    }
                }
            }

            if (Controller_FactionOptions.Settings.MinFactionCount == 0 &&
                Main.CustomFactions.Count == 0)
            {
                /*Log.Error("Faction Control: No factions were selected. To prevent the game from going into an infinite loop a tribe was added.");
                 * FactionDef def = DefDatabase<FactionDef>.GetNamed("TribeCivil");
                 * def.requiredCountAtGameStart = 1;
                 * Controller.maxFactionSprawl = 1;
                 * Faction faction = FactionGenerator.NewGeneratedFaction(def);
                 * Find.FactionManager.Add(faction);
                 * actualFactionCount = 1;*/
                return(false);
            }

            double sqrtTiles        = Math.Sqrt(Find.WorldGrid.TilesCount);
            double sqrtFactionCount = Math.Sqrt(actualFactionCount);

            Controller.minFactionSeparation = sqrtTiles / (sqrtFactionCount * 2);
            Controller.maxFactionSprawl     = sqrtTiles / (sqrtFactionCount * Controller.Settings.factionGrouping);
            Controller.pirateSprawl         = Controller.maxFactionSprawl;
            if (Controller.Settings.spreadPirates)
            {
                Controller.pirateSprawl = sqrtTiles / (sqrtFactionCount * 0.5f);
            }

            while (num < (int)Controller_FactionOptions.Settings.factionCount)
            {
                FactionDef facDef = (from fa in DefDatabase <FactionDef> .AllDefs
                                     where fa.canMakeRandomly && Find.FactionManager.AllFactions.Count((Faction f) => f.def == fa) < fa.maxCountAtGameStart
                                     select fa).RandomElement <FactionDef>();
                Faction faction2 = FactionGenerator.NewGeneratedFaction(facDef);
                Find.World.factionManager.Add(faction2);
                num++;
            }
            float      tilesCount = (float)Find.WorldGrid.TilesCount / 100000f;
            float      minBP100K  = 75f * Controller.Settings.factionDensity;
            float      maxBP100K  = 85f * Controller.Settings.factionDensity;
            FloatRange factionBasesPer100kTiles = new FloatRange(minBP100K, maxBP100K);
            int        maxCount = 0;
            int        count    = GenMath.RoundRandom(tilesCount * factionBasesPer100kTiles.RandomInRange);

            count -= Find.WorldObjects.SettlementBases.Count;
            for (int j = 0; j < count && maxCount < 2000; j++)
            {
                Faction faction2 = (
                    from x in Find.World.factionManager.AllFactionsListForReading
                    where !x.def.isPlayer && !x.def.hidden
                    select x).RandomElementByWeight <Faction>((Faction x) => x.def.settlementGenerationWeight);
                Settlement factionBase = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                factionBase.SetFaction(faction2);
                factionBase.Tile = TileFinder.RandomSettlementTileFor(faction2, false, null);
                if (factionBase.Tile < 1)
                {
                    j--;
                }
                else
                {
                    factionBase.Name = SettlementNameGenerator.GenerateSettlementName(factionBase);
                    Find.WorldObjects.Add(factionBase);
                }
                ++maxCount;
            }
            return(false);
        }
Esempio n. 28
0
 public override void GenerateFresh(string seed)
 {
     FactionGenerator.GenerateFactionsIntoWorld();
 }
 public override void GenerateFresh(string seed)
 {
     Rand.Seed = GenText.StableStringHash(seed);
     FactionGenerator.GenerateFactionsIntoWorld();
     Rand.RandomizeStateFromTime();
 }
Esempio n. 30
0
        private bool doConquest()
        {
            Settlement AttackerBase = RandomSettlement();

            if (AttackerBase == null)
            {
                return(false);
            }
            Faction AttackerFaction = AttackerBase.Faction;

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

            List <Settlement> settlements       = Find.WorldObjects.Settlements.ToList <Settlement>();
            List <Settlement> prox1             = new List <Settlement>();
            List <Settlement> prox2             = new List <Settlement>();
            List <Settlement> prox3             = new List <Settlement>();
            List <Settlement> prox4             = new List <Settlement>();
            List <Settlement> prox5             = new List <Settlement>();
            List <Settlement> prox6             = new List <Settlement>();
            List <Settlement> prox7             = new List <Settlement>();
            double            attackerBaseCount = 0;
            double            totalBaseCount    = 0;

            List <Settlement> attackerSettlementList = new List <Settlement>();

            for (int i = 0; i < settlements.Count; i++)
            {
                Settlement DefenderBase = settlements[i];

                if (DefenderBase.Faction == AttackerBase.Faction)
                {
                    attackerBaseCount++;
                    attackerSettlementList.Add(DefenderBase);
                }

                if (DefenderBase.Faction != null && !DefenderBase.Faction.IsPlayer && DefenderBase.Faction.def.settlementGenerationWeight > 0f && !DefenderBase.def.defName.Equals("City_Faction") && !DefenderBase.def.defName.Equals("City_Abandoned") && !DefenderBase.def.defName.Equals("City_Ghost") && !DefenderBase.def.defName.Equals("City_Citadel"))
                {
                    totalBaseCount++;
                    if (AttackerBase.Faction.HostileTo(DefenderBase.Faction))
                    {
                        int attackDistance = Find.WorldGrid.TraversalDistanceBetween(AttackerBase.Tile, DefenderBase.Tile, true);
                        if (attackDistance < 30)
                        {
                            prox1.Add(DefenderBase);
                        }
                        else if (attackDistance < 60)
                        {
                            prox2.Add(DefenderBase);
                        }
                        else if (attackDistance < 90)
                        {
                            prox3.Add(DefenderBase);
                        }
                        else if (attackDistance < 120)
                        {
                            prox4.Add(DefenderBase);
                        }
                        else if (attackDistance < 150)
                        {
                            prox5.Add(DefenderBase);
                        }
                        else if (attackDistance < 180)
                        {
                            prox6.Add(DefenderBase);
                        }
                        else if (attackDistance < 210)
                        {
                            prox7.Add(DefenderBase);
                        }
                    }
                }
            }

            // Rebellion code
            if (attackerBaseCount >= 10 && attackerBaseCount >= (totalBaseCount * 0.1))
            {
                int num = Rand.Range(1, 100);
                if (num <= (int)(attackerBaseCount / totalBaseCount * 20) || attackerBaseCount >= (totalBaseCount * 0.8))
                {
                    List <Faction> allFactionList = (from x in Find.FactionManager.AllFactionsVisible
                                                     where x.def.settlementGenerationWeight > 0f && !x.def.hidden && !x.IsPlayer && !x.defeated && x != AttackerFaction && x.leader != null && !x.leader.IsPrisoner && !x.leader.Spawned
                                                     select x).ToList <Faction>();
                    for (int i = 0; i < allFactionList.Count; i++)
                    {
                        if (!IncidentWorker_NPCConquest.HasAnyOtherBase(allFactionList[i]))
                        {
                            for (int j = 0; j < attackerSettlementList.Count; j++)
                            {
                                int  num2             = Rand.Range(1, 100);
                                bool resistancechance = num2 < 41;
                                if (resistancechance)
                                {
                                    Settlement rebelSettlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                                    rebelSettlement.SetFaction(allFactionList[i]);
                                    rebelSettlement.Tile = attackerSettlementList[j].Tile;
                                    rebelSettlement.Name = SettlementNameGenerator.GenerateSettlementName(rebelSettlement, null);
                                    Find.WorldObjects.Remove(attackerSettlementList[j]);
                                    Find.WorldObjects.Add(rebelSettlement);
                                }
                            }

                            FactionRelation factionRelation = allFactionList[i].RelationWith(AttackerBase.Faction, false);
                            factionRelation.kind = FactionRelationKind.Hostile;
                            FactionRelation factionRelation2 = AttackerBase.Faction.RelationWith(allFactionList[i], false);
                            factionRelation2.kind = FactionRelationKind.Hostile;
                            Find.LetterStack.ReceiveLetter("LabelRebellion".Translate(), "DescRebellion".Translate(allFactionList[i], AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                            return(true);
                        }
                    }

                    if (IncidentWorker_NPCConquest.allowCloneFaction && AttackerFaction != Faction.OfEmpire)
                    {
                        Faction clonefaction = FactionGenerator.NewGeneratedFaction(new FactionGeneratorParms(AttackerFaction.def, default(IdeoGenerationParms), null));
                        clonefaction.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f);
                        Find.FactionManager.Add(clonefaction);

                        for (int i = 0; i < attackerSettlementList.Count; i++)
                        {
                            int  num3             = Rand.Range(1, 100);
                            bool resistancechance = num3 < 41;
                            if (resistancechance)
                            {
                                Settlement rebelSettlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                                rebelSettlement.SetFaction(clonefaction);
                                rebelSettlement.Tile = attackerSettlementList[i].Tile;
                                rebelSettlement.Name = SettlementNameGenerator.GenerateSettlementName(rebelSettlement, null);
                                Find.WorldObjects.Remove(attackerSettlementList[i]);
                                Find.WorldObjects.Add(rebelSettlement);
                            }
                        }

                        FactionRelation factionRelation = clonefaction.RelationWith(AttackerBase.Faction, false);
                        factionRelation.kind = FactionRelationKind.Hostile;
                        FactionRelation factionRelation2 = AttackerBase.Faction.RelationWith(clonefaction, false);
                        factionRelation2.kind = FactionRelationKind.Hostile;

                        Ideo newIdeo = IdeoGenerator.GenerateIdeo(FactionIdeosTracker.IdeoGenerationParmsForFaction_BackCompatibility(clonefaction.def));
                        clonefaction.ideos.SetPrimary(newIdeo);
                        Find.IdeoManager.Add(newIdeo);
                        clonefaction.leader.ideo.SetIdeo(newIdeo);

                        Find.LetterStack.ReceiveLetter("LabelRebellion".Translate(), "DescRebellion".Translate(clonefaction, AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                        return(true);
                    }
                }
            }

            // Conquest code
            Settlement FinalDefenderBase;

            if (prox1.Count != 0)
            {
                FinalDefenderBase = prox1.RandomElement <Settlement>();
            }
            else if (prox2.Count != 0)
            {
                FinalDefenderBase = prox2.RandomElement <Settlement>();
            }
            else if (prox3.Count != 0)
            {
                FinalDefenderBase = prox3.RandomElement <Settlement>();
            }
            else if (prox4.Count != 0)
            {
                FinalDefenderBase = prox4.RandomElement <Settlement>();
            }
            else if (prox5.Count != 0)
            {
                FinalDefenderBase = prox5.RandomElement <Settlement>();
            }
            else if (prox6.Count != 0)
            {
                FinalDefenderBase = prox6.RandomElement <Settlement>();
            }
            else if (prox7.Count != 0)
            {
                FinalDefenderBase = prox7.RandomElement <Settlement>();
            }
            else
            {
                return(false);
            }

            if (FinalDefenderBase.HasMap)
            {
                Log.Message("attack target has generated map. Event dropped.");
                return(false);
            }

            // Determine whether to raze or take control, distance-based
            int razeroll = Rand.Range(1, 100);

            if (razeroll <= IncidentWorker_NPCConquest.razeChance)
            {
                if (IncidentWorker_NPCConquest.allowRazeClear)
                {
                    List <DestroyedSettlement> clearRuinTarget = Find.WorldObjects.DestroyedSettlements;
                    for (int i = 0; i < clearRuinTarget.Count; i++)
                    {
                        Find.WorldObjects.Remove(clearRuinTarget[i]);
                    }
                }

                DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement);
                destroyedSettlement.Tile = FinalDefenderBase.Tile;
                Find.WorldObjects.Remove(FinalDefenderBase);
                Find.WorldObjects.Add(destroyedSettlement);
            }
            else
            {
                Settlement settlementConquest = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlementConquest.SetFaction(AttackerBase.Faction);
                settlementConquest.Tile = FinalDefenderBase.Tile;
                settlementConquest.Name = SettlementNameGenerator.GenerateSettlementName(settlementConquest, null);
                Find.WorldObjects.Remove(FinalDefenderBase);
                Find.WorldObjects.Add(settlementConquest);
            }

            // Defeat check for distance conquest
            if (IncidentWorker_NPCConquest.allowCloneFaction && !HasAnyOtherBase(FinalDefenderBase))
            {
                List <Faction> clonefactioncheck = (from x in Find.FactionManager.AllFactionsVisible
                                                    where !x.def.hidden && !x.IsPlayer && !x.defeated && x != FinalDefenderBase.Faction && x.def == FinalDefenderBase.Faction.def
                                                    select x).ToList <Faction>();
                if (clonefactioncheck.Count > 0)
                {
                    FinalDefenderBase.Faction.defeated = true;
                    Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), "LetterFactionBaseDefeated_FactionDestroyed".Translate(FinalDefenderBase.Faction.Name), LetterDefOf.NeutralEvent, null);
                }
            }

            int defeatroll = Rand.Range(1, 100);

            if (defeatroll <= IncidentWorker_NPCConquest.defeatChance && !HasAnyOtherBase(FinalDefenderBase))
            {
                FinalDefenderBase.Faction.defeated = true;
                Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), "LetterFactionBaseDefeated_FactionDestroyed".Translate(FinalDefenderBase.Faction.Name), LetterDefOf.NeutralEvent, null);
            }

            // Alliance code
            if (IncidentWorker_NPCConquest.allowAlliance && Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown <= 0)
            {
                List <Faction> alliance = (from x in Find.FactionManager.AllFactionsVisible
                                           where x.def.settlementGenerationWeight > 0f && !x.def.hidden && !x.IsPlayer && !x.defeated && x != AttackerFaction && x.leader != null && !x.leader.IsPrisoner && !x.leader.Spawned
                                           select x).ToList <Faction>();
                List <Faction> finalAlliance = new List <Faction>();

                if (alliance.Count >= 2 && attackerBaseCount >= (totalBaseCount * 0.4) && attackerBaseCount <= (totalBaseCount * 0.6) && attackerBaseCount > 9)
                {
                    for (int i = 0; i < alliance.Count; i++)
                    {
                        int  num         = Rand.Range(1, 100);
                        bool havemysword = num < 81;
                        if (havemysword)
                        {
                            FactionRelation factionRelation = AttackerFaction.RelationWith(alliance[i], false);
                            factionRelation.kind = FactionRelationKind.Hostile;
                            FactionRelation factionRelation2 = alliance[i].RelationWith(AttackerFaction, false);
                            factionRelation2.kind = FactionRelationKind.Hostile;
                            finalAlliance.Add(alliance[i]);
                        }
                    }

                    StringBuilder allianceList = new StringBuilder();
                    for (int x = 0; x < finalAlliance.Count; x++)
                    {
                        for (int y = 0; y < finalAlliance.Count; y++)
                        {
                            if (finalAlliance[y] != finalAlliance[x])
                            {
                                FactionRelation factionRelation3 = finalAlliance[y].RelationWith(finalAlliance[x], false);
                                factionRelation3.kind = FactionRelationKind.Neutral;
                                FactionRelation factionRelation4 = finalAlliance[x].RelationWith(finalAlliance[y], false);
                                factionRelation4.kind = FactionRelationKind.Neutral;
                            }
                        }
                        allianceList.Append(finalAlliance[x].ToString()).Append(", ");
                    }
                    string allianceListString = allianceList.ToString();
                    allianceListString = allianceListString.Trim().TrimEnd(',');

                    Find.LetterStack.ReceiveLetter("LabelAlliance".Translate(), "DescAlliance".Translate(allianceListString, AttackerBase.Faction), LetterDefOf.NeutralEvent, null);
                    Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown = 11;
                }
            }

            if (Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown > 0)
            {
                Find.World.GetComponent <DiplomacyWorldComponent>().allianceCooldown--;
            }

            return(true);
        }