Beispiel #1
0
        private static bool Prefix(Pawn pawn, BodyPartGroupDef bodyPartGroupDef, ref Apparel __result)
        {
            Room room = pawn.GetRoom(RegionType.Set_Passable);

            if (room.isPrisonCell)
            {
                foreach (IntVec3 current in room.Cells)
                {
                    List <Thing> thingList = current.GetThingList(pawn.Map);
                    for (int i = 0; i < thingList.Count; i++)
                    {
                        if (thingList[i] is Apparel apparel &&
                            RaceAddonTools.CheckApparel(pawn, apparel.def) &&
                            apparel.def.apparel.bodyPartGroups.Contains(bodyPartGroupDef) &&
                            pawn.CanReserve(apparel, 1, -1, null, false) && !apparel.IsBurning() &&
                            ApparelUtility.HasPartsToWear(pawn, apparel.def))
                        {
                            __result = apparel;
                            return(false);
                        }
                    }
                }
            }
            __result = null;
            return(false);
        }
Beispiel #2
0
 private static bool Prefix(Pawn pawn, Apparel ap, ref float __result)
 {
     if (!RaceAddonTools.CheckApparel(pawn, ap.def))
     {
         __result = -100f;
         return(false);
     }
     return(true);
 }
Beispiel #3
0
 private static bool Prefix(Pawn pawn, ref List <ThingStuffPair> ___allApparelPairs)
 {
     if (savedAllApparelPairs == null)
     {
         savedAllApparelPairs = ___allApparelPairs.ListFullCopy();
     }
     ___allApparelPairs = savedAllApparelPairs.FindAll((ThingStuffPair x) => RaceAddonTools.CheckApparel(pawn, x.thing));
     return(true);
 }
Beispiel #4
0
        private static void Postfix(Pawn pawn, Apparel ap, ref float __result)
        {
            if (__result < 0f)
            {
                return;
            }

            if (!RaceAddonTools.CheckApparel(pawn, ap.def))
            {
                __result = -50f;
            }
        }
 private static void Postfix(Pawn pawn, LocalTargetInfo target, ref FloatMenuOption __result)
 {
     if (pawn != null && target.Thing != null)
     {
         var thing = target.Thing;
         if (thing is Apparel apparel && !RaceAddonTools.CheckApparel(pawn, apparel.def) && __result.Label == "ForceWear".Translate(apparel.LabelShort, apparel))
         {
             __result = new FloatMenuOption("CannotWear".Translate(apparel.Label, apparel) + " (" + "RaceAddonRestriction_FloatMenu".Translate() + ")", null);
         }
         if (thing.TryGetComp <CompEquippable>() != null && !RaceAddonTools.CheckWeapon(pawn, thing.def) && __result.Label.Contains("Equip".Translate(thing.LabelShort)))
         {
             __result = new FloatMenuOption("CannotEquip".Translate(thing.LabelShort) + " (" + "RaceAddonRestriction_FloatMenu".Translate() + ")", null);
         }
     }
 }
 private static bool Prefix(Pawn p, ref Thing ___draggedItem, ref bool ___droppedDraggedItem)
 {
     ___droppedDraggedItem = false;
     if (___draggedItem.def.IsApparel && !RaceAddonTools.CheckApparel(p, ___draggedItem.def))
     {
         Messages.Message("RaceAddonRestriction_Caravan".Translate(p.LabelShort), p, MessageTypeDefOf.RejectInput, false);
         ___draggedItem = null;
         return(false);
     }
     if (___draggedItem.def.IsWeapon && !RaceAddonTools.CheckWeapon(p, ___draggedItem.def))
     {
         Messages.Message("RaceAddonRestriction_Caravan".Translate(p.LabelShort), p, MessageTypeDefOf.RejectInput, false);
         ___draggedItem = null;
         return(false);
     }
     return(true);
 }
 public override void CompTickRare()
 {
     base.CompTickRare();
     if (Pawn != null && Pawn.Spawned)
     {
         // resolve draw size
         var newDrawSize = RaceAddonTools.GetPawnDrawSize(Pawn, ThingDef);
         if (drawSize != newDrawSize)
         {
             drawSize = newDrawSize;
             if (ThingDef.raceAddonSettings.graphicSetting.drawSize[drawSize].apparanceOverwrite.FindAll(x => x.gender == Gender.None || x.gender == Pawn.gender) is var overwrite && overwrite.Count > 0)
             {
                 var appearanceDef = overwrite.RandomElementByWeight(x => x.weight).appearanceDef;
                 HarmonyPathces_PawnGenerator_GeneratePawn.GenerateAppearance(Pawn, appearanceDef);
                 Pawn.Drawer.renderer.graphics.ResolveAllGraphics();
             }
             else
             {
                 var appearanceDef = ThingDef.raceAddonSettings.graphicSetting.raceAppearances.FindAll(x => x.gender == Gender.None || x.gender == Pawn.gender).RandomElementByWeight(x => x.weight).appearanceDef;
                 HarmonyPathces_PawnGenerator_GeneratePawn.GenerateAppearance(Pawn, appearanceDef);
                 Pawn.Drawer.renderer.graphics.ResolveAllGraphics();
             }
             if (Pawn.IsColonist)
             {
                 Find.LetterStack.ReceiveLetter("RaceAddon_GrowUp_Label".Translate(Pawn.Name.ToStringShort), "RaceAddon_GrowUp_String".Translate(), LetterDefOf.PositiveEvent);
             }
         }
         foreach (var apparel in Pawn.apparel.WornApparel)
         {
             if (!RaceAddonTools.CheckApparel(Pawn, apparel.def))
             {
                 Pawn.apparel.TryDrop(apparel);
             }
         }
         HarmonyPatches_ResolveApparelGraphics.ResolveAddonDraw(this, ThingDef, AllAddonGraphicSets, null);
     }