Ejemplo n.º 1
0
    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();
    }
Ejemplo n.º 2
0
 public SpinningState(ref TrickPhysicsData dataIn, ref PlayerPositionData posIn,
                      ref IncrementCartridge incrIn)
 {
     this.c_physData      = dataIn;
     this.c_playerPosData = posIn;
     this.cart_incr       = incrIn;
 }
Ejemplo n.º 3
0
    /// <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;
    }
Ejemplo n.º 4
0
 public RidingChargeState(ref PlayerData playerData, ref PlayerPositionData positionData,
                          ref CollisionData collisionData)
 {
     this.c_playerData         = playerData;
     this.c_playerPositionData = positionData;
     this.c_collisionData      = collisionData;
 }
Ejemplo n.º 5
0
 public StraightState(ref PlayerData playerData,
                      ref PlayerHandlingData turnDataIn,
                      ref PlayerPositionData positionData)
 {
     this.c_playerData   = playerData;
     this.c_turnData     = turnDataIn;
     this.c_positionData = positionData;
 }
Ejemplo n.º 6
0
 public TurnChargeState(ref PlayerData playerData,
                        ref PlayerHandlingData turnDataIn,
                        ref PlayerPositionData positionData)
 {
     this.c_playerData   = playerData;
     this.c_turnData     = turnDataIn;
     this.c_positionData = positionData;
 }
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
        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());
                }
            }
        }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 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;
 }
Ejemplo n.º 12
0
 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;
 }
Ejemplo n.º 13
0
 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;
 }
Ejemplo n.º 14
0
 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);
         }
     }
 }
Ejemplo n.º 15
0
 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;
 }
Ejemplo n.º 16
0
 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];
 }
Ejemplo n.º 17
0
 public SwitchState(ref PlayerPositionData positionDataIn)
 {
     c_positionData = positionDataIn;
 }
Ejemplo n.º 18
0
        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);
            }
        }
Ejemplo n.º 19
0
 public ForwardState(ref PlayerPositionData positionDataIn)
 {
     c_positionData = positionDataIn;
 }
Ejemplo n.º 20
0
 public override void init(MapData mapData)
 {
     playerPositionData = mapData.gameObject.AddComponent<PlayerPositionData>();
 }
Ejemplo n.º 21
0
        // 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);
            }
        }
Ejemplo n.º 22
0
 public SpinCorrectState(ref TrickPhysicsData dataIn, ref PlayerData playerData, ref PlayerPositionData posDataIn)
 {
     this.c_trickPhys  = dataIn;
     this.c_playerData = playerData;
     this.c_posData    = posDataIn;
 }
Ejemplo n.º 23
0
 private static void MakeGhost(int index, PlayerPositionData[] buff) => buff[index] = new PlayerPositionData(GhostPos, buff[index].rotation, buff[index].playerID);
Ejemplo n.º 24
0
 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);
Ejemplo n.º 25
0
        // 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);
                                    }
                                }
                            }
                        }
                    }
Ejemplo n.º 26
0
        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);
            }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
 public SpinIdleState(ref TrickPhysicsData dataIn, ref PlayerPositionData posDataIn)
 {
     this.c_trickPhys = dataIn;
     this.c_posData   = posDataIn;
 }
Ejemplo n.º 29
0
 public StationaryState(ref PlayerData playerData,
                        ref PlayerPositionData positionData)
 {
     this.c_playerData         = playerData;
     this.c_playerPositionData = positionData;
 }