public static void Postfix(AggressiveWhenSeeTarget __instance, ref GameObject __result) { int maxSearchRings = __instance.maxSearchRings; // Not the exploding fish, those are actually more dangerous hiding in ambush if (CraftData.GetTechType(__instance.gameObject) == TechType.Crash) { DeathRun.crashFishSemaphore = true; } else if (Config.DEATHRUN.Equals(DeathRun.config.creatureAggression) || Config.EXORBITANT.Equals(DeathRun.config.creatureAggression)) { if (DayNightCycle.main.timePassedAsFloat >= DeathRun.FULL_AGGRESSION) { maxSearchRings *= 3; //BR// Triple aggression search after 40 minutes } else if (DayNightCycle.main.timePassedAsFloat >= DeathRun.MORE_AGGRESSION) { maxSearchRings *= 2; //BR// Double aggression search after 20 minutes } } else if (Config.HARD.Equals(DeathRun.config.creatureAggression)) { if (DayNightCycle.main.timePassedAsFloat > DeathRun.MORE_AGGRESSION) { maxSearchRings += 1; //BR// One extra aggression ring after 20 minutes } } if (Ocean.main.GetDepthOf(Player.main.gameObject) <= 5) { if (maxSearchRings > __instance.maxSearchRings + 1) { maxSearchRings = __instance.maxSearchRings + 1; } } IEcoTarget ecoTarget = EcoRegionManager.main.FindNearestTarget(__instance.targetType, __instance.transform.position, __instance.isTargetValidFilter, maxSearchRings); if (ecoTarget == null) { __result = null; } else { __result = ecoTarget.GetGameObject(); } DeathRun.crashFishSemaphore = false; }
public static void Postfix(GameObject target, AggressiveWhenSeeTarget __instance, ref bool __result) { if (target == null) { __result = false; return; } if (target == __instance.creature.friend) { __result = false; return; } if (target == Player.main.gameObject && !Player.main.CanBeAttacked()) { __result = false; return; } if (__instance.ignoreSameKind && CraftData.GetTechType(target) == __instance.myTechType) { __result = false; return; } if (__instance.targetShouldBeInfected) { InfectedMixin component = target.GetComponent <InfectedMixin>(); if (component == null || component.GetInfectedAmount() < 0.33f) { __result = false; return; } } float dist = Vector3.Distance(target.transform.position, __instance.transform.position); if (dist > __instance.maxRangeScalar) { if (((target != Player.main.gameObject) && !target.GetComponent <Vehicle>()) || (dist > __instance.maxRangeScalar * 4)) { __result = false; return; } if (target == Player.main.gameObject) { if (Player.main.precursorOutOfWater || PrecursorMoonPoolTrigger.inMoonpool) { __result = false; return; } } if (target.GetComponent <Vehicle>() != null) { if ((target.GetComponent <Vehicle>() != Player.main.currentMountedVehicle) || target.GetComponent <Vehicle>().precursorOutOfWater || PrecursorMoonPoolTrigger.inMoonpool) { __result = false; return; } } } if (!Mathf.Approximately(__instance.minimumVelocity, 0f)) { Rigidbody componentInChildren = target.GetComponentInChildren <Rigidbody>(); if (componentInChildren != null && componentInChildren.velocity.magnitude <= __instance.minimumVelocity) { __result = false; return; } } if ((((target != Player.main.gameObject) || Player.main.IsInside() || Player.main.precursorOutOfWater || PrecursorMoonPoolTrigger.inMoonpool) && (!target.GetComponent <Vehicle>() || (target.GetComponent <Vehicle>() != Player.main.currentMountedVehicle) || target.GetComponent <Vehicle>().precursorOutOfWater)) || // Must be player or vehicle (Ocean.main.GetDepthOf(target) <= 5) || // Keeps reapers from eating us up on land (!Config.EXORBITANT.Equals(DeathRun.config.creatureAggression) && !Config.DEATHRUN.Equals(DeathRun.config.creatureAggression)) || // Only on maximum aggression mode (DayNightCycle.main.timePassedAsFloat < DeathRun.MORE_AGGRESSION) || // Not at very beginning of game (CraftData.GetTechType(__instance.gameObject) == TechType.Crash)) // Not the explody fish (more fun from ambush!) { __result = __instance.creature.GetCanSeeObject(target); } else { if (!Config.EXORBITANT.Equals(DeathRun.config.creatureAggression)) { __result = true; //BR// Can definitely see player "even through terrain" } else { //BR// For DeathRun setting, we don't check "field of view", only that line-of-sight doesn't pass through terrain. __result = !Physics.Linecast(__instance.transform.position, target.transform.position, Voxeland.GetTerrainLayerMask()); } } }
public static bool Prefix(GameObject target, AggressiveWhenSeeTarget __instance) { return(false); }
public static bool Prefix(AggressiveWhenSeeTarget __instance) { return(false); }