private void MineLoad() { if (GameManager.previousSceneIndex != 0) // if we load not from main menu { return; } Debug.Log("Load mine"); _chancesGenerator.LoadChances(LoadSystem.Load <ChancesData>("chances")); generateLevel.LoadLevelPrefab(LoadSystem.Load <LevelPrefabData>("level").seed); PlayerPositionData playerPositionData = LoadSystem.Load <PlayerPositionData>("player"); if (playerPositionData != null) { playerGO.transform.position = new Vector3(playerPositionData.position[0], playerPositionData.position[1], playerPositionData.position[2]); } _gridBehavior.LoadGrid(LoadSystem.Load <GridData>("grid")); oreGenerator.LoadOres(LoadSystem.Load <OresData>("ores")); _nextLevelLoadController.LoadDescent(LoadSystem.Load <DescentData>("descent")); progressBar.LoadProgressBar(LoadSystem.Load <ProgressBarData>("progressBar")); SaveBaseOnCurrentScene(); }
public SpinningState(ref TrickPhysicsData dataIn, ref PlayerPositionData posIn, ref IncrementCartridge incrIn) { this.c_physData = dataIn; this.c_playerPosData = posIn; this.cart_incr = incrIn; }
/// <summary> /// Sets default values for player data that interfaces with the engine, such as the player position /// </summary> void SetDefaultPlayerData() { c_trickPhysicsData = new TrickPhysicsData(Attributes.Tricks, Attributes.MaxStats); c_positionData = new PlayerPositionData(transform.position, transform.forward, transform.rotation); c_scoringData = new ScoringData(); c_inputData = new PlayerInputData(); c_stateData = new StateData(); c_aerialMoveData = new AerialMoveData(); c_entityData = new EntityData(); c_collisionData = new CollisionData(CollisionData.FrontRayOffset, CollisionData.BackRayOffset); c_lastFrameData = new LastFramePositionData(); c_turnData = new PlayerHandlingData(c_playerData.f_turnSpeed, c_playerData.f_turnAcceleration, c_playerData.f_turnSpeedDeceleration, c_playerData.f_turnAcceleration * 2, this.Attributes.Balance); c_playerData.v_currentPosition = transform.position; c_playerData.q_currentRotation = transform.rotation; c_playerData.q_targetRotation = transform.rotation; c_playerData.v_currentAirDirection = transform.forward; c_playerData.v_currentNormal = transform.up; c_playerData.v_currentDown = transform.up * -1; c_playerData.f_currentSpeed = Constants.ZERO_F; c_playerData.f_currentAcceleration = c_playerData.f_acceleration; c_playerData.f_currentTopSpeed = c_playerData.f_topSpeed; c_playerData.f_currentJumpCharge = Constants.ZERO_F; c_playerData.f_currentForwardRaycastDistance = c_playerData.f_forwardRaycastDistance; c_playerData.f_currentRaycastDistance = c_playerData.f_raycastDistance; c_playerData.f_surfaceAngleDifference = 0.0f; c_playerData.b_obstacleInRange = false; c_lastFrameData.v_lastFramePosition = transform.position; c_lastFrameData.q_lastFrameRotation = transform.rotation; c_stateData.b_updateState = true; c_stateData.b_courseFinished = false; }
public RidingChargeState(ref PlayerData playerData, ref PlayerPositionData positionData, ref CollisionData collisionData) { this.c_playerData = playerData; this.c_playerPositionData = positionData; this.c_collisionData = collisionData; }
public StraightState(ref PlayerData playerData, ref PlayerHandlingData turnDataIn, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_turnData = turnDataIn; this.c_positionData = positionData; }
public TurnChargeState(ref PlayerData playerData, ref PlayerHandlingData turnDataIn, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_turnData = turnDataIn; this.c_positionData = positionData; }
public JumpChargeState(ref PlayerData playerData, ref PlayerPositionData positionData, ref CollisionData collisionData, ref AerialMoveData aerialMoveData, ref IncrementCartridge incr) { this.c_playerData = playerData; this.c_positionData = positionData; this.c_aerialMoveData = aerialMoveData; this.c_collisionData = collisionData; this.cart_increment = incr; }
public AerialState(ref PlayerData playerData, ref CollisionData collisionData, ref AerialMoveData moveData, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_aerialMoveData = moveData; this.c_collisionData = collisionData; this.c_positionData = positionData; }
internal static void HandleHook(PlayerPositionManager __instance) { List <PlayerPositionData> normalData = new List <PlayerPositionData>(); List <GameObject> players = ((IEnumerable <GameObject>)PlayerManager.singleton.players).ToList <GameObject>(); foreach (GameObject _player in players) { normalData.Add(new PlayerPositionData(_player)); } __instance.ReceiveData(normalData.ToArray()); foreach (GameObject gameObject in players) { CharacterClassManager component1 = gameObject.GetComponent <CharacterClassManager>(); if (component1.curClass >= 0 && (component1.curClass == (int)Role.SCP_939_53 || component1.curClass == (int)Role.SCP_939_89)) { List <PlayerPositionData> modifiedData2 = new List <PlayerPositionData>((IEnumerable <PlayerPositionData>)normalData); for (int index = 0; index < modifiedData2.Count; ++index) { CharacterClassManager component2 = players[index].GetComponent <CharacterClassManager>(); if ((double)modifiedData2[index].position.y < 800.0 && component2.curClass >= 0 && component2.klasy[component2.curClass].team != Team.SCP && (component2.klasy[component2.curClass].team != Team.RIP && !players[index].GetComponent <Scp939_VisionController>().CanSee(component1.GetComponent <Scp939PlayerScript>()))) { modifiedData2[index] = new PlayerPositionData() { position = Vector3.up * 6000f, rotation = 0.0f, playerID = modifiedData2[index].playerID }; } } __instance.CallTargetTransmit(gameObject.GetComponent <NetworkIdentity>().connectionToClient, modifiedData2.ToArray()); } else { __instance.CallTargetTransmit(gameObject.GetComponent <NetworkIdentity>().connectionToClient, normalData.ToArray()); } KeyValuePair <int, List <int> > entry = pHideDict.FirstOrDefault(x => x.Key == gameObject.GetComponent <QueryProcessor>().PlayerId); if (PlayerManager.singleton.players.FirstOrDefault(x => x.GetComponent <QueryProcessor>().PlayerId == entry.Key && entry.Key != 0) != null) { List <PlayerPositionData> modifiedData = new List <PlayerPositionData>((IEnumerable <PlayerPositionData>)normalData); for (int index = 0; index < modifiedData.Count; ++index) { if (component1.curClass >= 0 && players[index] != gameObject && entry.Value.Contains(players[index].GetComponent <QueryProcessor>().PlayerId)) { modifiedData[index] = new PlayerPositionData() { position = Vector3.up * 6000f, rotation = 0.0f, playerID = modifiedData[index].playerID }; } } __instance.CallTargetTransmit(gameObject.GetComponent <NetworkIdentity>().connectionToClient, modifiedData.ToArray()); } } }
public SpinSnapState(ref AerialMoveData aerialIn, ref PlayerPositionData playerPosIn, ref TrickPhysicsData trickIn, ref ScoringData scoringIn) { this.c_aerialMoveData = aerialIn; this.c_playerPosData = playerPosIn; this.c_physData = trickIn; this.c_scoringData = scoringIn; }
public SlowingState(ref PlayerData playerData, ref CollisionData collisionData, ref PlayerInputData inputData, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_playerInputData = inputData; this.c_playerPositionData = positionData; this.c_collisionData = collisionData; }
public CarvingState(ref PlayerData playerData, ref PlayerHandlingData turnDataIn, ref PlayerInputData inputData, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_turnData = turnDataIn; this.c_playerInputData = inputData; this.c_positionData = positionData; }
public GroundedState(ref PlayerData playerData, ref AerialMoveData aerialMoveData, ref CollisionData collisionData, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_aerialMoveData = aerialMoveData; this.c_positionData = positionData; this.c_collisionData = collisionData; }
public void initCharacters(PlayerPositionData ppd) { foreach (var key in charactersNameToPrefabs.keys) { Vector3 position = ppd.positions[key]; if (position != null) { GameObjectFactory.createClone(charactersNameToPrefabs[key], null, position); } } }
public BoostState(ref PlayerData playerData, ref AerialMoveData aerialMoveData, ref CollisionData collisionData, ref PlayerPositionData positionData, ref PlayerHandlingData turnData) { this.c_playerData = playerData; this.c_aerialMoveData = aerialMoveData; this.c_positionData = positionData; this.c_collisionData = collisionData; this.c_turnData = turnData; }
public CollisionController(ref PlayerData playerData, ref PlayerPositionData positionData, ref CollisionData collisionData, ref CharacterCollisionData collisionAttrs, ref AerialMoveData aerialMoveData, ref BoxCollider playerCollider, LayerMask groundMask, LayerMask zoneMask) { this.c_collisionData = collisionData; this.c_collisionAttrs = collisionAttrs; this.c_playerData = playerData; this.c_positionData = positionData; this.c_aerialMoveData = aerialMoveData; this.i_groundCollisionMask = groundMask; this.i_zoneCollisionMask = zoneMask; this.c_playerCollider = playerCollider; this.a_colliders = new Collider[5]; }
public SwitchState(ref PlayerPositionData positionDataIn) { c_positionData = positionDataIn; }
private static bool Prefix(PlayerPositionManager __instance) { try { ++__instance._frame; if (__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance._receivedData == null || __instance._receivedData.Length < __instance._usedData) { __instance._receivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance._receivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer == null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = Player.Get(gameObject); if (player == null) { continue; } Array.Copy(__instance._receivedData, __instance._transmitBuffer, __instance._usedData); for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; Player currentTarget = Player.Get(players[index]); Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; bool canSee = true; if (currentTarget == null) { continue; } if (currentTarget.IsInvisible || player.TargetGhosts.Contains(ppd.playerID)) { canSee = false; } else if (player.Role.Is939() && ppd.position.y < 800.0) { if (currentTarget.Team != Team.SCP && currentTarget.Team != Team.RIP && !currentTarget.GameObject.GetComponent <Scp939_VisionController>().CanSee(player.ReferenceHub.characterClassManager.Scp939)) { canSee = false; } } else if (player.Role != RoleType.Scp079 && player.Role != RoleType.Spectator) { if (Math.Abs(ppd.position.y - player.Position.y) > 35) { canSee = false; } else { if (ReferenceHub.TryGetHub(ppd.playerID, out ReferenceHub hub)) { if (scp096 != null && scp096.Enraged && !scp096.HasTarget(hub) && hub.characterClassManager.CurRole.team != Team.SCP) { canSee = false; } else if (hub.playerEffectsController.GetEffect <Scp268>().Enabled&& (scp096 == null || !scp096.HasTarget(hub))) { canSee = false; } } } } if (!canSee) { ppd = new PlayerPositionData(Vector3.up * 6000f, 0.0f, ppd.playerID); } __instance._transmitBuffer[index] = ppd; } NetworkConnection networkConnection = player.ReferenceHub.characterClassManager.netIdentity.isLocalPlayer ? NetworkServer.localConnection : player.ReferenceHub.characterClassManager.netIdentity.connectionToClient; if (__instance._usedData <= 20) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, (byte)__instance._usedData, 0), 1); } else { byte part; for (part = 0; part < __instance._usedData / 20; ++part) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, 20, part), 1); } byte count = (byte)(__instance._usedData % (part * 20)); if (count > 0) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, count, part), 1); } } } return(false); } catch (Exception exception) { Log.Error($"GhostMode error: {exception}"); return(true); } }
public ForwardState(ref PlayerPositionData positionDataIn) { c_positionData = positionDataIn; }
public override void init(MapData mapData) { playerPositionData = mapData.gameObject.AddComponent<PlayerPositionData>(); }
// Keep in mind, changes affecting this code // have a high breakage rate, so be careful when // updating or adding new things private static bool Prefix(PlayerPositionManager __instance) { try { if (++__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance.ReceivedData == null || __instance.ReceivedData.Length < __instance._usedData) { __instance.ReceivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance.ReceivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer == null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = GetPlayerOrServer(gameObject); if (player == null || player.ReferenceHub.queryProcessor._ipAddress == "127.0.0.WAN") { continue; } Array.Copy(__instance.ReceivedData, __instance._transmitBuffer, __instance._usedData); if (player.Role.Is939()) { for (int index = 0; index < __instance._usedData; ++index) { if (__instance._transmitBuffer[index].position.y < 800f) { ReferenceHub hub2 = ReferenceHub.GetHub(__instance._transmitBuffer[index].playerID); if (hub2.characterClassManager.CurRole.team != Team.SCP && hub2.characterClassManager.CurRole.team != Team.RIP && !hub2 .GetComponent <Scp939_VisionController>() .CanSee(player.ReferenceHub.playerEffectsController.GetEffect <Visuals939>())) { MakeGhost(index, __instance._transmitBuffer); } } } } else if (player.Role != RoleType.Spectator && player.Role != RoleType.Scp079) { for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; if (!ReferenceHub.TryGetHub(ppd.playerID, out ReferenceHub targetHub)) { continue; } Player currentTarget = GetPlayerOrServer(targetHub.gameObject); if (currentTarget == null) { continue; } Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; Vector3 vector3 = ppd.position - player.ReferenceHub.playerMovementSync.RealModelPosition; if (Math.Abs(vector3.y) > 35f) { MakeGhost(index, __instance._transmitBuffer); } else { float sqrMagnitude = vector3.sqrMagnitude; if (player.ReferenceHub.playerMovementSync.RealModelPosition.y < 800f) { if (sqrMagnitude >= 1764f) { if (!(sqrMagnitude < 4225f)) { MakeGhost(index, __instance._transmitBuffer); continue; } if (!(currentTarget.ReferenceHub.scpsController.CurrentScp is Scp096 scp) || !scp.EnragedOrEnraging) { MakeGhost(index, __instance._transmitBuffer); continue; } } } else if (sqrMagnitude >= 7225f) { MakeGhost(index, __instance._transmitBuffer); continue; // As the target is already ghosted } // The code below doesn't have to follow a ELSE statement! // Otherwise Scp268 won't be processed if (scp096 != null && scp096.EnragedOrEnraging && !scp096.HasTarget(currentTarget.ReferenceHub) && currentTarget.Team != Team.SCP) { #if DEBUG Log.Debug($"[Scp096@GhostModePatch] {player.UserId} can't see {currentTarget.UserId}"); #endif MakeGhost(index, __instance._transmitBuffer); } else if (currentTarget.ReferenceHub.playerEffectsController.GetEffect <Invisible>().IsEnabled) { bool flag2 = false; if (scp096 != null) { flag2 = scp096.HasTarget(currentTarget.ReferenceHub); } if (currentTarget != player && player.Role != RoleType.Scp079 && player.Role != RoleType.Spectator && !flag2) { MakeGhost(index, __instance._transmitBuffer); } } } } } // We do another FOR for the ghost things // because it's hard to do it without // whole code changes in the game code for (int z = 0; z < __instance._usedData; z++) { PlayerPositionData ppd = __instance._transmitBuffer[z]; // Do you remember the bug // when you can't pick up any item? // - Me too; // It was because for a reason // we made the source player // invisible to themself if (player.Id == ppd.playerID) { continue; } // If it's already has the ghost position if (ppd.position == GhostPos) { continue; } if (!ReferenceHub.TryGetHub(ppd.playerID, out ReferenceHub targetHub)) { continue; } Player target = GetPlayerOrServer(targetHub.gameObject); if (target == null || target.ReferenceHub.queryProcessor._ipAddress == "127.0.0.WAN") { continue; } // If for some reason the player/their ref hub is null if (target?.ReferenceHub == null) { continue; } if (target.IsInvisible || PlayerCannotSee(player, target.Id)) { MakeGhost(z, __instance._transmitBuffer); } // Rotate the player because // those movement checks are // in client-side else if (player.Role == RoleType.Scp173 && ((!Exiled.Events.Events.Instance.Config.CanTutorialBlockScp173 && target.Role == RoleType.Tutorial) || Scp173.TurnedPlayers.Contains(target))) { RotatePlayer(z, __instance._transmitBuffer, FindLookRotation(player.Position, target.Position)); } } if (player.ReferenceHub.characterClassManager.netIdentity != null) { NetworkConnection networkConnection = player.ReferenceHub.characterClassManager.netIdentity.isLocalPlayer ? NetworkServer.localConnection : player.ReferenceHub.characterClassManager.netIdentity.connectionToClient; if (__instance._usedData <= 20) { networkConnection.Send <PositionPPMMessage>( new PositionPPMMessage(__instance._transmitBuffer, (byte)__instance._usedData, 0), 1); } else { byte part; for (part = 0; part < __instance._usedData / 20; ++part) { networkConnection.Send <PositionPPMMessage>(new PositionPPMMessage(__instance._transmitBuffer, 20, part), 1); } byte count = (byte)(__instance._usedData % (part * 20)); if (count > 0) { networkConnection.Send <PositionPPMMessage>(new PositionPPMMessage(__instance._transmitBuffer, count, part), 1); } } } } return(false); } catch (Exception exception) { Log.Error($"GhostMode error: {exception}"); return(true); } }
public SpinCorrectState(ref TrickPhysicsData dataIn, ref PlayerData playerData, ref PlayerPositionData posDataIn) { this.c_trickPhys = dataIn; this.c_playerData = playerData; this.c_posData = posDataIn; }
private static void MakeGhost(int index, PlayerPositionData[] buff) => buff[index] = new PlayerPositionData(GhostPos, buff[index].rotation, buff[index].playerID);
private static void RotatePlayer(int index, PlayerPositionData[] buff, Vector3 rotation) => buff[index] = new PlayerPositionData(buff[index].position, Quaternion.LookRotation(rotation).eulerAngles.y, buff[index].playerID);
// Keep in mind, changes affecting this code // have a high breakage rate, so be careful when // updating or adding new things private static bool Prefix(PlayerPositionManager __instance) { try { if (!Round.IsStarted) { return(true); } if (++__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance.ReceivedData is null || __instance.ReceivedData.Length < __instance._usedData) { __instance.ReceivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance.ReceivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer is null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = GetPlayerOrServer(gameObject); if (player is null || player.ReferenceHub.queryProcessor._ipAddress == "127.0.0.WAN") { continue; } Array.Copy(__instance.ReceivedData, __instance._transmitBuffer, __instance._usedData); if (player.Role.Type.Is939()) { for (int index = 0; index < __instance._usedData; ++index) { if (__instance._transmitBuffer[index].position.y < 800f) { ReferenceHub hub2 = ReferenceHub.GetHub(__instance._transmitBuffer[index].playerID); if (hub2.characterClassManager.CurRole.team != Team.SCP && hub2.characterClassManager.CurRole.team != Team.RIP && !hub2 .GetComponent <Scp939_VisionController>() .CanSee(player.ReferenceHub.playerEffectsController.GetEffect <Visuals939>())) { MakeGhost(index, __instance._transmitBuffer); } } } } else if (player.Role.Type != RoleType.Spectator && player.Role.Type != RoleType.Scp079) { for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; if (!ReferenceHub.TryGetHub(ppd.playerID, out ReferenceHub targetHub)) { continue; } Player currentTarget = GetPlayerOrServer(targetHub.gameObject); if (currentTarget is null) { continue; } Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; Vector3 vector3 = ppd.position - player.ReferenceHub.playerMovementSync.RealModelPosition; if (Math.Abs(vector3.y) > 35f) { MakeGhost(index, __instance._transmitBuffer); } else { float sqrMagnitude = vector3.sqrMagnitude; if (player.ReferenceHub.playerMovementSync.RealModelPosition.y < 800f) { if (sqrMagnitude >= 1764f) { if (!(sqrMagnitude < 4225f)) { MakeGhost(index, __instance._transmitBuffer); continue; } if (!(currentTarget.ReferenceHub.scpsController.CurrentScp is Scp096 scp) || !scp.EnragedOrEnraging) { MakeGhost(index, __instance._transmitBuffer); continue; } } } else if (sqrMagnitude >= 7225f) { MakeGhost(index, __instance._transmitBuffer); continue; // As the target is already ghosted } // The code below doesn't have to follow a ELSE statement! // Otherwise Scp268 won't be processed if (scp096 is not null && scp096.EnragedOrEnraging && !scp096.HasTarget(currentTarget.ReferenceHub) && currentTarget.Role.Team != Team.SCP) { #if DEBUG Log.Debug($"[Scp096@GhostModePatch] {player.UserId} can't see {currentTarget.UserId}"); #endif MakeGhost(index, __instance._transmitBuffer); } else if (currentTarget.ReferenceHub.playerEffectsController.GetEffect <Invisible>().IsEnabled) { bool flag2 = false; if (scp096 is not null) { flag2 = scp096.HasTarget(currentTarget.ReferenceHub); } if (currentTarget != player && player.Role.Type != RoleType.Scp079 && player.Role.Type != RoleType.Spectator && !flag2) { MakeGhost(index, __instance._transmitBuffer); } } } } }
private static bool Prefix(PlayerPositionManager __instance) { try { ++__instance._frame; if (__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance._receivedData == null || __instance._receivedData.Length < __instance._usedData) { __instance._receivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance._receivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer == null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = Player.Get(gameObject); Array.Copy(__instance._receivedData, __instance._transmitBuffer, __instance._usedData); if (player.Role.Is939()) { for (int index = 0; index < __instance._usedData; ++index) { if (__instance._transmitBuffer[index].position.y < 800.0) { ReferenceHub hub2 = ReferenceHub.GetHub(players[index]); if (hub2.characterClassManager.CurRole.team != Team.SCP && hub2.characterClassManager.CurRole.team != Team.RIP && !players[index] .GetComponent <Scp939_VisionController>() .CanSee(player.ReferenceHub.characterClassManager.Scp939)) { __instance._transmitBuffer[index] = new PlayerPositionData(Vector3.up * 6000f, 0.0f, __instance._transmitBuffer[index].playerID); } } } } else if (player.Role != RoleType.Spectator && player.Role != RoleType.Scp079) { for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; Player currentTarget = Player.Get(players[index]); Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; bool canSee = true; bool shouldRotate = false; if (currentTarget?.ReferenceHub == null) { continue; } if (currentTarget.IsInvisible || player.TargetGhosts.Contains(ppd.playerID)) { canSee = false; } Vector3 vector3 = __instance._transmitBuffer[index].position - player.ReferenceHub.playerMovementSync.RealModelPosition; if (Math.Abs(vector3.y) > 35.0) { canSee = false; } else { float sqrMagnitude = vector3.sqrMagnitude; if (player.ReferenceHub.playerMovementSync.RealModelPosition.y < 800.0) { if (sqrMagnitude >= 1764.0) { canSee = false; continue; } } else if (sqrMagnitude >= 7225.0) { canSee = false; continue; } if (ReferenceHub.TryGetHub(__instance._transmitBuffer[index].playerID, out ReferenceHub hub2)) { if (player.ReferenceHub.scpsController.CurrentScp is Scp096 currentScp && currentScp.Enraged && (!currentScp.HasTarget(hub2) && hub2.characterClassManager.CurRole.team != Team.SCP)) { canSee = false; } else if (hub2.playerEffectsController.GetEffect <Scp268>().Enabled) { bool flag = false; if (scp096 != null) { flag = scp096._targets.Contains(hub2); } canSee = flag; } } switch (player.Role) { case RoleType.Scp173 when !Exiled.Events.Events.Instance.Config.CanTutorialBlockScp173 && currentTarget.Role == RoleType.Tutorial: shouldRotate = true; break; case RoleType.Scp096 when !Exiled.Events.Events.Instance.Config.CanTutorialTriggerScp096 && currentTarget.Role == RoleType.Tutorial: shouldRotate = true; break; } if (!canSee) { ppd = new PlayerPositionData(Vector3.up * 6000f, 0.0f, ppd.playerID); } else if (shouldRotate) { ppd = new PlayerPositionData(ppd.position, Quaternion.LookRotation(FindLookRotation(player.Position, currentTarget.Position)).eulerAngles.y, ppd.playerID); } __instance._transmitBuffer[index] = ppd; } } } NetworkConnection networkConnection = player.ReferenceHub.characterClassManager.netIdentity.isLocalPlayer ? NetworkServer.localConnection : player.ReferenceHub.characterClassManager.netIdentity.connectionToClient; if (__instance._usedData <= 20) { networkConnection.Send( new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, (byte)__instance._usedData, 0), 1); } else { byte part; for (part = 0; part < __instance._usedData / 20; ++part) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, 20, part), 1); } byte count = (byte)(__instance._usedData % (part * 20)); if (count > 0) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, count, part), 1); } } } return(false); }
static bool Prefix(PlayerPositionManager __instance) { List <PlayerPositionData> posData = new List <PlayerPositionData>(); List <GameObject> players = PlayerManager.singleton.players.ToList(); bool smGhostMode = ConfigFile.GetBool("sm_enable_ghostmode", false); foreach (GameObject player in players) { posData.Add(new PlayerPositionData(player)); } __instance.ReceiveData(posData.ToArray()); foreach (GameObject gameObject in players) { CharacterClassManager component = gameObject.GetComponent <CharacterClassManager>(); int pid1 = gameObject.GetComponent <QueryProcessor>().PlayerId; if (smGhostMode && gameObject != __instance.gameObject && component.curClass >= 0) { for (int i = 0; i < posData.Count; i++) { if (players[i] == gameObject) { continue; } CharacterClassManager component2 = players[i].GetComponent <CharacterClassManager>(); int pid2 = players[i].GetComponent <QueryProcessor>().PlayerId; if (component2.smGhostMode && component2.curClass >= 0 && component2.curClass != 2 && (component.curClass != 2 || (!component2.smVisibleToSpec && component.curClass == 2)) && (!component2.smVisibleWhenTalking || (component2.smVisibleWhenTalking && !component2.GetComponent <Radio>().NetworkisTransmitting))) { posData[i] = new PlayerPositionData { position = Vector3.up * 6000f, rotation = 0f, playerID = posData[i].playerID } } ; if (Methods.CheckHidden(pid1, pid2)) { ServerConsole.AddLog("Returned true for " + pid1 + " " + pid2); posData[i] = new PlayerPositionData { position = Vector3.up * 6000f, rotation = 0f, playerID = posData[i].playerID }; } } } switch (component.curClass) { case 16: case 17: { List <PlayerPositionData> posData939 = new List <PlayerPositionData>(posData); for (int i = 0; i < posData939.Count; i++) { CharacterClassManager component2 = players[i].GetComponent <CharacterClassManager>(); if (posData939[i].position.y < 800f && component2.klasy[component2.curClass].team != Team.SCP && component2.klasy[component2.curClass].team != Team.RIP && !players[i].GetComponent <Scp939_VisionController>().CanSee(component.GetComponent <Scp939PlayerScript>())) { posData939[i] = new PlayerPositionData { position = Vector3.up * 6000f, rotation = 0f, playerID = posData939[i].playerID } } ; } __instance.CallTargetTransmit(gameObject.GetComponent <NetworkIdentity>().connectionToClient, posData939.ToArray()); break; } default: __instance.CallTargetTransmit(gameObject.GetComponent <NetworkIdentity>().connectionToClient, posData.ToArray()); break; } } return(false); }
public SpinIdleState(ref TrickPhysicsData dataIn, ref PlayerPositionData posDataIn) { this.c_trickPhys = dataIn; this.c_posData = posDataIn; }
public StationaryState(ref PlayerData playerData, ref PlayerPositionData positionData) { this.c_playerData = playerData; this.c_playerPositionData = positionData; }