Exemplo n.º 1
0
            private static bool Prefix(ref JobGiver_AIFightEnemy __instance, ref Job __result, ref Pawn pawn)
            {
                bool result = true;

                if (!recursiveTrap)
                {
                    recursiveTrap = true;
                    Map     oldMap      = pawn.Map;
                    IntVec3 oldPosition = pawn.Position;
                    foreach (var map in ZUtils.GetAllMapsInClosestOrder(pawn, oldMap, oldPosition))
                    {
                        var job = Traverse.Create(__instance).Method("TryGiveJob", new object[]
                        {
                            pawn
                        }).GetValue <Job>();

                        Log.Message("2: " + ZUtils.ZTracker.GetMapInfo(pawn.Map) + " - result: " + job);
                        if (job != null)
                        {
                            __result = job;
                            result   = false;
                            break;
                        }
                    }
                    ZUtils.TeleportThing(pawn, oldMap, oldPosition);
                    recursiveTrap = false;
                }
                Log.Message(pawn + " - 4 TEST: " + __result);
                return(result);
            }
Exemplo n.º 2
0
            public static bool Prefix(ref IAttackTarget __result, IAttackTargetSearcher searcher,
                                      TargetScanFlags flags, Predicate <Thing> validator = null, float minDist = 0f,
                                      float maxDist = 9999f, IntVec3 locus = default(IntVec3),
                                      float maxTravelRadiusFromLocus = 3.40282347E+38f, bool canBash = false,
                                      bool canTakeTargetsCloserThanEffectiveMinRange = true)
            {
                bool result = true;

                if (!recursiveTrap)
                {
                    recursiveTrap = true;
                    Map     oldMap      = searcher.Thing.Map;
                    IntVec3 oldPosition = searcher.Thing.Position;
                    foreach (var map in ZUtils.GetAllMapsInClosestOrder(searcher.Thing, oldMap, oldPosition))
                    {
                        var target = AttackTargetFinder.BestAttackTarget(searcher, flags, validator, minDist,
                                                                         maxDist, locus, maxTravelRadiusFromLocus, canBash, canTakeTargetsCloserThanEffectiveMinRange);
                        Log.Message(ZUtils.ZTracker.GetMapInfo(searcher.Thing.Map) + " - result: " + target);
                        if (target != null)
                        {
                            __result = target;
                            result   = false;
                            break;
                        }
                    }
                    ZUtils.TeleportThing(searcher.Thing, oldMap, oldPosition);
                    recursiveTrap = false;
                }
                return(result);
            }
Exemplo n.º 3
0
        public static bool Prefix(ref IAttackTarget __result, List <IAttackTarget> ___tmpTargets, List <Pair <IAttackTarget, float> > ___availableShootingTargets,
                                  List <float> ___tmpTargetScores, List <bool> ___tmpCanShootAtTarget, List <IntVec3> ___tempDestList, List <IntVec3> ___tempSourceList,
                                  IAttackTargetSearcher searcher, TargetScanFlags flags, Predicate <Thing> validator = null, float minDist = 0f,
                                  float maxDist = 9999f, IntVec3 locus = default(IntVec3), float maxTravelRadiusFromLocus = 3.40282347E+38f, bool canBash = false,
                                  bool canTakeTargetsCloserThanEffectiveMinRange = true)
        {
            bool result = true;

            if (!recursiveTrap && multiMapSearch)
            {
                recursiveTrap = true;
                Map     oldMap             = searcher.Thing.Map;
                IntVec3 oldPosition        = searcher.Thing.Position;
                bool    dontCheckForStairs = searcher.Thing is Building;
                foreach (var map in ZUtils.GetAllMapsInClosestOrder(searcher.Thing, oldMap, oldPosition, dontCheckForStairs: dontCheckForStairs))
                {
                    if (ZUtils.ZTracker.GetZIndexFor(map) < ZUtils.ZTracker.GetZIndexFor(oldMap))
                    {
                        CanBeSeenOverFast_Patch.checkLevels = true;
                        CanBeSeenOverFast_Patch.upperMap    = oldMap;
                        CanBeSeenOverFast_Patch.lowerMap    = map;
                        CanBeSeenOverFast_Patch.caster      = searcher.Thing;
                    }
                    var target = AttackTargetFinder.BestAttackTarget(searcher, flags, validator, minDist,
                                                                     maxDist, locus, maxTravelRadiusFromLocus, canBash, canTakeTargetsCloserThanEffectiveMinRange);
                    //ZLogger.Message(searcher.Thing + " - 1: " + ZUtils.ZTracker.GetMapInfo(searcher.Thing.Map) + " - result: " + target);
                    if (target != null)
                    {
                        __result = target;
                        result   = false;
                        break;
                    }
                }
                //ZLogger.Message("1 Trying to get " + searcher.Thing + " back to " + oldMap + " - " + oldPosition, true);
                ZUtils.TeleportThing(searcher.Thing, oldMap, oldPosition);
                recursiveTrap = false;
                CanBeSeenOverFast_Patch.checkLevels = false;
                CanBeSeenOverFast_Patch.upperMap    = null;
                CanBeSeenOverFast_Patch.lowerMap    = null;
                CanBeSeenOverFast_Patch.caster      = null;
            }
            //else if (!multiMapSearch)
            //{
            //    ZLogger.Message("BestAttackTarget: multiMapSearch: " + multiMapSearch, true);
            //}
            return(result);
        }
Exemplo n.º 4
0
            private static void Postfix(Pawn ___pawn, ref IEnumerable <Thing> __result, Pawn playerNegotiator)
            {
                var     result      = __result.ToList();
                Map     oldMap      = ___pawn.Map;
                IntVec3 oldPosition = playerNegotiator.Position;
                bool    select      = false;

                if (Find.Selector.SelectedObjects.Contains(___pawn))
                {
                    select = true;
                }
                foreach (var map in ZUtils.GetAllMapsInClosestOrder(___pawn, oldMap, oldPosition))
                {
                    if (map != oldMap)
                    {
                        IEnumerable <Thing> enumerable = ___pawn.Map.listerThings.AllThings.Where((Thing x)
                                                                                                  => x.def.category == ThingCategory.Item && TradeUtility.PlayerSellableNow(x, ___pawn) &&
                                                                                                  !x.Position.Fogged(x.Map) && (___pawn.Map.areaManager.Home[x.Position] ||
                                                                                                                                x.IsInAnyStorage()) && ReachableForTrade(x, ___pawn));
                        foreach (Thing item in enumerable)
                        {
                            result.Add(item);
                        }
                        if (___pawn.GetLord() != null)
                        {
                            foreach (Pawn item2 in from x in TradeUtility.AllSellableColonyPawns(___pawn.Map)
                                     where !x.Downed && ReachableForTrade(x, ___pawn)
                                     select x)
                            {
                                result.Add(item2);
                            }
                        }
                    }
                }
                if (___pawn.Map != oldMap)
                {
                    Traverse.Create(___pawn).Field("mapIndexOrState")
                    .SetValue((sbyte)Find.Maps.IndexOf(oldMap));
                    Traverse.Create(___pawn).Field("positionInt")
                    .SetValue(oldPosition);
                }
                if (select)
                {
                    Find.Selector.Select(___pawn);
                }
                __result = result;
            }