コード例 #1
0
        public static void CopyPawnComps(Pawn source, Pawn target)
        {
            PawnCompsSaver saver = new PawnCompsSaver(source, DefaultPawnCompRules.RulesForCopying);
            string         xml   = UtilityCopy.SerializeExposableToString(saver);
            //Logger.Debug("Serialized comps to string\n" + xml);
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xml);
            foreach (var fieldPath in DefaultPawnCompRules.RulesForCopying.ExcludedFields)
            {
                XmlNode node = doc.DocumentElement.SelectSingleNode(fieldPath);
                if (node != null)
                {
                    //Logger.Debug("Removing " + node.Name + " element");
                    doc.DocumentElement.RemoveChild(node);
                }
            }
            xml = "<saveable Class=\"" + typeof(PawnCompsLoader).FullName + "\">" + doc.DocumentElement.InnerXml + "</saveable>";
            //Logger.Debug("Post node-exclusions\n" + xml);
            UtilityCopy.DeserializeExposable <PawnCompsLoader>(xml, new object[] { target, DefaultPawnCompRules.RulesForCopying });
        }
コード例 #2
0
        public SaveRecordPawnV5(CustomPawn pawn)
        {
            this.id       = pawn.Id;
            this.thingDef = pawn.Pawn.def.defName;
            this.type     = pawn.Type.ToString();
            if (pawn.Type == CustomPawnType.World && pawn.Faction != null)
            {
                this.faction = new SaveRecordFactionV4()
                {
                    def    = pawn.Faction?.Def?.defName,
                    index  = pawn.Faction.Index,
                    leader = pawn.Faction.Leader
                };
            }
            this.pawnKindDef        = pawn.OriginalKindDef?.defName ?? pawn.Pawn.kindDef.defName;
            this.originalFactionDef = pawn.OriginalFactionDef?.defName;
            this.gender             = pawn.Gender;
            this.adulthood          = pawn.Adulthood?.identifier ?? pawn.LastSelectedAdulthoodBackstory?.identifier;
            this.childhood          = pawn.Childhood?.identifier;
            this.skinColor          = pawn.Pawn.story.SkinColor;
            this.melanin            = pawn.Pawn.story.melanin;
            this.hairDef            = pawn.HairDef.defName;
            this.hairColor          = pawn.Pawn.story.hairColor;
            this.headGraphicPath    = pawn.HeadGraphicPath;
            this.bodyType           = pawn.BodyType.defName;
            this.firstName          = pawn.FirstName;
            this.nickName           = pawn.NickName;
            this.lastName           = pawn.LastName;
            this.age              = 0;
            this.biologicalAge    = pawn.BiologicalAge;
            this.chronologicalAge = pawn.ChronologicalAge;
            foreach (var trait in pawn.Traits)
            {
                if (trait != null)
                {
                    this.traits.Add(new SaveRecordTraitV5()
                    {
                        def    = trait.def.defName,
                        degree = trait.Degree
                    });
                }
            }
            foreach (var skill in pawn.Pawn.skills.skills)
            {
                this.skills.Add(new SaveRecordSkillV4()
                {
                    name    = skill.def.defName,
                    value   = pawn.GetUnmodifiedSkillLevel(skill.def),
                    passion = pawn.currentPassions[skill.def]
                });
            }
            foreach (var layer in PrepareCarefully.Instance.Providers.PawnLayers.GetLayersForPawn(pawn))
            {
                if (layer.Apparel)
                {
                    ThingDef apparelThingDef = pawn.GetAcceptedApparel(layer);
                    Color    color           = pawn.GetColor(layer);
                    if (apparelThingDef != null)
                    {
                        ThingDef apparelStuffDef = pawn.GetSelectedStuff(layer);
                        this.apparel.Add(new SaveRecordApparelV4()
                        {
                            layer   = layer.Name,
                            apparel = apparelThingDef.defName,
                            stuff   = apparelStuffDef?.defName ?? "",
                            color   = color
                        });
                    }
                }
            }
            OptionsHealth healthOptions = PrepareCarefully.Instance.Providers.Health.GetOptions(pawn);

            foreach (Implant implant in pawn.Implants)
            {
                var saveRecord = new SaveRecordImplantV3(implant);
                if (implant.BodyPartRecord != null)
                {
                    UniqueBodyPart part = healthOptions.FindBodyPartsForRecord(implant.BodyPartRecord);
                    if (part != null && part.Index > 0)
                    {
                        saveRecord.bodyPartIndex = part.Index;
                    }
                }
                this.implants.Add(saveRecord);
            }
            foreach (Injury injury in pawn.Injuries)
            {
                var saveRecord = new SaveRecordInjuryV3(injury);
                if (injury.BodyPartRecord != null)
                {
                    UniqueBodyPart part = healthOptions.FindBodyPartsForRecord(injury.BodyPartRecord);
                    if (part != null && part.Index > 0)
                    {
                        saveRecord.bodyPartIndex = part.Index;
                    }
                }
                this.injuries.Add(saveRecord);
            }

            pawnCompsSaver = new PawnCompsSaver(pawn.Pawn, DefaultPawnCompRules.RulesForSaving);
        }