コード例 #1
0
        public void SendWhoIsPlayerToPlayer(int connectionId, int index, SpaceEntityType spaceEntityType, uint objectId, uint ownerGuid, uint WorldCard)
        {
            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.WhoIs);
            buffer.Write(objectId);
            buffer.Write((byte)CreatingCause.AlreadyExists);
            buffer.Write(ownerGuid); // The OwnerGUID. Since idk what it could be, just using his index
            buffer.Write(WorldCard); // The WorldCardGUID which is the spaceship loaded.

            //nothing yet
            buffer.Write((ushort)0);
            buffer.Write((ushort)0);

            buffer.Write(Server.GetClientByIndex(index).playerId); //player id
            buffer.Write((uint)BgoAdminRoles.Developer);           //player role
            buffer.Write(Server.GetClientByIndex(index).Character.PlayerShip.isVisible);

            SendMessageToUser(connectionId, buffer);
        }
コード例 #2
0
        public void SendRestManeuverToPlayer(int index, SpaceEntityType spaceEntityType, uint objectId, Vector3 position, Vector3 euler3 = default(Vector3))
        {
            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.SyncMove);
            buffer.Write(objectId);
            buffer.Write(Server.GetSectorByClientIndex(index).Tick); // tick

            Server.GetClientByIndex(index).Character.PlayerShip.MovementFrame.Write(buffer);

            buffer.Write((byte)2);
            buffer.Write(Server.GetSectorByClientIndex(index).Tick); //startTick

            //position
            buffer.Write(position);

            //euler3
            buffer.Write(euler3);

            SendMessageToUser(index, buffer);
        }
コード例 #3
0
        public void SendRestManeuverToSector(uint index, SpaceEntityType spaceEntityType, uint objectId, Vector3 position, Vector3 euler3, MovementFrame movementFrame)
        {
            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.SyncMove);
            buffer.Write(objectId);
            buffer.Write(Server.GetSectorById(index).Tick); // tick

            movementFrame.Write(buffer);

            buffer.Write((byte)2);
            buffer.Write(Server.GetSectorById(index).Tick); //startTick

            //position
            buffer.Write(position);

            //euler3
            buffer.Write(euler3);

            SendMessageToSector(index, buffer);
        }
コード例 #4
0
        // No idea why but this makes the game load (???)
        // I guess it spawns the player in a position inside the Sector
        private void SyncMove(int index, SpaceEntityType spaceEntityType, uint objectId, Vector3 position, Vector3 euler3 = default(Vector3))
        {
            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.SyncMove);
            buffer.Write((uint)spaceEntityType + objectId);
            buffer.Write((int)1); // tick

            //position
            buffer.Write(position);

            //euler3
            buffer.Write(euler3);

            //linearSpeed
            buffer.Write(new Vector3());

            //strafeSpeed
            buffer.Write(new Vector3());

            //euler3speed
            buffer.Write(new Vector3());

            // mode
            buffer.Write((byte)2);

            buffer.Write((byte)2);
            buffer.Write((int)1);

            //position
            buffer.Write(position);

            //euler3
            buffer.Write(euler3);

            SendMessageToUser(index, buffer);
        }
コード例 #5
0
        private void SyncMove(int index, SpaceEntityType spaceEntityType, uint objectId)
        {
            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.SyncMove);
            buffer.Write((uint)spaceEntityType + objectId);
            buffer.Write((int)1); // tick

            //position
            buffer.Write(new Vector3());

            //euler3
            buffer.Write(new Vector3());

            //linearSpeed
            buffer.Write(new Vector3());

            //strafeSpeed
            buffer.Write(new Vector3());

            //euler3speed
            buffer.Write(new Vector3());

            // mode
            buffer.Write((byte)2);

            buffer.Write((byte)8);
            buffer.Write(1);

            //qweasd
            buffer.Write(Server.GetClientByIndex(index).Character.qweasd);

            ObjectStats currentShipStats = ((ShipCard)Catalogue.FetchCard(Server.GetClientByIndex(index).Character.WorldCardGUID, CardView.Ship)).Stats;

            //gear
            buffer.Write((byte)0);
            //speed
            buffer.Write(Server.GetClientByIndex(index).Character.shipSpeed);
            //acceleration
            buffer.Write(currentShipStats.Acceleration);
            //inertiaCompensation
            buffer.Write(currentShipStats.InertiaCompensation);
            //pitchAcceleration
            buffer.Write(currentShipStats.PitchAcceleration);
            //pitchMaxSpeed
            buffer.Write(currentShipStats.PitchMaxSpeed);
            //yawAcceleration
            buffer.Write(currentShipStats.YawAcceleration);
            //yawMaxSpeed
            buffer.Write(currentShipStats.YawMaxSpeed);
            //rollAcceleration
            buffer.Write(currentShipStats.RollAcceleration);
            //rollMaxSpeed
            buffer.Write(currentShipStats.RollMaxSpeed);
            //strafeAcceleration
            buffer.Write(currentShipStats.StrafeAcceleration);
            //strafeMaxSpeed
            buffer.Write(currentShipStats.StrafeMaxSpeed);


            SendMessageToUser(index, buffer);
        }
コード例 #6
0
        public void SyncMove(int index, SpaceEntityType spaceEntityType, uint objectId)
        {
            Client c = Server.GetClientByIndex(index);

            c.lastSyncSendTime = DateTime.UtcNow;

            if (!c.Character.PlayerShip.isSpawned && c.Character.PlayerShip.MovementOptions.speed > 0)
            {
                c.Character.PlayerShip.isSpawned = true;
                c.Character.PlayerShip.ManeuverController.AddManeuver(new TurnManeuver(ManeuverType.Turn, Server.GetSectorById(c.Character.PlayerShip.sectorId).Tick.Current.value, c.Character.PlayerShip.qweasd, c.Character.PlayerShip.MovementOptions)); // Avoid problems with setting speed and not moving due to being at the rest maneuver
            }

            BgoProtocolWriter buffer = NewMessage();

            buffer.Write((ushort)Reply.SyncMove);
            buffer.Write(objectId);

            Sector s = Server.GetSectorById(c.Character.PlayerShip.sectorId);

            buffer.Write(s.Tick.Current - 1); // tick

            c.Character.PlayerShip.MovementFrame.Write(buffer);
            //c.Character.ManeuverController.GetTickFrame(s.Tick.Current - 1).Write(buffer);

            Maneuver     lastManeuverAtTick = c.Character.PlayerShip.ManeuverController.GetLastManeuverAtTick(s.Tick.Current);
            ManeuverType maneuverType       = lastManeuverAtTick.ManeuverType;

            buffer.Write((byte)maneuverType);
            buffer.Write(lastManeuverAtTick.GetStartTick());

            switch (maneuverType)
            {
            case ManeuverType.Rest:
                buffer.Write(c.Character.PlayerShip.MovementFrame.position);
                buffer.Write(c.Character.PlayerShip.MovementFrame.euler3);
                break;

            case ManeuverType.Turn:
            case ManeuverType.TurnQweasd:
                buffer.Write((byte)c.Character.PlayerShip.qweasd.Bitmask);
                break;

            case ManeuverType.Directional:
            case ManeuverType.DirectionalWithoutRoll:
                buffer.Write(c.Character.PlayerShip.direction);
                break;
            }

            ObjectStats currentShipStats = c.Character.PlayerShip.currentShipStats;

            //gear
            buffer.Write((byte)c.Character.PlayerShip.shipGear);
            //speed
            buffer.Write(c.Character.PlayerShip.shipGear == Gear.Regular ? c.Character.PlayerShip.shipSpeed : currentShipStats.BoostSpeed);
            //acceleration
            buffer.Write(currentShipStats.Acceleration);
            //inertiaCompensation
            buffer.Write(currentShipStats.InertiaCompensation);
            //pitchAcceleration
            buffer.Write(currentShipStats.PitchAcceleration);
            //pitchMaxSpeed
            buffer.Write(currentShipStats.PitchMaxSpeed);
            //yawAcceleration
            buffer.Write(currentShipStats.YawAcceleration);
            //yawMaxSpeed
            buffer.Write(currentShipStats.YawMaxSpeed);
            //rollAcceleration
            buffer.Write(currentShipStats.RollAcceleration);
            //rollMaxSpeed
            buffer.Write(currentShipStats.RollMaxSpeed);
            //strafeAcceleration
            buffer.Write(currentShipStats.StrafeAcceleration);
            //strafeMaxSpeed
            buffer.Write(currentShipStats.StrafeMaxSpeed);

            SendMessageToSector(index, buffer);
        }