Add() public static method

public static Add ( Player P ) : Player
P Player
return Player
示例#1
0
 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);
 }
示例#2
0
        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;
            }
        }