2136 lines
70 KiB
C#
2136 lines
70 KiB
C#
using System;
|
|
using System.Collections;
|
|
using GameNetcodeStuff;
|
|
using Unity.Netcode;
|
|
using UnityEngine;
|
|
using UnityEngine.AI;
|
|
using UnityEngine.Animations.Rigging;
|
|
|
|
public class MaskedPlayerEnemy : EnemyAI
|
|
{
|
|
public SkinnedMeshRenderer rendererLOD0;
|
|
|
|
public SkinnedMeshRenderer rendererLOD1;
|
|
|
|
public SkinnedMeshRenderer rendererLOD2;
|
|
|
|
private Ray enemyRay;
|
|
|
|
private RaycastHit enemyRayHit;
|
|
|
|
private int currentFootstepSurfaceIndex;
|
|
|
|
private int previousFootstepClip;
|
|
|
|
public AudioSource movementAudio;
|
|
|
|
private bool sprinting;
|
|
|
|
private int previousBehaviourState = -1;
|
|
|
|
public float walkCheckInterval;
|
|
|
|
private Vector3 positionLastCheck;
|
|
|
|
private Coroutine teleportCoroutine;
|
|
|
|
public ParticleSystem teleportParticle;
|
|
|
|
public AISearchRoutine searchForPlayers;
|
|
|
|
private Vector3 agentLocalVelocity;
|
|
|
|
private Vector3 previousPosition;
|
|
|
|
private float velX;
|
|
|
|
private float velZ;
|
|
|
|
public Transform animationContainer;
|
|
|
|
private Vector3 currentRandomLookDirection;
|
|
|
|
private Vector3 focusOnPosition;
|
|
|
|
private float verticalLookAngle;
|
|
|
|
private float currentLookAngle;
|
|
|
|
public Transform headTiltTarget;
|
|
|
|
private float lookAtPositionTimer;
|
|
|
|
private float randomLookTimer;
|
|
|
|
private bool lostPlayerInChase;
|
|
|
|
private float lostLOSTimer;
|
|
|
|
private bool running;
|
|
|
|
private bool crouching;
|
|
|
|
[Space(3f)]
|
|
public PlayerControllerB mimickingPlayer;
|
|
|
|
public bool allowSpawningWithoutPlayer;
|
|
|
|
[Space(3f)]
|
|
public Transform lerpTarget;
|
|
|
|
public float turnSpeedMultiplier;
|
|
|
|
public MultiRotationConstraint lookRig1;
|
|
|
|
public MultiRotationConstraint lookRig2;
|
|
|
|
private float stopAndStareTimer;
|
|
|
|
public Transform stareAtTransform;
|
|
|
|
private bool handsOut;
|
|
|
|
private bool inKillAnimation;
|
|
|
|
public bool startingKillAnimationLocalClient;
|
|
|
|
private Coroutine killAnimationCoroutine;
|
|
|
|
private Ray playerRay;
|
|
|
|
public MeshRenderer[] maskEyesGlow;
|
|
|
|
public Light maskEyesGlowLight;
|
|
|
|
public ParticleSystem maskFloodParticle;
|
|
|
|
private PlayerControllerB lastPlayerKilled;
|
|
|
|
private float timeLookingAtLastNoise;
|
|
|
|
private Vector3 shipHidingSpot;
|
|
|
|
private float staminaTimer;
|
|
|
|
private bool runningRandomly;
|
|
|
|
private bool enemyEnabled;
|
|
|
|
public GameObject[] maskTypes;
|
|
|
|
public int maskTypeIndex;
|
|
|
|
private Vector3 mainEntrancePosition;
|
|
|
|
private float timeAtLastUsingEntrance;
|
|
|
|
private float interestInShipCooldown;
|
|
|
|
public override void Start()
|
|
{
|
|
try
|
|
{
|
|
agent = base.gameObject.GetComponentInChildren<NavMeshAgent>();
|
|
skinnedMeshRenderers = base.gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
|
|
meshRenderers = base.gameObject.GetComponentsInChildren<MeshRenderer>();
|
|
if (creatureAnimator == null)
|
|
{
|
|
creatureAnimator = base.gameObject.GetComponentInChildren<Animator>();
|
|
}
|
|
thisNetworkObject = base.gameObject.GetComponentInChildren<NetworkObject>();
|
|
serverPosition = base.transform.position;
|
|
thisEnemyIndex = RoundManager.Instance.numberOfEnemiesInScene;
|
|
RoundManager.Instance.numberOfEnemiesInScene++;
|
|
isOutside = base.transform.position.y > -80f;
|
|
mainEntrancePosition = RoundManager.FindMainEntrancePosition(getTeleportPosition: true, isOutside);
|
|
if (isOutside)
|
|
{
|
|
if (allAINodes == null || allAINodes.Length == 0)
|
|
{
|
|
allAINodes = GameObject.FindGameObjectsWithTag("OutsideAINode");
|
|
}
|
|
if (GameNetworkManager.Instance.localPlayerController != null)
|
|
{
|
|
EnableEnemyMesh(!StartOfRound.Instance.hangarDoorsClosed || !GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom);
|
|
}
|
|
}
|
|
else if (allAINodes == null || allAINodes.Length == 0)
|
|
{
|
|
allAINodes = GameObject.FindGameObjectsWithTag("AINode");
|
|
}
|
|
path1 = new NavMeshPath();
|
|
openDoorSpeedMultiplier = enemyType.doorSpeedMultiplier;
|
|
if (base.IsOwner)
|
|
{
|
|
SyncPositionToClients();
|
|
}
|
|
else
|
|
{
|
|
SetClientCalculatingAI(enable: false);
|
|
}
|
|
}
|
|
catch (Exception arg)
|
|
{
|
|
Debug.LogError($"Error when initializing enemy variables for {base.gameObject.name} : {arg}");
|
|
}
|
|
lerpTarget.SetParent(RoundManager.Instance.mapPropsContainer.transform);
|
|
enemyRayHit = default(RaycastHit);
|
|
addPlayerVelocityToDestination = 3f;
|
|
if (base.IsServer && mimickingPlayer == null)
|
|
{
|
|
SetEnemyAsHavingNoPlayerServerRpc();
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void SetEnemyAsHavingNoPlayerServerRpc()
|
|
{
|
|
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(3110137062u, serverRpcParams, RpcDelivery.Reliable);
|
|
__endSendServerRpc(ref bufferWriter, 3110137062u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
SetEnemyAsHavingNoPlayerClientRpc();
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void SetEnemyAsHavingNoPlayerClientRpc()
|
|
{
|
|
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(1038760037u, clientRpcParams, RpcDelivery.Reliable);
|
|
__endSendClientRpc(ref bufferWriter, 1038760037u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
allowSpawningWithoutPlayer = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
SetVisibilityOfMaskedEnemy();
|
|
}
|
|
|
|
private void LookAndRunRandomly(bool canStartRunning = false, bool onlySetRunning = false)
|
|
{
|
|
randomLookTimer -= AIIntervalTime;
|
|
if (!runningRandomly && !running)
|
|
{
|
|
staminaTimer = Mathf.Min(6f, staminaTimer + AIIntervalTime);
|
|
}
|
|
else
|
|
{
|
|
staminaTimer = Mathf.Max(0f, staminaTimer - AIIntervalTime);
|
|
}
|
|
if (!(randomLookTimer <= 0f))
|
|
{
|
|
return;
|
|
}
|
|
randomLookTimer = UnityEngine.Random.Range(0.7f, 5f);
|
|
if (!runningRandomly)
|
|
{
|
|
int num = ((!isOutside) ? 20 : 35);
|
|
if (onlySetRunning)
|
|
{
|
|
num /= 3;
|
|
}
|
|
if (staminaTimer >= 5f && UnityEngine.Random.Range(0, 100) < num)
|
|
{
|
|
running = true;
|
|
runningRandomly = true;
|
|
creatureAnimator.SetBool("Running", value: true);
|
|
SetRunningServerRpc(running: true);
|
|
}
|
|
else if (!onlySetRunning)
|
|
{
|
|
Vector3 onUnitSphere = UnityEngine.Random.onUnitSphere;
|
|
float y = 0f;
|
|
if (Physics.Raycast(eye.position, onUnitSphere, 5f, StartOfRound.Instance.collidersRoomMaskDefaultAndPlayers))
|
|
{
|
|
y = RoundManager.Instance.YRotationThatFacesTheFarthestFromPosition(eye.position, 12f, 5);
|
|
}
|
|
onUnitSphere.y = y;
|
|
LookAtDirectionServerRpc(onUnitSphere, UnityEngine.Random.Range(0.25f, 2f), UnityEngine.Random.Range(-60f, 60f));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num2 = ((!isOutside) ? 30 : 80);
|
|
if (onlySetRunning)
|
|
{
|
|
num2 /= 5;
|
|
}
|
|
if (UnityEngine.Random.Range(0, 100) > num2 || staminaTimer <= 0f)
|
|
{
|
|
running = false;
|
|
runningRandomly = false;
|
|
staminaTimer = -6f;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
SetRunningServerRpc(running: false);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TeleportMaskedEnemyAndSync(Vector3 pos, bool setOutside)
|
|
{
|
|
if (base.IsOwner)
|
|
{
|
|
TeleportMaskedEnemy(pos, setOutside);
|
|
TeleportMaskedEnemyServerRpc(pos, setOutside);
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void TeleportMaskedEnemyServerRpc(Vector3 pos, bool setOutside)
|
|
{
|
|
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(657232826u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in pos);
|
|
bufferWriter.WriteValueSafe(in setOutside, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 657232826u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
TeleportMaskedEnemyClientRpc(pos, setOutside);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void TeleportMaskedEnemyClientRpc(Vector3 pos, bool setOutside)
|
|
{
|
|
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(2539470808u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in pos);
|
|
bufferWriter.WriteValueSafe(in setOutside, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 2539470808u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsOwner)
|
|
{
|
|
TeleportMaskedEnemy(pos, setOutside);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TeleportMaskedEnemy(Vector3 pos, bool setOutside)
|
|
{
|
|
timeAtLastUsingEntrance = Time.realtimeSinceStartup;
|
|
Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(pos);
|
|
if (base.IsOwner)
|
|
{
|
|
agent.enabled = false;
|
|
base.transform.position = navMeshPosition;
|
|
agent.enabled = true;
|
|
}
|
|
else
|
|
{
|
|
base.transform.position = navMeshPosition;
|
|
}
|
|
serverPosition = navMeshPosition;
|
|
SetEnemyOutside(setOutside);
|
|
EntranceTeleport entranceTeleport = RoundManager.FindMainEntranceScript(setOutside);
|
|
if (entranceTeleport.doorAudios != null && entranceTeleport.doorAudios.Length != 0)
|
|
{
|
|
entranceTeleport.entrancePointAudio.PlayOneShot(entranceTeleport.doorAudios[0]);
|
|
WalkieTalkie.TransmitOneShotAudio(entranceTeleport.entrancePointAudio, entranceTeleport.doorAudios[0]);
|
|
}
|
|
}
|
|
|
|
public override void DoAIInterval()
|
|
{
|
|
base.DoAIInterval();
|
|
if (isEnemyDead)
|
|
{
|
|
agent.speed = 0f;
|
|
return;
|
|
}
|
|
PlayerControllerB playerControllerB = null;
|
|
switch (currentBehaviourStateIndex)
|
|
{
|
|
case 0:
|
|
LookAndRunRandomly(canStartRunning: true);
|
|
if (Time.realtimeSinceStartup - timeAtLastUsingEntrance > 3f && !GetClosestPlayer() && !PathIsIntersectedByLineOfSight(mainEntrancePosition, calculatePathDistance: false, avoidLineOfSight: false))
|
|
{
|
|
if (Vector3.Distance(base.transform.position, mainEntrancePosition) < 1f)
|
|
{
|
|
TeleportMaskedEnemyAndSync(RoundManager.FindMainEntrancePosition(getTeleportPosition: true, !isOutside), !isOutside);
|
|
return;
|
|
}
|
|
if (searchForPlayers.inProgress)
|
|
{
|
|
StopSearch(searchForPlayers);
|
|
}
|
|
SetDestinationToPosition(mainEntrancePosition);
|
|
return;
|
|
}
|
|
if (!searchForPlayers.inProgress)
|
|
{
|
|
StartSearch(base.transform.position, searchForPlayers);
|
|
}
|
|
playerControllerB = CheckLineOfSightForClosestPlayer();
|
|
if (playerControllerB != null)
|
|
{
|
|
LookAtPlayerServerRpc((int)playerControllerB.playerClientId);
|
|
SetMovingTowardsTargetPlayer(playerControllerB);
|
|
SwitchToBehaviourState(1);
|
|
break;
|
|
}
|
|
interestInShipCooldown += AIIntervalTime;
|
|
if (interestInShipCooldown >= 17f && Vector3.Distance(base.transform.position, StartOfRound.Instance.elevatorTransform.position) < 22f)
|
|
{
|
|
SwitchToBehaviourState(2);
|
|
}
|
|
break;
|
|
case 1:
|
|
LookAndRunRandomly(canStartRunning: true, onlySetRunning: true);
|
|
playerControllerB = CheckLineOfSightForClosestPlayer(70f, 50, 1, 3f);
|
|
if (playerControllerB != null)
|
|
{
|
|
lostPlayerInChase = false;
|
|
lostLOSTimer = 0f;
|
|
if (playerControllerB != targetPlayer)
|
|
{
|
|
SetMovingTowardsTargetPlayer(playerControllerB);
|
|
LookAtPlayerServerRpc((int)playerControllerB.playerClientId);
|
|
}
|
|
if (mostOptimalDistance > 17f)
|
|
{
|
|
if (handsOut)
|
|
{
|
|
handsOut = false;
|
|
SetHandsOutServerRpc(setOut: false);
|
|
}
|
|
if (!running)
|
|
{
|
|
running = true;
|
|
creatureAnimator.SetBool("Running", value: true);
|
|
Debug.Log(string.Format("Setting running to true 8; {0}", creatureAnimator.GetBool("Running")));
|
|
SetRunningServerRpc(running: true);
|
|
}
|
|
}
|
|
else if (mostOptimalDistance < 6f)
|
|
{
|
|
if (!handsOut)
|
|
{
|
|
handsOut = true;
|
|
SetHandsOutServerRpc(setOut: true);
|
|
}
|
|
}
|
|
else if (mostOptimalDistance < 12f)
|
|
{
|
|
if (handsOut)
|
|
{
|
|
handsOut = false;
|
|
SetHandsOutServerRpc(setOut: false);
|
|
}
|
|
if (running && !runningRandomly)
|
|
{
|
|
running = false;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
Debug.Log(string.Format("Setting running to false 1; {0}", creatureAnimator.GetBool("Running")));
|
|
SetRunningServerRpc(running: false);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
lostLOSTimer += AIIntervalTime;
|
|
if (lostLOSTimer > 10f)
|
|
{
|
|
SwitchToBehaviourState(0);
|
|
targetPlayer = null;
|
|
}
|
|
else if (lostLOSTimer > 3.5f)
|
|
{
|
|
lostPlayerInChase = true;
|
|
StopLookingAtTransformServerRpc();
|
|
targetPlayer = null;
|
|
if (running)
|
|
{
|
|
running = false;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
Debug.Log(string.Format("Setting running to false 2; {0}", creatureAnimator.GetBool("Running")));
|
|
SetRunningServerRpc(running: false);
|
|
}
|
|
if (handsOut)
|
|
{
|
|
handsOut = false;
|
|
SetHandsOutServerRpc(setOut: false);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
if (!isInsidePlayerShip)
|
|
{
|
|
interestInShipCooldown -= AIIntervalTime;
|
|
}
|
|
if (Vector3.Distance(base.transform.position, StartOfRound.Instance.insideShipPositions[0].position) > 27f || interestInShipCooldown <= 0f)
|
|
{
|
|
SwitchToBehaviourState(0);
|
|
break;
|
|
}
|
|
PlayerControllerB closestPlayer = GetClosestPlayer();
|
|
if (closestPlayer != null)
|
|
{
|
|
PlayerControllerB playerControllerB2 = CheckLineOfSightForClosestPlayer(70f, 20, 0);
|
|
if (playerControllerB2 != null)
|
|
{
|
|
if (stareAtTransform != playerControllerB2.gameplayCamera.transform)
|
|
{
|
|
LookAtPlayerServerRpc((int)playerControllerB2.playerClientId);
|
|
}
|
|
SetMovingTowardsTargetPlayer(playerControllerB2);
|
|
SwitchToBehaviourState(1);
|
|
}
|
|
else if (isInsidePlayerShip && closestPlayer.HasLineOfSightToPosition(base.transform.position + Vector3.up * 0.7f, 4f, 20))
|
|
{
|
|
if (stareAtTransform != closestPlayer.gameplayCamera.transform)
|
|
{
|
|
LookAtPlayerServerRpc((int)closestPlayer.playerClientId);
|
|
}
|
|
SetMovingTowardsTargetPlayer(closestPlayer);
|
|
SwitchToBehaviourState(1);
|
|
}
|
|
else if (mostOptimalDistance < 6f)
|
|
{
|
|
if (stareAtTransform != closestPlayer.gameplayCamera.transform)
|
|
{
|
|
stareAtTransform = closestPlayer.gameplayCamera.transform;
|
|
LookAtPlayerServerRpc((int)closestPlayer.playerClientId);
|
|
}
|
|
}
|
|
else if (mostOptimalDistance > 12f && stareAtTransform != null)
|
|
{
|
|
stareAtTransform = null;
|
|
StopLookingAtTransformServerRpc();
|
|
}
|
|
}
|
|
SetDestinationToPosition(shipHidingSpot);
|
|
if (!crouching && Vector3.Distance(base.transform.position, shipHidingSpot) < 0.4f)
|
|
{
|
|
agent.speed = 0f;
|
|
crouching = true;
|
|
SetCrouchingServerRpc(setOut: true);
|
|
}
|
|
else if (crouching && Vector3.Distance(base.transform.position, shipHidingSpot) > 1f)
|
|
{
|
|
crouching = false;
|
|
SetCrouchingServerRpc(setOut: false);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!(targetPlayer != null) || !PlayerIsTargetable(targetPlayer) || (currentBehaviourStateIndex != 1 && currentBehaviourStateIndex != 2))
|
|
{
|
|
return;
|
|
}
|
|
if (lostPlayerInChase)
|
|
{
|
|
movingTowardsTargetPlayer = false;
|
|
if (!searchForPlayers.inProgress)
|
|
{
|
|
StartSearch(base.transform.position, searchForPlayers);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (searchForPlayers.inProgress)
|
|
{
|
|
StopSearch(searchForPlayers);
|
|
}
|
|
SetMovingTowardsTargetPlayer(targetPlayer);
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void LookAtDirectionServerRpc(Vector3 dir, float time, float vertLookAngle)
|
|
{
|
|
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(2502006210u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in dir);
|
|
bufferWriter.WriteValueSafe(in time, default(FastBufferWriter.ForPrimitives));
|
|
bufferWriter.WriteValueSafe(in vertLookAngle, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 2502006210u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
LookAtDirectionClientRpc(dir, time, vertLookAngle);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void LookAtDirectionClientRpc(Vector3 dir, float time, float vertLookAngle)
|
|
{
|
|
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(3625708449u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in dir);
|
|
bufferWriter.WriteValueSafe(in time, default(FastBufferWriter.ForPrimitives));
|
|
bufferWriter.WriteValueSafe(in vertLookAngle, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 3625708449u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
LookAtDirection(dir, time, vertLookAngle);
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void LookAtPositionServerRpc(Vector3 pos, float time)
|
|
{
|
|
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(675153417u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in pos);
|
|
bufferWriter.WriteValueSafe(in time, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 675153417u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
LookAtPositionClientRpc(pos, time);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void LookAtPositionClientRpc(Vector3 pos, float time)
|
|
{
|
|
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(432295350u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in pos);
|
|
bufferWriter.WriteValueSafe(in time, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 432295350u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
LookAtPosition(pos, time);
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void LookAtPlayerServerRpc(int playerId)
|
|
{
|
|
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(1141953697u, serverRpcParams, RpcDelivery.Reliable);
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
|
|
__endSendServerRpc(ref bufferWriter, 1141953697u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
LookAtPlayerClientRpc(playerId);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void LookAtPlayerClientRpc(int playerId)
|
|
{
|
|
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(2397761797u, clientRpcParams, RpcDelivery.Reliable);
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
|
|
__endSendClientRpc(ref bufferWriter, 2397761797u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
stareAtTransform = StartOfRound.Instance.allPlayerScripts[playerId].gameplayCamera.transform;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void StopLookingAtTransformServerRpc()
|
|
{
|
|
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(1407409549u, serverRpcParams, RpcDelivery.Reliable);
|
|
__endSendServerRpc(ref bufferWriter, 1407409549u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
StopLookingAtTransformClientRpc();
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void StopLookingAtTransformClientRpc()
|
|
{
|
|
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(1561581057u, clientRpcParams, RpcDelivery.Reliable);
|
|
__endSendClientRpc(ref bufferWriter, 1561581057u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
stareAtTransform = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void SetHandsOutServerRpc(bool setOut)
|
|
{
|
|
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(519961256u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in setOut, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 519961256u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
SetHandsOutClientRpc(setOut);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void SetHandsOutClientRpc(bool setOut)
|
|
{
|
|
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(222504553u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in setOut, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 222504553u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
handsOut = setOut;
|
|
creatureAnimator.SetBool("HandsOut", setOut);
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void SetCrouchingServerRpc(bool setOut)
|
|
{
|
|
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(2560207573u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in setOut, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 2560207573u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
SetCrouchingClientRpc(setOut);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void SetCrouchingClientRpc(bool setCrouch)
|
|
{
|
|
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(1162325818u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in setCrouch, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 1162325818u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
crouching = setCrouch;
|
|
creatureAnimator.SetBool("Crouching", setCrouch);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void LookAtFocusedPosition()
|
|
{
|
|
if (inSpecialAnimation)
|
|
{
|
|
verticalLookAngle = Mathf.Lerp(verticalLookAngle, 0f, 10f * Time.deltaTime);
|
|
currentLookAngle = Mathf.Lerp(currentLookAngle, verticalLookAngle, 7f);
|
|
headTiltTarget.localEulerAngles = new Vector3(currentLookAngle, 0f, 0f);
|
|
return;
|
|
}
|
|
if (lookAtPositionTimer <= 0f)
|
|
{
|
|
if (stareAtTransform != null)
|
|
{
|
|
if (!(Vector3.Distance(stareAtTransform.position, base.transform.position) > 80f))
|
|
{
|
|
agent.angularSpeed = 0f;
|
|
RoundManager.Instance.tempTransform.position = base.transform.position;
|
|
RoundManager.Instance.tempTransform.LookAt(stareAtTransform);
|
|
base.transform.rotation = Quaternion.Lerp(base.transform.rotation, RoundManager.Instance.tempTransform.rotation, turnSpeedMultiplier * Time.deltaTime);
|
|
base.transform.eulerAngles = new Vector3(0f, base.transform.eulerAngles.y, 0f);
|
|
headTiltTarget.LookAt(stareAtTransform);
|
|
headTiltTarget.localEulerAngles = new Vector3(headTiltTarget.localEulerAngles.x, 0f, 0f);
|
|
}
|
|
return;
|
|
}
|
|
agent.angularSpeed = 450f;
|
|
verticalLookAngle = Mathf.Clamp(verticalLookAngle, -30f, 10f);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log($"Looking at focused position {focusOnPosition}");
|
|
agent.angularSpeed = 0f;
|
|
lookAtPositionTimer -= Time.deltaTime;
|
|
RoundManager.Instance.tempTransform.position = base.transform.position;
|
|
RoundManager.Instance.tempTransform.LookAt(focusOnPosition);
|
|
base.transform.rotation = Quaternion.Lerp(base.transform.rotation, RoundManager.Instance.tempTransform.rotation, turnSpeedMultiplier * Time.deltaTime);
|
|
base.transform.eulerAngles = new Vector3(0f, base.transform.eulerAngles.y, 0f);
|
|
verticalLookAngle = Mathf.Clamp(verticalLookAngle + UnityEngine.Random.Range(-3f * Time.deltaTime, 3f * Time.deltaTime), -70f, 70f);
|
|
}
|
|
currentLookAngle = Mathf.Lerp(currentLookAngle, verticalLookAngle, 7f);
|
|
headTiltTarget.localEulerAngles = new Vector3(currentLookAngle, 0f, 0f);
|
|
}
|
|
|
|
public void LookAtDirection(Vector3 direction, float lookAtTime = 1f, float vertLookAngle = 0f)
|
|
{
|
|
verticalLookAngle = vertLookAngle;
|
|
direction = Vector3.Normalize(direction * 100f);
|
|
focusOnPosition = base.transform.position + direction * 1000f;
|
|
lookAtPositionTimer = lookAtTime;
|
|
}
|
|
|
|
public void LookAtPosition(Vector3 pos, float lookAtTime = 1f)
|
|
{
|
|
Debug.Log($"Look at position {pos} called! lookatpositiontimer setting to {lookAtTime}");
|
|
focusOnPosition = pos;
|
|
lookAtPositionTimer = lookAtTime;
|
|
float num = Vector3.Angle(base.transform.forward, pos - base.transform.position);
|
|
if (pos.y - headTiltTarget.position.y < 0f)
|
|
{
|
|
num *= -1f;
|
|
}
|
|
verticalLookAngle = num;
|
|
}
|
|
|
|
[ServerRpc]
|
|
public void SetRunningServerRpc(bool running)
|
|
{
|
|
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(3309468324u, serverRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in running, default(FastBufferWriter.ForPrimitives));
|
|
__endSendServerRpc(ref bufferWriter, 3309468324u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
SetRunningClientRpc(running);
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void SetRunningClientRpc(bool setRunning)
|
|
{
|
|
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(3512011720u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in setRunning, default(FastBufferWriter.ForPrimitives));
|
|
__endSendClientRpc(ref bufferWriter, 3512011720u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
running = setRunning;
|
|
creatureAnimator.SetBool("Running", setRunning);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void CalculateAnimationDirection(float maxSpeed = 1f)
|
|
{
|
|
creatureAnimator.SetBool("IsMoving", Vector3.Distance(base.transform.position, previousPosition) > 0f);
|
|
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;
|
|
}
|
|
|
|
public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot = 0, int noiseID = 0)
|
|
{
|
|
base.DetectNoise(noisePosition, noiseLoudness, timesPlayedInOneSpot, noiseID);
|
|
if (!base.IsOwner || isEnemyDead || inSpecialAnimation)
|
|
{
|
|
return;
|
|
}
|
|
if (Vector3.Distance(noisePosition, base.transform.position + Vector3.up * 0.4f) < 0.75f)
|
|
{
|
|
Debug.Log("Can't hear noise reason A");
|
|
return;
|
|
}
|
|
if (handsOut || (stareAtTransform != null && Vector3.Distance(noisePosition, stareAtTransform.position) < 2f))
|
|
{
|
|
Debug.Log("Can't hear noise reason B");
|
|
return;
|
|
}
|
|
float num = Vector3.Distance(noisePosition, base.transform.position);
|
|
float num2 = noiseLoudness / num;
|
|
Debug.Log($"Noise heard relative loudness: {num2}");
|
|
if (!(num2 < 0.12f) && !(Time.realtimeSinceStartup - timeLookingAtLastNoise < 3f))
|
|
{
|
|
timeLookingAtLastNoise = Time.realtimeSinceStartup;
|
|
LookAtPositionServerRpc(noisePosition, Mathf.Min(num2 * 6f, 2f));
|
|
}
|
|
}
|
|
|
|
public void LateUpdate()
|
|
{
|
|
if (!(stunNormalizedTimer >= 0f) && !isEnemyDead)
|
|
{
|
|
LookAtFocusedPosition();
|
|
}
|
|
}
|
|
|
|
public void SetVisibilityOfMaskedEnemy()
|
|
{
|
|
if (allowSpawningWithoutPlayer)
|
|
{
|
|
if (mimickingPlayer != null && mimickingPlayer.deadBody != null && !mimickingPlayer.deadBody.deactivated)
|
|
{
|
|
if (enemyEnabled)
|
|
{
|
|
enemyEnabled = false;
|
|
EnableEnemyMesh(enable: false);
|
|
}
|
|
}
|
|
else if (!enemyEnabled)
|
|
{
|
|
enemyEnabled = true;
|
|
EnableEnemyMesh(enable: true);
|
|
}
|
|
}
|
|
else if (mimickingPlayer == null || (mimickingPlayer.deadBody != null && !mimickingPlayer.deadBody.deactivated))
|
|
{
|
|
if (enemyEnabled)
|
|
{
|
|
enemyEnabled = false;
|
|
EnableEnemyMesh(enable: false);
|
|
}
|
|
}
|
|
else if (!enemyEnabled)
|
|
{
|
|
enemyEnabled = true;
|
|
EnableEnemyMesh(enable: true);
|
|
}
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
base.Update();
|
|
CalculateAnimationDirection();
|
|
SetVisibilityOfMaskedEnemy();
|
|
if (isEnemyDead)
|
|
{
|
|
agent.speed = 0f;
|
|
if (inSpecialAnimation)
|
|
{
|
|
FinishKillAnimation();
|
|
}
|
|
return;
|
|
}
|
|
if (lastPlayerKilled != null && lastPlayerKilled.deadBody != null && !lastPlayerKilled.deadBody.deactivated)
|
|
{
|
|
Debug.Log($"Deactivating body of killed player! {lastPlayerKilled.playerClientId}; {isEnemyDead}");
|
|
lastPlayerKilled.deadBody.DeactivateBody(setActive: false);
|
|
lastPlayerKilled = null;
|
|
}
|
|
if (!enemyEnabled)
|
|
{
|
|
return;
|
|
}
|
|
if (ventAnimationFinished)
|
|
{
|
|
lookRig1.weight = 0.452f;
|
|
lookRig2.weight = 1f;
|
|
creatureAnimator.SetBool("Stunned", stunNormalizedTimer >= 0f);
|
|
if (stunNormalizedTimer >= 0f)
|
|
{
|
|
agent.speed = 0f;
|
|
if (base.IsOwner && searchForPlayers.inProgress)
|
|
{
|
|
StopSearch(searchForPlayers);
|
|
}
|
|
if (inSpecialAnimation)
|
|
{
|
|
FinishKillAnimation();
|
|
}
|
|
}
|
|
if (inSpecialAnimation)
|
|
{
|
|
return;
|
|
}
|
|
if (walkCheckInterval <= 0f)
|
|
{
|
|
walkCheckInterval = 0.1f;
|
|
positionLastCheck = base.transform.position;
|
|
}
|
|
else
|
|
{
|
|
walkCheckInterval -= Time.deltaTime;
|
|
}
|
|
switch (currentBehaviourStateIndex)
|
|
{
|
|
case 0:
|
|
if (previousBehaviourState != currentBehaviourStateIndex)
|
|
{
|
|
stareAtTransform = null;
|
|
running = false;
|
|
runningRandomly = false;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
handsOut = false;
|
|
creatureAnimator.SetBool("HandsOut", value: false);
|
|
crouching = false;
|
|
creatureAnimator.SetBool("Crouching", value: false);
|
|
previousBehaviourState = currentBehaviourStateIndex;
|
|
}
|
|
if (running || runningRandomly)
|
|
{
|
|
agent.speed = 7f;
|
|
}
|
|
else
|
|
{
|
|
agent.speed = 3.8f;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (previousBehaviourState != currentBehaviourStateIndex)
|
|
{
|
|
lookAtPositionTimer = 0f;
|
|
if (previousBehaviourState == 0)
|
|
{
|
|
stopAndStareTimer = UnityEngine.Random.Range(2f, 5f);
|
|
}
|
|
runningRandomly = false;
|
|
running = false;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
crouching = false;
|
|
creatureAnimator.SetBool("Crouching", value: false);
|
|
previousBehaviourState = currentBehaviourStateIndex;
|
|
}
|
|
if (!base.IsOwner)
|
|
{
|
|
break;
|
|
}
|
|
stopAndStareTimer -= Time.deltaTime;
|
|
if (stopAndStareTimer >= 0f)
|
|
{
|
|
agent.speed = 0f;
|
|
break;
|
|
}
|
|
if (stopAndStareTimer <= -5f)
|
|
{
|
|
stopAndStareTimer = UnityEngine.Random.Range(0f, 3f);
|
|
}
|
|
if (running || runningRandomly)
|
|
{
|
|
agent.speed = 8f;
|
|
}
|
|
else
|
|
{
|
|
agent.speed = 3.8f;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (previousBehaviourState != currentBehaviourStateIndex)
|
|
{
|
|
movingTowardsTargetPlayer = false;
|
|
interestInShipCooldown = 17f;
|
|
agent.speed = 5f;
|
|
runningRandomly = false;
|
|
running = false;
|
|
creatureAnimator.SetBool("Running", value: false);
|
|
handsOut = false;
|
|
creatureAnimator.SetBool("HandsOut", value: false);
|
|
if (base.IsOwner)
|
|
{
|
|
ChooseShipHidingSpot();
|
|
}
|
|
previousBehaviourState = currentBehaviourStateIndex;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lookRig1.weight = 0f;
|
|
lookRig2.weight = 0f;
|
|
}
|
|
}
|
|
|
|
private void ChooseShipHidingSpot()
|
|
{
|
|
bool flag = false;
|
|
for (int i = 0; i < StartOfRound.Instance.insideShipPositions.Length; i++)
|
|
{
|
|
if (Physics.Linecast(StartOfRound.Instance.shipDoorAudioSource.transform.position, StartOfRound.Instance.insideShipPositions[i].position, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore) && SetDestinationToPosition(StartOfRound.Instance.insideShipPositions[i].position, checkForPath: true))
|
|
{
|
|
flag = true;
|
|
shipHidingSpot = destination;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
shipHidingSpot = StartOfRound.Instance.insideShipPositions[UnityEngine.Random.Range(0, StartOfRound.Instance.insideShipPositions.Length)].position;
|
|
}
|
|
}
|
|
|
|
public override void ShipTeleportEnemy()
|
|
{
|
|
base.ShipTeleportEnemy();
|
|
if (teleportCoroutine != null)
|
|
{
|
|
StopCoroutine(teleportCoroutine);
|
|
}
|
|
StartCoroutine(teleportMasked());
|
|
}
|
|
|
|
private IEnumerator teleportMasked()
|
|
{
|
|
teleportParticle.Play();
|
|
movementAudio.PlayOneShot(UnityEngine.Object.FindObjectOfType<ShipTeleporter>().beamUpPlayerBodySFX);
|
|
yield return new WaitForSeconds(3f);
|
|
if (StartOfRound.Instance.shipIsLeaving)
|
|
{
|
|
yield break;
|
|
}
|
|
SetEnemyOutside(outside: true);
|
|
isInsidePlayerShip = true;
|
|
ShipTeleporter[] array = UnityEngine.Object.FindObjectsOfType<ShipTeleporter>();
|
|
ShipTeleporter shipTeleporter = null;
|
|
if (array != null)
|
|
{
|
|
for (int i = 0; i < array.Length; i++)
|
|
{
|
|
if (!array[i].isInverseTeleporter)
|
|
{
|
|
shipTeleporter = array[i];
|
|
}
|
|
}
|
|
}
|
|
if (shipTeleporter != null)
|
|
{
|
|
if (base.IsOwner)
|
|
{
|
|
agent.enabled = false;
|
|
base.transform.position = shipTeleporter.teleporterPosition.position;
|
|
agent.enabled = true;
|
|
isInsidePlayerShip = true;
|
|
}
|
|
serverPosition = shipTeleporter.teleporterPosition.position;
|
|
}
|
|
}
|
|
|
|
public void SetEnemyOutside(bool outside = false)
|
|
{
|
|
isOutside = outside;
|
|
mainEntrancePosition = RoundManager.FindMainEntrancePosition(getTeleportPosition: true, isOutside);
|
|
if (outside)
|
|
{
|
|
allAINodes = GameObject.FindGameObjectsWithTag("OutsideAINode");
|
|
}
|
|
else
|
|
{
|
|
allAINodes = GameObject.FindGameObjectsWithTag("AINode");
|
|
}
|
|
if (searchForPlayers.inProgress)
|
|
{
|
|
StopSearch(searchForPlayers);
|
|
}
|
|
}
|
|
|
|
public override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
}
|
|
|
|
public override void KillEnemy(bool destroy = false)
|
|
{
|
|
base.KillEnemy(destroy);
|
|
creatureAnimator.SetBool("Stunned", value: false);
|
|
creatureAnimator.SetBool("Dead", value: true);
|
|
}
|
|
|
|
public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false)
|
|
{
|
|
base.HitEnemy(force, playerWhoHit, playHitSFX);
|
|
enemyHP -= force;
|
|
stunNormalizedTimer = 0.5f;
|
|
creatureAnimator.SetTrigger("HitEnemy");
|
|
stopAndStareTimer = 0f;
|
|
if (((float)UnityEngine.Random.Range(0, 100) < 40f || enemyHP == 1) && !running)
|
|
{
|
|
running = true;
|
|
runningRandomly = true;
|
|
creatureAnimator.SetBool("Running", value: true);
|
|
SetRunningServerRpc(running: true);
|
|
staminaTimer = 5f;
|
|
}
|
|
if (enemyHP <= 0)
|
|
{
|
|
KillEnemyOnOwnerClient();
|
|
}
|
|
}
|
|
|
|
public override void OnCollideWithPlayer(Collider other)
|
|
{
|
|
base.OnCollideWithPlayer(other);
|
|
if (!(stunNormalizedTimer >= 0f) && !isEnemyDead && !(Time.realtimeSinceStartup - timeAtLastUsingEntrance < 1.75f))
|
|
{
|
|
PlayerControllerB playerControllerB = MeetsStandardPlayerCollisionConditions(other, inKillAnimation || startingKillAnimationLocalClient || !enemyEnabled);
|
|
if (playerControllerB != null)
|
|
{
|
|
KillPlayerAnimationServerRpc((int)playerControllerB.playerClientId);
|
|
startingKillAnimationLocalClient = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ServerRpc(RequireOwnership = false)]
|
|
public void KillPlayerAnimationServerRpc(int playerObjectId)
|
|
{
|
|
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(3192502457u, serverRpcParams, RpcDelivery.Reliable);
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerObjectId);
|
|
__endSendServerRpc(ref bufferWriter, 3192502457u, serverRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
|
|
{
|
|
if (!inKillAnimation)
|
|
{
|
|
inKillAnimation = true;
|
|
inSpecialAnimation = true;
|
|
isClientCalculatingAI = false;
|
|
inSpecialAnimationWithPlayer = StartOfRound.Instance.allPlayerScripts[playerObjectId];
|
|
inSpecialAnimationWithPlayer.inAnimationWithEnemy = this;
|
|
KillPlayerAnimationClientRpc(playerObjectId);
|
|
}
|
|
else
|
|
{
|
|
CancelKillAnimationClientRpc(playerObjectId);
|
|
}
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void CancelKillAnimationClientRpc(int playerObjectId)
|
|
{
|
|
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(4032958935u, clientRpcParams, RpcDelivery.Reliable);
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerObjectId);
|
|
__endSendClientRpc(ref bufferWriter, 4032958935u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && (int)GameNetworkManager.Instance.localPlayerController.playerClientId == playerObjectId)
|
|
{
|
|
startingKillAnimationLocalClient = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void KillPlayerAnimationClientRpc(int playerObjectId)
|
|
{
|
|
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(3071650946u, clientRpcParams, RpcDelivery.Reliable);
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerObjectId);
|
|
__endSendClientRpc(ref bufferWriter, 3071650946u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
|
|
{
|
|
if (searchForPlayers.inProgress)
|
|
{
|
|
StopSearch(searchForPlayers);
|
|
}
|
|
inSpecialAnimationWithPlayer = StartOfRound.Instance.allPlayerScripts[playerObjectId];
|
|
if (inSpecialAnimationWithPlayer == GameNetworkManager.Instance.localPlayerController)
|
|
{
|
|
startingKillAnimationLocalClient = false;
|
|
}
|
|
if (inSpecialAnimationWithPlayer == null || inSpecialAnimationWithPlayer.isPlayerDead || !inSpecialAnimationWithPlayer.isInsideFactory)
|
|
{
|
|
FinishKillAnimation();
|
|
}
|
|
inSpecialAnimationWithPlayer.inAnimationWithEnemy = this;
|
|
inSpecialAnimationWithPlayer.CancelSpecialTriggerAnimations();
|
|
inKillAnimation = true;
|
|
inSpecialAnimation = true;
|
|
creatureAnimator.SetBool("killing", value: true);
|
|
agent.enabled = false;
|
|
inSpecialAnimationWithPlayer.inSpecialInteractAnimation = true;
|
|
inSpecialAnimationWithPlayer.snapToServerPosition = true;
|
|
Vector3 origin = ((!inSpecialAnimationWithPlayer.IsOwner) ? inSpecialAnimationWithPlayer.transform.parent.TransformPoint(inSpecialAnimationWithPlayer.serverPlayerPosition) : inSpecialAnimationWithPlayer.transform.position);
|
|
Vector3 vector = base.transform.position - base.transform.forward * 2f;
|
|
vector.y = origin.y;
|
|
playerRay = new Ray(origin, vector - inSpecialAnimationWithPlayer.transform.position);
|
|
if (killAnimationCoroutine != null)
|
|
{
|
|
StopCoroutine(killAnimationCoroutine);
|
|
}
|
|
killAnimationCoroutine = StartCoroutine(killAnimation());
|
|
}
|
|
}
|
|
|
|
private IEnumerator killAnimation()
|
|
{
|
|
WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[0]);
|
|
creatureSFX.PlayOneShot(enemyType.audioClips[0]);
|
|
Vector3 endPosition = playerRay.GetPoint(0.7f);
|
|
if (isOutside && endPosition.y < -80f)
|
|
{
|
|
SetEnemyOutside();
|
|
}
|
|
else if (!isOutside && endPosition.y > -80f)
|
|
{
|
|
SetEnemyOutside(outside: true);
|
|
}
|
|
inSpecialAnimationWithPlayer.disableSyncInAnimation = true;
|
|
inSpecialAnimationWithPlayer.disableLookInput = true;
|
|
RoundManager.Instance.tempTransform.position = inSpecialAnimationWithPlayer.transform.position;
|
|
RoundManager.Instance.tempTransform.LookAt(endPosition);
|
|
Quaternion startingPlayerRot = inSpecialAnimationWithPlayer.transform.rotation;
|
|
Quaternion targetRot = RoundManager.Instance.tempTransform.rotation;
|
|
Vector3 startingPosition = base.transform.position;
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
if (i > 0)
|
|
{
|
|
base.transform.LookAt(inSpecialAnimationWithPlayer.transform.position);
|
|
base.transform.eulerAngles = new Vector3(0f, base.transform.eulerAngles.y, 0f);
|
|
}
|
|
base.transform.position = Vector3.Lerp(startingPosition, endPosition, (float)i / 8f);
|
|
inSpecialAnimationWithPlayer.transform.rotation = Quaternion.Lerp(startingPlayerRot, targetRot, (float)i / 8f);
|
|
inSpecialAnimationWithPlayer.transform.eulerAngles = new Vector3(0f, inSpecialAnimationWithPlayer.transform.eulerAngles.y, 0f);
|
|
yield return null;
|
|
}
|
|
base.transform.position = endPosition;
|
|
inSpecialAnimationWithPlayer.transform.rotation = targetRot;
|
|
inSpecialAnimationWithPlayer.transform.eulerAngles = new Vector3(0f, inSpecialAnimationWithPlayer.transform.eulerAngles.y, 0f);
|
|
yield return new WaitForSeconds(0.3f);
|
|
SetMaskGlow(enable: true);
|
|
yield return new WaitForSeconds(1.2f);
|
|
maskFloodParticle.Play();
|
|
if (inSpecialAnimationWithPlayer == GameNetworkManager.Instance.localPlayerController)
|
|
{
|
|
HUDManager.Instance.HUDAnimator.SetBool("biohazardDamage", value: true);
|
|
}
|
|
creatureSFX.PlayOneShot(enemyType.audioClips[2]);
|
|
WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[2]);
|
|
yield return new WaitForSeconds(1.5f);
|
|
lastPlayerKilled = inSpecialAnimationWithPlayer;
|
|
if (inSpecialAnimationWithPlayer != null)
|
|
{
|
|
bool flag = inSpecialAnimationWithPlayer.transform.position.y < -80f;
|
|
inSpecialAnimationWithPlayer.KillPlayer(Vector3.zero, spawnBody: false, CauseOfDeath.Strangulation, 4);
|
|
inSpecialAnimationWithPlayer.snapToServerPosition = false;
|
|
if (base.IsServer)
|
|
{
|
|
NetworkObjectReference netObjectRef = RoundManager.Instance.SpawnEnemyGameObject(GetGroundPosition(playerRay.origin), inSpecialAnimationWithPlayer.transform.eulerAngles.y, -1, enemyType);
|
|
if (netObjectRef.TryGet(out var networkObject))
|
|
{
|
|
MaskedPlayerEnemy component = networkObject.GetComponent<MaskedPlayerEnemy>();
|
|
component.SetSuit(inSpecialAnimationWithPlayer.currentSuitID);
|
|
component.mimickingPlayer = inSpecialAnimationWithPlayer;
|
|
component.SetEnemyOutside(!flag);
|
|
inSpecialAnimationWithPlayer.redirectToEnemy = component;
|
|
if (inSpecialAnimationWithPlayer.deadBody != null)
|
|
{
|
|
inSpecialAnimationWithPlayer.deadBody.DeactivateBody(setActive: false);
|
|
}
|
|
}
|
|
CreateMimicClientRpc(netObjectRef, flag, (int)inSpecialAnimationWithPlayer.playerClientId);
|
|
}
|
|
FinishKillAnimation(killedPlayer: true);
|
|
}
|
|
else
|
|
{
|
|
FinishKillAnimation();
|
|
}
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void CreateMimicClientRpc(NetworkObjectReference netObjectRef, bool inFactory, int playerKilled)
|
|
{
|
|
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(1687215509u, clientRpcParams, RpcDelivery.Reliable);
|
|
bufferWriter.WriteValueSafe(in netObjectRef, default(FastBufferWriter.ForNetworkSerializable));
|
|
bufferWriter.WriteValueSafe(in inFactory, default(FastBufferWriter.ForPrimitives));
|
|
BytePacker.WriteValueBitPacked(bufferWriter, playerKilled);
|
|
__endSendClientRpc(ref bufferWriter, 1687215509u, clientRpcParams, RpcDelivery.Reliable);
|
|
}
|
|
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !base.IsServer)
|
|
{
|
|
StartCoroutine(waitForMimicEnemySpawn(netObjectRef, inFactory, playerKilled));
|
|
}
|
|
}
|
|
}
|
|
|
|
private IEnumerator waitForMimicEnemySpawn(NetworkObjectReference netObjectRef, bool inFactory, int playerKilled)
|
|
{
|
|
PlayerControllerB player = StartOfRound.Instance.allPlayerScripts[playerKilled];
|
|
NetworkObject netObject = null;
|
|
float startTime = Time.realtimeSinceStartup;
|
|
yield return new WaitUntil(() => Time.realtimeSinceStartup - startTime > 20f || netObjectRef.TryGet(out netObject));
|
|
if (player.deadBody == null)
|
|
{
|
|
startTime = Time.realtimeSinceStartup;
|
|
yield return new WaitUntil(() => Time.realtimeSinceStartup - startTime > 20f || player.deadBody != null);
|
|
}
|
|
if (!(player.deadBody == null))
|
|
{
|
|
player.deadBody.DeactivateBody(setActive: false);
|
|
if (netObject != null)
|
|
{
|
|
MaskedPlayerEnemy component = netObject.GetComponent<MaskedPlayerEnemy>();
|
|
component.mimickingPlayer = player;
|
|
component.SetSuit(player.currentSuitID);
|
|
component.SetEnemyOutside(!inFactory);
|
|
player.redirectToEnemy = component;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void CancelSpecialAnimationWithPlayer()
|
|
{
|
|
base.CancelSpecialAnimationWithPlayer();
|
|
FinishKillAnimation();
|
|
}
|
|
|
|
public void FinishKillAnimation(bool killedPlayer = false)
|
|
{
|
|
if (!killedPlayer)
|
|
{
|
|
creatureSFX.Stop();
|
|
}
|
|
if (killAnimationCoroutine != null)
|
|
{
|
|
StopCoroutine(killAnimationCoroutine);
|
|
}
|
|
inSpecialAnimation = false;
|
|
inKillAnimation = false;
|
|
creatureAnimator.SetBool("killing", value: false);
|
|
startingKillAnimationLocalClient = false;
|
|
SetMaskGlow(enable: false);
|
|
maskFloodParticle.Stop(withChildren: true, ParticleSystemStopBehavior.StopEmitting);
|
|
if (inSpecialAnimationWithPlayer != null)
|
|
{
|
|
inSpecialAnimationWithPlayer.disableSyncInAnimation = false;
|
|
inSpecialAnimationWithPlayer.disableLookInput = false;
|
|
inSpecialAnimationWithPlayer.inSpecialInteractAnimation = false;
|
|
inSpecialAnimationWithPlayer.snapToServerPosition = false;
|
|
inSpecialAnimationWithPlayer.inAnimationWithEnemy = null;
|
|
}
|
|
stopAndStareTimer = 3f;
|
|
movingTowardsTargetPlayer = false;
|
|
if (base.IsOwner)
|
|
{
|
|
base.transform.position = GetGroundPosition(base.transform.position);
|
|
agent.enabled = true;
|
|
isClientCalculatingAI = true;
|
|
}
|
|
if (base.NetworkObject.IsSpawned)
|
|
{
|
|
SwitchToBehaviourStateOnLocalClient(0);
|
|
if (base.IsServer)
|
|
{
|
|
SwitchToBehaviourState(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
private Vector3 GetGroundPosition(Vector3 startingPos)
|
|
{
|
|
Vector3 pos = startingPos;
|
|
pos = RoundManager.Instance.GetNavMeshPosition(pos, default(NavMeshHit), 3f);
|
|
if (!RoundManager.Instance.GotNavMeshPositionResult)
|
|
{
|
|
if (Physics.Raycast(startingPos + Vector3.up * 0.15f, -Vector3.up, out var hitInfo, 50f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, QueryTriggerInteraction.Ignore))
|
|
{
|
|
pos = RoundManager.Instance.GetNavMeshPosition(hitInfo.point, default(NavMeshHit), 10f);
|
|
}
|
|
else
|
|
{
|
|
int num = UnityEngine.Random.Range(0, allAINodes.Length);
|
|
if (allAINodes != null && allAINodes[num] != null)
|
|
{
|
|
pos = allAINodes[num].transform.position;
|
|
}
|
|
}
|
|
}
|
|
return pos;
|
|
}
|
|
|
|
public void SetSuit(int suitId)
|
|
{
|
|
Material suitMaterial = StartOfRound.Instance.unlockablesList.unlockables[suitId].suitMaterial;
|
|
rendererLOD0.material = suitMaterial;
|
|
rendererLOD1.material = suitMaterial;
|
|
rendererLOD2.material = suitMaterial;
|
|
}
|
|
|
|
public void SetMaskType(int maskType)
|
|
{
|
|
switch (maskType)
|
|
{
|
|
case 4:
|
|
maskTypes[0].SetActive(value: true);
|
|
maskTypes[1].SetActive(value: false);
|
|
maskTypeIndex = 0;
|
|
break;
|
|
case 5:
|
|
maskTypes[1].SetActive(value: true);
|
|
maskTypes[0].SetActive(value: false);
|
|
maskTypeIndex = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void GetMaterialStandingOn()
|
|
{
|
|
enemyRay = new Ray(base.transform.position + Vector3.up, -Vector3.up);
|
|
if (Physics.Raycast(enemyRay, out enemyRayHit, 6f, StartOfRound.Instance.walkableSurfacesMask, QueryTriggerInteraction.Ignore))
|
|
{
|
|
if (enemyRayHit.collider.CompareTag(StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].surfaceTag))
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < StartOfRound.Instance.footstepSurfaces.Length; i++)
|
|
{
|
|
if (enemyRayHit.collider.CompareTag(StartOfRound.Instance.footstepSurfaces[i].surfaceTag))
|
|
{
|
|
currentFootstepSurfaceIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.DrawRay(enemyRay.origin, enemyRay.direction, Color.white, 0.3f);
|
|
}
|
|
}
|
|
|
|
public void PlayFootstepSound()
|
|
{
|
|
GetMaterialStandingOn();
|
|
int num = UnityEngine.Random.Range(0, StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips.Length);
|
|
if (num == previousFootstepClip)
|
|
{
|
|
num = (num + 1) % StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips.Length;
|
|
}
|
|
movementAudio.pitch = UnityEngine.Random.Range(0.93f, 1.07f);
|
|
float num2 = 0.95f;
|
|
if (!sprinting)
|
|
{
|
|
num2 = 0.75f;
|
|
}
|
|
movementAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips[num], num2);
|
|
previousFootstepClip = num;
|
|
WalkieTalkie.TransmitOneShotAudio(movementAudio, StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips[num], num2);
|
|
}
|
|
|
|
public override void AnimationEventA()
|
|
{
|
|
base.AnimationEventA();
|
|
PlayFootstepSound();
|
|
}
|
|
|
|
public void SetMaskGlow(bool enable)
|
|
{
|
|
maskEyesGlow[maskTypeIndex].enabled = enable;
|
|
maskEyesGlowLight.enabled = enable;
|
|
if (enable)
|
|
{
|
|
creatureSFX.PlayOneShot(enemyType.audioClips[1]);
|
|
}
|
|
}
|
|
|
|
protected override void __initializeVariables()
|
|
{
|
|
base.__initializeVariables();
|
|
}
|
|
|
|
[RuntimeInitializeOnLoadMethod]
|
|
internal static void InitializeRPCS_MaskedPlayerEnemy()
|
|
{
|
|
NetworkManager.__rpc_func_table.Add(3110137062u, __rpc_handler_3110137062);
|
|
NetworkManager.__rpc_func_table.Add(1038760037u, __rpc_handler_1038760037);
|
|
NetworkManager.__rpc_func_table.Add(657232826u, __rpc_handler_657232826);
|
|
NetworkManager.__rpc_func_table.Add(2539470808u, __rpc_handler_2539470808);
|
|
NetworkManager.__rpc_func_table.Add(2502006210u, __rpc_handler_2502006210);
|
|
NetworkManager.__rpc_func_table.Add(3625708449u, __rpc_handler_3625708449);
|
|
NetworkManager.__rpc_func_table.Add(675153417u, __rpc_handler_675153417);
|
|
NetworkManager.__rpc_func_table.Add(432295350u, __rpc_handler_432295350);
|
|
NetworkManager.__rpc_func_table.Add(1141953697u, __rpc_handler_1141953697);
|
|
NetworkManager.__rpc_func_table.Add(2397761797u, __rpc_handler_2397761797);
|
|
NetworkManager.__rpc_func_table.Add(1407409549u, __rpc_handler_1407409549);
|
|
NetworkManager.__rpc_func_table.Add(1561581057u, __rpc_handler_1561581057);
|
|
NetworkManager.__rpc_func_table.Add(519961256u, __rpc_handler_519961256);
|
|
NetworkManager.__rpc_func_table.Add(222504553u, __rpc_handler_222504553);
|
|
NetworkManager.__rpc_func_table.Add(2560207573u, __rpc_handler_2560207573);
|
|
NetworkManager.__rpc_func_table.Add(1162325818u, __rpc_handler_1162325818);
|
|
NetworkManager.__rpc_func_table.Add(3309468324u, __rpc_handler_3309468324);
|
|
NetworkManager.__rpc_func_table.Add(3512011720u, __rpc_handler_3512011720);
|
|
NetworkManager.__rpc_func_table.Add(3192502457u, __rpc_handler_3192502457);
|
|
NetworkManager.__rpc_func_table.Add(4032958935u, __rpc_handler_4032958935);
|
|
NetworkManager.__rpc_func_table.Add(3071650946u, __rpc_handler_3071650946);
|
|
NetworkManager.__rpc_func_table.Add(1687215509u, __rpc_handler_1687215509);
|
|
}
|
|
|
|
private static void __rpc_handler_3110137062(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;
|
|
((MaskedPlayerEnemy)target).SetEnemyAsHavingNoPlayerServerRpc();
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1038760037(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
|
|
{
|
|
NetworkManager networkManager = target.NetworkManager;
|
|
if ((object)networkManager != null && networkManager.IsListening)
|
|
{
|
|
target.__rpc_exec_stage = __RpcExecStage.Client;
|
|
((MaskedPlayerEnemy)target).SetEnemyAsHavingNoPlayerClientRpc();
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_657232826(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 bool value2, default(FastBufferWriter.ForPrimitives));
|
|
target.__rpc_exec_stage = __RpcExecStage.Server;
|
|
((MaskedPlayerEnemy)target).TeleportMaskedEnemyServerRpc(value, value2);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_2539470808(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
|
|
{
|
|
NetworkManager networkManager = target.NetworkManager;
|
|
if ((object)networkManager != null && networkManager.IsListening)
|
|
{
|
|
reader.ReadValueSafe(out Vector3 value);
|
|
reader.ReadValueSafe(out bool value2, default(FastBufferWriter.ForPrimitives));
|
|
target.__rpc_exec_stage = __RpcExecStage.Client;
|
|
((MaskedPlayerEnemy)target).TeleportMaskedEnemyClientRpc(value, value2);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_2502006210(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 Vector3 value);
|
|
reader.ReadValueSafe(out float value2, default(FastBufferWriter.ForPrimitives));
|
|
reader.ReadValueSafe(out float value3, default(FastBufferWriter.ForPrimitives));
|
|
target.__rpc_exec_stage = __RpcExecStage.Server;
|
|
((MaskedPlayerEnemy)target).LookAtDirectionServerRpc(value, value2, value3);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
|
|
private static void __rpc_handler_3625708449(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));
|
|
reader.ReadValueSafe(out float value3, default(FastBufferWriter.ForPrimitives));
|
|
target.__rpc_exec_stage = __RpcExecStage.Client;
|
|
((MaskedPlayerEnemy)target).LookAtDirectionClientRpc(value, value2, value3);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_675153417(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;
|
|
((MaskedPlayerEnemy)target).LookAtPositionServerRpc(value, value2);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_432295350(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;
|
|
((MaskedPlayerEnemy)target).LookAtPositionClientRpc(value, value2);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1141953697(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;
|
|
((MaskedPlayerEnemy)target).LookAtPlayerServerRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_2397761797(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;
|
|
((MaskedPlayerEnemy)target).LookAtPlayerClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1407409549(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;
|
|
((MaskedPlayerEnemy)target).StopLookingAtTransformServerRpc();
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1561581057(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
|
|
{
|
|
NetworkManager networkManager = target.NetworkManager;
|
|
if ((object)networkManager != null && networkManager.IsListening)
|
|
{
|
|
target.__rpc_exec_stage = __RpcExecStage.Client;
|
|
((MaskedPlayerEnemy)target).StopLookingAtTransformClientRpc();
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_519961256(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;
|
|
((MaskedPlayerEnemy)target).SetHandsOutServerRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_222504553(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;
|
|
((MaskedPlayerEnemy)target).SetHandsOutClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_2560207573(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;
|
|
((MaskedPlayerEnemy)target).SetCrouchingServerRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1162325818(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;
|
|
((MaskedPlayerEnemy)target).SetCrouchingClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_3309468324(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;
|
|
((MaskedPlayerEnemy)target).SetRunningServerRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_3512011720(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;
|
|
((MaskedPlayerEnemy)target).SetRunningClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_3192502457(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;
|
|
((MaskedPlayerEnemy)target).KillPlayerAnimationServerRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_4032958935(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;
|
|
((MaskedPlayerEnemy)target).CancelKillAnimationClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_3071650946(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;
|
|
((MaskedPlayerEnemy)target).KillPlayerAnimationClientRpc(value);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
private static void __rpc_handler_1687215509(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 bool value2, default(FastBufferWriter.ForPrimitives));
|
|
ByteUnpacker.ReadValueBitPacked(reader, out int value3);
|
|
target.__rpc_exec_stage = __RpcExecStage.Client;
|
|
((MaskedPlayerEnemy)target).CreateMimicClientRpc(value, value2, value3);
|
|
target.__rpc_exec_stage = __RpcExecStage.None;
|
|
}
|
|
}
|
|
|
|
protected internal override string __getTypeName()
|
|
{
|
|
return "MaskedPlayerEnemy";
|
|
}
|
|
}
|