示例#1
0
        static bool Prefix(Pawn namer, Pawn namee)
        {
            FemaleNames nameGenF = new FemaleNames();
            MaleNames   nameGenM = new MaleNames();

            string     value    = (namee.Name == null) ? namee.LabelIndefinite() : namee.Name.ToStringFull;
            NameTriple tempName = namee.gender == Gender.Male ? nameGenM.GetChineseMaleName(namee) : nameGenF.GetChineseFemaleName(namee);

            namee.Name = new NameSingle(tempName.Nick);
            if (namer.Faction == Faction.OfPlayer)
            {
                Messages.Message("MessageNuzzledPawnGaveNameTo".Translate(namer.Named("NAMER"), value, namee.Name.ToStringFull, namee.Named("NAMEE")), namee, MessageTypeDefOf.NeutralEvent);
            }
            return(false);
        }
        public static NameTriple GetRobotName(X2_AIRobot robot)
        {
            if (robot == null || robot.Name == null)
            {
                return(null);
            }

            NameTriple nameTriple = robot.Name as NameTriple;

            if (nameTriple != null)
            {
                return(new NameTriple(nameTriple.First, nameTriple.Nick, nameTriple.Last));
            }
            return(null);
        }
 protected override void DoNext()
 {
     CheckWarnRequiredWorkTypesDisabledForEveryone(delegate
     {
         foreach (Pawn startingAndOptionalPawn in Find.GameInitData.startingAndOptionalPawns)
         {
             NameTriple nameTriple = startingAndOptionalPawn.Name as NameTriple;
             if (nameTriple != null && string.IsNullOrEmpty(nameTriple.Nick))
             {
                 startingAndOptionalPawn.Name = new NameTriple(nameTriple.First, nameTriple.First, nameTriple.Last);
             }
         }
         base.DoNext();
     });
 }
示例#4
0
 private bool FilterMatch(NameTriple n)
 {
     if (n.First == "Tynan" && n.Last == "Sylvester")
     {
         return(false);
     }
     if (this.searchWords.Length == 0)
     {
         return(false);
     }
     if (this.searchWords.Length == 1)
     {
         return(n.Last.StartsWith(this.searchName, StringComparison.OrdinalIgnoreCase) || n.First.StartsWith(this.searchName, StringComparison.OrdinalIgnoreCase) || n.Nick.StartsWith(this.searchName, StringComparison.OrdinalIgnoreCase));
     }
     return(this.searchWords.Length == 2 && n.First.EqualsIgnoreCase(this.searchWords[0]) && (n.Last.StartsWith(this.searchWords[1], StringComparison.OrdinalIgnoreCase) || n.Nick.StartsWith(this.searchWords[1], StringComparison.OrdinalIgnoreCase)));
 }
示例#5
0
        public override bool ConfusinglySimilarTo(Name other)
        {
            NameSingle nameSingle = other as NameSingle;

            if (nameSingle != null && nameSingle.nameInt == nameInt)
            {
                return(true);
            }
            NameTriple nameTriple = other as NameTriple;

            if (nameTriple != null && nameTriple.Nick == nameInt)
            {
                return(true);
            }
            return(false);
        }
示例#6
0
        // Token: 0x06000039 RID: 57 RVA: 0x00003808 File Offset: 0x00001A08
        public static NameTriple MakeDroidName(string nickName)
        {
            string     text = string.Format("D-{0:X}-{1:X}", Rand.Range(0, 256), Rand.Range(0, 256));
            bool       flag = nickName == null;
            NameTriple result;

            if (flag)
            {
                result = new NameTriple(text, text, "");
            }
            else
            {
                result = new NameTriple(text, nickName, "");
            }
            return(result);
        }
示例#7
0
        public static void ResolveNameForSpouseOnGeneration(ref PawnGenerationRequest request, Pawn generated)
        {
            if (request.FixedLastName != null)
            {
                return;
            }
            MarriageNameChange marriageNameChange = Roll_NameChangeOnMarriage();

            if (marriageNameChange == MarriageNameChange.NoChange)
            {
                return;
            }
            Pawn spouse = generated.GetSpouse();

            DetermineManAndWomanSpouses(generated, spouse, out var man, out var woman);
            NameTriple nameTriple  = man.Name as NameTriple;
            NameTriple nameTriple2 = woman.Name as NameTriple;

            if (generated == woman && marriageNameChange == MarriageNameChange.WomansName)
            {
                man.Name = new NameTriple(nameTriple.First, nameTriple.Nick, nameTriple.Last);
                if (man.story != null)
                {
                    man.story.birthLastName = GetRandomBirthName(man);
                }
                request.SetFixedLastName(nameTriple.Last);
            }
            else if (generated == man && marriageNameChange == MarriageNameChange.WomansName)
            {
                request.SetFixedLastName(nameTriple2.Last);
                request.SetFixedBirthName(GetRandomBirthName(man));
            }
            else if (generated == woman && marriageNameChange == MarriageNameChange.MansName)
            {
                request.SetFixedLastName(nameTriple.Last);
                request.SetFixedBirthName(GetRandomBirthName(woman));
            }
            else if (generated == man && marriageNameChange == MarriageNameChange.MansName)
            {
                woman.Name = new NameTriple(nameTriple2.First, nameTriple2.Nick, nameTriple2.Last);
                if (woman.story != null)
                {
                    woman.story.birthLastName = GetRandomBirthName(man);
                }
                request.SetFixedLastName(nameTriple2.Last);
            }
        }
示例#8
0
        private Pawn getTanya()
        {
            PawnGenerationRequest request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed("ra2_AlliedTanya", true), Faction.OfPlayer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 1f, false, true, true, false, false, false, false, null, null, null, null, null, Gender.Female, null, null);
            Pawn item = PawnGenerator.GeneratePawn(request);

            Pawn_StoryTracker ps   = item.story;
            HairDef           hair = DefDatabase <HairDef> .GetNamed("Curly");

            ps.childhood        = null;
            ps.adulthood        = null;
            ps.traits.allTraits = new List <Trait>();
            ps.traits.GainTrait(new Trait(DefDatabase <TraitDef> .GetNamed("ra2_MakeSoldier", true)));
            ps.traits.GainTrait(new Trait(TraitDefOf.Psychopath));
            Pawn_WorkSettings pws = item.workSettings;

            pws.DisableAll();

            NameTriple triple = NameTriple.FromString(item.kindDef.label);

            triple.ResolveMissingPieces("Adams".Translate());
            item.Name = triple;

            Pawn_SkillTracker skt = item.skills;

            foreach (SkillRecord sr in skt.skills)
            {
                sr.Level = 20;
            }

            item.inventory.DestroyAll();
            ps.bodyType  = BodyTypeDefOf.Female;
            ps.hairDef   = hair;
            ps.hairColor = new UnityEngine.Color(1, 0.8f, 0);

            //st.SkinColor = new UnityEngine.Color(0.98f,0.76f,0.71f);
            ps.melanin = 0f;


            Pawn_EquipmentTracker pe = item.equipment;

            pe.Remove(pe.Primary);
            pe.AddEquipment((ThingWithComps)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("ra2_Gun_Tanya", true)));


            //item.story = st;
            return(item);
        }
示例#9
0
        public static NameTriple TryGetRandomUnusedSolidName(Gender gender, string requiredLastName = null)
        {
            NameTriple nameTriple = null;

            if (Rand.Value < 0.5f)
            {
                nameTriple = Prefs.RandomPreferredName();
                if (nameTriple != null && (nameTriple.UsedThisGame || (requiredLastName != null && nameTriple.Last != requiredLastName)))
                {
                    nameTriple = null;
                }
            }
            List <NameTriple> listForGender = PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Either);
            List <NameTriple> list          = (gender != Gender.Male) ? PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Female) : PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Male);
            float             num           = ((float)listForGender.Count + 0.1f) / ((float)(listForGender.Count + list.Count) + 0.1f);
            List <NameTriple> list2;

            if (Rand.Value < num)
            {
                list2 = listForGender;
            }
            else
            {
                list2 = list;
            }
            NameTriple result;

            if (list2.Count == 0)
            {
                Log.Error("Empty solid pawn name list for gender: " + gender + ".", false);
                result = null;
            }
            else if (nameTriple != null && list2.Contains(nameTriple))
            {
                result = nameTriple;
            }
            else
            {
                list2.Shuffle <NameTriple>();
                NameTriple nameTriple2 = (from name in list2
                                          where (requiredLastName == null || !(name.Last != requiredLastName)) && !name.UsedThisGame
                                          select name).FirstOrDefault <NameTriple>();
                result = nameTriple2;
            }
            return(result);
        }
示例#10
0
        public static void InitOnNewGame()
        {
            ListAllyAvailable.Clear();
            ListAllySpawned.Clear();
#if TESTING
            /* */
            const int TOTAL = 5;
            for (int i = 0; i < TOTAL; ++i)
            {
                var pgr = new PawnGenerationRequest(PawnKindDef.Named("SpaceRefugee"), null,
                                                    PawnGenerationContext.NonPlayer, -1, true);
                var newPawn = PawnGenerator.GeneratePawn(pgr);
                newPawn.Name = NameTriple.FromString("ReunionPawn" + i);
                ListAllyAvailable.Add(newPawn);
            }
            /* */
#endif
        }
示例#11
0
        private static PawnBio TryGetRandomUnusedSolidBioFor(string backstoryCategory, PawnKindDef kind, Gender gender, string requiredLastName)
        {
            NameTriple prefName = null;

            if (Rand.Value < 0.5f)
            {
                prefName = Prefs.RandomPreferredName();
                if (prefName != null && (prefName.UsedThisGame || (requiredLastName != null && prefName.Last != requiredLastName)))
                {
                    prefName = null;
                }
            }
            PawnBio result;

            for (;;)
            {
                result = null;
                IEnumerable <PawnBio> source = SolidBioDatabase.allBios.TakeRandom(20).Where(delegate(PawnBio bio)
                {
                    if (bio.gender != GenderPossibility.Either)
                    {
                        if (gender == Gender.Male && bio.gender != GenderPossibility.Male)
                        {
                            return(false);
                        }
                        if (gender == Gender.Female && bio.gender != GenderPossibility.Female)
                        {
                            return(false);
                        }
                    }
                    return((requiredLastName.NullOrEmpty() || !(bio.name.Last != requiredLastName)) && (prefName == null || bio.name.Equals(prefName)) && (!kind.factionLeader || bio.pirateKing) && bio.adulthood.spawnCategories.Contains(backstoryCategory) && !bio.name.UsedThisGame);
                });
                if (PawnBioAndNameGenerator.< > f__mg$cache1 == null)
                {
                    PawnBioAndNameGenerator.< > f__mg$cache1 = new Func <PawnBio, float>(PawnBioAndNameGenerator.BioSelectionWeight);
                }
                if (source.TryRandomElementByWeight(PawnBioAndNameGenerator.< > f__mg$cache1, out result) || prefName == null)
                {
                    break;
                }
                prefName = null;
            }
            return(result);
        }
示例#12
0
        public static IEnumerable <NameTriple> AllNames()
        {
            foreach (KeyValuePair <GenderPossibility, List <NameTriple> > solidName in solidNames)
            {
                using (List <NameTriple> .Enumerator enumerator2 = solidName.Value.GetEnumerator())
                {
                    if (enumerator2.MoveNext())
                    {
                        NameTriple name = enumerator2.Current;
                        yield return(name);

                        /*Error: Unable to find new state assignment for yield return*/;
                    }
                }
            }
            yield break;
IL_0114:
            /*Error near IL_0115: Unexpected return in MoveNext()*/;
        }
        private static Pawn getTanya(IncidentParms parms)
        {
            var request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed("ra2_AlliedTanya"), parms.faction,
                                                    PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 1f, false, true, true,
                                                    false, false, false, false, false, 0, 0, null, 1, null, null, null, null, null, null, null,
                                                    Gender.Female);
            var item = PawnGenerator.GeneratePawn(request);

            var st   = item.story;
            var hair = DefDatabase <HairDef> .GetNamed("Curly");

            var bsdb  = BackstoryDatabase.allBackstories;
            var child = bsdb.TryGetValue("YouthSoldier99");
            var old   = bsdb.TryGetValue("VeteranSoldier2");

            st.adulthood = old;
            st.childhood = child;

            var triple = NameTriple.FromString(item.kindDef.label);

            triple.ResolveMissingPieces("Adams".Translate());
            item.Name = triple;

            var skt = item.skills;

            foreach (var sr in skt.skills)
            {
                sr.Level = 20;
            }


            st.bodyType  = BodyTypeDefOf.Female;
            st.hairDef   = hair;
            st.hairColor = new Color(1, 0.8f, 0);

            //st.SkinColor = new UnityEngine.Color(0.98f,0.76f,0.71f);
            st.melanin = 0f;


            //item.story = st;
            return(item);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map     map = (Map)parms.target;
            IntVec3 loc;

            if (!this.TryFindEntryCell(map, out loc))
            {
                return(false);
            }
            Gender?gender = null;

            if (this.def.pawnFixedGender != Gender.None)
            {
                gender = new Gender?(this.def.pawnFixedGender);
            }
            PawnKindDef           pawnKind   = PawnKindDefOf.Slave;
            Faction               ofAncients = Faction.OfAncients;
            bool                  pawnMustBeCapableOfViolence = this.def.pawnMustBeCapableOfViolence;
            Gender?               fixedGender = gender;
            PawnGenerationRequest request     = new PawnGenerationRequest(pawnKind, ofAncients, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, pawnMustBeCapableOfViolence, 20f, false, true, true, false, false, false, false, null, null, null, null, null, fixedGender, null, null);
            List <Pawn>           prisoners   = new List <Pawn>();
            Pawn                  pawn        = PawnGenerator.GeneratePawn(request);
            NameTriple            oldName     = pawn.Name as NameTriple;
            NameTriple            newName     = new NameTriple(oldName.First, viewer.username.CapitalizeFirst(), oldName.Last);

            pawn.Name = newName;
            pawn.guest.SetGuestStatus(Faction.OfPlayer, true);
            prisoners.Add(pawn);
            parms.raidArrivalMode = PawnsArrivalModeDefOf.CenterDrop;
            if (!parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms))
            {
                return(false);
            }
            parms.raidArrivalMode.Worker.Arrive(prisoners, parms);
            //GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            string text  = $"A prisoner named {viewer.username.CapitalizeFirst()} has escaped from maximum security space prison. Will you capture or let them go?";
            string label = "Prisoner: " + viewer.username.CapitalizeFirst();

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, pawn, null, null);
            return(true);
        }
示例#15
0
        private static NameTriple GeneratePawnName_Shuffled(Pawn pawn, string forcedLastName = null)
        {
            PawnNameCategory pawnNameCategory = pawn.RaceProps.nameCategory;

            if (pawnNameCategory == PawnNameCategory.NoName)
            {
                Log.Message("Can't create a name of type NoName. Defaulting to HumanStandard.");
                pawnNameCategory = PawnNameCategory.HumanStandard;
            }
            NameBank nameBank = PawnNameDatabaseShuffled.BankOf(pawnNameCategory);
            string   name     = nameBank.GetName(PawnNameSlot.First, pawn.gender);
            string   text     = (forcedLastName == null) ? nameBank.GetName(PawnNameSlot.Last) : forcedLastName;
            int      num      = 0;
            string   nick;

            do
            {
                num++;
                if (Rand.Value < 0.15f)
                {
                    Gender gender = pawn.gender;
                    if (Rand.Value < 0.5f)
                    {
                        gender = Gender.None;
                    }
                    nick = nameBank.GetName(PawnNameSlot.Nick, gender);
                }
                else if (Rand.Value < 0.5f)
                {
                    nick = name;
                }
                else
                {
                    nick = text;
                }
            }while (num < 50 && NameUseChecker.AllPawnsNamesEverUsed.Any(delegate(Name x)
            {
                NameTriple nameTriple = x as NameTriple;
                return(nameTriple != null && nameTriple.Nick == nick);
            }));
            return(new NameTriple(name, nick, text));
        }
示例#16
0
        public override void PostSpawnSetup()
        {
            base.PostSpawnSetup();
            this.psykerPowerManager = new PsykerPowerManager(this);
            ChaosFollowerPawnKindDef pdef = this.psyker.kindDef as ChaosFollowerPawnKindDef;

            if (pdef != null && pdef.RenamePawns)
            {
                string rawName = NameGenerator.GenerateName(pdef.OverridingNameRulePack, delegate(string x)
                {
                    NameTriple nameTriple4 = NameTriple.FromString(x);
                    nameTriple4.ResolveMissingPieces(null);
                    return(!nameTriple4.UsedThisGame);
                }, false);
                NameTriple nameTriple = NameTriple.FromString(rawName);
                nameTriple.CapitalizeNick();
                nameTriple.ResolveMissingPieces(null);
                psyker.Name = nameTriple;
            }
        }
示例#17
0
 public static bool ChangeNameAfterMarriage(Pawn firstPawn, Pawn secondPawn, MarriageNameChange changeName)
 {
     if (changeName != 0)
     {
         Pawn man   = null;
         Pawn woman = null;
         DetermineManAndWomanSpouses(firstPawn, secondPawn, out man, out woman);
         NameTriple nameTriple  = man.Name as NameTriple;
         NameTriple nameTriple2 = woman.Name as NameTriple;
         if (nameTriple == null || nameTriple2 == null)
         {
             return(false);
         }
         string last = ((changeName == MarriageNameChange.MansName) ? nameTriple.Last : nameTriple2.Last);
         man.Name   = new NameTriple(nameTriple.First, nameTriple.Nick, last);
         woman.Name = new NameTriple(nameTriple2.First, nameTriple2.Nick, last);
         return(true);
     }
     return(false);
 }
示例#18
0
        private void DoNameInput()
        {
            NameTriple nameTriple = pawn.Name as NameTriple;
            string     first      = nameTriple.First;
            string     nick       = nameTriple.Nick;
            string     last       = nameTriple.Last;

            Rect rect       = new Rect(rectCard.x + (rectCard.width * .85f), rectCard.y + (rectCard.height * .26f), PawnPortraitSize.x, PawnPortraitSize.y * .2f);
            Rect rectOffset = new Rect(0f, PawnPortraitSize.y * .22f, 0f, 0f);

            string strFirst = Widgets.TextField(rect, first);

            if (strFirst.Length <= 12 && validNameRegex.IsMatch(strFirst))
            {
                first = strFirst;
            }

            string strNick = Widgets.TextField(KrozzyUtilities.RectAddition(rect, rectOffset), nick);

            if (strNick.Length <= 9 && validNameRegex.IsMatch(strNick))
            {
                nick = strNick;
            }

            string strLast = Widgets.TextField(KrozzyUtilities.RectAddition(KrozzyUtilities.RectAddition(rect, rectOffset), rectOffset), last);

            if (strLast.Length <= 12 && validNameRegex.IsMatch(strLast))
            {
                last = strLast;
            }

            if (nameTriple.First != first || nameTriple.Nick != nick || nameTriple.Last != last)
            {
                pawn.Name = new NameTriple(first, nick, last);
            }

            TooltipHandler.TipRegion(rect, "FirstNameDesc".Translate());
            TooltipHandler.TipRegion(KrozzyUtilities.RectAddition(rect, rectOffset), "ShortIdentifierDesc".Translate());
            TooltipHandler.TipRegion(KrozzyUtilities.RectAddition(KrozzyUtilities.RectAddition(rect, rectOffset), rectOffset), "LastNameDesc".Translate());
        }
示例#19
0
        public static NameTriple TryGetRandomUnusedSolidName(Gender gender, string requiredLastName = null)
        {
            NameTriple nameTriple = null;

            if (Rand.Value < 0.5f)
            {
                nameTriple = Prefs.RandomPreferredName();
                if (nameTriple != null && (nameTriple.UsedThisGame || (requiredLastName != null && nameTriple.Last != requiredLastName)))
                {
                    nameTriple = null;
                }
            }
            List <NameTriple> listForGender = PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Either);
            List <NameTriple> list          = (gender != Gender.Male) ? PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Female) : PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Male);
            float             num           = ((float)listForGender.Count + 0.1f) / ((float)(listForGender.Count + list.Count) + 0.1f);
            List <NameTriple> list2         = (!(Rand.Value < num)) ? list : listForGender;

            if (list2.Count == 0)
            {
                Log.Error("Empty solid pawn name list for gender: " + gender + ".");
                return(null);
            }
            if (nameTriple != null && list2.Contains(nameTriple))
            {
                return(nameTriple);
            }
            list2.Shuffle();
            return(list2.Where(delegate(NameTriple name)
            {
                if (requiredLastName != null && name.Last != requiredLastName)
                {
                    return false;
                }
                if (name.UsedThisGame)
                {
                    return false;
                }
                return true;
            }).FirstOrDefault());
        }
示例#20
0
        public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn sire, Faction vampFaction = null, bool firstVampire = false)
        {
            //Lower generation vampires are impossibly old.
            float?math = sire != null ? sire.ageTracker.AgeChronologicalYearsFloat + new FloatRange(100, 300).RandomInRange :
                         generation > 4 ? Mathf.Clamp(2000 - generation * Rand.Range(20, 200), 16, 2000) :
                         100000 - generation * Rand.Range(10000, 50000);

            Faction faction = vampFaction != null ? vampFaction :
                              generation < 7 ? Find.FactionManager.FirstFactionOfDef(VampDefOf.ROMV_LegendaryVampires) : VampireUtility.RandVampFaction;

            HarmonyPatches.VampireGenInProgress = true;
            PawnGenerationRequest request = new PawnGenerationRequest(
                DetermineKindDef(generation), faction, PawnGenerationContext.NonPlayer,
                -1, true, false, false, false, true, true, 20f, false, true,
                true, false, false, false, false, false, 0, 0, null, 0, null, null, null, null, null, math, null, null);
            Pawn pawn = PawnGenerator.GeneratePawn(request);

            if (DebugSettings.godMode)
            {
                Log.Message(pawn.Name + " Age:" + pawn.ageTracker.AgeNumberString + " Generation:" + generation);
            }
            HarmonyPatches.VampireGenInProgress = false;

            if (firstVampire)
            {
                NameTriple caineName = new NameTriple("Caine", "Caine", "Darkfather");
                pawn.Name   = caineName;
                pawn.gender = Gender.Male;
            }
            pawn.story.hairColor = PawnHairColors.RandomHairColor(pawn.story.SkinColor, 20);
            if (!bloodline.allowsHair)
            {
                pawn.story.hairDef = DefDatabase <HairDef> .GetNamed("Shaved");
            }
            pawn.VampComp().InitializeVampirism(sire, bloodline, generation, firstVampire);
            pawn.ageTracker.AgeBiologicalTicks = (long)(math * GenDate.TicksPerYear);
            //TryGiveVampirismHediff(pawn, generation, bloodline, sire, firstVampire);
            return(pawn);
        }
示例#21
0
        public bool TryAssigningUserToPawn(string username, Pawn pawnToAssign)
        {
            if (username == "" || TryGetPawnAssignedToUser(username, out Pawn pawnAssigned))
            {
                return(false);
            }

            if (PawnQueueSettings.renameAssignedPawns)
            {
                NameTriple oldName = pawnToAssign.Name as NameTriple;
                pawnToAssign.Name = new NameTriple(oldName.First, username, oldName.Last);
            }

            pawnsTracked.Add(username, pawnToAssign);

            if (viewersInQueue.Contains(username))
            {
                viewersInQueue.Remove(username);
            }

            return(true);
        }
示例#22
0
        // RimWorld.PawnBioAndNameGenerator
        public static void GeneratePawnName(Pawn pawn, NameStyle style, string forcedLastName, ref Name __result)
        {
            if (pawn != null && pawn.Faction != null && pawn.Faction.def.defName == "RE_Player")
            {
                var ruleMaker = pawn.gender ==
                                Gender.Female ?
                                DefDatabase <RulePackDef> .GetNamed("RE_STARSNamerFemale")
                    :
                                DefDatabase <RulePackDef> .GetNamed("RE_STARSNamerMale");

                string rawName = NameGenerator.GenerateName(ruleMaker, delegate(string x)
                {
                    NameTriple nameTriple4 = NameTriple.FromString(x);
                    nameTriple4.ResolveMissingPieces(forcedLastName);
                    return(!nameTriple4.UsedThisGame);
                });
                NameTriple nameTriple = NameTriple.FromString(rawName);
                nameTriple.CapitalizeNick();
                nameTriple.ResolveMissingPieces(forcedLastName);
                __result = nameTriple;
            }
        }
示例#23
0
        public override void TryExecute()
        {
            PawnKindDef           pawnKind = PawnKindDefOf.Colonist;
            Faction               ofPlayer = Faction.OfPlayer;
            bool                  pawnMustBeCapableOfViolence = true;
            PawnGenerationRequest request = new PawnGenerationRequest(pawnKind, ofPlayer, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, pawnMustBeCapableOfViolence, 20f, false, true, true, false, false, false, false, null, null, null, null, null, null, null, null);
            Pawn                  pawn    = PawnGenerator.GeneratePawn(request);
            NameTriple            old     = pawn.Name as NameTriple;

            pawn.Name = new NameTriple(old.First, viewer.username, old.Last);
            GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            string label = "Viewer Joins";
            string text  = $"A new pawn has been purchased by {viewer.username}, let's welcome them to the colony.";

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.PositiveEvent, pawn, null, null);

            Current.Game.GetComponent <GameComponentPawns>().AssignUserToPawn(viewer.username, pawn);
            viewer.TakeViewerCoins(this.storeIncident.cost);
            viewer.CalculateNewKarma(this.storeIncident.karmaType, storeIncident.cost);

            VariablesHelpers.SendPurchaseMessage($"@{viewer.username} has purchased a pawn and is joining the colony.", separateChannel);
        }
示例#24
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (viewer == null)
            {
                return(false);
            }

            Helper.Log("Executing viewer quest");
            int tile;

            if (!this.TryFindTile(out tile))
            {
                return(false);
            }
            Site site = SiteMaker.TryMakeSite_SingleSitePart(SiteCoreDefOf.PrisonerWillingToJoin, "PrisonerRescueQuestThreat", tile, null, true, null, true, null);

            if (site == null)
            {
                return(false);
            }
            site.sitePartsKnown = true;
            Pawn       pawn    = PrisonerWillingToJoinQuestUtility.GeneratePrisoner(tile, site.Faction);
            NameTriple oldName = pawn.Name as NameTriple;

            pawn.Name = new NameTriple(oldName.First, viewer.username.CapitalizeFirst(), oldName.Last);
            site.GetComponent <PrisonerWillingToJoinComp>().pawn.TryAdd(pawn, true);
            int randomInRange = SiteTuning.QuestSiteTimeoutDaysRange.RandomInRange;

            site.GetComponent <TimeoutComp>().StartTimeout(randomInRange * 60000);
            Find.WorldObjects.Add(site);
            string text;
            string label;

            this.GetLetterText(pawn, site, site.parts.FirstOrDefault <SitePart>(), randomInRange, out text, out label);
            Find.LetterStack.ReceiveLetter(label, text, this.def.letterDef, site, site.Faction, null);
            return(true);
        }
        public static NameTriple TryGetRandomUnusedSolidName(Gender gender, string requiredLastName = null)
        {
            List <NameTriple> listForGender = PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Either);
            List <NameTriple> list          = ((gender == Gender.Male) ? PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Male) : PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Female));
            float             num           = ((float)listForGender.Count + 0.1f) / ((float)(listForGender.Count + list.Count) + 0.1f);
            List <NameTriple> list2         = ((!(Rand.Value < num)) ? list : listForGender);

            if (list2.Count == 0)
            {
                Log.Error(string.Concat("Empty solid pawn name list for gender: ", gender, "."));
                return(null);
            }
            if (Rand.Value < 0.5f)
            {
                tmpNames.Clear();
                tmpNames.AddRange(Prefs.PreferredNames);
                tmpNames.Shuffle();
                foreach (string tmpName in tmpNames)
                {
                    NameTriple nameTriple = NameTriple.FromString(tmpName);
                    if (list2.Contains(nameTriple) && !nameTriple.UsedThisGame && (requiredLastName == null || !(nameTriple.Last != requiredLastName)))
                    {
                        return(nameTriple);
                    }
                }
            }
            list2.Shuffle();
            return(list2.Where(delegate(NameTriple name)
            {
                if (requiredLastName != null && name.Last != requiredLastName)
                {
                    return false;
                }
                return (!name.UsedThisGame) ? true : false;
            }).FirstOrDefault());
        }
        private static Name GetName(ThingDef pawnDef, Map map)
        {
            string             AIs   = "";
            IEnumerable <Pawn> pawns = null;

            // Added to catch error when Common Core isn't loaded..
            try
            {
                pawns = map.mapPawns.FreeColonists;
                //pawns = Radar.FindAllPawns(map);
            }
            catch { }

            if (pawns != null)
            {
                int c = pawns.Where(p => p.def.defName == pawnDef.defName).Count();

                if (c > 0)
                {
                    AIs = " " + (c + 1).ToString();
                }
            }

            string first = "AIPawn_Basename_first".Translate();      // "Mobile Artificial Intelligence"
            string nick  = "AIPawn_Basename_nick".Translate() + AIs; // "Mai" + AIs
            string last  = "AIPawn_Basename_last".Translate();       // " "

            if (enhancedAI)
            {
                nick = nick.ToUpper();
            }

            NameTriple pawnName = new NameTriple(first, nick, last);

            return(pawnName);
        }
示例#27
0
        public static void DrawCharacterCard(Rect rect, Pawn pawn, Action randomizeCallback = null, Rect creationRect = default(Rect))
        {
            bool creationMode = randomizeCallback != null;

            GUI.BeginGroup(creationMode ? creationRect : rect);
            Rect       rect2      = new Rect(0f, 0f, 300f, 30f);
            NameTriple nameTriple = pawn.Name as NameTriple;

            if (creationMode && nameTriple != null)
            {
                Rect rect3 = new Rect(rect2);
                rect3.width *= 0.333f;
                Rect rect4 = new Rect(rect2);
                rect4.width *= 0.333f;
                rect4.x     += rect4.width;
                Rect rect5 = new Rect(rect2);
                rect5.width *= 0.333f;
                rect5.x     += rect4.width * 2f;
                string name  = nameTriple.First;
                string name2 = nameTriple.Nick;
                string name3 = nameTriple.Last;
                DoNameInputRect(rect3, ref name, 12);
                if (nameTriple.Nick == nameTriple.First || nameTriple.Nick == nameTriple.Last)
                {
                    GUI.color = new Color(1f, 1f, 1f, 0.5f);
                }
                DoNameInputRect(rect4, ref name2, 16);
                GUI.color = Color.white;
                DoNameInputRect(rect5, ref name3, 12);
                if (nameTriple.First != name || nameTriple.Nick != name2 || nameTriple.Last != name3)
                {
                    pawn.Name = new NameTriple(name, string.IsNullOrEmpty(name2) ? name : name2, name3);
                }
                TooltipHandler.TipRegionByKey(rect3, "FirstNameDesc");
                TooltipHandler.TipRegionByKey(rect4, "ShortIdentifierDesc");
                TooltipHandler.TipRegionByKey(rect5, "LastNameDesc");
            }
            else
            {
                rect2.width = 999f;
                Text.Font   = GameFont.Medium;
                Widgets.Label(rect2, pawn.Name.ToStringFull);
                Text.Font = GameFont.Small;
            }
            if (randomizeCallback != null)
            {
                Rect rect6 = new Rect(creationRect.width - 24f - 100f, 0f, 100f, rect2.height);
                if (Widgets.ButtonText(rect6, "Randomize".Translate()))
                {
                    SoundDefOf.Tick_Tiny.PlayOneShotOnCamera();
                    randomizeCallback();
                }
                UIHighlighter.HighlightOpportunity(rect6, "RandomizePawn");
            }
            if (creationMode)
            {
                Widgets.InfoCardButton(creationRect.width - 24f, 0f, pawn);
            }
            else if (!pawn.health.Dead)
            {
                float num = PawnCardSize(pawn).x - 85f;
                if (pawn.IsFreeColonist && pawn.Spawned)
                {
                    Rect rect7 = new Rect(num, 0f, 30f, 30f);
                    if (Mouse.IsOver(rect7))
                    {
                        TooltipHandler.TipRegion(rect7, PawnBanishUtility.GetBanishButtonTip(pawn));
                    }
                    if (Widgets.ButtonImage(rect7, TexButton.Banish))
                    {
                        if (pawn.Downed)
                        {
                            Messages.Message("MessageCantBanishDownedPawn".Translate(pawn.LabelShort, pawn).AdjustedFor(pawn), pawn, MessageTypeDefOf.RejectInput, historical: false);
                        }
                        else
                        {
                            PawnBanishUtility.ShowBanishPawnConfirmationDialog(pawn);
                        }
                    }
                    num -= 40f;
                }
                if (pawn.IsColonist)
                {
                    Rect rect8 = new Rect(num, 0f, 30f, 30f);
                    TooltipHandler.TipRegionByKey(rect8, "RenameColonist");
                    if (Widgets.ButtonImage(rect8, TexButton.Rename))
                    {
                        Find.WindowStack.Add(new Dialog_NamePawn(pawn));
                    }
                    num -= 40f;
                }
                if (pawn.IsFreeColonist && !pawn.IsQuestLodger() && pawn.royalty != null && pawn.royalty.AllTitlesForReading.Count > 0)
                {
                    Rect rect9 = new Rect(num, 0f, 30f, 30f);
                    TooltipHandler.TipRegionByKey(rect9, "RenounceTitle");
                    if (Widgets.ButtonImage(rect9, TexButton.RenounceTitle))
                    {
                        FloatMenuUtility.MakeMenu(pawn.royalty.AllTitlesForReading, (RoyalTitle title) => "RenounceTitle".Translate() + ": " + "TitleOfFaction".Translate(title.def.GetLabelCapFor(pawn), title.faction.GetCallLabel()), (RoyalTitle title) => delegate
                        {
                            RoyalTitleUtility.FindLostAndGainedPermits(title.def, null, out List <RoyalTitlePermitDef> _, out List <RoyalTitlePermitDef> lostPermits);
                            StringBuilder stringBuilder = new StringBuilder();
                            if (lostPermits.Count > 0)
                            {
                                stringBuilder.AppendLine("RenounceTitleWillLoosePermits".Translate(pawn.Named("PAWN")) + ":");
                                foreach (RoyalTitlePermitDef item2 in lostPermits)
                                {
                                    stringBuilder.AppendLine("- " + item2.LabelCap + " (" + FirstTitleWithPermit(item2).GetLabelFor(pawn) + ")");
                                }
                                stringBuilder.AppendLine();
                            }
                            if (!title.faction.def.renounceTitleMessage.NullOrEmpty())
                            {
                                stringBuilder.AppendLine(title.faction.def.renounceTitleMessage);
                            }
                            Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("RenounceTitleDescription".Translate(pawn.Named("PAWN"), "TitleOfFaction".Translate(title.def.GetLabelCapFor(pawn), title.faction.GetCallLabel()).Named("TITLE"), stringBuilder.ToString().TrimEndNewlines().Named("EFFECTS")), delegate
                            {
                                pawn.royalty.SetTitle(title.faction, null, grantRewards: false);
                            }, destructive: true));
                        });
                    }
                    num -= 40f;
                }
            }
            List <GenUI.AnonymousStackElement> stackElements = new List <GenUI.AnonymousStackElement>();

            Text.Font = GameFont.Small;
            string  text   = pawn.MainDesc(writeFaction: false);
            Vector2 vector = Text.CalcSize(text);
            Rect    rect10 = new Rect(0f, 45f, vector.x + 5f, 24f);

            Widgets.Label(rect10, text);
            float height = Text.CalcHeight(text, rect10.width);
            Rect  rect11 = new Rect(rect10.x, rect10.y, rect10.width, height);

            if (Mouse.IsOver(rect11))
            {
                TooltipHandler.TipRegion(rect11, () => pawn.ageTracker.AgeTooltipString, 6873641);
            }
            float num2 = 0f;

            if (pawn.Faction != null && !pawn.Faction.def.hidden)
            {
                float num3 = Text.CalcSize(pawn.Faction.Name).x + 22f + 15f;
                stackElements.Add(new GenUI.AnonymousStackElement
                {
                    drawer = delegate(Rect r)
                    {
                        Rect rect23  = new Rect(r.x, r.y, r.width, r.height);
                        Color color7 = GUI.color;
                        GUI.color    = StackElementBackground;
                        GUI.DrawTexture(rect23, BaseContent.WhiteTex);
                        GUI.color = color7;
                        Widgets.DrawHighlightIfMouseover(rect23);
                        Rect rect24    = new Rect(r.x, r.y, r.width, r.height);
                        Rect position4 = new Rect(r.x + 1f, r.y + 1f, 20f, 20f);
                        GUI.color      = pawn.Faction.Color;
                        GUI.DrawTexture(position4, pawn.Faction.def.FactionIcon);
                        GUI.color = color7;
                        Widgets.Label(new Rect(rect24.x + rect24.height + 5f, rect24.y, rect24.width - 10f, rect24.height), pawn.Faction.Name);
                        if (Widgets.ButtonInvisible(rect23))
                        {
                            if (creationMode)
                            {
                                Find.WindowStack.Add(new Dialog_FactionDuringLanding());
                            }
                            else
                            {
                                Find.MainTabsRoot.SetCurrentTab(MainButtonDefOf.Factions);
                            }
                        }
                        if (Mouse.IsOver(rect23))
                        {
                            TipSignal tip6 = new TipSignal(() => "Faction".Translate() + "\n\n" + "FactionDesc".Translate(pawn.Named("PAWN")) + "\n\n" + "ClickToViewFactions".Translate(), pawn.Faction.loadID * 37);
                            TooltipHandler.TipRegion(rect23, tip6);
                        }
                    },
                    width = num3
                });
                num2 += num3;
            }
            bool  flag = false;
            float num4 = rect.width - vector.x - 10f;

            tmpExtraFactions.Clear();
            QuestUtility.GetExtraFactionsFromQuestParts(pawn, tmpExtraFactions);
            foreach (ExtraFaction tmpExtraFaction in tmpExtraFactions)
            {
                ExtraFaction localExtraFaction    = tmpExtraFaction;
                string       factionName          = localExtraFaction.faction.Name;
                bool         drawExtraFactionIcon = localExtraFaction.factionType == ExtraFactionType.HomeFaction;
                float        num5 = ElementWidth();
                if (flag || num2 + num5 >= num4)
                {
                    factionName = "...";
                    num5        = ElementWidth();
                    flag        = true;
                }
                stackElements.Add(new GenUI.AnonymousStackElement
                {
                    drawer = delegate(Rect r)
                    {
                        Rect rect20  = new Rect(r.x, r.y, r.width, r.height);
                        Rect rect21  = drawExtraFactionIcon ? rect20 : r;
                        Color color6 = GUI.color;
                        GUI.color    = StackElementBackground;
                        GUI.DrawTexture(rect21, BaseContent.WhiteTex);
                        GUI.color = color6;
                        Widgets.DrawHighlightIfMouseover(rect21);
                        if (drawExtraFactionIcon)
                        {
                            Rect rect22    = new Rect(r.x, r.y, r.width, r.height);
                            Rect position3 = new Rect(r.x + 1f, r.y + 1f, 20f, 20f);
                            GUI.color      = localExtraFaction.faction.Color;
                            GUI.DrawTexture(position3, localExtraFaction.faction.def.FactionIcon);
                            GUI.color = color6;
                            Widgets.Label(new Rect(rect22.x + rect22.height + 5f, rect22.y, rect22.width - 10f, rect22.height), factionName);
                        }
                        else
                        {
                            Widgets.Label(new Rect(r.x + 5f, r.y, r.width - 10f, r.height), factionName);
                        }
                        if (Widgets.ButtonInvisible(rect20))
                        {
                            Find.MainTabsRoot.SetCurrentTab(MainButtonDefOf.Factions);
                        }
                        if (Mouse.IsOver(rect21))
                        {
                            TipSignal tip5 = new TipSignal(() => localExtraFaction.factionType.GetLabel().CapitalizeFirst() + "\n\n" + "ExtraFactionDesc".Translate(pawn.Named("PAWN")) + "\n\n" + "ClickToViewFactions".Translate(), localExtraFaction.faction.loadID ^ 0x738AC053);
                            TooltipHandler.TipRegion(rect21, tip5);
                        }
                    },
                    width = num5
                });
                num2 += num5;
                float ElementWidth()
                {
                    return(Text.CalcSize(factionName).x + (float)(drawExtraFactionIcon ? 22 : 0) + 15f);
                }
            }
            GenUI.DrawElementStack(new Rect(vector.x + 10f, 45f, 999f, 24f), 22f, stackElements, delegate(Rect r, GenUI.AnonymousStackElement obj)
            {
                obj.drawer(r);
            }, (GenUI.AnonymousStackElement obj) => obj.width, 4f, 5f, allowOrderOptimization: false);
            stackElements.Clear();
            float curY = 72f;

            if (pawn.royalty != null && pawn.royalty.AllTitlesForReading.Count > 0)
            {
                foreach (RoyalTitle title2 in pawn.royalty.AllTitlesForReading)
                {
                    RoyalTitle localTitle = title2;
                    string     titleLabel = localTitle.def.GetLabelCapFor(pawn) + " (" + pawn.royalty.GetFavor(localTitle.faction) + ")";
                    stackElements.Add(new GenUI.AnonymousStackElement
                    {
                        drawer = delegate(Rect r)
                        {
                            Color color5 = GUI.color;
                            Rect rect18  = new Rect(r.x, r.y, r.width + 22f, r.height);
                            GUI.color    = StackElementBackground;
                            GUI.DrawTexture(rect18, BaseContent.WhiteTex);
                            GUI.color = color5;
                            int favor = pawn.royalty.GetFavor(localTitle.faction);
                            if (Mouse.IsOver(rect18))
                            {
                                Widgets.DrawHighlight(rect18);
                            }
                            Rect rect19    = new Rect(r.x, r.y, r.width + 22f, r.height);
                            Rect position2 = new Rect(r.x + 1f, r.y + 1f, 20f, 20f);
                            GUI.color      = title2.faction.Color;
                            GUI.DrawTexture(position2, localTitle.faction.def.FactionIcon);
                            GUI.color = color5;
                            Widgets.Label(new Rect(rect19.x + rect19.height + 5f, rect19.y, rect19.width - 10f, rect19.height), titleLabel);
                            if (Widgets.ButtonInvisible(rect18))
                            {
                                Find.WindowStack.Add(new Dialog_InfoCard(localTitle.def, localTitle.faction));
                            }
                            if (Mouse.IsOver(rect18))
                            {
                                TipSignal tip4 = new TipSignal(() => GetTitleTipString(pawn, localTitle.faction, localTitle, favor), (int)curY * 37);
                                TooltipHandler.TipRegion(rect18, tip4);
                            }
                        },
                        width = Text.CalcSize(titleLabel).x + 15f
                    });
                }
            }
            QuestUtility.AppendInspectStringsFromQuestParts(delegate(string str, Quest quest)
            {
                stackElements.Add(new GenUI.AnonymousStackElement
                {
                    drawer = delegate(Rect r)
                    {
                        Color color4 = GUI.color;
                        GUI.color    = StackElementBackground;
                        GUI.DrawTexture(r, BaseContent.WhiteTex);
                        GUI.color = color4;
                        DoQuestLine(r, str, quest);
                    },
                    width = GetQuestLineSize(str, quest).x
                });
            }, pawn, out int _);
            curY += GenUI.DrawElementStack(new Rect(0f, curY, rect.width - 5f, 50f), 22f, stackElements, delegate(Rect r, GenUI.AnonymousStackElement obj)
            {
                obj.drawer(r);
            }, (GenUI.AnonymousStackElement obj) => obj.width).height;
            if (stackElements.Any())
            {
                curY += 10f;
            }
            Rect leftRect = new Rect(0f, curY, 250f, 355f);
            Rect position = new Rect(leftRect.xMax, curY, 258f, 355f);

            GUI.BeginGroup(leftRect);
            curY = 0f;
            Pawn           pawnLocal = pawn;
            List <Ability> abilities = (from a in pawn.abilities.abilities
                                        orderby a.def.level, a.def.EntropyGain
                                        select a).ToList();
            int   numSections = abilities.Any() ? 5 : 4;
            float num6        = (float)Enum.GetValues(typeof(BackstorySlot)).Length * 22f;

            if (pawn.story != null && pawn.story.title != null)
            {
                num6 += 22f;
            }
            List <LeftRectSection> list = new List <LeftRectSection>();
            LeftRectSection        item = new LeftRectSection
            {
                rect   = new Rect(0f, 0f, leftRect.width, num6),
                drawer = delegate(Rect sectionRect)
                {
                    float num12 = sectionRect.y;
                    Text.Font = GameFont.Small;
                    foreach (BackstorySlot value6 in Enum.GetValues(typeof(BackstorySlot)))
                    {
                        Backstory backstory = pawn.story.GetBackstory(value6);
                        if (backstory != null)
                        {
                            Rect rect14 = new Rect(sectionRect.x, num12, leftRect.width, 22f);
                            if (Mouse.IsOver(rect14))
                            {
                                Widgets.DrawHighlight(rect14);
                            }
                            if (Mouse.IsOver(rect14))
                            {
                                TooltipHandler.TipRegion(rect14, backstory.FullDescriptionFor(pawn).Resolve());
                            }
                            Text.Anchor = TextAnchor.MiddleLeft;
                            string str2 = (value6 == BackstorySlot.Adulthood) ? "Adulthood".Translate() : "Childhood".Translate();
                            Widgets.Label(rect14, str2 + ":");
                            Text.Anchor = TextAnchor.UpperLeft;
                            Rect rect15 = new Rect(rect14);
                            rect15.x     += 90f;
                            rect15.width -= 90f;
                            string str3 = backstory.TitleCapFor(pawn.gender);
                            Widgets.Label(rect15, str3.Truncate(rect15.width));
                            num12 += rect14.height;
                        }
                    }
                    if (pawn.story != null && pawn.story.title != null)
                    {
                        Rect rect16 = new Rect(sectionRect.x, num12, leftRect.width, 22f);
                        Text.Anchor = TextAnchor.MiddleLeft;
                        Widgets.Label(rect16, "Current".Translate() + ":");
                        Text.Anchor = TextAnchor.UpperLeft;
                        Rect rect17 = new Rect(rect16);
                        rect17.x     += 90f;
                        rect17.width -= 90f;
                        Widgets.Label(rect17, pawn.story.title);
                        num12 += rect16.height;
                    }
                }
            };

            list.Add(item);
            num6 = 30f;
            WorkTags        disabledTags               = pawn.CombinedDisabledWorkTags;
            List <WorkTags> disabledTagsList           = WorkTagsFrom(disabledTags).ToList();
            bool            allowWorkTagVerticalLayout = false;

            GenUI.StackElementWidthGetter <WorkTags> workTagWidthGetter = (WorkTags tag) => Text.CalcSize(tag.LabelTranslated().CapitalizeFirst()).x + 10f;
            if (disabledTags == WorkTags.None)
            {
                num6 += 22f;
            }
            else
            {
                disabledTagsList.Sort(delegate(WorkTags a, WorkTags b)
                {
                    int num11  = GetWorkTypeDisableCauses(pawn, a).Any((object c) => c is RoyalTitleDef) ? 1 : (-1);
                    int value5 = GetWorkTypeDisableCauses(pawn, b).Any((object c) => c is RoyalTitleDef) ? 1 : (-1);
                    return(num11.CompareTo(value5));
                });
                num6 += GenUI.DrawElementStack(new Rect(0f, 0f, leftRect.width - 5f, leftRect.height), 22f, disabledTagsList, delegate
                {
                }, workTagWidthGetter, 4f, 5f, allowOrderOptimization: false).height;
                num6 += 12f;
                allowWorkTagVerticalLayout = (GenUI.DrawElementStackVertical(new Rect(0f, 0f, rect.width, leftRect.height / (float)numSections), 22f, disabledTagsList, delegate
                {
                }, workTagWidthGetter).width <= leftRect.width);
            }
            item = new LeftRectSection
            {
                rect   = new Rect(0f, 0f, leftRect.width, num6),
                drawer = delegate(Rect sectionRect)
                {
                    Text.Font = GameFont.Medium;
                    float currentY3 = sectionRect.y;
                    Widgets.Label(new Rect(sectionRect.x, currentY3, 200f, 30f), "IncapableOf".Translate(pawn));
                    currentY3 += 30f;
                    Text.Font  = GameFont.Small;
                    if (disabledTags == WorkTags.None)
                    {
                        GUI.color = Color.gray;
                        Rect rect13 = new Rect(sectionRect.x, currentY3, leftRect.width, 24f);
                        if (Mouse.IsOver(rect13))
                        {
                            Widgets.DrawHighlight(rect13);
                        }
                        Widgets.Label(rect13, "None".Translate());
                        TooltipHandler.TipRegionByKey(rect13, "None");
                    }
                    else
                    {
                        GenUI.StackElementDrawer <WorkTags> drawer = delegate(Rect r, WorkTags tag)
                        {
                            Color color3 = GUI.color;
                            GUI.color = StackElementBackground;
                            GUI.DrawTexture(r, BaseContent.WhiteTex);
                            GUI.color = color3;
                            GUI.color = GetDisabledWorkTagLabelColor(pawn, tag);
                            if (Mouse.IsOver(r))
                            {
                                Widgets.DrawHighlight(r);
                            }
                            Widgets.Label(new Rect(r.x + 5f, r.y, r.width - 10f, r.height), tag.LabelTranslated().CapitalizeFirst());
                            if (Mouse.IsOver(r))
                            {
                                TooltipHandler.TipRegion(tip: new TipSignal(() => GetWorkTypeDisabledCausedBy(pawnLocal, tag) + "\n" + GetWorkTypesDisabledByWorkTag(tag), (int)currentY3 * 32), rect: r);
                            }
                        };
                        if (allowWorkTagVerticalLayout)
                        {
                            GenUI.DrawElementStackVertical(new Rect(sectionRect.x, currentY3, leftRect.width - 5f, leftRect.height / (float)numSections), 22f, disabledTagsList, drawer, workTagWidthGetter);
                        }
                        else
                        {
                            GenUI.DrawElementStack(new Rect(sectionRect.x, currentY3, leftRect.width - 5f, leftRect.height / (float)numSections), 22f, disabledTagsList, drawer, workTagWidthGetter, 5f);
                        }
                    }
                    GUI.color = Color.white;
                }
            };
            list.Add(item);
            num6 = 30f;
            List <Trait> traits = pawn.story.traits.allTraits;

            num6 = ((traits != null && traits.Count != 0) ? (num6 + GenUI.DrawElementStack(new Rect(0f, 0f, leftRect.width - 5f, leftRect.height), 22f, pawn.story.traits.allTraits, delegate
            {
            }, (Trait trait) => Text.CalcSize(trait.LabelCap).x + 10f).height) : (num6 + 22f));
            num6 += 12f;
            item  = new LeftRectSection
            {
                rect   = new Rect(0f, 0f, leftRect.width, num6),
                drawer = delegate(Rect sectionRect)
                {
                    Text.Font = GameFont.Medium;
                    float currentY2 = sectionRect.y;
                    Widgets.Label(new Rect(sectionRect.x, currentY2, 200f, 30f), "Traits".Translate());
                    currentY2 += 30f;
                    Text.Font  = GameFont.Small;
                    if (traits == null || traits.Count == 0)
                    {
                        Color color = GUI.color;
                        GUI.color = Color.gray;
                        Rect rect12 = new Rect(sectionRect.x, currentY2, leftRect.width, 24f);
                        if (Mouse.IsOver(rect12))
                        {
                            Widgets.DrawHighlight(rect12);
                        }
                        Widgets.Label(rect12, "None".Translate());
                        currentY2 += rect12.height + 2f;
                        TooltipHandler.TipRegionByKey(rect12, "None");
                        GUI.color = color;
                    }
                    else
                    {
                        GenUI.DrawElementStack(new Rect(sectionRect.x, currentY2, leftRect.width - 5f, leftRect.height / (float)numSections), 22f, pawn.story.traits.allTraits, delegate(Rect r, Trait trait)
                        {
                            Color color2 = GUI.color;
                            GUI.color    = StackElementBackground;
                            GUI.DrawTexture(r, BaseContent.WhiteTex);
                            GUI.color = color2;
                            if (Mouse.IsOver(r))
                            {
                                Widgets.DrawHighlight(r);
                            }
                            Widgets.Label(new Rect(r.x + 5f, r.y, r.width - 10f, r.height), trait.LabelCap);
                            if (Mouse.IsOver(r))
                            {
                                TooltipHandler.TipRegion(tip: new TipSignal(() => trait.TipString(pawn), (int)currentY2 * 37), rect: r);
                            }
                        }, (Trait trait) => Text.CalcSize(trait.LabelCap).x + 10f);
                    }
                }
            };
            list.Add(item);
            if (abilities.Any())
            {
                num6  = 30f;
                num6 += GenUI.DrawElementStack(new Rect(0f, 0f, leftRect.width - 5f, leftRect.height), 32f, abilities, delegate
                {
                }, (Ability abil) => 32f).height;
                item = new LeftRectSection
                {
                    rect   = new Rect(0f, 0f, leftRect.width, num6),
                    drawer = delegate(Rect sectionRect)
                    {
                        Text.Font = GameFont.Medium;
                        float currentY = sectionRect.y;
                        Widgets.Label(new Rect(sectionRect.x, currentY, 200f, 30f), "Abilities".Translate(pawn));
                        currentY += 30f;
                        Text.Font = GameFont.Small;
                        GenUI.DrawElementStack(new Rect(sectionRect.x, currentY, leftRect.width - 5f, leftRect.height), 32f, abilities, delegate(Rect r, Ability abil)
                        {
                            GUI.DrawTexture(r, BaseContent.ClearTex);
                            if (Mouse.IsOver(r))
                            {
                                Widgets.DrawHighlight(r);
                            }
                            if (Widgets.ButtonImage(r, abil.def.uiIcon, doMouseoverSound: false))
                            {
                                Find.WindowStack.Add(new Dialog_InfoCard(abil.def));
                            }
                            if (Mouse.IsOver(r))
                            {
                                TipSignal tip = new TipSignal(() => abil.def.GetTooltip() + "\n\n" + "ClickToLearnMore".Translate(), (int)currentY * 37);
                                TooltipHandler.TipRegion(r, tip);
                            }
                        }, (Ability abil) => 32f);
                        GUI.color = Color.white;
                    }
                };
                list.Add(item);
            }
            float num7 = leftRect.height / (float)list.Count;
            float num8 = 0f;

            for (int i = 0; i < list.Count; i++)
            {
                LeftRectSection value = list[i];
                if (value.rect.height > num7)
                {
                    num8 += value.rect.height - num7;
                    value.calculatedSize = value.rect.height;
                }
                else
                {
                    value.calculatedSize = num7;
                }
                list[i] = value;
            }
            bool  flag2 = false;
            float num9  = 0f;

            if (num8 > 0f)
            {
                LeftRectSection value2 = list[0];
                float           num10  = value2.rect.height + 12f;
                num8 -= value2.calculatedSize - num10;
                value2.calculatedSize = num10;
                list[0] = value2;
            }
            while (num8 > 0f)
            {
                bool flag3 = true;
                for (int j = 0; j < list.Count; j++)
                {
                    LeftRectSection value3 = list[j];
                    if (value3.calculatedSize - value3.rect.height > 0f)
                    {
                        value3.calculatedSize -= 1f;
                        num8 -= 1f;
                        flag3 = false;
                    }
                    list[j] = value3;
                }
                if (!flag3)
                {
                    continue;
                }
                for (int k = 0; k < list.Count; k++)
                {
                    LeftRectSection value4 = list[k];
                    if (k > 0)
                    {
                        value4.calculatedSize = Mathf.Max(value4.rect.height, num7);
                    }
                    else
                    {
                        value4.calculatedSize = value4.rect.height + 22f;
                    }
                    num9   += value4.calculatedSize;
                    list[k] = value4;
                }
                flag2 = true;
                break;
            }
            if (flag2)
            {
                Widgets.BeginScrollView(new Rect(0f, 0f, leftRect.width, leftRect.height), ref leftRectScrollPos, new Rect(0f, 0f, leftRect.width - 16f, num9));
            }
            curY = 0f;
            for (int l = 0; l < list.Count; l++)
            {
                LeftRectSection leftRectSection = list[l];
                leftRectSection.drawer(new Rect(0f, curY, leftRect.width, leftRectSection.rect.height));
                curY += leftRectSection.calculatedSize;
            }
            if (flag2)
            {
                Widgets.EndScrollView();
            }
            GUI.EndGroup();
            GUI.BeginGroup(position);
            SkillUI.DrawSkillsOf(mode: (Current.ProgramState != ProgramState.Playing) ? SkillUI.SkillDrawMode.Menu : SkillUI.SkillDrawMode.Gameplay, p: pawn, offset: new Vector2(0f, 0f));
            GUI.EndGroup();
            GUI.EndGroup();
            RoyalTitleDef FirstTitleWithPermit(RoyalTitlePermitDef permitDef)
            {
                //return title.faction.def.RoyalTitlesAwardableInSeniorityOrderForReading.First((RoyalTitleDef t) => t.permits != null && t.permits.Contains(permitDef));
                Log.Message("Todo:>>>>");
                return(default);
示例#28
0
 private bool AlreadyPreferred(NameTriple name)
 {
     return(Prefs.PreferredNames.Contains(name.ToString()));
 }
示例#29
0
        static bool Prefix(Gender gender, ref NameTriple __result, string requiredLastName = null)
        {
            if (REB_Initializer.REB_Backstories.Count < 1)
            {
                return(true);
            }
            NameTriple nameTriple = null;

            if (Rand.Value < 0.5f)
            {
                nameTriple = Prefs.RandomPreferredName();
                if (nameTriple != null && (nameTriple.UsedThisGame || (requiredLastName != null && nameTriple.Last != requiredLastName)))
                {
                    nameTriple = null;
                }
            }
            List <NameTriple> listForGender;
            List <NameTriple> list;

            listForGender = PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Either);
            list          = (gender != Gender.Male) ? PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Female) : PawnNameDatabaseSolid.GetListForGender(GenderPossibility.Male);
            float             num = ((float)listForGender.Count + 0.1f) / ((float)(listForGender.Count + list.Count) + 0.1f);
            List <NameTriple> list2;

            if (listForGender.Count == 0)
            {
                list2 = list;
            }
            else
            {
                if (Rand.Value < num)
                {
                    list2 = listForGender;
                }
                else
                {
                    list2 = list;
                }
            }
            if (list2.Count == 0)
            {
                Log.Error("Empty solid pawn name list for gender: " + gender + ".");
                __result = null;
                return(false);
            }
            if (nameTriple != null && list2.Contains(nameTriple))
            {
                __result = nameTriple;
                return(false);
            }
            for (int i = 0; i < list2.Count; i++)
            {
                NameTriple nameTriple2 = list2[i];
                if (requiredLastName == null || !(nameTriple2.Last != requiredLastName))
                {
                    if (!nameTriple2.UsedThisGame)
                    {
                        REB_PawnBioAndNameGenerator.tempNames.Add(nameTriple2);
                    }
                }
            }
            NameTriple result;

            REB_PawnBioAndNameGenerator.tempNames.TryRandomElement(out result);
            REB_PawnBioAndNameGenerator.tempNames.Clear();
            __result = result;
            return(false);
        }
示例#30
0
        static bool Prefix(List <string> backstoryCategories, PawnKindDef kind, Gender gender, string requiredLastName, ref PawnBio __result)
        {
            if (REB_Initializer.REB_Backstories.Count < 1)
            {
                return(true);
            }
            NameTriple nameTriple = null;

            if (Rand.Value < 0.5f)
            {
                nameTriple = Prefs.RandomPreferredName();
                if (nameTriple != null && (nameTriple.UsedThisGame || (requiredLastName != null && nameTriple.Last != requiredLastName)))
                {
                    nameTriple = null;
                }
            }
            while (true)
            {
                int i = 0;
                while (i < SolidBioDatabase.allBios.Count)
                {
                    PawnBio pawnBio = SolidBioDatabase.allBios[i];
                    if (pawnBio.gender == GenderPossibility.Either)
                    {
                        goto IL_8F;
                    }
                    if (gender != Gender.Male || pawnBio.gender == GenderPossibility.Male)
                    {
                        if (gender != Gender.Female || pawnBio.gender == GenderPossibility.Female)
                        {
                            goto IL_8F;
                        }
                    }
IL_14E:
                    i++;
                    continue;
IL_8F:
                    if (!requiredLastName.NullOrEmpty() && pawnBio.name.Last != requiredLastName)
                    {
                        goto IL_14E;
                    }
                    if (pawnBio.name.UsedThisGame)
                    {
                        goto IL_14E;
                    }
                    if (nameTriple != null && !pawnBio.name.Equals(nameTriple))
                    {
                        goto IL_14E;
                    }
                    for (int j = 0; j < pawnBio.adulthood.spawnCategories.Count; j++)
                    {
                        if (backstoryCategories.Contains(pawnBio.adulthood.spawnCategories[j]))
                        {
                            REB_PawnBioAndNameGenerator.tempBios.Add(pawnBio);
                            break;
                        }
                    }
                    goto IL_14E;
                }
                if (REB_PawnBioAndNameGenerator.tempBios.Count != 0 || nameTriple == null)
                {
                    break;
                }
                nameTriple = null;
            }
            PawnBio result;

            REB_PawnBioAndNameGenerator.tempBios.TryRandomElement(out result);
            REB_PawnBioAndNameGenerator.tempBios.Clear();
            __result = result;
            return(false);
        }