public static bool CreateLobby(string Name) { if (MultiPlayer.Type("Game") == null) { //Map = new Map(80, 45); Map = Map.Load(@".\map.dat"); Players = new Player[10]; Self = Player.Add(new Player(Name)); MultiPlayer.Start("Game", 6121, Players.Length); Timers.Add("Positions", (1 / 30d)); return(true); } return(false); }
public static void Read(Packets Packet, NetIncomingMessage I) { switch (Packet) { case Packets.Connection: if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { var ClientVersion = I.ReadUInt64(); if (ClientVersion == Globe.Version) { var Connector = Player.Add(new Player(I.ReadString()) { Connection = I.SenderConnection }); if (Connector != null) { if ((GameType == GameTypes.TeamDeathmatch) || (GameType == GameTypes.TeamStandard)) { Connector.Team = (byte)((TeamCount(1) > TeamCount(2)) ? 2 : ((TeamCount(2) > TeamCount(1)) ? 1 : Globe.Random(1, 2))); } MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packet, Connector.Slot, Connector.Name, Connector.Team), I.SenderConnection); var Details = new List <object>(); Details.Add((byte)GameType); Details.Add(RespawnTimer); Details.Add(Connector.Team); for (byte i = 0; i < Players.Length; i++) { if ((Players[i] != null) && (Players[i] != Connector)) { Details.Add(true); Details.Add(Players[i].Name); Details.Add(Players[i].Team); } else { Details.Add(false); } } I.SenderConnection.Approve(MultiPlayer.Construct("Game", Packets.Initial, (byte)Players.Length, Connector.Slot, Details)); } else { I.SenderConnection.Deny("Full"); } } else { I.SenderConnection.Deny("Version indifference, Client: " + ClientVersion + " - Server: " + Globe.Version); } } else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { var Slot = I.ReadByte(); Player.Set(Slot, new Player(I.ReadString()) { Team = I.ReadByte() }); } break; case Packets.Disconnection: var Disconnector = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : ((MultiPlayer.Type("Game") == MultiPlayer.Types.Client) ? Players[I.ReadByte()] : null)); if (Disconnector != null) { Player.Remove(Disconnector); } if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packets.Disconnection, Disconnector.Slot), I.SenderConnection); } break; case Packets.Initial: if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { Players = new Player[I.ReadByte()]; Self = Player.Set(I.ReadByte(), new Player(MpName)); GameType = (GameTypes)I.ReadByte(); RespawnTimer = I.ReadDouble(); Self.Team = I.ReadByte(); for (byte i = 0; i < Players.Length; i++) { if (I.ReadBoolean()) { Players[i] = new Player(i, I.ReadString()) { Team = I.ReadByte() }; } } State = States.RequestMap; Timers.Add("Positions", (1 / 30d)); } break; case Packets.RequestMap: if (MultiPlayer.Type() == MultiPlayer.Types.Server) { List <object> Details = new List <object>(); Details.AddRange(GetSyncedMap); Details.Add((byte)State); MultiPlayer.SendTo(MultiPlayer.Construct(Packet, Details), I.SenderConnection); } else if (MultiPlayer.Type() == MultiPlayer.Types.Client) { Map = ReadSyncedMap(I); State = (States)I.ReadByte(); } break; case Packets.Position: var Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : null); Vector2 Position; float Angle; if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { if (Sender != null) { Sender.Position = I.ReadVector2(); Sender.Angle = I.ReadFloat(); } } else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { var Count = (byte)((I.LengthBytes - 1) / 12); for (byte i = 0; i < Count; i++) { Sender = Players[I.ReadByte()]; Position = I.ReadVector2(); Angle = I.ReadFloat(); if (Sender != null) { Sender.Position = Position; Sender.Angle = Angle; } } } break; case Packets.PlaceFore: byte ID = I.ReadByte(); ushort x = I.ReadUInt16(), y = I.ReadUInt16(); byte TAngle = I.ReadByte(); Map.PlaceFore(ID, x, y, TAngle); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, ID, x, y, TAngle), I.SenderConnection); } break; case Packets.ClearFore: x = I.ReadUInt16(); y = I.ReadUInt16(); Map.ClearFore(x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, x, y), I.SenderConnection); } break; case Packets.PlaceBack: ID = I.ReadByte(); x = I.ReadUInt16(); y = I.ReadUInt16(); Map.PlaceBack(ID, x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, ID, x, y), I.SenderConnection); } break; case Packets.ClearBack: x = I.ReadUInt16(); y = I.ReadUInt16(); Map.ClearBack(x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, x, y), I.SenderConnection); } break; case Packets.Fire: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Position = I.ReadVector2(); Angle = I.ReadFloat(); Sender.Fire(Position, Angle); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Position, Angle), I.SenderConnection); } break; case Packets.Death: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Sender.Killer = Players[I.ReadByte()]; Sender.Die(); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Sender.Killer.Slot), I.SenderConnection); } break; case Packets.Respawn: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Position = I.ReadVector2(); Sender.Respawn(Position); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Position), I.SenderConnection); } break; case Packets.EndRound: VictoryStates VictoryState = (VictoryStates)I.ReadByte(); byte TeamWon = ((VictoryState == VictoryStates.Team) ? I.ReadByte() : (byte)0); byte RoundEndMusicIndex = I.ReadByte(); EndRound(VictoryState, TeamWon, RoundEndMusicIndex); break; case Packets.NewRound: NewRound(); break; } }