Exemplo n.º 1
0
        public static float SpringChance2(Building_Trap __instance, Pawn p)
        {
            float num = 1f;

            if (__instance.KnowsOfTrap(p))
            {
                if (p.Faction != null)
                {
                    Building building = __instance;
                    num = ((p.Faction != building.Faction) ? 0f : 0.005f);
                }
                else if (p.RaceProps.Animal)
                {
                    num  = 0.2f;
                    num *= __instance.def.building.trapPeacefulWildAnimalsSpringChanceFactor;
                }
                else
                {
                    num = 0.3f;
                }
            }

            num *= __instance.GetStatValue(StatDefOf.TrapSpringChance) * p.GetStatValue(StatDefOf.PawnTrapSpringChance);
            return(Mathf.Clamp01(num));
        }
Exemplo n.º 2
0
        private static bool HaulablePlaceValidator(Thing haulable, Pawn worker, IntVec3 c)
        {
            bool result;

            if (!worker.CanReserveAndReach(c, PathEndMode.OnCell, worker.NormalMaxDanger(), 1, -1, null, false))
            {
                result = false;
            }
            else if (GenPlace.HaulPlaceBlockerIn(haulable, c, worker.Map, true) != null)
            {
                result = false;
            }
            else if (!c.Standable(worker.Map))
            {
                result = false;
            }
            else if (c == haulable.Position && haulable.Spawned)
            {
                result = false;
            }
            else if (c.ContainsStaticFire(worker.Map))
            {
                result = false;
            }
            else
            {
                if (haulable != null && haulable.def.BlockPlanting)
                {
                    Zone zone = worker.Map.zoneManager.ZoneAt(c);
                    if (zone is Zone_Growing)
                    {
                        return(false);
                    }
                }
                if (haulable.def.passability != Traversability.Standable)
                {
                    for (int i = 0; i < 8; i++)
                    {
                        IntVec3 c2 = c + GenAdj.AdjacentCells[i];
                        if (worker.Map.designationManager.DesignationAt(c2, DesignationDefOf.Mine) != null)
                        {
                            return(false);
                        }
                    }
                }
                Building edifice = c.GetEdifice(worker.Map);
                if (edifice != null)
                {
                    Building_Trap building_Trap = edifice as Building_Trap;
                    if (building_Trap != null)
                    {
                        return(false);
                    }
                }
                result = true;
            }
            return(result);
        }
 private static bool ShouldDestroy(bool original, Building_Trap instance)
 {
     if (!original)
     {
         var extBuldingProps = instance.def.GetModExtension <ExtendedBuildingProperties>() ?? ExtendedBuildingProperties.defaultValues;
         if (Rand.Chance(extBuldingProps.trapDestroyOnSpringChance))
         {
             return(true);
         }
     }
     return(original);
 }
Exemplo n.º 4
0
 public static void CheckSpring2(Building_Trap __instance, Pawn p)
 {
     if (Rand.Chance(SpringChance2(__instance, p)))
     {
         Building building = __instance;
         Map      map      = building.Map;
         __instance.Spring(p);
         if (p.Faction == Faction.OfPlayer || p.HostFaction == Faction.OfPlayer)
         {
             Find.LetterStack.ReceiveLetter(
                 "LetterFriendlyTrapSprungLabel".Translate(p.LabelShort, p).CapitalizeFirst(),
                 "LetterFriendlyTrapSprung".Translate(p.LabelShort, p).CapitalizeFirst(),
                 LetterDefOf.NegativeEvent, new TargetInfo(building.Position, map));
         }
     }
 }
Exemplo n.º 5
0
        public static bool Tick(Building_Trap __instance)
        {
            Building building = __instance;

            if (building.Spawned)
            {
                List <Thing> thingList = building.Position.GetThingList(building.Map);
                for (int i = 0; i < thingList.Count; i++)
                {
                    Pawn pawn;
                    try
                    {
                        pawn = thingList[i] as Pawn;
                    } catch (ArgumentOutOfRangeException) { break; }
                    if (pawn != null && !touchingPawns(__instance).Contains(pawn))
                    {
                        touchingPawns(__instance).Add(pawn);
                        CheckSpring2(__instance, pawn);
                    }
                }

                for (int j = 0; j < touchingPawns(__instance).Count; j++)
                {
                    Pawn pawn2;
                    try
                    {
                        pawn2 = touchingPawns(__instance)[j];
                    }
                    catch (ArgumentOutOfRangeException) { break; }
                    if (!pawn2.Spawned || pawn2.Position != building.Position)
                    {
                        touchingPawns(__instance).Remove(pawn2);
                    }
                }
            }

            building.Tick();
            return(false);
        }