using System; using System.Collections; using System.Collections.Generic; using GameNetcodeStuff; using Unity.Netcode; using UnityEngine; using UnityEngine.Animations.Rigging; public class BaboonBirdAI : EnemyAI { public Dictionary threats = new Dictionary(); public Transform focusedThreatTransform; public Threat focusedThreat; public bool focusingOnThreat; public bool focusedThreatIsInView; private int focusLevel; private float fearLevel; private float fearLevelNoDistComparison; private Vector3 agentLocalVelocity; private float velX; private float velZ; private Vector3 previousPosition; public Transform animationContainer; public MultiAimConstraint headLookRig; public Transform headLookTarget; private Ray lookRay; public float fov; public float visionDistance; private int visibleThreatsMask = 524296; private int scrapMask = 64; private int leadershipLevel; private int previousBehaviourState = -1; public BaboonHawkGroup scoutingGroup; private float miscAnimationTimer; private int currentMiscAnimation; private Vector3 lookTarget; private Vector3 peekTarget; private float peekTimer; public AISearchRoutine scoutingSearchRoutine; public static Vector3 baboonCampPosition; public float scoutTimer; public float timeToScout; private float timeSinceRestWhileScouting; private float restingDuringScouting; private bool eyesClosed; private bool restingAtCamp; private float restAtCampTimer; private float chosenDistanceToCamp = 1f; private float timeSincePingingBirdInterest; private float timeSinceLastMiscAnimation; private int aggressiveMode; private int previousAggressiveMode; private float fightTimer; public AudioSource aggressionAudio; private Vector3 debugSphere; public Collider ownCollider; private float timeSinceAggressiveDisplay; private float timeSpentFocusingOnThreat; private float timeSinceFighting; private bool doingKillAnimation; private Coroutine killAnimCoroutine; private float timeSinceHitting; public Transform deadBodyPoint; public AudioClip[] cawScreamSFX; public AudioClip[] cawLaughSFX; private float noiseTimer; private float noiseInterval; public GrabbableObject focusedScrap; public GrabbableObject heldScrap; public bool movingToScrap; public Transform grabTarget; public TwoBoneIKConstraint leftArmRig; public TwoBoneIKConstraint rightArmRig; private bool oddAIInterval; private DeadBodyInfo killAnimationBody; private float timeSinceBeingAttackedByPlayer; private float timeSinceJoiningOrLeavingScoutingGroup; private BaboonBirdAI biggestBaboon; public override void Start() { base.Start(); if (!base.IsOwner) { return; } System.Random random = new System.Random(StartOfRound.Instance.randomMapSeed + thisEnemyIndex); leadershipLevel = random.Next(0, 500); if (baboonCampPosition == Vector3.zero) { List list = new List(); for (int i = 0; i < RoundManager.Instance.outsideAINodes.Length - 2; i += 2) { if (Vector3.Distance(RoundManager.Instance.outsideAINodes[i].transform.position, StartOfRound.Instance.elevatorTransform.position) > 30f && !PathIsIntersectedByLineOfSight(RoundManager.Instance.outsideAINodes[i].transform.position, calculatePathDistance: false, avoidLineOfSight: false)) { list.Add(RoundManager.Instance.outsideAINodes[i]); } } baboonCampPosition = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(list[random.Next(0, list.Count)].transform.position, 15f, RoundManager.Instance.navHit, random); } SyncInitialValuesServerRpc(leadershipLevel, baboonCampPosition); } [ServerRpc] public void SyncInitialValuesServerRpc(int syncLeadershipLevel, Vector3 campPosition) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(3452382367u, serverRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, syncLeadershipLevel); bufferWriter.WriteValueSafe(in campPosition); __endSendServerRpc(ref bufferWriter, 3452382367u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { SyncInitialValuesClientRpc(syncLeadershipLevel, campPosition); } } [ClientRpc] public void SyncInitialValuesClientRpc(int syncLeadershipLevel, Vector3 campPosition) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(3856685904u, clientRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, syncLeadershipLevel); bufferWriter.WriteValueSafe(in campPosition); __endSendClientRpc(ref bufferWriter, 3856685904u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { leadershipLevel = syncLeadershipLevel; baboonCampPosition = campPosition; base.transform.localScale = base.transform.localScale * Mathf.Max((float)leadershipLevel / 200f * 0.6f, 0.9f); } } } public void LateUpdate() { if ((!inSpecialAnimation && (focusedThreatTransform == null || currentBehaviourStateIndex != 2) && peekTimer < 0f) || isEnemyDead) { agent.angularSpeed = 300f; headLookRig.weight = Mathf.Lerp(headLookRig.weight, 0f, Time.deltaTime * 10f); return; } agent.angularSpeed = 0f; headLookRig.weight = Mathf.Lerp(headLookRig.weight, 1f, Time.deltaTime * 10f); if (peekTimer >= 0f) { peekTimer -= Time.deltaTime; AnimateLooking(peekTarget); } else { AnimateLooking(lookTarget); } } public override void OnCollideWithPlayer(Collider other) { base.OnCollideWithPlayer(other); if (timeSinceHitting < 0.5f) { return; } Vector3 vector = Vector3.Normalize(base.transform.position + Vector3.up * 0.7f - (other.transform.position + Vector3.up * 0.4f)) * 0.5f; if (Physics.Linecast(base.transform.position + Vector3.up * 0.7f + vector, other.transform.position + Vector3.up * 0.4f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore)) { return; } PlayerControllerB playerControllerB = MeetsStandardPlayerCollisionConditions(other, inSpecialAnimation || doingKillAnimation); if (playerControllerB != null) { timeSinceHitting = 0f; playerControllerB.DamagePlayer(30); if (playerControllerB.isPlayerDead) { StabPlayerDeathAnimServerRpc((int)playerControllerB.playerClientId); return; } creatureAnimator.ResetTrigger("Hit"); creatureAnimator.SetTrigger("Hit"); creatureSFX.PlayOneShot(enemyType.audioClips[5]); WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[5]); RoundManager.Instance.PlayAudibleNoise(creatureSFX.transform.position, 8f, 0.7f); } } public override void OnCollideWithEnemy(Collider other, EnemyAI enemyScript = null) { base.OnCollideWithEnemy(other); if (!(enemyScript.enemyType == enemyType) && !(timeSinceHitting < 0.75f) && base.IsOwner && enemyScript.enemyType.canDie) { timeSinceHitting = 0f; creatureAnimator.ResetTrigger("Hit"); creatureAnimator.SetTrigger("Hit"); creatureSFX.PlayOneShot(enemyType.audioClips[5]); WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[5]); RoundManager.Instance.PlayAudibleNoise(creatureSFX.transform.position, 8f, 0.7f); enemyScript.HitEnemy(1, null, playHitSFX: true); } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false) { base.HitEnemy(force, playerWhoHit, playHitSFX); if (isEnemyDead) { return; } creatureAnimator.SetTrigger("TakeDamage"); if (playerWhoHit != null) { timeSinceBeingAttackedByPlayer = 0f; if (threats.TryGetValue(playerWhoHit.transform, out var value)) { value.hasAttacked = true; } } enemyHP -= force; if (base.IsOwner && enemyHP <= 0 && !isEnemyDead) { KillEnemyOnOwnerClient(); } StopKillAnimation(); } public override void KillEnemy(bool destroy = false) { base.KillEnemy(destroy); creatureAnimator.SetBool("IsDead", value: true); if (heldScrap != null && base.IsOwner) { DropHeldItemAndSync(); } StopKillAnimation(); } public void StopKillAnimation() { if (killAnimCoroutine != null) { StopCoroutine(killAnimCoroutine); } agent.acceleration = 17f; inSpecialAnimation = false; doingKillAnimation = false; if (killAnimationBody != null) { killAnimationBody.attachedLimb = null; killAnimationBody.attachedTo = null; killAnimationBody = null; } } [ServerRpc(RequireOwnership = false)] public void StabPlayerDeathAnimServerRpc(int playerObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(2476579270u, serverRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, playerObject); __endSendServerRpc(ref bufferWriter, 2476579270u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && !doingKillAnimation) { if (base.IsOwner && heldScrap != null) { DropHeldItemAndSync(); } doingKillAnimation = true; StabPlayerDeathAnimClientRpc(playerObject); } } [ClientRpc] public void StabPlayerDeathAnimClientRpc(int playerObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(3749667856u, clientRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, playerObject); __endSendClientRpc(ref bufferWriter, 3749667856u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { doingKillAnimation = true; inSpecialAnimation = true; agent.acceleration = 70f; agent.speed = 0f; if (killAnimCoroutine != null) { StopCoroutine(killAnimCoroutine); } killAnimCoroutine = StartCoroutine(killPlayerAnimation(playerObject)); } } private IEnumerator killPlayerAnimation(int playerObject) { PlayerControllerB killedPlayer = StartOfRound.Instance.allPlayerScripts[playerObject]; creatureAnimator.ResetTrigger("KillAnimation"); creatureAnimator.SetTrigger("KillAnimation"); creatureVoice.PlayOneShot(enemyType.audioClips[4]); WalkieTalkie.TransmitOneShotAudio(creatureVoice, enemyType.audioClips[4]); float startTime = Time.realtimeSinceStartup; yield return new WaitUntil(() => Time.realtimeSinceStartup - startTime > 1f || killedPlayer.deadBody != null); if (killedPlayer.deadBody != null) { killAnimationBody = killedPlayer.deadBody; killAnimationBody.attachedLimb = killedPlayer.deadBody.bodyParts[5]; killAnimationBody.attachedTo = deadBodyPoint; killAnimationBody.matchPositionExactly = true; killAnimationBody.canBeGrabbedBackByPlayers = false; yield return new WaitForSeconds(1.7f); killAnimationBody.attachedLimb = null; killAnimationBody.attachedTo = null; } agent.acceleration = 17f; inSpecialAnimation = false; doingKillAnimation = false; } private void InteractWithScrap() { if (heldScrap != null) { focusedScrap = null; if (Vector3.Distance(base.transform.position, baboonCampPosition) < UnityEngine.Random.Range(1f, 7f) || heldScrap.isHeld) { DropHeldItemAndSync(); } } else if (focusedScrap != null) { if (debugEnemyAI) { Debug.DrawRay(focusedScrap.transform.position, Vector3.up * 3f, Color.yellow); } if (!CanGrabScrap(focusedScrap)) { focusedScrap = null; } else if (Vector3.Distance(base.transform.position, focusedScrap.transform.position) < 0.4f && !Physics.Linecast(base.transform.position, focusedScrap.transform.position + Vector3.up * 0.5f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore)) { GrabItemAndSync(focusedScrap.NetworkObject); } } } private bool CanGrabScrap(GrabbableObject scrap) { if (scrap.itemProperties.itemId == 1531) { return false; } if (scrap.isInShipRoom && !isInsidePlayerShip) { return false; } if (isEnemyDead) { return false; } if (!scrap.heldByPlayerOnServer && !scrap.isHeld && (scrap == heldScrap || !scrap.isHeldByEnemy)) { return Vector3.Distance(scrap.transform.position, baboonCampPosition) > 8f; } return false; } private void DropHeldItemAndSync() { if (heldScrap == null) { Debug.LogError($"Baboon #{thisEnemyIndex} Error: DropItemAndSync called when baboon has no scrap!"); } NetworkObject networkObject = heldScrap.NetworkObject; if (networkObject == null) { Debug.LogError($"Baboon #{thisEnemyIndex} Error: No network object in held scrap {heldScrap.gameObject.name}"); } Vector3 itemFloorPosition = heldScrap.GetItemFloorPosition(); DropScrap(networkObject, itemFloorPosition); DropScrapServerRpc(networkObject, itemFloorPosition, (int)GameNetworkManager.Instance.localPlayerController.playerClientId); } [ServerRpc] public void DropScrapServerRpc(NetworkObjectReference item, Vector3 targetFloorPosition, int clientWhoSentRPC) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1418775270u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in item, default(FastBufferWriter.ForNetworkSerializable)); bufferWriter.WriteValueSafe(in targetFloorPosition); BytePacker.WriteValueBitPacked(bufferWriter, clientWhoSentRPC); __endSendServerRpc(ref bufferWriter, 1418775270u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { DropScrapClientRpc(item, targetFloorPosition, clientWhoSentRPC); } } [ClientRpc] public void DropScrapClientRpc(NetworkObjectReference item, Vector3 targetFloorPosition, int clientWhoSentRPC) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1865475504u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in item, default(FastBufferWriter.ForNetworkSerializable)); bufferWriter.WriteValueSafe(in targetFloorPosition); BytePacker.WriteValueBitPacked(bufferWriter, clientWhoSentRPC); __endSendClientRpc(ref bufferWriter, 1865475504u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && clientWhoSentRPC != (int)GameNetworkManager.Instance.localPlayerController.playerClientId) { if (item.TryGet(out var networkObject)) { DropScrap(networkObject, targetFloorPosition); } else { Debug.LogError($"Baboon #{thisEnemyIndex}; Error, was not able to get network object from dropped item client rpc"); } } } private void DropScrap(NetworkObject item, Vector3 targetFloorPosition) { if (heldScrap == null) { Debug.LogError("Baboon: my held item is null when attempting to drop it!!"); return; } if (heldScrap.isHeld) { heldScrap.DiscardItemFromEnemy(); heldScrap.isHeldByEnemy = false; heldScrap = null; Debug.Log($"Baboon #{thisEnemyIndex}: Dropped item which was held by a player"); return; } heldScrap.parentObject = null; heldScrap.transform.SetParent(StartOfRound.Instance.propsContainer, worldPositionStays: true); heldScrap.EnablePhysics(enable: true); heldScrap.fallTime = 0f; heldScrap.startFallingPosition = heldScrap.transform.parent.InverseTransformPoint(heldScrap.transform.position); heldScrap.targetFloorPosition = heldScrap.transform.parent.InverseTransformPoint(targetFloorPosition); heldScrap.floorYRot = -1; heldScrap.DiscardItemFromEnemy(); heldScrap.isHeldByEnemy = false; heldScrap = null; Debug.Log($"Baboon #{thisEnemyIndex}: Dropped item"); } private void GrabItemAndSync(NetworkObject item) { if (heldScrap != null) { Debug.LogError($"Baboon #{thisEnemyIndex} Error: GrabItemAndSync called when baboon is already carrying scrap!"); } GrabScrap(item); GrabScrapServerRpc(item, (int)GameNetworkManager.Instance.localPlayerController.playerClientId); } [ServerRpc] public void GrabScrapServerRpc(NetworkObjectReference item, int clientWhoSentRPC) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(869682226u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in item, default(FastBufferWriter.ForNetworkSerializable)); BytePacker.WriteValueBitPacked(bufferWriter, clientWhoSentRPC); __endSendServerRpc(ref bufferWriter, 869682226u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { if (!item.TryGet(out var networkObject)) { Debug.LogError($"Baboon #{thisEnemyIndex} error: Could not get grabbed network object from reference on server"); } else if ((bool)networkObject.GetComponent() && !networkObject.GetComponent().heldByPlayerOnServer) { GrabScrapClientRpc(item, clientWhoSentRPC); } } } [ClientRpc] public void GrabScrapClientRpc(NetworkObjectReference item, int clientWhoSentRPC) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1564051222u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in item, default(FastBufferWriter.ForNetworkSerializable)); BytePacker.WriteValueBitPacked(bufferWriter, clientWhoSentRPC); __endSendClientRpc(ref bufferWriter, 1564051222u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && clientWhoSentRPC != (int)GameNetworkManager.Instance.localPlayerController.playerClientId) { if (item.TryGet(out var networkObject)) { GrabScrap(networkObject); } else { Debug.LogError($"Baboon #{thisEnemyIndex}; Error, was not able to get id from grabbed item client rpc"); } } } private void GrabScrap(NetworkObject item) { Debug.Log($"held item null: {heldScrap == null}"); if (heldScrap != null) { Debug.Log($"Baboon #{thisEnemyIndex}: Trying to grab another item ({item.gameObject.name}) while hands are already full with item ({heldScrap.gameObject.name}). Dropping the currently held one."); DropScrap(heldScrap.GetComponent(), heldScrap.GetItemFloorPosition()); } GrabbableObject grabbableObject = (heldScrap = item.gameObject.GetComponent()); grabbableObject.parentObject = grabTarget; grabbableObject.hasHitGround = false; grabbableObject.GrabItemFromEnemy(); grabbableObject.isHeldByEnemy = true; grabbableObject.EnablePhysics(enable: false); Debug.Log($"Baboon #{thisEnemyIndex}: Grabbing item!!! {heldScrap.gameObject.name}"); } public override void ReachedNodeInSearch() { base.ReachedNodeInSearch(); if (currentSearch.nodesEliminatedInCurrentSearch > 14 && timeSinceRestWhileScouting > 17f && timeSinceAggressiveDisplay > 6f) { timeSinceRestWhileScouting = 0f; restingDuringScouting = 12f; } } public override void DoAIInterval() { base.DoAIInterval(); if (isEnemyDead) { agent.speed = 0f; if (scoutingSearchRoutine.inProgress) { StopSearch(scoutingSearchRoutine, clear: false); } return; } if (stunNormalizedTimer > 0f || miscAnimationTimer > 0f) { agent.speed = 0f; if (heldScrap != null && base.IsOwner) { DropHeldItemAndSync(); } if (stunnedByPlayer != null) { PingBaboonInterest(stunnedByPlayer.gameplayCamera.transform.position, 4); } } if (inSpecialAnimation) { agent.speed = 0f; return; } if (!eyesClosed) { DoLOSCheck(); } InteractWithScrap(); switch (currentBehaviourStateIndex) { case 0: if (previousBehaviourState != currentBehaviourStateIndex) { timeToScout = UnityEngine.Random.Range(25, 70); scoutTimer = 0f; Debug.Log($"Baboon #{thisEnemyIndex} changed to state 0; set time to scout: {timeToScout}"); restingAtCamp = false; restAtCampTimer = 0f; SetAggressiveMode(0); previousBehaviourState = currentBehaviourStateIndex; } if (!base.IsOwner) { break; } if (focusedScrap != null) { SetDestinationToPosition(focusedScrap.transform.position); } if (scoutingGroup == null || scoutingGroup.leader == this || !scoutingGroup.members.Contains(this)) { Debug.Log($"{base.gameObject.name}: scouting group null?: {scoutingGroup == null};"); if (scoutingGroup != null) { Debug.Log($"Scouting group not null. Leader: {scoutingGroup.leader.gameObject.name}; members contains this: {!scoutingGroup.members.Contains(this)}"); } if (restingDuringScouting >= 0f) { if (scoutingSearchRoutine.inProgress) { StopSearch(scoutingSearchRoutine, clear: false); } if (!creatureAnimator.GetBool("sit")) { EnemyEnterRestModeServerRpc(sleep: false, atCamp: false); } creatureAnimator.SetBool("sit", value: true); restingDuringScouting -= AIIntervalTime; agent.speed = 0f; } else { if (!scoutingSearchRoutine.inProgress && focusedScrap == null) { StartSearch(baboonCampPosition, scoutingSearchRoutine); } if (creatureAnimator.GetBool("sit")) { EnemyGetUpServerRpc(); creatureAnimator.SetBool("sit", value: false); } agent.speed = 10f; } } else { if (scoutingSearchRoutine.inProgress) { Debug.Log($"Baboon #{thisEnemyIndex} joined a group; Stopping scouting."); StopSearch(scoutingSearchRoutine); } if (creatureAnimator.GetBool("sit")) { EnemyGetUpServerRpc(); creatureAnimator.SetBool("sit", value: false); } agent.speed = 12f; if (Vector3.Distance(base.transform.position, scoutingGroup.leader.transform.position) > 60f || PathIsIntersectedByLineOfSight(scoutingGroup.leader.transform.position, calculatePathDistance: false, avoidLineOfSight: false)) { Debug.Log($"Baboon #{thisEnemyIndex} leaving group with leader {scoutingGroup.leader.thisEnemyIndex}; distance: {Vector3.Distance(base.transform.position, scoutingGroup.leader.transform.position)}"); LeaveCurrentScoutingGroup(sync: true); } else { Debug.Log($"Baboon #{thisEnemyIndex}: following leader. {scoutingGroup == null}; {scoutingGroup.leader == this}; {scoutingGroup.members.Contains(this)}"); if (Vector3.Distance(destination, scoutingGroup.leader.transform.position) > 8f && focusedScrap == null) { SetDestinationToPosition(RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(scoutingGroup.leader.transform.position, 6f, RoundManager.Instance.navHit)); } } } if (scoutTimer < timeToScout && heldScrap == null) { scoutTimer += AIIntervalTime; } else { SwitchToBehaviourState(1); } break; case 1: if (previousBehaviourState != currentBehaviourStateIndex) { restingDuringScouting = 0f; scoutTimer = 0f; chosenDistanceToCamp = UnityEngine.Random.Range(1f, 7f); LeaveCurrentScoutingGroup(sync: true); SetAggressiveMode(0); previousBehaviourState = currentBehaviourStateIndex; } if (scoutingSearchRoutine.inProgress) { StopSearch(scoutingSearchRoutine); } if (focusedScrap != null) { SetDestinationToPosition(focusedScrap.transform.position); } else { SetDestinationToPosition(baboonCampPosition); } if (Vector3.Distance(base.transform.position, baboonCampPosition) < chosenDistanceToCamp && peekTimer < 0f) { if (!restingAtCamp) { restingAtCamp = true; restAtCampTimer = UnityEngine.Random.Range(15f, 30f); if (heldScrap != null) { DropHeldItemAndSync(); } bool sleep = false; if (UnityEngine.Random.Range(0, 100) < 35) { sleep = true; } EnemyEnterRestModeServerRpc(sleep, atCamp: true); } else if (restAtCampTimer <= 0f) { SwitchToBehaviourState(0); } else { restAtCampTimer -= AIIntervalTime; } agent.speed = 0f; } else { if (restingAtCamp) { restingAtCamp = false; EnemyGetUpServerRpc(); } creatureAnimator.SetBool("sit", value: false); creatureAnimator.SetBool("sleep", value: false); agent.speed = 9f; } break; case 2: { if (previousBehaviourState != currentBehaviourStateIndex) { timeSpentFocusingOnThreat = 0f; creatureAnimator.SetBool("sleep", value: false); creatureAnimator.SetBool("sit", value: false); EnemyGetUpServerRpc(); previousBehaviourState = currentBehaviourStateIndex; } if (focusedThreat == null || !focusingOnThreat) { StopFocusingThreat(); } if (scoutingSearchRoutine.inProgress) { StopSearch(scoutingSearchRoutine, clear: false); } agent.speed = 9f; float num = fearLevelNoDistComparison * 2f; if (focusedThreat.interestLevel <= 0 || enemyHP <= 3) { num = Mathf.Max(num, 1f); } float num2 = GetComfortableDistanceToThreat(focusedThreat) + num; float num3 = Vector3.Distance(base.transform.position, focusedThreat.lastSeenPosition); bool flag = false; float num4 = Time.realtimeSinceStartup - focusedThreat.timeLastSeen; if (num4 > 5f) { SetThreatInView(inView: false); focusLevel = 0; StopFocusingThreat(); break; } if (num4 > 3f) { SetThreatInView(inView: false); focusLevel = 1; if (num2 - num3 > 2f) { StopFocusingThreat(); break; } } else if (num4 > 1f) { flag = true; focusedThreatIsInView = false; SetThreatInView(inView: false); focusLevel = 2; SetAggressiveMode(0); } else if (num4 < 0.55f) { flag = true; SetThreatInView(inView: true); } bool flag2 = fearLevel > 0f || focusedThreat.interestLevel > 0 || fearLevel < -6f || focusedThreat.hasAttacked; if (aggressiveMode == 2) { focusLevel = 3; if (heldScrap != null) { DropHeldItemAndSync(); focusedScrap = heldScrap; } Debug.Log("Baboon: Entered fight mode with threat '" + focusedThreat.threatScript.GetThreatTransform().name + "'"); Debug.Log($"Fight timer: {fightTimer}"); Vector3 vector = focusedThreat.threatScript.GetThreatTransform().position + focusedThreat.threatScript.GetThreatVelocity() * 10f; Debug.DrawRay(vector, Vector3.up * 5f, Color.red, AIIntervalTime); SetDestinationToPosition(vector, checkForPath: true); if (fightTimer > 4f || timeSinceBeingAttackedByPlayer < 4f || (fightTimer > 2f && (fearLevel >= 1f || !flag2)) || (enemyHP <= 3 && !flag2)) { scoutTimer = timeToScout - 20f; fightTimer = -7f; SetAggressiveMode(1); } else if (num3 > 4f) { fightTimer += AIIntervalTime * 2f; } else if (num3 > 1f) { fightTimer += AIIntervalTime; } else { fightTimer += AIIntervalTime / 2f; } break; } bool flag3 = false; if (focusedScrap != null && (!flag || fearLevel <= 0f)) { SetDestinationToPosition(focusedScrap.transform.position); flag3 = true; } Vector3 vector2 = focusedThreat.lastSeenPosition + focusedThreat.threatScript.GetThreatVelocity() * -17f; Debug.DrawRay(vector2, Vector3.up * 3f, Color.red, AIIntervalTime); Ray ray = new Ray(base.transform.position + Vector3.up * 0.5f, Vector3.Normalize((base.transform.position + Vector3.up * 0.5f - vector2) * 100f)); RaycastHit hitInfo; Vector3 vector3 = ((!Physics.Raycast(ray, out hitInfo, num2 - num3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore)) ? RoundManager.Instance.GetNavMeshPosition(ray.GetPoint(num2 - num3), RoundManager.Instance.navHit, 8f) : RoundManager.Instance.GetNavMeshPosition(hitInfo.point, RoundManager.Instance.navHit, 8f)); Debug.DrawRay(vector3, Vector3.up, Color.blue, AIIntervalTime); if (!flag3) { if (SetDestinationToPosition(vector3, checkForPath: true)) { debugSphere = vector3; } else { Debug.Log($"Baboon #{thisEnemyIndex}: Could not get path to avoidance position at {vector3}"); debugSphere = vector3; } } if (fightTimer > 7f && timeSinceFighting > 4f) { fightTimer = -6f; SetAggressiveMode(2); break; } bool flag4 = false; if (scoutingGroup != null) { for (int i = 0; i < scoutingGroup.members.Count; i++) { if (scoutingGroup.members[i].aggressiveMode == 2) { flag4 = true; } } } float num5 = GetComfortableDistanceToThreat(focusedThreat) - num3; if (fearLevel < -5f && flag2) { if (noiseTimer >= noiseInterval) { noiseInterval = UnityEngine.Random.Range(0.2f, 0.7f); noiseTimer = 0f; RoundManager.PlayRandomClip(creatureVoice, cawLaughSFX, randomize: true, 1f, 1105); } else { noiseTimer += Time.deltaTime; } } if ((flag && ((num5 > 8f && flag2) || num3 < 5f)) || timeSinceBeingAttackedByPlayer < 2.5f) { if (timeSinceFighting > 5f) { fightTimer += AIIntervalTime * 10.6f / (focusedThreat.distanceToThreat * 0.3f); } SetAggressiveMode(1); } else if (num5 > 4f && fearLevel < 3f && flag2) { fightTimer += AIIntervalTime * 7.4f / (focusedThreat.distanceToThreat * 0.3f); SetAggressiveMode(1); } else { if (!(num5 < 2f)) { break; } if (timeSinceAggressiveDisplay > 2.5f) { SetAggressiveMode(0); } fightTimer -= Mathf.Max(-6f, AIIntervalTime * 0.2f); if (timeSpentFocusingOnThreat > 4f + (float)focusedThreat.interestLevel * 8f && !flag4) { if (fightTimer > 4f) { fightTimer -= Mathf.Max(-6f, AIIntervalTime * 0.5f * (focusedThreat.distanceToThreat * 0.1f)); } else { StopFocusingThreat(); } } } break; } } } private void StopFocusingThreat() { if (currentBehaviourStateIndex == 2) { Debug.Log($"Stopped focusing on threat '{focusedThreat.threatScript.GetThreatTransform()}'"); aggressiveMode = 0; focusingOnThreat = false; focusedThreatIsInView = false; focusedThreatTransform = null; focusedThreat = null; if (heldScrap == null) { SwitchToBehaviourStateOnLocalClient(0); } else { SwitchToBehaviourStateOnLocalClient(1); } StopFocusingThreatServerRpc(heldScrap == null); } } [ServerRpc] public void StopFocusingThreatServerRpc(bool enterScoutingMode) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1546030380u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in enterScoutingMode, default(FastBufferWriter.ForPrimitives)); __endSendServerRpc(ref bufferWriter, 1546030380u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { StopFocusingThreatClientRpc(enterScoutingMode); } } [ClientRpc] public void StopFocusingThreatClientRpc(bool enterScoutingMode) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(3360048400u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in enterScoutingMode, default(FastBufferWriter.ForPrimitives)); __endSendClientRpc(ref bufferWriter, 3360048400u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner) { aggressiveMode = 0; focusedThreatTransform = null; focusedThreat = null; if (enterScoutingMode) { SwitchToBehaviourStateOnLocalClient(0); } else { SwitchToBehaviourStateOnLocalClient(1); } } } private void SetAggressiveMode(int mode) { if (aggressiveMode != mode) { if (mode == 2) { Debug.Log("Baboon entering fight mode (aggressive mode 2)"); } aggressiveMode = mode; SetAggressiveModeServerRpc(mode); } } [ServerRpc] public void SetAggressiveModeServerRpc(int mode) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(443869275u, serverRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, mode); __endSendServerRpc(ref bufferWriter, 443869275u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { SetAggressiveModeClientRpc(mode); } } [ClientRpc] public void SetAggressiveModeClientRpc(int mode) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1782649174u, clientRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, mode); __endSendClientRpc(ref bufferWriter, 1782649174u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner) { aggressiveMode = mode; } } } private void SetThreatInView(bool inView) { if (focusedThreatIsInView != inView) { focusedThreatIsInView = inView; SetThreatInViewServerRpc(inView); } } [ServerRpc] public void SetThreatInViewServerRpc(bool inView) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(3428942850u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in inView, default(FastBufferWriter.ForPrimitives)); __endSendServerRpc(ref bufferWriter, 3428942850u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { SetThreatInViewClientRpc(inView); } } [ClientRpc] public void SetThreatInViewClientRpc(bool inView) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(2073937320u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in inView, default(FastBufferWriter.ForPrimitives)); __endSendClientRpc(ref bufferWriter, 2073937320u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner) { focusedThreatIsInView = inView; } } } [ServerRpc] public void EnemyEnterRestModeServerRpc(bool sleep, bool atCamp) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1806580287u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in sleep, default(FastBufferWriter.ForPrimitives)); bufferWriter.WriteValueSafe(in atCamp, default(FastBufferWriter.ForPrimitives)); __endSendServerRpc(ref bufferWriter, 1806580287u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { EnemyEnterRestModeClientRpc(sleep, atCamp); } } [ClientRpc] public void EnemyEnterRestModeClientRpc(bool sleep, bool atCamp) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1567928363u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in sleep, default(FastBufferWriter.ForPrimitives)); bufferWriter.WriteValueSafe(in atCamp, default(FastBufferWriter.ForPrimitives)); __endSendClientRpc(ref bufferWriter, 1567928363u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { restingAtCamp = atCamp; if (sleep) { eyesClosed = true; creatureAnimator.SetBool("sleep", value: true); creatureAnimator.SetBool("sit", value: false); } else { eyesClosed = false; creatureAnimator.SetBool("sleep", value: false); creatureAnimator.SetBool("sit", value: true); } } } [ServerRpc] public void EnemyGetUpServerRpc() { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(3614203845u, serverRpcParams, RpcDelivery.Reliable); __endSendServerRpc(ref bufferWriter, 3614203845u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { EnemyGetUpClientRpc(); } } [ClientRpc] public void EnemyGetUpClientRpc() { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1155909339u, clientRpcParams, RpcDelivery.Reliable); __endSendClientRpc(ref bufferWriter, 1155909339u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner) { creatureAnimator.SetBool("sit", value: false); } } } public override void OnDrawGizmos() { if (!debugEnemyAI) { return; } if (currentBehaviourStateIndex == 1) { Gizmos.DrawCube(base.transform.position + Vector3.up * 2f, new Vector3(0.2f, 0.2f, 0.2f)); } else if (scoutingGroup != null) { if (scoutingGroup.leader == this) { Gizmos.DrawSphere(base.transform.position + Vector3.up * 2f, 0.6f); return; } Gizmos.DrawLine(scoutingGroup.leader.transform.position + Vector3.up * 2f, base.transform.position + Vector3.up * 2f); Gizmos.DrawSphere(base.transform.position + Vector3.up * 2f, 0.1f); } } public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot = 0, int noiseID = 0) { if (!base.IsOwner || isEnemyDead) { return; } base.DetectNoise(noisePosition, noiseLoudness, timesPlayedInOneSpot, noiseID); if (Vector3.Distance(noisePosition, base.transform.position + Vector3.up * 0.4f) < 0.75f || noiseID == 1105 || noiseID == 24751) { return; } Debug.Log("Detected noise"); float num = Vector3.Distance(noisePosition, base.transform.position); float num2 = noiseLoudness / num; Debug.Log($"noise relative loudness: {noiseLoudness / num}"); if (eyesClosed) { num2 *= 0.75f; } if (num2 < 0.12f && peekTimer >= 0f && focusLevel > 0) { return; } if (focusLevel >= 3) { if (num > 3f || num2 <= 0.06f) { return; } } else if (focusLevel == 2) { if (num > 25f || num2 <= 0.05f) { return; } } else if (focusLevel == 1 && (num > 40f || num2 <= 0.05f)) { return; } PingBaboonInterest(noisePosition, focusLevel); } private void AnimateLooking(Vector3 lookAtPosition) { headLookTarget.position = Vector3.Lerp(headLookTarget.position, lookAtPosition, 15f * Time.deltaTime); Vector3 position = headLookTarget.position; position.y = base.transform.position.y; if (Vector3.Angle(base.transform.forward, position - base.transform.position) > 30f) { RoundManager.Instance.tempTransform.position = base.transform.position; RoundManager.Instance.tempTransform.LookAt(position); base.transform.rotation = Quaternion.Lerp(base.transform.rotation, RoundManager.Instance.tempTransform.rotation, 4f * Time.deltaTime); base.transform.eulerAngles = new Vector3(0f, base.transform.eulerAngles.y, 0f); } } public override void Update() { base.Update(); if (isEnemyDead) { return; } timeSinceHitting += Time.deltaTime; if (stunNormalizedTimer > 0f || miscAnimationTimer > 0f) { agent.speed = 0f; } creatureAnimator.SetBool("stunned", stunNormalizedTimer > 0f); if (miscAnimationTimer <= 0f) { currentMiscAnimation = -1; } else { miscAnimationTimer -= Time.deltaTime; } CalculateAnimationDirection(2f); timeSinceLastMiscAnimation += Time.deltaTime; timeSincePingingBirdInterest += Time.deltaTime; timeSinceBeingAttackedByPlayer += Time.deltaTime; timeSinceJoiningOrLeavingScoutingGroup += Time.deltaTime; if (debugEnemyAI) { if (focusedThreat != null && focusingOnThreat) { HUDManager.Instance.SetDebugText(string.Format("{0}; {1}; \n Focused threat level: {2}", fearLevel.ToString("0.0"), fearLevelNoDistComparison.ToString("0.0"), focusedThreat.threatLevel)); } else { HUDManager.Instance.SetDebugText(fearLevel.ToString("0.0") + "; " + fearLevelNoDistComparison.ToString("0.0")); } } if (heldScrap != null && !isEnemyDead) { creatureAnimator.SetLayerWeight(1, Mathf.Lerp(creatureAnimator.GetLayerWeight(1), 1f, 12f * Time.deltaTime)); rightArmRig.weight = Mathf.Lerp(rightArmRig.weight, 0f, 12f * Time.deltaTime); leftArmRig.weight = Mathf.Lerp(leftArmRig.weight, 0f, 12f * Time.deltaTime); } else { creatureAnimator.SetLayerWeight(1, Mathf.Lerp(creatureAnimator.GetLayerWeight(1), 0f, 12f * Time.deltaTime)); rightArmRig.weight = Mathf.Lerp(rightArmRig.weight, 1f, 12f * Time.deltaTime); leftArmRig.weight = Mathf.Lerp(leftArmRig.weight, 1f, 12f * Time.deltaTime); } switch (aggressiveMode) { case 0: if (previousAggressiveMode != aggressiveMode) { creatureAnimator.SetBool("aggressiveDisplay", value: false); creatureAnimator.SetBool("fighting", value: false); previousAggressiveMode = aggressiveMode; } if (aggressionAudio.volume <= 0f) { aggressionAudio.Stop(); } else { aggressionAudio.volume = Mathf.Max(aggressionAudio.volume - Time.deltaTime * 5f, 0f); } timeSinceAggressiveDisplay = 0f; break; case 1: if (previousAggressiveMode != aggressiveMode) { creatureAnimator.SetBool("aggressiveDisplay", value: true); creatureAnimator.SetBool("fighting", value: false); RoundManager.PlayRandomClip(creatureVoice, cawScreamSFX, randomize: true, 1f, 1105); WalkieTalkie.TransmitOneShotAudio(creatureVoice, enemyType.audioClips[1]); aggressionAudio.clip = enemyType.audioClips[2]; aggressionAudio.Play(); previousAggressiveMode = aggressiveMode; } timeSinceAggressiveDisplay += Time.deltaTime; aggressionAudio.volume = Mathf.Min(aggressionAudio.volume + Time.deltaTime * 4f, 1f); break; case 2: if (previousAggressiveMode != aggressiveMode) { creatureAnimator.SetBool("fighting", value: true); aggressionAudio.clip = enemyType.audioClips[3]; aggressionAudio.Play(); previousAggressiveMode = aggressiveMode; } timeSinceAggressiveDisplay += Time.deltaTime; aggressionAudio.volume = Mathf.Min(aggressionAudio.volume + Time.deltaTime * 5f, 1f); break; } switch (currentBehaviourStateIndex) { case 0: creatureAnimator.SetBool("sleep", value: false); restingAtCamp = false; eyesClosed = false; focusedThreatTransform = null; break; case 1: focusedThreatTransform = null; break; case 2: if (focusedThreatTransform != null && focusedThreatIsInView) { lookTarget = focusedThreatTransform.position; } timeSpentFocusingOnThreat += Time.deltaTime; timeSinceFighting += Time.deltaTime; break; } } private float GetComfortableDistanceToThreat(Threat focusedThreat) { return Mathf.Min((float)focusedThreat.threatLevel * 6f, 25f); } private void ReactToThreat(Threat closestThreat) { if (Vector3.Distance(closestThreat.lastSeenPosition, baboonCampPosition) < 18f) { closestThreat.interestLevel++; } if (closestThreat != focusedThreat && (focusedThreat == null || focusedThreat.threatLevel <= closestThreat.threatLevel) && closestThreat.distanceToThreat < GetComfortableDistanceToThreat(closestThreat)) { Transform threatTransform = closestThreat.threatScript.GetThreatTransform(); NetworkObject component = threatTransform.gameObject.GetComponent(); if (component == null) { Debug.LogError("Baboon: Error, threat did not contain network object. All objects implementing IVisibleThreat must have a NetworkObject"); return; } Debug.Log("Focusing on new threat: '" + threatTransform.name + "'"); fightTimer = 0f; focusingOnThreat = true; StartFocusOnThreatServerRpc(component); focusedThreat = closestThreat; focusedThreatTransform = closestThreat.threatScript.GetThreatLookTransform(); } } [ServerRpc] public void StartFocusOnThreatServerRpc(NetworkObjectReference netObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(3933590138u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in netObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendServerRpc(ref bufferWriter, 3933590138u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { StartFocusOnThreatClientRpc(netObject); } } [ClientRpc] public void StartFocusOnThreatClientRpc(NetworkObjectReference netObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(991811456u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in netObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendClientRpc(ref bufferWriter, 991811456u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { SwitchToBehaviourStateOnLocalClient(2); if (!netObject.TryGet(out var networkObject)) { Debug.LogError($"Baboon: Error, could not get network object from id for StartFocusOnThreatClientRpc; id: {networkObject.NetworkObjectId}"); return; } if (!networkObject.transform.TryGetComponent(out var component)) { Debug.LogError($"Baboon: Error, threat transform did not contain IVisibleThreat in StartFocusOnThreatClientRpc; id: {networkObject.NetworkObjectId}"); return; } focusingOnThreat = true; focusedThreatTransform = component.GetThreatLookTransform(); } } private float ReactToOtherBaboonSighted(BaboonBirdAI otherBaboon) { float num = 0f; if (otherBaboon.isEnemyDead) { num += 4f; } else if (otherBaboon.currentBehaviourStateIndex != 1 && currentBehaviourStateIndex != 1) { if (otherBaboon.currentBehaviourStateIndex == 2 && otherBaboon.focusedThreatIsInView && otherBaboon.focusedThreatTransform != null) { int pingImportance = 3; if (otherBaboon.fearLevel > 2f || otherBaboon.focusLevel >= 3) { pingImportance = 4; } PingBaboonInterest(otherBaboon.focusedThreatTransform.position, pingImportance); } if (timeSinceJoiningOrLeavingScoutingGroup < 4f || otherBaboon.currentBehaviourStateIndex == 1) { return num; } if (scoutingGroup != null && Time.realtimeSinceStartup - scoutingGroup.timeAtLastCallToGroup < 1f) { return num; } if (scoutingGroup == null || (!scoutingGroup.members.Contains(otherBaboon) && scoutingGroup.leader != otherBaboon)) { if (otherBaboon.scoutingGroup != null) { if (otherBaboon.scoutingGroup.leader.leadershipLevel > biggestBaboon.leadershipLevel) { Debug.Log($"Baboon #{otherBaboon.thisEnemyIndex} higher leadership value than this one; joining other baboon"); biggestBaboon = otherBaboon; } return num; } if (otherBaboon.leadershipLevel > biggestBaboon.leadershipLevel) { Debug.Log("Baboon: seeing other baboon! A"); biggestBaboon = otherBaboon; return num; } } } return num; } private void DoLOSCheck() { Threat threat = null; Threat threat2 = null; float num = 0f; float num2 = 0f; float num3 = 0f; float num4 = 0f; int num5 = Physics.OverlapSphereNonAlloc(eye.position + eye.forward * 38f + eye.up * 8f, 40f, RoundManager.Instance.tempColliderResults, visibleThreatsMask, QueryTriggerInteraction.Collide); biggestBaboon = this; if (scoutingGroup != null && scoutingGroup.leader != null) { biggestBaboon = scoutingGroup.leader; } for (int i = 0; i < num5; i++) { if (RoundManager.Instance.tempColliderResults[i] == ownCollider) { continue; } float num6 = Vector3.Distance(eye.position, RoundManager.Instance.tempColliderResults[i].transform.position); float num7 = Vector3.Angle(RoundManager.Instance.tempColliderResults[i].transform.position - eye.position, eye.forward); if (num6 > 2f && num7 > fov) { Debug.Log($"Baboon #{thisEnemyIndex}; could not see threat, b"); continue; } if (Physics.Linecast(base.transform.position + Vector3.up * 0.7f, RoundManager.Instance.tempColliderResults[i].transform.position + Vector3.up * 0.5f, out var hitInfo, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore)) { if (debugEnemyAI) { Debug.DrawRay(hitInfo.point, Vector3.up * 0.5f, Color.magenta, AIIntervalTime); } continue; } EnemyAICollisionDetect component = RoundManager.Instance.tempColliderResults[i].transform.GetComponent(); if (component != null && component.mainScript.GetType() == typeof(BaboonBirdAI)) { float num8 = ReactToOtherBaboonSighted(component.mainScript as BaboonBirdAI); num3 += num8; num4 += num8; } else { if (!RoundManager.Instance.tempColliderResults[i].transform.TryGetComponent(out var component2)) { continue; } float visibility = component2.GetVisibility(); if (visibility < 1f && (visibility == 0f || (visibility < 0.2f && num6 > 10f) || (visibility < 0.6f && num6 > 20f && num7 > 30f) || (visibility < 0.8f && num6 > 16f && num7 > 80f))) { continue; } if (debugEnemyAI) { Debug.Log($"Baboon hawk: Seeing visible threat: {RoundManager.Instance.tempColliderResults[i].transform.name}; type: {component2.type}"); } if (!threats.TryGetValue(RoundManager.Instance.tempColliderResults[i].transform, out var value)) { value = new Threat(); } else { if (Time.realtimeSinceStartup - value.timeLastSeen < 0.5f) { continue; } value.distanceMovedTowardsBaboon = value.distanceToThreat - num6; } value.type = component2.type; value.timeLastSeen = Time.realtimeSinceStartup; value.lastSeenPosition = RoundManager.Instance.tempColliderResults[i].transform.position + Vector3.up * 0.5f; value.distanceToThreat = num6; value.threatLevel = component2.GetThreatLevel(eye.position); value.threatScript = component2; if (value.distanceMovedTowardsBaboon > 1f) { value.threatLevel++; } else if (Mathf.Abs(value.distanceMovedTowardsBaboon) < 1f || value.distanceMovedTowardsBaboon < -1f) { value.threatLevel--; } value.interestLevel = component2.GetInterestLevel(); float num9 = (float)value.threatLevel / (value.distanceToThreat * 0.2f); if (Vector3.Distance(value.lastSeenPosition, baboonCampPosition) < 9f) { value.interestLevel += 2; num9 *= 0.5f; } if (value.hasAttacked) { value.interestLevel++; num9 = ((scoutingGroup == null || scoutingGroup.members.Count <= 3) ? (num9 + 2f) : (num9 - (float)scoutingGroup.members.Count / 1.5f)); } num3 += num9; num4 += (float)value.threatLevel; if ((float)value.threatLevel < num2) { Debug.Log("Setting '" + RoundManager.Instance.tempColliderResults[i].transform.name + "' to weakest threat"); threat2 = value; num2 = value.threatLevel; } else if (num9 > num) { Debug.Log("Setting '" + RoundManager.Instance.tempColliderResults[i].transform.name + "' to scariest threat"); num = num9; threat = value; } Debug.Log("Adding '" + RoundManager.Instance.tempColliderResults[i].transform.name + "' to threats list"); threats.TryAdd(RoundManager.Instance.tempColliderResults[i].transform, value); } } oddAIInterval = !oddAIInterval; if (oddAIInterval && aggressiveMode != 2 && !eyesClosed && !restingAtCamp) { GrabbableObject grabbableObject = null; int num10 = 0; num5 = Physics.OverlapSphereNonAlloc(eye.position + eye.forward * 28f + eye.up * 6f, 30f, RoundManager.Instance.tempColliderResults, scrapMask, QueryTriggerInteraction.Collide); for (int j = 0; j < num5; j++) { float num11 = Vector3.Angle(RoundManager.Instance.tempColliderResults[j].transform.position - eye.position, eye.forward); float num6 = Vector3.Distance(eye.position, RoundManager.Instance.tempColliderResults[j].transform.position); RaycastHit hitInfo2; if (num6 > 2f && num11 > fov) { Debug.Log($"Baboon #{thisEnemyIndex}; could not see threat, b"); } else if (!Physics.Linecast(base.transform.position + Vector3.up * 0.7f, RoundManager.Instance.tempColliderResults[j].transform.position + Vector3.up * 0.5f, out hitInfo2, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore) && num6 < 20f && (bool)RoundManager.Instance.tempColliderResults[j].gameObject.GetComponent()) { GrabbableObject component3 = RoundManager.Instance.tempColliderResults[j].gameObject.GetComponent(); if (component3.scrapValue > 3 && component3.scrapValue > num10 && CanGrabScrap(component3)) { num10 = component3.scrapValue; grabbableObject = component3; } } } if (grabbableObject != null) { focusedScrap = grabbableObject; } } if (biggestBaboon != this) { JoinScoutingGroup(biggestBaboon); } if (scoutingGroup != null) { num3 -= (float)scoutingGroup.members.Count; num4 -= (float)scoutingGroup.members.Count; } fearLevel = num3 + 1f; fearLevelNoDistComparison = num4; float num12 = 0f; if (focusingOnThreat) { num12 = 2f; } if (fearLevel > num12 && threat != null) { Debug.Log("Reacting to '" + threat.threatScript.GetThreatTransform().name + "' as scariest threat"); ReactToThreat(threat); } else if (fearLevel <= 0f - num12 && threat2 != null) { Debug.Log("Reacting to '" + threat.threatScript.GetThreatTransform().name + "' as WEAKEST threat"); ReactToThreat(threat2); } else { Debug.Log("Got no threat to react to"); } } public void PingBaboonInterest(Vector3 interestPosition, int pingImportance) { if (focusedThreat != null && pingImportance < focusLevel) { Debug.Log($"Baboon bird #{thisEnemyIndex}: Did NOT listen to ping of importance {pingImportance} as focus level is {focusLevel}"); } else if ((pingImportance >= focusLevel || !(timeSincePingingBirdInterest < Mathf.Max(0.6f, (float)focusLevel / 2f))) && (!focusingOnThreat || !(Vector3.Distance(focusedThreat.lastSeenPosition, interestPosition) < 4f))) { timeSincePingingBirdInterest = 0f; Debug.Log($"Baboon bird #{thisEnemyIndex}: Listened to ping of importance {pingImportance} as focus level is {focusLevel}."); peekTimer = 0.7f / (float)Mathf.Max(focusLevel / Mathf.Max(pingImportance, 1), 1); peekTarget = interestPosition; if (currentBehaviourStateIndex == 1) { eyesClosed = false; peekTimer = Mathf.Max(peekTimer, 1.5f); } PingBirdInterestServerRpc(peekTarget, peekTimer); } } [ServerRpc] public void PingBirdInterestServerRpc(Vector3 lookPosition, float timeToPeek) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1670979535u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in lookPosition); bufferWriter.WriteValueSafe(in timeToPeek, default(FastBufferWriter.ForPrimitives)); __endSendServerRpc(ref bufferWriter, 1670979535u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { PingBirdInterestClientRpc(lookPosition, timeToPeek); } } [ClientRpc] public void PingBirdInterestClientRpc(Vector3 lookPosition, float timeToPeek) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(2348332192u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in lookPosition); bufferWriter.WriteValueSafe(in timeToPeek, default(FastBufferWriter.ForPrimitives)); __endSendClientRpc(ref bufferWriter, 2348332192u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner) { peekTimer = timeToPeek; peekTarget = lookPosition; } } } private void JoinScoutingGroup(BaboonBirdAI otherBaboon) { if ((otherBaboon.scoutingGroup == null || otherBaboon.scoutingGroup != scoutingGroup || !otherBaboon.scoutingGroup.members.Contains(this)) && !PathIsIntersectedByLineOfSight(otherBaboon.transform.position, calculatePathDistance: true, avoidLineOfSight: false) && !(Vector3.Distance(base.transform.position, otherBaboon.transform.position) > 56f)) { timeSinceJoiningOrLeavingScoutingGroup = 0f; if (otherBaboon.scoutingGroup != scoutingGroup) { LeaveCurrentScoutingGroup(sync: false); } if (otherBaboon.scoutingGroup == null) { Debug.Log($"Baboon #{thisEnemyIndex}: Joining scouting group; asking leader #{otherBaboon.thisEnemyIndex} to make group"); otherBaboon.StartScoutingGroup(this, syncWithClients: true); } else if (scoutingGroup == null) { Debug.Log($"Baboon #{thisEnemyIndex}: Joining scouting group; leader is baboon #{otherBaboon.thisEnemyIndex}"); scoutingGroup = otherBaboon.scoutingGroup; JoinScoutingGroupServerRpc(otherBaboon.NetworkObject); StartMiscAnimationServerRpc(0); } } } public void StartScoutingGroup(BaboonBirdAI firstMember, bool syncWithClients) { if (scoutingGroup != null) { return; } timeSinceJoiningOrLeavingScoutingGroup = 0f; scoutingGroup = new BaboonHawkGroup(); scoutingGroup.leader = this; scoutingGroup.members.Add(firstMember); firstMember.scoutingGroup = scoutingGroup; scoutingGroup.isEmpty = false; if (syncWithClients) { if (miscAnimationTimer <= 0f) { StartMiscAnimationServerRpc(0); } StartScoutingGroupServerRpc(firstMember.NetworkObject); } } private void LeaveCurrentScoutingGroup(bool sync) { if (scoutingGroup == null) { return; } timeSinceJoiningOrLeavingScoutingGroup = 0f; if (scoutingGroup.members.Contains(this)) { Debug.Log($"Baboon #{thisEnemyIndex} left group that has leader #{scoutingGroup.leader.thisEnemyIndex}"); scoutingGroup.members.Remove(this); if (scoutingGroup.members.Count <= 0) { Debug.Log($"Baboon #{thisEnemyIndex} left group as member, group empty"); scoutingGroup.isEmpty = true; } } else if (scoutingGroup.leader == this) { if (scoutingGroup.members != null && scoutingGroup.members.Count > 0) { int num = -1; int index = -1; for (int i = 0; i < scoutingGroup.members.Count; i++) { if (scoutingGroup.members[i].leadershipLevel > num) { index = i; num = scoutingGroup.members[i].leadershipLevel; } } Debug.Log($"Baboon #{thisEnemyIndex} left group as leader, appointing baboon #{scoutingGroup.members[index].thisEnemyIndex}"); scoutingGroup.leader = scoutingGroup.members[index]; scoutingGroup.members.RemoveAt(index); } else { Debug.Log($"Baboon #{thisEnemyIndex} left group as leader, group empty"); scoutingGroup.isEmpty = true; } } else { Debug.LogError($"Baboon #{thisEnemyIndex}: Scouting group was not null but did not contain me as a member!"); } scoutingGroup = null; Debug.Log($"Scouting group null after setting scouting group to null?: {scoutingGroup == null}"); } [ServerRpc] public void LeaveScoutingGroupServerRpc() { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(2459653399u, serverRpcParams, RpcDelivery.Reliable); __endSendServerRpc(ref bufferWriter, 2459653399u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { LeaveScoutingGroupClientRpc(); } } [ClientRpc] public void LeaveScoutingGroupClientRpc() { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(696889160u, clientRpcParams, RpcDelivery.Reliable); __endSendClientRpc(ref bufferWriter, 696889160u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { LeaveCurrentScoutingGroup(sync: false); } } } [ServerRpc] public void StartScoutingGroupServerRpc(NetworkObjectReference leaderNetworkObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(3367846835u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in leaderNetworkObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendServerRpc(ref bufferWriter, 3367846835u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { StartScoutingGroupClientRpc(leaderNetworkObject); } } [ClientRpc] public void StartScoutingGroupClientRpc(NetworkObjectReference leaderNetworkObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1737299197u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in leaderNetworkObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendClientRpc(ref bufferWriter, 1737299197u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost)) { if (!leaderNetworkObject.TryGet(out var networkObject)) { Debug.LogError($"Baboon enemy #{thisEnemyIndex}: Could not get network object from reference in JoinScoutingGroupClientRpc; {leaderNetworkObject.NetworkObjectId}"); return; } BaboonBirdAI component = networkObject.gameObject.GetComponent(); StartScoutingGroup(component, syncWithClients: false); } } [ServerRpc] public void JoinScoutingGroupServerRpc(NetworkObjectReference otherBaboonNetworkObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1775372234u, serverRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in otherBaboonNetworkObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendServerRpc(ref bufferWriter, 1775372234u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost)) { JoinScoutingGroupClientRpc(otherBaboonNetworkObject); } } [ClientRpc] public void JoinScoutingGroupClientRpc(NetworkObjectReference otherBaboonNetworkObject) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(1078565091u, clientRpcParams, RpcDelivery.Reliable); bufferWriter.WriteValueSafe(in otherBaboonNetworkObject, default(FastBufferWriter.ForNetworkSerializable)); __endSendClientRpc(ref bufferWriter, 1078565091u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage != __RpcExecStage.Client || (!networkManager.IsClient && !networkManager.IsHost)) { return; } if (!otherBaboonNetworkObject.TryGet(out var networkObject)) { Debug.LogError($"Baboon enemy #{thisEnemyIndex}: Could not get network object from reference in JoinScoutingGroupClientRpc; {otherBaboonNetworkObject.NetworkObjectId}"); return; } BaboonBirdAI component = networkObject.gameObject.GetComponent(); if ((component.scoutingGroup != scoutingGroup || !component.scoutingGroup.members.Contains(this)) && component.scoutingGroup != null) { if (component.scoutingGroup != scoutingGroup) { LeaveCurrentScoutingGroup(sync: false); } scoutingGroup = component.scoutingGroup; if (!scoutingGroup.members.Contains(this)) { scoutingGroup.members.Add(this); } } } public void CallToOtherBaboon(BaboonBirdAI otherBaboon) { if (!(timeSinceJoiningOrLeavingScoutingGroup <= 1f)) { if (scoutingGroup != null) { scoutingGroup.timeAtLastCallToGroup = Time.realtimeSinceStartup; } StartMiscAnimation(0); otherBaboon.PingBaboonInterest(base.transform.position, 2); } } private void StartMiscAnimation(int anim) { if (!isEnemyDead && !(timeSinceLastMiscAnimation <= 0.4f)) { timeSinceLastMiscAnimation = 0f; StartMiscAnimationServerRpc(anim); } } [ServerRpc] public void StartMiscAnimationServerRpc(int miscAnimationId) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost)) { if (base.OwnerClientId != networkManager.LocalClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams serverRpcParams = default(ServerRpcParams); FastBufferWriter bufferWriter = __beginSendServerRpc(1580405641u, serverRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, miscAnimationId); __endSendServerRpc(ref bufferWriter, 1580405641u, serverRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && !isEnemyDead && enemyType.miscAnimations.Length > miscAnimationId && !(creatureVoice == null) && (currentMiscAnimation == -1 || enemyType.miscAnimations[currentMiscAnimation].priority <= enemyType.miscAnimations[miscAnimationId].priority)) { StartMiscAnimationClientRpc(miscAnimationId); } } [ClientRpc] public void StartMiscAnimationClientRpc(int miscAnimationId) { NetworkManager networkManager = base.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams clientRpcParams = default(ClientRpcParams); FastBufferWriter bufferWriter = __beginSendClientRpc(3995026000u, clientRpcParams, RpcDelivery.Reliable); BytePacker.WriteValueBitPacked(bufferWriter, miscAnimationId); __endSendClientRpc(ref bufferWriter, 3995026000u, clientRpcParams, RpcDelivery.Reliable); } if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !isEnemyDead && enemyType.miscAnimations.Length > miscAnimationId && !(creatureVoice == null) && (currentMiscAnimation == -1 || enemyType.miscAnimations[currentMiscAnimation].priority <= enemyType.miscAnimations[miscAnimationId].priority)) { currentMiscAnimation = miscAnimationId; miscAnimationTimer = enemyType.miscAnimations[miscAnimationId].AnimLength; if (!inSpecialAnimation || doingKillAnimation) { creatureVoice.pitch = UnityEngine.Random.Range(0.8f, 1.2f); creatureVoice.PlayOneShot(enemyType.miscAnimations[miscAnimationId].AnimVoiceclip, UnityEngine.Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(creatureVoice, enemyType.miscAnimations[miscAnimationId].AnimVoiceclip, 0.7f); creatureAnimator.ResetTrigger(enemyType.miscAnimations[miscAnimationId].AnimString); creatureAnimator.SetTrigger(enemyType.miscAnimations[miscAnimationId].AnimString); } } } private void CalculateAnimationDirection(float maxSpeed = 1f) { agentLocalVelocity = animationContainer.InverseTransformDirection(Vector3.ClampMagnitude(base.transform.position - previousPosition, 1f) / (Time.deltaTime * 2f)); velX = Mathf.Lerp(velX, agentLocalVelocity.x, 10f * Time.deltaTime); creatureAnimator.SetFloat("VelocityX", Mathf.Clamp(velX, 0f - maxSpeed, maxSpeed)); velZ = Mathf.Lerp(velZ, agentLocalVelocity.z, 10f * Time.deltaTime); creatureAnimator.SetFloat("VelocityZ", Mathf.Clamp(velZ, 0f - maxSpeed, maxSpeed)); previousPosition = base.transform.position; } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_BaboonBirdAI() { NetworkManager.__rpc_func_table.Add(3452382367u, __rpc_handler_3452382367); NetworkManager.__rpc_func_table.Add(3856685904u, __rpc_handler_3856685904); NetworkManager.__rpc_func_table.Add(2476579270u, __rpc_handler_2476579270); NetworkManager.__rpc_func_table.Add(3749667856u, __rpc_handler_3749667856); NetworkManager.__rpc_func_table.Add(1418775270u, __rpc_handler_1418775270); NetworkManager.__rpc_func_table.Add(1865475504u, __rpc_handler_1865475504); NetworkManager.__rpc_func_table.Add(869682226u, __rpc_handler_869682226); NetworkManager.__rpc_func_table.Add(1564051222u, __rpc_handler_1564051222); NetworkManager.__rpc_func_table.Add(1546030380u, __rpc_handler_1546030380); NetworkManager.__rpc_func_table.Add(3360048400u, __rpc_handler_3360048400); NetworkManager.__rpc_func_table.Add(443869275u, __rpc_handler_443869275); NetworkManager.__rpc_func_table.Add(1782649174u, __rpc_handler_1782649174); NetworkManager.__rpc_func_table.Add(3428942850u, __rpc_handler_3428942850); NetworkManager.__rpc_func_table.Add(2073937320u, __rpc_handler_2073937320); NetworkManager.__rpc_func_table.Add(1806580287u, __rpc_handler_1806580287); NetworkManager.__rpc_func_table.Add(1567928363u, __rpc_handler_1567928363); NetworkManager.__rpc_func_table.Add(3614203845u, __rpc_handler_3614203845); NetworkManager.__rpc_func_table.Add(1155909339u, __rpc_handler_1155909339); NetworkManager.__rpc_func_table.Add(3933590138u, __rpc_handler_3933590138); NetworkManager.__rpc_func_table.Add(991811456u, __rpc_handler_991811456); NetworkManager.__rpc_func_table.Add(1670979535u, __rpc_handler_1670979535); NetworkManager.__rpc_func_table.Add(2348332192u, __rpc_handler_2348332192); NetworkManager.__rpc_func_table.Add(2459653399u, __rpc_handler_2459653399); NetworkManager.__rpc_func_table.Add(696889160u, __rpc_handler_696889160); NetworkManager.__rpc_func_table.Add(3367846835u, __rpc_handler_3367846835); NetworkManager.__rpc_func_table.Add(1737299197u, __rpc_handler_1737299197); NetworkManager.__rpc_func_table.Add(1775372234u, __rpc_handler_1775372234); NetworkManager.__rpc_func_table.Add(1078565091u, __rpc_handler_1078565091); NetworkManager.__rpc_func_table.Add(1580405641u, __rpc_handler_1580405641); NetworkManager.__rpc_func_table.Add(3995026000u, __rpc_handler_3995026000); } private static void __rpc_handler_3452382367(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { ByteUnpacker.ReadValueBitPacked(reader, out int value); reader.ReadValueSafe(out Vector3 value2); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).SyncInitialValuesServerRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3856685904(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { ByteUnpacker.ReadValueBitPacked(reader, out int value); reader.ReadValueSafe(out Vector3 value2); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).SyncInitialValuesClientRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_2476579270(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).StabPlayerDeathAnimServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3749667856(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).StabPlayerDeathAnimClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1418775270(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } return; } reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); reader.ReadValueSafe(out Vector3 value2); ByteUnpacker.ReadValueBitPacked(reader, out int value3); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).DropScrapServerRpc(value, value2, value3); target.__rpc_exec_stage = __RpcExecStage.None; } private static void __rpc_handler_1865475504(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); reader.ReadValueSafe(out Vector3 value2); ByteUnpacker.ReadValueBitPacked(reader, out int value3); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).DropScrapClientRpc(value, value2, value3); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_869682226(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); ByteUnpacker.ReadValueBitPacked(reader, out int value2); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).GrabScrapServerRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1564051222(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); ByteUnpacker.ReadValueBitPacked(reader, out int value2); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).GrabScrapClientRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1546030380(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).StopFocusingThreatServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3360048400(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).StopFocusingThreatClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_443869275(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).SetAggressiveModeServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1782649174(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).SetAggressiveModeClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3428942850(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).SetThreatInViewServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_2073937320(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).SetThreatInViewClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1806580287(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); reader.ReadValueSafe(out bool value2, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).EnemyEnterRestModeServerRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1567928363(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives)); reader.ReadValueSafe(out bool value2, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).EnemyEnterRestModeClientRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3614203845(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).EnemyGetUpServerRpc(); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1155909339(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).EnemyGetUpClientRpc(); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3933590138(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).StartFocusOnThreatServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_991811456(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).StartFocusOnThreatClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1670979535(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out Vector3 value); reader.ReadValueSafe(out float value2, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).PingBirdInterestServerRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_2348332192(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out Vector3 value); reader.ReadValueSafe(out float value2, default(FastBufferWriter.ForPrimitives)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).PingBirdInterestClientRpc(value, value2); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_2459653399(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).LeaveScoutingGroupServerRpc(); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_696889160(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).LeaveScoutingGroupClientRpc(); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3367846835(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).StartScoutingGroupServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1737299197(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).StartScoutingGroupClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1775372234(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).JoinScoutingGroupServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1078565091(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { reader.ReadValueSafe(out NetworkObjectReference value, default(FastBufferWriter.ForNetworkSerializable)); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).JoinScoutingGroupClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_1580405641(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if (networkManager.LogLevel <= LogLevel.Normal) { Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!"); } } else { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Server; ((BaboonBirdAI)target).StartMiscAnimationServerRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } private static void __rpc_handler_3995026000(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { NetworkManager networkManager = target.NetworkManager; if ((object)networkManager != null && networkManager.IsListening) { ByteUnpacker.ReadValueBitPacked(reader, out int value); target.__rpc_exec_stage = __RpcExecStage.Client; ((BaboonBirdAI)target).StartMiscAnimationClientRpc(value); target.__rpc_exec_stage = __RpcExecStage.None; } } protected internal override string __getTypeName() { return "BaboonBirdAI"; } }