public static QualityCategory GenerateQualityCreatedByPawn(Pawn pawn, SkillDef relevantSkill)
        {
            int             level  = pawn.skills.GetSkill(relevantSkill).Level;
            bool            flag   = pawn.InspirationDef == InspirationDefOf.Inspired_Creativity;
            QualityCategory result = QualityUtility.GenerateQualityCreatedByPawn(level, flag);

            if (flag)
            {
                pawn.mindState.inspirationHandler.EndInspiration(InspirationDefOf.Inspired_Creativity);
            }
            return(result);
        }
Ejemplo n.º 2
0
        public void CompleteConstruction(Pawn worker)
        {
            resourceContainer.ClearAndDestroyContents();
            Map map = base.Map;

            Destroy();
            if (this.GetStatValue(StatDefOf.WorkToBuild) > 150f && def.entityDefToBuild is ThingDef && ((ThingDef)def.entityDefToBuild).category == ThingCategory.Building)
            {
                SoundDefOf.Building_Complete.PlayOneShot(new TargetInfo(base.Position, map));
            }
            ThingDef thingDef = def.entityDefToBuild as ThingDef;
            Thing    thing    = null;

            if (thingDef != null)
            {
                thing = ThingMaker.MakeThing(thingDef, base.Stuff);
                thing.SetFactionDirect(base.Faction);
                CompQuality compQuality = thing.TryGetComp <CompQuality>();
                if (compQuality != null)
                {
                    QualityCategory q = QualityUtility.GenerateQualityCreatedByPawn(worker, SkillDefOf.Construction);
                    compQuality.SetQuality(q, ArtGenerationContext.Colony);
                    QualityUtility.SendCraftNotification(thing, worker);
                }
                CompArt compArt = thing.TryGetComp <CompArt>();
                if (compArt != null)
                {
                    if (compQuality == null)
                    {
                        compArt.InitializeArt(ArtGenerationContext.Colony);
                    }
                    compArt.JustCreatedBy(worker);
                }
                thing.HitPoints = Mathf.CeilToInt((float)HitPoints / (float)base.MaxHitPoints * (float)thing.MaxHitPoints);
                GenSpawn.Spawn(thing, base.Position, map, base.Rotation, WipeMode.FullRefund);
                Building b;
                if ((b = thing as Building) != null)
                {
                    worker.GetLord()?.AddBuilding(b);
                }
            }
            else
            {
                map.terrainGrid.SetTerrain(base.Position, (TerrainDef)def.entityDefToBuild);
                FilthMaker.RemoveAllFilth(base.Position, map);
            }
            worker.records.Increment(RecordDefOf.ThingsConstructed);
            if (thing != null && thing.GetStatValue(StatDefOf.WorkToBuild) >= 9500f)
            {
                TaleRecorder.RecordTale(TaleDefOf.CompletedLongConstructionProject, worker, thing.def);
            }
        }
Ejemplo n.º 3
0
        internal static void QualityGenerationData()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("Qualities of items/buildings generated from various sources");
            stringBuilder.AppendLine("---------------------------------------------------------------------");
            stringBuilder.AppendLine("Rewards (quests, etc...? )");
            stringBuilder.AppendLine(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityReward()));
            stringBuilder.AppendLine("Trader items");
            stringBuilder.AppendLine(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityTraderItem()));
            stringBuilder.AppendLine("Map generation items and buildings (usually NPC bases)");
            stringBuilder.AppendLine(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityBaseGen()));
            stringBuilder.AppendLine("Gifts");
            stringBuilder.AppendLine(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityGift()));
            using (IEnumerator <PawnKindDef> enumerator = (from k in DefDatabase <PawnKindDef> .AllDefs
                                                           orderby k.combatPower
                                                           select k).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    PawnKindDef pk = enumerator.Current;
                    if (pk.RaceProps.Humanlike)
                    {
                        stringBuilder.AppendLine(string.Concat(new object[]
                        {
                            "Items generated to equip pawn kind: ",
                            pk.defName,
                            " (",
                            pk.combatPower.ToString("F0"),
                            " points, itemQuality ",
                            pk.itemQuality,
                            ")"
                        }));
                        stringBuilder.Append(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityGeneratingPawn(pk)));
                        stringBuilder.AppendLine();
                    }
                }
            }
            int level;

            for (level = 0; level <= 20; level++)
            {
                stringBuilder.AppendLine();
                stringBuilder.AppendLine("Items/buildings made by crafter/builder at skill level " + level);
                stringBuilder.Append(QualityUtility.DebugQualitiesString(() => QualityUtility.GenerateQualityCreatedByPawn(level, false)));
            }
            Log.Message(stringBuilder.ToString(), false);
        }
 internal QualityCategory <> m__1()
 {
     return(QualityUtility.GenerateQualityCreatedByPawn(this.localLevel, false));
 }
 internal string <> m__0(QualityCategory q)
 {
     return(QualityUtility.DebugQualitiesStringSingle(q, () => QualityUtility.GenerateQualityCreatedByPawn(this.localLevel, false)));
 }
        private static void QualityGenerationData()
        {
            List <TableDataGetter <QualityCategory> > list = new List <TableDataGetter <QualityCategory> >();

            list.Add(new TableDataGetter <QualityCategory>("quality", (QualityCategory q) => q.ToString()));
            list.Add(new TableDataGetter <QualityCategory>("Rewards\n(quests,\netc...? )", delegate(QualityCategory q)
            {
                if (QualityUtility.< > f__mg$cache0 == null)
                {
                    QualityUtility.< > f__mg$cache0 = new Func <QualityCategory>(QualityUtility.GenerateQualityReward);
                }
                return(QualityUtility.DebugQualitiesStringSingle(q, QualityUtility.< > f__mg$cache0));
            }));
            list.Add(new TableDataGetter <QualityCategory>("Trader\nitems", delegate(QualityCategory q)
            {
                if (QualityUtility.< > f__mg$cache1 == null)
                {
                    QualityUtility.< > f__mg$cache1 = new Func <QualityCategory>(QualityUtility.GenerateQualityTraderItem);
                }
                return(QualityUtility.DebugQualitiesStringSingle(q, QualityUtility.< > f__mg$cache1));
            }));
            list.Add(new TableDataGetter <QualityCategory>("Map generation\nitems and\nbuildings\n(e.g. NPC bases)", delegate(QualityCategory q)
            {
                if (QualityUtility.< > f__mg$cache2 == null)
                {
                    QualityUtility.< > f__mg$cache2 = new Func <QualityCategory>(QualityUtility.GenerateQualityBaseGen);
                }
                return(QualityUtility.DebugQualitiesStringSingle(q, QualityUtility.< > f__mg$cache2));
            }));
            list.Add(new TableDataGetter <QualityCategory>("Gifts", delegate(QualityCategory q)
            {
                if (QualityUtility.< > f__mg$cache3 == null)
                {
                    QualityUtility.< > f__mg$cache3 = new Func <QualityCategory>(QualityUtility.GenerateQualityGift);
                }
                return(QualityUtility.DebugQualitiesStringSingle(q, QualityUtility.< > f__mg$cache3));
            }));
            for (int i = 0; i <= 20; i++)
            {
                int localLevel = i;
                list.Add(new TableDataGetter <QualityCategory>("Made\nat skill\n" + i, (QualityCategory q) => QualityUtility.DebugQualitiesStringSingle(q, () => QualityUtility.GenerateQualityCreatedByPawn(localLevel, false))));
            }
            foreach (PawnKindDef localPk2 in from k in DefDatabase <PawnKindDef> .AllDefs
                     orderby k.combatPower
                     select k)
            {
                PawnKindDef localPk = localPk2;
                if (localPk.RaceProps.Humanlike)
                {
                    list.Add(new TableDataGetter <QualityCategory>(string.Concat(new object[]
                    {
                        "Gear for\n",
                        localPk.defName,
                        "\nPower ",
                        localPk.combatPower.ToString("F0"),
                        "\nitemQuality:\n",
                        localPk.itemQuality
                    }), (QualityCategory q) => QualityUtility.DebugQualitiesStringSingle(q, () => QualityUtility.GenerateQualityGeneratingPawn(localPk))));
                }
            }
            DebugTables.MakeTablesDialog <QualityCategory>(QualityUtility.AllQualityCategories, list.ToArray());
        }
Ejemplo n.º 7
0
        // Token: 0x060000D7 RID: 215 RVA: 0x000066F8 File Offset: 0x000048F8
        public void CompleteConstruction(Pawn worker)
        {
            Map  map  = base.Map;
            bool flag = this.GetStatValue(StatDefOf.WorkToBuild, true) > 150f && this.def.entityDefToBuild is ThingDef && ((ThingDef)this.def.entityDefToBuild).category == ThingCategory.Building;

            if (flag)
            {
                SoundDefOf.Building_Complete.PlayOneShot(new TargetInfo(base.Position, map, false));
            }
            ThingDef thingDef = this.def.entityDefToBuild as ThingDef;
            Thing    thing    = null;
            bool     flag2    = thingDef != null;

            if (flag2)
            {
                thing = ThingMaker.MakeThing(thingDef, base.Stuff);
                thing.SetFactionDirect(base.Faction);
                CompQuality compQuality = thing.TryGetComp <CompQuality>();
                bool        flag3       = compQuality != null;
                if (flag3)
                {
                    int relevantSkillLevel = 1;
                    compQuality.SetQuality(QualityUtility.GenerateQualityCreatedByPawn(relevantSkillLevel, false), ArtGenerationContext.Colony);
                }
                CompArt compArt = thing.TryGetComp <CompArt>();
                bool    flag4   = compArt != null;
                if (flag4)
                {
                    bool flag5 = compQuality == null;
                    if (flag5)
                    {
                        compArt.InitializeArt(ArtGenerationContext.Colony);
                    }
                    compArt.JustCreatedBy(worker);
                }
                thing.HitPoints = Mathf.CeilToInt((float)this.HitPoints / (float)base.MaxHitPoints * (float)thing.MaxHitPoints);
                GenSpawn.Spawn(thing, base.Position, map, base.Rotation, WipeMode.FullRefund, false);
            }
            else
            {
                map.terrainGrid.SetTerrain(base.Position, (TerrainDef)this.def.entityDefToBuild);
                FilthMaker.RemoveAllFilth(base.Position, map);
            }
            bool flag6 = thingDef != null && (thingDef.passability == Traversability.Impassable || thingDef.Fillage == FillCategory.Full) && (thing == null || !(thing is Building_Door));

            if (flag6)
            {
                foreach (IntVec3 c in GenAdj.CellsOccupiedBy(base.Position, base.Rotation, this.def.Size))
                {
                    foreach (Thing thing2 in map.thingGrid.ThingsAt(c).ToList <Thing>())
                    {
                        bool flag7 = thing2 is Plant;
                        if (flag7)
                        {
                            thing2.Destroy(DestroyMode.KillFinalize);
                        }
                        else
                        {
                            bool flag8 = thing2.def.category == ThingCategory.Item || thing2 is Pawn;
                            if (flag8)
                            {
                                GenPlace.TryPlaceThing(thing2, thing2.Position, thing2.Map, ThingPlaceMode.Near, null, null, default(Rot4));
                            }
                        }
                    }
                }
            }
            worker.records.Increment(RecordDefOf.ThingsConstructed);
        }