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); }
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); }
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); }
// 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); }
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); }
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); }