public void Tick(IHTNAgent npc, float deltaTime, float time) { BearContext npcContext = npc.AiDomain.NpcContext as BearContext; if (npcContext == null) { return; } BaseNpc animal = null; float sqrDistance = Single.MaxValue; for (int i = 0; i < npcContext.AnimalsInRange.Count; i++) { AnimalInfo item = npcContext.AnimalsInRange[i]; if (item.Animal != null && item.SqrDistance < sqrDistance) { sqrDistance = item.SqrDistance; animal = item.Animal; } } if (!(animal != null) || sqrDistance >= npc.AiDefinition.Engagement.SqrMediumRange) { npcContext.SetFact(Facts.NearbyAnimal, false, true, true, true); return; } npcContext.Memory.RememberPrimaryAnimal(animal); npcContext.SetFact(Facts.NearbyAnimal, true, true, true, true); }
public static bool TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info) { info.HeadVisible = false; info.BodyVisible = false; Vector3 vector3_1 = Vector3.op_Subtraction(((Component)info.Player).get_transform().get_position(), npc.transform.get_position()); Vector3 vector3_2 = Quaternion.op_Multiply(npc.EyeRotation, Vector3.get_forward()); float sqrMagnitude = ((Vector3) ref vector3_1).get_sqrMagnitude(); Vector3 normalized = ((Vector3) ref vector3_1).get_normalized(); float num = Vector3.Dot(vector3_2, normalized); if ((double)sqrMagnitude < (double)npc.AiDefinition.Engagement.SqrAggroRange && (double)num > (double)npc.AiDefinition.Sensory.FieldOfViewRadians) { if (info.Player.IsVisible(npc.EyePosition, info.Player.CenterPoint(), npc.AiDefinition.Engagement.AggroRange)) { info.BodyVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } else if (info.Player.IsVisible(npc.EyePosition, info.Player.eyes.position, npc.AiDefinition.Engagement.AggroRange)) { info.HeadVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } } if (!info.HeadVisible) { return(info.BodyVisible); } return(true); }
private static bool EvaluateRetreat( IHTNAgent npc, ScientistAStarContext c, ref float bestScore, ref BaseNpcMemory.EnemyPlayerInfo enemyInfo, CoverPoint option, Vector3 dirCover, Vector3 dirDanger, ref float directness) { float sqrMagnitude = ((Vector3) ref dirCover).get_sqrMagnitude(); if ((double)directness <= -0.200000002980232) { float allowedCoverRangeSqr = c.Domain.GetAllowedCoverRangeSqr(); float num = (float)((double)directness * -1.0 + ((double)allowedCoverRangeSqr - (double)sqrMagnitude) / (double)allowedCoverRangeSqr) + option.Score; if ((double)num > (double)bestScore) { bestScore = num; c.BestRetreatCover = option; return(true); } } return(false); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext; if (npcContext == null) { return; } for (int index = 0; index < npcContext.Memory.KnownTimedExplosives.Count; ++index) { BaseNpcMemory.EntityOfInterestInfo knownTimedExplosive = npcContext.Memory.KnownTimedExplosives[index]; if (Object.op_Inequality((Object)knownTimedExplosive.Entity, (Object)null)) { AttackEntity firearm = npcContext.Domain.GetFirearm(); Vector3 vector3 = Vector3.op_Subtraction(((Component)knownTimedExplosive.Entity).get_transform().get_position(), npcContext.BodyPosition); if ((double)((Vector3) ref vector3).get_sqrMagnitude() < (double)npcContext.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm)) { npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.NearbyExplosives, true, true, true, true); npcContext.IncrementFact(Rust.Ai.HTN.Scientist.Facts.Alertness, 2, true, true, true); return; } } } npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.NearbyExplosives, false, true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { NavMeshHit navMeshHit; ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext; if (npcContext == null) { return; } if (!npcContext.IsFact(Facts.IsReturningHome)) { if (npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player == null || time - npcContext.Memory.PrimaryKnownEnemyPlayer.Time > npcContext.Body.AiDefinition.Memory.NoSeeReturnToSpawnTime) { npcContext.SetFact(Facts.IsReturningHome, true, true, true, true); if (NavMesh.SamplePosition(npcContext.Domain.SpawnPosition, out navMeshHit, 1f, npcContext.Domain.NavAgent.areaMask)) { npcContext.Domain.SetDestination(navMeshHit.position); npcContext.Body.modelState.ducked = false; npcContext.SetFact(Facts.IsDucking, 0, false, true, true); return; } } } else if (npcContext.IsFact(Facts.CanSeeEnemy) || time - npcContext.Body.lastAttackedTime < 2f || npcContext.IsFact(Facts.AtLocationHome)) { npcContext.SetFact(Facts.IsReturningHome, false, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { NPCTurretContext npcContext = npc.AiDomain.NpcContext as NPCTurretContext; if (npcContext == null) { return; } npcContext.SetFact(Facts.CanSeeEnemy, npcContext.EnemyPlayersInLineOfSight.Count > 0, true, true, true); float single = 0f; NpcPlayerInfo npcPlayerInfo = new NpcPlayerInfo(); foreach (NpcPlayerInfo enemyPlayersInLineOfSight in npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight) { float forwardDotDir = (enemyPlayersInLineOfSight.ForwardDotDir + 1f) * 0.5f; float sqrDistance = (1f - enemyPlayersInLineOfSight.SqrDistance / npc.AiDefinition.Engagement.SqrAggroRange) * 2f + forwardDotDir; if (sqrDistance > single) { single = sqrDistance; npcPlayerInfo = enemyPlayersInLineOfSight; } NpcPlayerInfo npcPlayerInfo1 = enemyPlayersInLineOfSight; npcPlayerInfo1.VisibilityScore = sqrDistance; npcContext.Memory.RememberEnemyPlayer(npc, ref npcPlayerInfo1, time, 0f, "SEE!"); } npcContext.PrimaryEnemyPlayerInLineOfSight = npcPlayerInfo; if (npcPlayerInfo.Player != null && (npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player == null || npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.AudibleScore < single)) { npcContext.Memory.RememberPrimaryEnemyPlayer(npcPlayerInfo.Player); npcContext.IncrementFact(Facts.Alertness, 2, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } npcContext.SetFact(Facts.CanSeeEnemy, npcContext.EnemyPlayersInLineOfSight.Count > 0, true, true, true); float num1 = 0.0f; NpcPlayerInfo npcPlayerInfo1 = new NpcPlayerInfo(); foreach (NpcPlayerInfo npcPlayerInfo2 in npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight) { float num2 = (float)((1.0 - (double)npcPlayerInfo2.SqrDistance / (double)npc.AiDefinition.Engagement.SqrAggroRange) * 2.0) + (float)(((double)npcPlayerInfo2.ForwardDotDir + 1.0) * 0.5); if ((double)num2 > (double)num1) { num1 = num2; npcPlayerInfo1 = npcPlayerInfo2; } NpcPlayerInfo info = npcPlayerInfo2; info.VisibilityScore = num2; npcContext.Memory.RememberEnemyPlayer(npc, ref info, time, 0.0f, "SEE!"); } npcContext.PrimaryEnemyPlayerInLineOfSight = npcPlayerInfo1; if (!Object.op_Inequality((Object)npcPlayerInfo1.Player, (Object)null) || !Object.op_Equality((Object)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player, (Object)null) && (double)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.AudibleScore >= (double)num1) { return; } npcContext.Memory.RememberPrimaryEnemyPlayer(npcPlayerInfo1.Player); npcContext.IncrementFact(Facts.Alertness, 2, true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { NPCTurretContext npcContext = npc.AiDomain.NpcContext as NPCTurretContext; if (npcContext == null) { return; } BaseNpc animal = null; float sqrDistance = Single.MaxValue; for (int i = 0; i < npcContext.AnimalsInRange.Count; i++) { AnimalInfo item = npcContext.AnimalsInRange[i]; if (item.Animal != null && item.SqrDistance < sqrDistance) { sqrDistance = item.SqrDistance; animal = item.Animal; } } if (animal != null) { AttackEntity firearm = npcContext.Domain.GetFirearm(); if (sqrDistance < npc.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm)) { npcContext.Memory.RememberPrimaryAnimal(animal); npcContext.SetFact(Facts.NearbyAnimal, true, true, true, true); return; } } npcContext.SetFact(Facts.NearbyAnimal, false, true, true, true); }
public static void TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info) { BearDomain aiDomain = npc.AiDomain as BearDomain; if (aiDomain == null) { return; } bool flag = aiDomain.BearContext.IsFact(Facts.IsStandingUp); info.HeadVisible = false; info.BodyVisible = false; if (info.SqrDistance < aiDomain.BearDefinition.SqrAggroRange(flag) && info.ForwardDotDir > npc.AiDefinition.Sensory.FieldOfViewRadians) { float single = aiDomain.BearDefinition.AggroRange(flag); Ray ray = BearEnemyPlayersLineOfSightSensor.AimAtBody(npc, ref info); if (info.Player.IsVisible(ray, single)) { info.BodyVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); return; } ray = BearEnemyPlayersLineOfSightSensor.AimAtHead(npc, ref info); if (info.Player.IsVisible(ray, single)) { info.HeadVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } if (npcContext.ReservedCoverPoint == null) { npcContext.SetFact(Facts.AtLocationCover, false, true, true, true); npcContext.SetFact(Facts.CoverState, CoverState.None, true, true, true); return; } Vector3 position = npcContext.ReservedCoverPoint.Position; BasePathNode closestToPoint = npcContext.Domain.Path.GetClosestToPoint(position); if (!(closestToPoint != null) || !(closestToPoint.transform != null) || (closestToPoint.transform.position - npcContext.BodyPosition).sqrMagnitude >= 1f) { npcContext.SetFact(Facts.AtLocationCover, false, true, true, true); npcContext.SetFact(Facts.CoverState, CoverState.None, true, true, true); return; } npcContext.SetFact(Facts.AtLocationCover, true, true, true, true); npcContext.SetFact(Facts.CoverState, (npcContext.ReservedCoverPoint.NormalCoverType == CoverPoint.CoverType.Partial ? CoverState.Partial : CoverState.Full), true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext; if (npcContext == null) { return; } NpcPlayerInfo enemyPlayerTarget = npcContext.GetPrimaryEnemyPlayerTarget(); if (!Object.op_Inequality((Object)enemyPlayerTarget.Player, (Object)null)) { return; } AttackEntity firearm = npcContext.Domain.GetFirearm(); if (PreferredFightingRangeReasoner.IsAtPreferredRange(npcContext, ref enemyPlayerTarget, firearm)) { npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.AtLocationPreferredFightingRange, 1, true, true, true); } else { npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.AtLocationPreferredFightingRange, 0, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext; if (npcContext == null) { return; } float npcJunkpileDistAggroGate = ConVar.AI.npc_junkpile_dist_aggro_gate * ConVar.AI.npc_junkpile_dist_aggro_gate; for (int i = 0; i < npc.AiDomain.NpcContext.EnemyPlayersInRange.Count; i++) { NpcPlayerInfo item = npc.AiDomain.NpcContext.EnemyPlayersInRange[i]; if (!(item.Player == null) && !(item.Player.transform == null)) { if (Mathf.Approximately(item.SqrDistance, 0f)) { Vector3 player = item.Player.transform.position - npc.BodyPosition; item.SqrDistance = player.sqrMagnitude; npc.AiDomain.NpcContext.EnemyPlayersInRange[i] = item; } if (item.SqrDistance < npcJunkpileDistAggroGate) { npcContext.Memory.MarkEnemy(item.Player); } } } }
private static bool EvaluateAdvancement(IHTNAgent npc, ScientistAStarContext c, ref float bestScore, ref BaseNpcMemory.EnemyPlayerInfo enemyInfo, CoverPoint option, Vector3 dirCover, Vector3 dirDanger, float directness) { if (directness >= 0.2f) { float single = dirCover.sqrMagnitude; if (single > dirDanger.sqrMagnitude || single < 0.5f) { return(false); } float position = (option.Position - enemyInfo.LastKnownPosition).sqrMagnitude; float allowedCoverRangeSqr = c.Domain.GetAllowedCoverRangeSqr(); float single1 = directness + (allowedCoverRangeSqr - single) / allowedCoverRangeSqr + option.Score + (position < single ? 1f : 0f); if (single1 > bestScore) { if (ConVar.AI.npc_cover_use_path_distance && npc != null && !c.Domain.PathDistanceIsValid(enemyInfo.LastKnownPosition, option.Position, false)) { return(false); } if ((option.Position - enemyInfo.LastKnownPosition).sqrMagnitude < single) { single1 *= 0.9f; } bestScore = single1; c.BestAdvanceCover = option; return(true); } } return(false); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext; if (npcContext == null) { return; } BaseNpc animal = (BaseNpc)null; float sqrDistance = float.MaxValue; for (int index = 0; index < npcContext.AnimalsInRange.Count; ++index) { AnimalInfo animalInfo = npcContext.AnimalsInRange[index]; if (Object.op_Inequality((Object)animalInfo.Animal, (Object)null) && (double)animalInfo.SqrDistance < (double)sqrDistance) { sqrDistance = animalInfo.SqrDistance; animal = animalInfo.Animal; } } if (Object.op_Inequality((Object)animal, (Object)null) && AnimalReasoner.IsNearby(npcContext.Domain, sqrDistance)) { npcContext.Memory.RememberPrimaryAnimal(animal); npcContext.SetFact(Rust.Ai.HTN.ScientistJunkpile.Facts.NearbyAnimal, true, true, true, true); } else { npcContext.SetFact(Rust.Ai.HTN.ScientistJunkpile.Facts.NearbyAnimal, false, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } HTNPlayer htnPlayer = npc as HTNPlayer; if (Object.op_Equality((Object)htnPlayer, (Object)null)) { return; } FireTactic fireTactic = FireTactic.Single; AttackEntity heldEntity = htnPlayer.GetHeldEntity() as AttackEntity; if (Object.op_Implicit((Object)heldEntity)) { BaseProjectile baseProjectile = heldEntity as BaseProjectile; float num = float.MaxValue; if (Object.op_Inequality((Object)npcContext.PrimaryEnemyPlayerInLineOfSight.Player, (Object)null)) { num = npcContext.PrimaryEnemyPlayerInLineOfSight.SqrDistance; if (Mathf.Approximately(num, 0.0f)) { num = float.MaxValue; } } fireTactic = (double)heldEntity.attackLengthMin <0.0 || (double)num> (double) npcContext.Body.AiDefinition.Engagement.SqrCloseRangeFirearm((AttackEntity)baseProjectile) ? ((double)heldEntity.attackLengthMin <0.0 || (double)num> (double) npcContext.Body.AiDefinition.Engagement.SqrMediumRangeFirearm((AttackEntity)baseProjectile) ? FireTactic.Single : FireTactic.Burst) : FireTactic.FullAuto; } npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.FireTactic, fireTactic, true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext; if (npcContext == null) { return; } if (!npcContext.IsFact(Facts.IsReturningHome)) { if (!Object.op_Equality((Object)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player, (Object)null) && (double)time - (double)npcContext.Memory.PrimaryKnownEnemyPlayer.Time <= (double)npcContext.Body.AiDefinition.Memory.NoSeeReturnToSpawnTime) { return; } npcContext.SetFact(Facts.IsReturningHome, true, true, true, true); NavMeshHit navMeshHit; if (!NavMesh.SamplePosition(npcContext.Domain.SpawnPosition, ref navMeshHit, 1f, npcContext.Domain.NavAgent.get_areaMask())) { return; } npcContext.Domain.SetDestination(((NavMeshHit) ref navMeshHit).get_position()); npcContext.Body.modelState.set_ducked(false); npcContext.SetFact(Facts.IsDucking, 0, false, true, true); } else { if (!npcContext.IsFact(Facts.CanSeeEnemy) && (double)time - (double)npcContext.Body.lastAttackedTime >= 2.0 && !npcContext.IsFact(Facts.AtLocationHome)) { return; } npcContext.SetFact(Facts.IsReturningHome, false, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } BaseNpc animal = (BaseNpc)null; float num = float.MaxValue; for (int index = 0; index < npcContext.AnimalsInRange.Count; ++index) { AnimalInfo animalInfo = npcContext.AnimalsInRange[index]; if (Object.op_Inequality((Object)animalInfo.Animal, (Object)null) && (double)animalInfo.SqrDistance < (double)num) { num = animalInfo.SqrDistance; animal = animalInfo.Animal; } } if (Object.op_Inequality((Object)animal, (Object)null)) { AttackEntity firearm = npcContext.Domain.GetFirearm(); if ((double)num < (double)npc.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm)) { npcContext.Memory.RememberPrimaryAnimal(animal); npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.NearbyAnimal, true, true, true, true); return; } } npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.NearbyAnimal, false, true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext; if (npcContext == null) { return; } float num = AI.npc_junkpile_dist_aggro_gate * AI.npc_junkpile_dist_aggro_gate; for (int index = 0; index < npc.AiDomain.NpcContext.EnemyPlayersInRange.Count; ++index) { NpcPlayerInfo npcPlayerInfo = npc.AiDomain.NpcContext.EnemyPlayersInRange[index]; if (!Object.op_Equality((Object)npcPlayerInfo.Player, (Object)null) && !Object.op_Equality((Object)((Component)npcPlayerInfo.Player).get_transform(), (Object)null)) { if (Mathf.Approximately(npcPlayerInfo.SqrDistance, 0.0f)) { ref NpcPlayerInfo local = ref npcPlayerInfo; Vector3 vector3 = Vector3.op_Subtraction(((Component)npcPlayerInfo.Player).get_transform().get_position(), npc.BodyPosition); double sqrMagnitude = (double)((Vector3) ref vector3).get_sqrMagnitude(); local.SqrDistance = (float)sqrMagnitude; npc.AiDomain.NpcContext.EnemyPlayersInRange[index] = npcPlayerInfo; } if ((double)npcPlayerInfo.SqrDistance < (double)num) { npcContext.Memory.MarkEnemy(npcPlayerInfo.Player); } } }
public static bool TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info) { info.HeadVisible = false; info.BodyVisible = false; Vector3 player = info.Player.transform.position - npc.transform.position; Vector3 eyeRotation = npc.EyeRotation * Vector3.forward; float single = player.sqrMagnitude; float single1 = Vector3.Dot(eyeRotation, player.normalized); if (single < npc.AiDefinition.Engagement.SqrAggroRange && single1 > npc.AiDefinition.Sensory.FieldOfViewRadians) { if (info.Player.IsVisible(npc.EyePosition, info.Player.CenterPoint(), npc.AiDefinition.Engagement.AggroRange)) { info.BodyVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } else if (info.Player.IsVisible(npc.EyePosition, info.Player.eyes.position, npc.AiDefinition.Engagement.AggroRange)) { info.HeadVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } } if (info.HeadVisible) { return(true); } return(info.BodyVisible); }
protected virtual bool EvaluatePlayer( BaseNpcContext context, IHTNAgent npc, ref NpcPlayerInfo player, float time) { if (player.Player.Family == npc.Family) { return(false); } List <NpcPlayerInfo> playersInRange = npc.AiDomain.NpcContext.PlayersInRange; bool flag = false; for (int index = 0; index < playersInRange.Count; ++index) { if (Object.op_Equality((Object)playersInRange[index].Player, (Object)player.Player)) { flag = true; break; } } if (!flag) { playersInRange.Add(player); } return(true); }
public static void TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info) { BearDomain aiDomain = npc.AiDomain as BearDomain; if (Object.op_Equality((Object)aiDomain, (Object)null)) { return; } bool isStanding = aiDomain.BearContext.IsFact(Rust.Ai.HTN.Bear.Facts.IsStandingUp); info.HeadVisible = false; info.BodyVisible = false; if ((double)info.SqrDistance >= (double)aiDomain.BearDefinition.SqrAggroRange(isStanding) || (double)info.ForwardDotDir <= (double)npc.AiDefinition.Sensory.FieldOfViewRadians) { return; } float maxDistance = aiDomain.BearDefinition.AggroRange(isStanding); Ray ray1 = BearEnemyPlayersLineOfSightSensor.AimAtBody(npc, ref info); if (info.Player.IsVisible(ray1, maxDistance)) { info.BodyVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } else { Ray ray2 = BearEnemyPlayersLineOfSightSensor.AimAtHead(npc, ref info); if (!info.Player.IsVisible(ray2, maxDistance)) { return; } info.HeadVisible = true; npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info); } }
public static void TickFootstepHearingTest(IHTNAgent npc, ref NpcPlayerInfo info) { if (info.SqrDistance < npc.AiDefinition.Sensory.SqrHearingRange) { float player = info.Player.estimatedSpeed; if (player <= 2f) { return; } if (player > 5f) { npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info); } else { HTNPlayer hTNPlayer = npc as HTNPlayer; if (hTNPlayer) { AttackEntity heldEntity = hTNPlayer.GetHeldEntity() as AttackEntity; if (info.SqrDistance < npc.AiDefinition.Engagement.SqrCloseRangeFirearm(heldEntity)) { npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info); return; } } else if (info.SqrDistance < npc.AiDefinition.Engagement.SqrCloseRange) { npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info); return; } } } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext; if (npcContext == null) { return; } if (npcContext.IsFact(Facts.MaintainCover) || npcContext.IsFact(Facts.IsReloading) || npcContext.IsFact(Facts.IsApplyingMedical)) { if (npcContext.ReservedCoverPoint != null && !npcContext.ReservedCoverPoint.IsCompromised && !npcContext.IsFact(Facts.AtLocationCover) && time - npcContext.ReservedCoverTime < 0.8f) { return; } if (!npcContext.IsFact(Facts.CanSeeEnemy) && npcContext.Body.SecondsSinceAttacked - 1f > time - npcContext.ReservedCoverTime) { return; } if (ScientistDomain.CanNavigateToCoverLocation.Try(CoverTactic.Retreat, npcContext)) { Vector3 coverPosition = ScientistDomain.NavigateToCover.GetCoverPosition(CoverTactic.Retreat, npcContext); npcContext.Domain.SetDestination(coverPosition); npcContext.Body.modelState.ducked = false; npcContext.SetFact(Facts.IsDucking, 0, false, true, true); npcContext.SetFact(Facts.FirearmOrder, FirearmOrders.FireAtWill, false, true, true); } } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { NPCTurretContext npcContext = npc.AiDomain.NpcContext as NPCTurretContext; if (npcContext == null) { return; } float single = npc.healthFraction; if (single > 0.9f) { npcContext.SetFact(Facts.HealthState, HealthState.FullHealth, true, true, true); return; } if (single > 0.6f) { npcContext.SetFact(Facts.HealthState, HealthState.HighHealth, true, true, true); return; } if (single > 0.3f) { npcContext.SetFact(Facts.HealthState, HealthState.MediumHealth, true, true, true); return; } if (single > 0f) { npcContext.SetFact(Facts.HealthState, HealthState.LowHealth, true, true, true); return; } npcContext.SetFact(Facts.HealthState, HealthState.Dead, true, true, true); }
protected virtual bool EvaluatePlayer(BaseNpcContext context, IHTNAgent npc, ref NpcPlayerInfo player, float time) { if (player.Player.Family == npc.Family) { return(false); } List <NpcPlayerInfo> playersInRange = npc.AiDomain.NpcContext.PlayersInRange; bool flag = false; int num = 0; while (num < playersInRange.Count) { if (playersInRange[num].Player != player.Player) { num++; } else { flag = true; break; } } if (!flag) { playersInRange.Add(player); } return(true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } if (npcContext.ReservedCoverPoint == null) { npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.AtLocationCover, false, true, true, true); npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.CoverState, Rust.Ai.HTN.ScientistAStar.CoverState.None, true, true, true); } else { Vector3 position = npcContext.ReservedCoverPoint.Position; BasePathNode closestToPoint = npcContext.Domain.Path.GetClosestToPoint(position); if (Object.op_Inequality((Object)closestToPoint, (Object)null) && Object.op_Inequality((Object)((Component)closestToPoint).get_transform(), (Object)null)) { Vector3 vector3 = Vector3.op_Subtraction(((Component)closestToPoint).get_transform().get_position(), npcContext.BodyPosition); if ((double)((Vector3) ref vector3).get_sqrMagnitude() < 1.0) { npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.AtLocationCover, true, true, true, true); npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.CoverState, npcContext.ReservedCoverPoint.NormalCoverType == CoverPoint.CoverType.Partial ? Rust.Ai.HTN.ScientistAStar.CoverState.Partial : Rust.Ai.HTN.ScientistAStar.CoverState.Full, true, true, true); return; } } npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.AtLocationCover, false, true, true, true); npcContext.SetFact(Rust.Ai.HTN.ScientistAStar.Facts.CoverState, Rust.Ai.HTN.ScientistAStar.CoverState.None, true, true, true); } }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext; if (npcContext == null) { return; } if (npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player == null) { npcContext.SetFact(Facts.EnemyRange, EnemyRange.OutOfRange, true, true, true); } Vector3 lastKnownPosition = npcContext.Memory.PrimaryKnownEnemyPlayer.LastKnownPosition - npcContext.BodyPosition; float single = lastKnownPosition.sqrMagnitude; AttackEntity firearm = npcContext.Domain.GetFirearm(); if (single <= npcContext.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm)) { npcContext.SetFact(Facts.EnemyRange, EnemyRange.CloseRange, true, true, true); return; } if (single <= npcContext.Body.AiDefinition.Engagement.SqrMediumRangeFirearm(firearm)) { npcContext.SetFact(Facts.EnemyRange, EnemyRange.MediumRange, true, true, true); return; } if (single <= npcContext.Body.AiDefinition.Engagement.SqrLongRangeFirearm(firearm)) { npcContext.SetFact(Facts.EnemyRange, EnemyRange.LongRange, true, true, true); return; } npcContext.SetFact(Facts.EnemyRange, EnemyRange.OutOfRange, true, true, true); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { NPCTurretContext npcContext = npc.AiDomain.NpcContext as NPCTurretContext; if (npcContext == null) { return; } float healthFraction = npc.healthFraction; if ((double)healthFraction > 0.899999976158142) { npcContext.SetFact(Facts.HealthState, HealthState.FullHealth, true, true, true); } else if ((double)healthFraction > 0.600000023841858) { npcContext.SetFact(Facts.HealthState, HealthState.HighHealth, true, true, true); } else if ((double)healthFraction > 0.300000011920929) { npcContext.SetFact(Facts.HealthState, HealthState.MediumHealth, true, true, true); } else if ((double)healthFraction > 0.0) { npcContext.SetFact(Facts.HealthState, HealthState.LowHealth, true, true, true); } else { npcContext.SetFact(Facts.HealthState, HealthState.Dead, true, true, true); } }
private static bool EvaluateAdvancement( IHTNAgent npc, ScientistAStarContext c, ref float bestScore, ref BaseNpcMemory.EnemyPlayerInfo enemyInfo, CoverPoint option, Vector3 dirCover, Vector3 dirDanger, float directness) { if ((double)directness >= 0.200000002980232) { float sqrMagnitude1 = ((Vector3) ref dirCover).get_sqrMagnitude(); if ((double)sqrMagnitude1 > (double)((Vector3) ref dirDanger).get_sqrMagnitude() || (double)sqrMagnitude1 < 0.5) { return(false); } Vector3 vector3_1 = Vector3.op_Subtraction(option.Position, enemyInfo.LastKnownPosition); float sqrMagnitude2 = ((Vector3) ref vector3_1).get_sqrMagnitude(); float allowedCoverRangeSqr = c.Domain.GetAllowedCoverRangeSqr(); float num = (float)((double)directness + ((double)allowedCoverRangeSqr - (double)sqrMagnitude1) / (double)allowedCoverRangeSqr + (double)option.Score + ((double)sqrMagnitude2 < (double)sqrMagnitude1 ? 1.0 : 0.0)); if ((double)num > (double)bestScore && (!AI.npc_cover_use_path_distance || npc == null || c.Domain.PathDistanceIsValid(enemyInfo.LastKnownPosition, option.Position, false))) { Vector3 vector3_2 = Vector3.op_Subtraction(option.Position, enemyInfo.LastKnownPosition); if ((double)((Vector3) ref vector3_2).get_sqrMagnitude() < (double)sqrMagnitude1) { num *= 0.9f; } bestScore = num; c.BestAdvanceCover = option; return(true); } } return(false); }
public void Tick(IHTNAgent npc, float deltaTime, float time) { ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext; if (npcContext == null) { return; } if (!npcContext.IsFact(Facts.IsReturningHome)) { if (!Object.op_Equality((Object)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player, (Object)null) && (double)time - (double)npcContext.Memory.PrimaryKnownEnemyPlayer.Time <= (double)npcContext.Body.AiDefinition.Memory.NoSeeReturnToSpawnTime) { return; } npcContext.SetFact(Facts.IsReturningHome, true, true, true, true); } else { if (!npcContext.IsFact(Facts.CanSeeEnemy) && (double)time - (double)npcContext.Body.lastAttackedTime >= 2.0 && !npcContext.IsFact(Facts.AtLocationHome)) { return; } npcContext.SetFact(Facts.IsReturningHome, false, true, true, true); } }