ReadInt16() 공개 메소드

Reads a 16 bit signed integer written using Write(Int16)
public ReadInt16 ( ) : Int16
리턴 System.Int16
예제 #1
0
 public void Decode(NetIncomingMessage im)
 {
     this.BlockID = im.ReadByte();
     this.X = im.ReadInt16();
     this.Y = im.ReadInt16();
     this.Z = im.ReadByte();
 }
예제 #2
0
 public void Decode(NetIncomingMessage im)
 {
     this.ServerName = im.ReadString();
     this.Description = im.ReadString();
     this.Intro = im.ReadString();
     this.Online = im.ReadByte();
     int roomsLength = im.ReadByte();
     for (int i = 0; i < roomsLength; i++)
     {
         Rooms.Add(new LobbySaveData(im.ReadString(), im.ReadInt16(), im.ReadString(), im.ReadByte(), im.ReadInt16(), im.ReadDouble()));
     }
 }
 public ClientDisconnectedTransferableData(NetIncomingMessage message)
 {
     SessionID = message.ReadInt64();
     ID = message.ReadInt32();
     IsValid = message.ReadBoolean();
     PlayerIndex = message.ReadInt16();
 }
예제 #4
0
        public static void ToOtherPlayers(NetIncomingMessage im, OtherPlayer[] d)
        {
            bool alive = im.ReadBoolean();
            float xp = im.ReadFloat();
            float yp = im.ReadFloat();
            float zp = im.ReadFloat();
            Int32 id = im.ReadInt32();
            float xr = im.ReadFloat();
            float yr = im.ReadFloat();
            Int16 model = im.ReadInt16();
            if (d[id] == null)
            {
                d[id] = new OtherPlayer(xp, yp, zp, id, model, xr, yr);
            }
            d[id].model = model;
            d[id].xr = xr;
            d[id].yr = yr;

            if (!alive)
            {
                d[id].ChangeLifeStatus(false);
            }
            d[id].position = new Vector3(xp, yp, zp);
            d[id].boundingSphere.Center = new Vector3(d[id].position.X, d[id].position.Y + Constants.HEADMAX/2, d[id].position.Z);
        }
예제 #5
0
		public virtual S2C.Message.ResLogin ResLogin(NetIncomingMessage im)
		{
			Message.ResLogin data = new Message.ResLogin();
			data.ret = im.ReadInt16();
			if(OnResLogin != null) OnResLogin(im, data);

			return data;
		}
예제 #6
0
        public void Decode(NetIncomingMessage im)
        {
            this.Username = im.ReadString();
            this.Password = im.ReadString();
            this.Color = ColorExtensions.ColorFromHSV(im.ReadInt16(), Client.IO.ColorSaturation / 255f, Client.IO.ColorValue / 255f);

            if (Username.Length > Settings.MaxNameLength) //Clamp name length
                Username = Username.Truncate(Settings.MaxNameLength);
        }
예제 #7
0
		public virtual S2C.Message.ResSendAll ResSendAll(NetIncomingMessage im)
		{
			Message.ResSendAll data = new Message.ResSendAll();
			data.ret = im.ReadInt16();
			data.ret_message = im.ReadString();
			if(OnResSendAll != null) OnResSendAll(im, data);

			return data;
		}
 public PlayerTransferableData(NetIncomingMessage message)
 {
     SessionID = message.ReadInt64();
     ID = message.ReadInt32();
     Index = message.ReadInt16();
     Position = message.ReadVector2();
     Angle = message.ReadFloat();
     IsValid = message.ReadBoolean();
 }
예제 #9
0
파일: Upload.cs 프로젝트: Rohansi/Programe
 protected override void Read(NetIncomingMessage message)
 {
     var length = message.ReadUInt16();
     Program = new short[length];
     for (var i = 0; i < length; i++)
     {
         Program[i] = message.ReadInt16();
     }
 }
 public override void Decode(NetIncomingMessage msg)
 {
     int temp = msg.ReadInt32();
     if (temp > teamScores[player.TeamOf()])
         teamScores[this.player.TeamOf()] = temp;
     temp = msg.ReadInt32();
     TeamFinalTest LPuzzle = ((TeamFinalTest)Game1.pStates[Game1.localPlayer].puzzle);
     if (LPuzzle.countUpdates < temp)
     {
         LPuzzle.countUpdates = temp;
         LPuzzle.circleLarge.Location = new Point(msg.ReadInt16(), msg.ReadInt16());
         LPuzzle.smallPosition = new Vector2(msg.ReadFloat(), msg.ReadFloat());
         LPuzzle.largeDirection.X = msg.ReadFloat();
         LPuzzle.largeDirection.Y = msg.ReadFloat();
         LPuzzle.smallDirection.X = msg.ReadFloat();
         LPuzzle.smallDirection.Y = msg.ReadFloat();
         LPuzzle.scale = msg.ReadFloat();
     }
 }
예제 #11
0
		public virtual S2C.Message.ResSend ResSend(NetIncomingMessage im)
		{
			Message.ResSend data = new Message.ResSend();
			data.ret = im.ReadInt16();
			data.ret_message = im.ReadString();
			data.to_id = im.ReadString();
			if(OnResSend != null) OnResSend(im, data);

			return data;
		}
 /// <summary>
 /// Handles an incoming entity component message
 /// </summary>
 /// <param name="message">Raw network message</param>
 /// <returns>An IncomingEntityComponentMessage object</returns>
 public IncomingEntityComponentMessage HandleEntityComponentNetworkMessage(NetIncomingMessage message)
 {
     var componentFamily = (ComponentFamily) message.ReadByte();
     var messageParams = new List<object>();
     while (message.Position < message.LengthBits)
     {
         switch ((NetworkDataType) message.ReadByte())
         {
             case NetworkDataType.d_enum:
                 messageParams.Add(message.ReadInt32());
                 break;
             case NetworkDataType.d_bool:
                 messageParams.Add(message.ReadBoolean());
                 break;
             case NetworkDataType.d_byte:
                 messageParams.Add(message.ReadByte());
                 break;
             case NetworkDataType.d_sbyte:
                 messageParams.Add(message.ReadSByte());
                 break;
             case NetworkDataType.d_ushort:
                 messageParams.Add(message.ReadUInt16());
                 break;
             case NetworkDataType.d_short:
                 messageParams.Add(message.ReadInt16());
                 break;
             case NetworkDataType.d_int:
                 messageParams.Add(message.ReadInt32());
                 break;
             case NetworkDataType.d_uint:
                 messageParams.Add(message.ReadUInt32());
                 break;
             case NetworkDataType.d_ulong:
                 messageParams.Add(message.ReadUInt64());
                 break;
             case NetworkDataType.d_long:
                 messageParams.Add(message.ReadInt64());
                 break;
             case NetworkDataType.d_float:
                 messageParams.Add(message.ReadFloat());
                 break;
             case NetworkDataType.d_double:
                 messageParams.Add(message.ReadDouble());
                 break;
             case NetworkDataType.d_string:
                 messageParams.Add(message.ReadString());
                 break;
             case NetworkDataType.d_byteArray:
                 int length = message.ReadInt32();
                 messageParams.Add(message.ReadBytes(length));
                 break;
         }
     }
     return new IncomingEntityComponentMessage(componentFamily, messageParams);
 }
예제 #13
0
        public void Decode(NetIncomingMessage im)
        {
            map.Width = Width = im.ReadInt16();
            map.Height = Height= im.ReadInt16();
            map.Tiles = new Tile[map.Width, map.Height, 2];

            for (int z = 0; z < 2; z++)
            {
                for (int y = 0; y < map.Height; y++)
                {
                    for (int x = 0; x < map.Width; x++)
                    {
                        if (z == 0)
                            map.Tiles[x, y, 1] = new Tile(BlockType.FromID(im.ReadByte()));
                        else
                            map.Tiles[x, y, 0] = new Tile(BlockType.FromID(im.ReadByte()));
                    }
                }
            }
        }
예제 #14
0
 public static OtherPlayer MsgToOtherPlayers(NetIncomingMessage im)
 {
     bool alive = im.ReadBoolean();
     float xp = im.ReadFloat();
     float yp = im.ReadFloat();
     float zp = im.ReadFloat();
     Int32 id = im.ReadInt32();
     float xr = im.ReadFloat();
     float yr = im.ReadFloat();
     Int16 model = im.ReadInt16();
     OtherPlayer d = new OtherPlayer(xp, yp, zp, id, xr, yr, false);
     d.model = model;
     return d;
 }
예제 #15
0
        public void Decode(NetIncomingMessage im)
        {
            map.Width = im.ReadInt16();
            map.Height = im.ReadInt16();
            map.Tiles = new Tile[map.Width, map.Height, 2];

            map.Minimap = new Minimap(map, map.Width, map.Height);
            map.Minimap.Position = new Microsoft.Xna.Framework.Vector2(16, 16);
            for (int z = 0; z < 2; z++)
            {
                for (int y = 0; y < map.Height; y++)
                {
                    byte[] b = im.ReadBytes(map.Width);
                    for (int x = 0; x < map.Width; x++)
                    {
                        if (z == 0)
                            map.Tiles[x, y, 1] = new Tile(BlockType.BlockList[b[x]]);
                        else
                            map.Tiles[x, y, 0] = new Tile(BlockType.BlockList[b[x]]);
                    }
                }
            }
        }
예제 #16
0
        void processUnitHarvestCommandBatch(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            bool queued = msg.ReadBoolean();
            short count = msg.ReadInt16();

            for (int i = 0; i < count; i++)
            {
                Unit unit = Player.Players[team].UnitArray[msg.ReadInt16()];
                Resource targetResource = Resource.ResourceArray[msg.ReadInt16()];

                Player.Players[team].ScheduledActions.Add(new ScheduledUnitTargetedCommand(scheduledTime, new HarvestCommand(unit, targetResource), targetResource, queued));
            }
        }
예제 #17
0
파일: Game.cs 프로젝트: JamieH/SpaceBarGame
        //Message Handler
        private void MessageReceive(NetIncomingMessage message)
        {
            byte packetHeader;
            try
            {
                packetHeader = message.ReadByte(); //Try read Header
            }
            catch
            {
                return;
            }

            switch ((Network.PacketTypes) packetHeader) //Switch PacketHeaderType
            {
                case Network.PacketTypes.RECEIVEPLAYER: //Receive a new player
                    string name = message.ReadString();
                    long uid = message.ReadInt64();

                    int bufferLength = message.ReadInt32();
                    byte[] buffer = message.ReadBytes(bufferLength);

                    PlayerStore.Add(uid, new Player(name, buffer, 0));

                    Console.WriteLine("Player {0} connected with ID: {1}", name, uid);
                    load.Invoke(new Action(() => load.RefreshDisplay()));
                    break;

                case Network.PacketTypes.GETPOS: //Receive someones score
                    long id = message.ReadInt64();
                    int score = message.ReadInt16();
                    Console.WriteLine(id);

                    PlayerStore[id].Score = score;
                    load.Invoke(new Action(() => RefreshDisplay()));
                    Console.WriteLine("Player: {0} Score: {1}", PlayerStore[id].Name, PlayerStore[id].Score);

                    if (PlayerStore[id].Score >= 100 & Program.SetWinner == false)
                    {
                        Program.Realwinner = PlayerStore[id].Name;
                        Program.SetWinner = true;
                        Program.LeaderBoardList.Add(String.Format("{0} : {1}", Program.Realwinner,
                        globalGameTime));
                        Invoke(new Action(() => LeaderBoard.DataSource = Program.LeaderBoardList));
                    }
                    break;

                case Network.PacketTypes.HOST: //If we receive this then we are the host
                    load.Invoke(new Action(() => load.buttonStart.Visible = true));
                    string fix = message.ReadString();
                    break;

                case Network.PacketTypes.STARTGAME: //Start the Game form.
                    load.Invoke(new Action(() => TheSpacebarGame.Menu.game.Show()));
                    string fix2 = message.ReadString();
                    break;

                case Network.PacketTypes.SCOREWIN: //Someone has Won
                    string person = message.ReadString();
                    Program.Place = message.ReadInt16();

                    if (Program.Place == 1 & person == Program.Ourname)
                    {
                        Program.LeaderBoardList.Add(String.Format("{0} : {1}", person,globalGameTime));
                        Invoke(new Action(() => LeaderBoard.DataSource = Program.LeaderBoardList));
                    }
                    else
                    {
                        Program.LeaderBoardList.Add(String.Format("{0} : {1}", person, globalGameTime));

                        Invoke(new Action(() => LeaderBoard.DataSource = Program.LeaderBoardList));
                    }
                    break;

                case Network.PacketTypes.DISCONNECT: //Someone has Disconnected
                    long thereID = message.ReadInt64();
                    if (PlayerStore.ContainsKey(thereID))
                    {
                        PlayerStore.Remove(thereID);
                    }
                    else
                    {
                        Console.WriteLine("Tried to remove non existant ID");
                    }

                    if (Program.Started)
                    {
                        load.Invoke(new Action(() => RefreshDisplay()));
                    }
                    break;
                case Network.PacketTypes.CHATREC: //Start the Game form.
                    long idrec = message.ReadInt64();
                    string recMessage = message.ReadString();
                    Console.WriteLine(idrec);
                    Console.WriteLine(recMessage);
                    Game.ChatMessages.Add(LoadScreen.RandomNumber(1, 99999999), new ChatMessage(PlayerStore[idrec], recMessage));
                    load.Invoke(new Action(() => load.RefreshChat()));

                    break;
            }
        }
예제 #18
0
        public void HandleMessages(object fromPlayer)
        {
            if ((inmsg = ((NetServer)fromPlayer).ReadMessage()) == null) return;

            NetOutgoingMessage outmsg;
                switch(inmsg.MessageType)
                {
                    /*
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    */
                    case NetIncomingMessageType.ConnectionApproval:
                        {
                            if (players.Count==0) idCount = 0;
                            Console.WriteLine("Incoming login request. " + inmsg.SenderConnection.ToString());
                            AddNewPlayer(inmsg);

                            if (gamePhase == (int)GameState.InGame || gamePhase == (int)GameState.Intro)
                            {
                                // Auto Join Game
                                StartGame(players.Find(p => p.Connection == inmsg.SenderConnection));
                            }
                        }
                        break;
                    case NetIncomingMessageType.Data:

                        PlayerObject player = players.Find(p => p.Connection == inmsg.SenderConnection);
                        if (player == null || inmsg.LengthBytes < 1)
                            break; //Don't accept data from connections that don't have a player attached.

                        switch ((PacketTypes)inmsg.ReadByte())
                        {
                            case PacketTypes.LobbyMessage:
                                {
                                    string msg = inmsg.ReadString();
                                    SendLobbyMessage(player.Name, msg);
                                    Console.WriteLine("Chat "+player.Name + ": " + msg);
                                }
                                break;
                            case PacketTypes.SettingsChange:
                                {
                                    if(inmsg.LengthBytes<2) break;
                                    //Difficulty or health mod changed, broadcast changes to all clients.
                                    gameDifficulty = inmsg.ReadInt16();
                                    healthMod = inmsg.ReadInt16();
                                    crab.CalculateHealth();
                                    Console.WriteLine(player.Name+ " (Id"+player.Id+") changed difficulty/healthmod to " + gameDifficulty + "/" + healthMod + ".");

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.SettingsChange);
                                    outmsg.Write((Int16)gameDifficulty);
                                    outmsg.Write((Int16)healthMod);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 5);
                                }
                                break;
                            case PacketTypes.KeepAlive:
                                {
                                    // one way heartbeat from client. Server sets a timestamp.
                                    // Unity can potentially keep unstable client threads open that waist server resources
                                    player.keepAlive = NetTime.Now;
                                }
                                break;
                            case PacketTypes.Beat:
                                {
                                    if (inmsg.LengthBytes<2) break;// .PeekInt16()) break;
                                    //if (!player.Ready) break;
                                    player.LastBeat = inmsg.ReadInt16();
                                    player.X = inmsg.ReadFloat();
                                    player.Y = inmsg.ReadFloat();

                                    if (crab.CurrentTarget == player.Id)
                                    {
                                        float CrabX = inmsg.ReadFloat();
                                        float CrabZ = inmsg.ReadFloat();

                                        crab.RealPosition.X = CrabX;
                                        crab.RealPosition.Z = CrabZ;

                                        if (crab.random.Next(0, 10) > 8)
                                            crab.Direction = !crab.Direction;

                                        //Crab position and target sync.
                                        outmsg = server.CreateMessage();
                                        outmsg.Write((byte)PacketTypes.EnemySync);
                                        outmsg.Write((Int16)player.Id); //Id of the current crab controller.
                                        outmsg.Write(CrabX); //EnemyX
                                        outmsg.Write(CrabZ); //EnemyZ
                                        outmsg.Write(player.X);
                                        outmsg.Write(player.Y);
                                        outmsg.Write(crab.Direction);
                                        outmsg.Write(player.Connection.AverageRoundtripTime/2f); //Divide by 2 to get trip time.
                                        server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 3);
                                    }
                                }
                                break;
                            case PacketTypes.Ready:
                                {
                                    //Player is ready to start the game.
                                    player.Ready = inmsg.ReadBoolean();

                                    Console.WriteLine(player.Name + " (Id"+player.Id+") changed their ready status to " + player.Ready);
                                    if (player.Ready)
                                        SendLobbyMessage("Server", player.Name + " is now Ready.");
                                    else
                                        SendLobbyMessage("Server", player.Name + " is no longer ready.");
                                }
                                break;
                            case PacketTypes.PlayIntro:
                                {
                                    if(gamePhase == (int)GameState.InGame || gamePhase == (int)GameState.Intro)
                                    {
                                        SendConsoleMessage("cannot change intro while game is in play",inmsg.SenderConnection);
                                        outmsg = server.CreateMessage();
                                        outmsg.Write((byte)PacketTypes.PlayIntro);
                                        outmsg.Write(false);
                                        server.SendMessage(outmsg, inmsg.SenderConnection, NetDeliveryMethod.ReliableOrdered, 5);
                                        break;
                                    }
                                    //Player changed the status of Play Intro
                                    playintro = inmsg.ReadBoolean();
                                    if(playintro) introlength = new TimeSpan(0, 0, 21);
               						else introlength = new TimeSpan(0, 0, 7);

                                    Console.WriteLine(player.Name + " (Id"+player.Id+") changed PlayInto to " + playintro);
                                    if (playintro)
                                        SendLobbyMessage("Server", player.Name + " enabled play intro.");
                                    else
                                        SendLobbyMessage("Server", player.Name + " skipped play intro.");

                                    // Now sync everyone up.
                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.PlayIntro);
                                    outmsg.Write(playintro);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 5);
                                }
                                break;
                            case PacketTypes.UpdateName:
                                {
                                    //Player changed their name.  Since the clients aren't aware of each other until the game starts,
                                    //there's no need to broadcast this message to other users.
                                    string newname = inmsg.ReadString();
                                    Console.WriteLine(player.Name + " (Id"+player.Id+") changed their name to '" + newname + "'.");
                                    SendLobbyMessage("Server", player.Name + " (Id"+player.Id+") changed their name to '" + newname + "'.");
                                    player.Name = newname;

                                    // let all other clients know that player changed his/her name
                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.UpdateName);
                                    outmsg.Write(player.Name);
                                    outmsg.Write(player.Id);
                                    server.SendToAll(outmsg, inmsg.SenderConnection, NetDeliveryMethod.ReliableOrdered, 5);
                                }
                                break;
                            case PacketTypes.Disconnect:
                                {
                                    //Player requests to disconnect from the server.
                                    Console.WriteLine(player.Name+" (Id"+player.Id+") has disconnected, removing player object.");

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.RemovePlayer);
                                    outmsg.Write((Int16)player.Id);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 1);

                                    players.Remove(player);

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.PlayerCount);
                                    outmsg.Write((Int16)players.Count);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 6);
                                }
                                break;
                            case PacketTypes.StartGame:
                                {
                                    StartGame(player);
                                }
                                break;
                            case PacketTypes.PlayerSpecial:
                                {
                                    int shottype = inmsg.ReadInt16();

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.PlayerSpecial);
                                    outmsg.Write((Int16)player.Id);
                                    outmsg.Write((Int16)shottype);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableUnordered, 2);
                                    //Console.WriteLine("Relaying Special Action Message for " + player.Name + ".");
                                }
                                break;
                            case PacketTypes.PlayerAction:
                                {
                                    if(inmsg.LengthBytes<2) break;
                                    //Player hit a key or something!  Change their status, broadcast to other users.

                                    //Set player values
                                    //inmsg.ReadInt16(); //Player id is submitted, but not used.
                                    player.X = inmsg.ReadFloat();
                                    player.Y = inmsg.ReadFloat();
                                    player.VelocityX = inmsg.ReadFloat();
                                    player.VelocityY = inmsg.ReadFloat();
                                    player.Firing = inmsg.ReadBoolean();

                                    //Broadcast them to everyone else
                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.PlayerAction);
                                    outmsg.Write((Int16)player.Id);
                                    outmsg.Write(player.X);
                                    outmsg.Write(player.Y);
                                    outmsg.Write(player.VelocityX);
                                    outmsg.Write(player.VelocityY);
                                    outmsg.Write(player.Firing);
                                    outmsg.Write(player.Connection.AverageRoundtripTime/2f); //Not an exact science, but we'll use this to predict their position.
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 2);

                                    //Console.WriteLine("Relaying Action Message for " + player.Name + ". "+player.VelocityX + " " + player.VelocityY);
                                }
                                break;
                            case PacketTypes.HurtTarget:
                                {
                                    int damage = inmsg.ReadInt16();

                                    crab.CurrentHealth -= damage;
                                    bool hittype = inmsg.ReadBoolean();

                                    if (!hittype)
                                        player.dmgnormal += damage;
                                    else
                                        player.dmgweakpoint += damage;

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.EnemyHealth);
                                    outmsg.Write((Int16)crab.CurrentHealth);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableUnordered, 3);
                                }
                                break;
                            case PacketTypes.PlayerHit:
                                {
                                    player.hitstaken += 1;

                                    outmsg = server.CreateMessage();
                                    outmsg.Write((byte)PacketTypes.PlayerHit);
                                    outmsg.Write((Int16)player.Id);
                                    server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableUnordered, 2);
                                }
                                break;
                        }
                        break;
                    case NetIncomingMessageType.StatusChanged:
                        {
                         	player = players.Find(p => p.Connection == inmsg.SenderConnection);
                            if (player == null)
                                break; //Don't accept data from connections that don't have a player attached.

                            NetConnectionStatus status = (NetConnectionStatus)inmsg.ReadByte();
                            string reason = inmsg.ReadString();

                            if (player.Connection.Status == NetConnectionStatus.Disconnected || player.Connection.Status == NetConnectionStatus.Disconnecting)
                            {
                                SendLobbyMessage("Server", player.Name + " (Id"+player.Id+") has disconnected.");

                                outmsg = server.CreateMessage();
                                outmsg.Write((byte)PacketTypes.RemovePlayer);
                                outmsg.Write((Int16)player.Id);
                                server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 1);

                                players.Remove(player);

                                outmsg = server.CreateMessage();
                                outmsg.Write((byte)PacketTypes.PlayerCount);
                                outmsg.Write((Int16)players.Count);
                                server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 6);
                            }
                            Console.WriteLine(player.Name + " (Id"+player.Id+") status changed to "+status+" (" + reason + ") "+players.Count);
                        }
                        break;
                    default:
                        break;
            }
        }
예제 #19
0
        void processUnitStopCommandBatch(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            bool queued = msg.ReadBoolean();
            short count = msg.ReadInt16();

            for (int i = 0; i < count; i++)
            {
                short unitID = msg.ReadInt16();
                Unit unit = Player.Players[team].UnitArray[unitID];
                Player.Players[team].ScheduledActions.Add(new ScheduledUnitCommand(scheduledTime, new StopCommand(unit), queued));
            }
        }
예제 #20
0
        void processUnitStatusUpdate(NetIncomingMessage msg)
        {
            short unitID = msg.ReadInt16();
            short team = msg.ReadInt16();
            short hp = msg.ReadInt16();
            Vector2 position = new Vector2(msg.ReadFloat(), msg.ReadFloat());
            float rotation = msg.ReadFloat();
            bool idle = msg.ReadBoolean();

            Unit unit = Player.Players[team].UnitArray[unitID];

            if (unit != null)
            {
                if (hp < unit.Hp && !unit.IsDead)
                {
                    unit.Hp = hp;
                    if (hp <= 0)
                        unit.Die();
                    return;
                }

                //if (unit.IsIdle)
                if (idle)
                {
                    //if (unit.IsIdle)
                    //    unit.CenterPoint = position;

                    if (!unit.IsIdle)
                        unit.NextCommand();
                }
                else
                {
                    Vector2 expectedPosition = new Vector2(position.X + unit.Speed * connection.AverageRoundtripTime / 2 * (float)Math.Cos(rotation), position.Y + unit.Speed * connection.AverageRoundtripTime / 2 * (float)Math.Sin(rotation));

                    if (Vector2.Distance(expectedPosition, unit.CenterPoint) > unit.Radius)
                    {
                        //unit.CenterPoint -= new Vector2((unit.CenterPoint.X - expectedPosition.X), (unit.CenterPoint.Y - expectedPosition.Y));
                        unit.CenterPoint = expectedPosition;
                    }
                }

                // read current command ID
                int commandID = msg.ReadInt16();
                // if its not the same as our current command, look for it in queue
                if (commandID != -1 && unit.Commands.Count > 0 && commandID != unit.Commands[0].ID)
                {
                    for (int i = 1; i < unit.Commands.Count; i++)
                    {
                        UnitCommand command = unit.Commands[i];
                        if (command.ID == commandID)
                        {
                            // do NextCommand enough times to catch up
                            for (int s = 0; s < i; s++)
                                unit.NextCommand();
                        }
                    }
                }

                // read cargoAmount at end if worker
                WorkerNublet worker = unit as WorkerNublet;
                if (worker != null)
                {
                    short cargoAmount = msg.ReadInt16();

                    worker.CargoAmount = cargoAmount;
                }
            }
        }
예제 #21
0
        void processUnitReturnCargoCommandBatch(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            short count = msg.ReadInt16();

            for (int i = 0; i < count; i++)
            {
                short unitID = msg.ReadInt16();
                short townHallID = msg.ReadInt16();
                short resourceID = msg.ReadInt16();

                Unit unit = Player.Players[team].UnitArray[unitID];
                Structure townHall = Player.Players[team].StructureArray[townHallID];

                Resource resource;
                if (resourceID == -1)
                    resource = null;
                else
                    resource = Resource.ResourceArray[resourceID];

                Player.Players[team].ScheduledActions.Add(new ScheduledReturnCargoCommand(scheduledTime, new ReturnCargoCommand(unit, townHall, resource)));
            }
        }
예제 #22
0
        void processUnitMoveCommandBatch(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            bool queued = msg.ReadBoolean();
            short numberOfCommands = msg.ReadInt16();

            for (int i = 0; i < numberOfCommands; i++)
            {
                short unitID = msg.ReadInt16();
                Unit unit = Player.Players[team].UnitArray[unitID];
                Vector2 destination = new Vector2(msg.ReadFloat(), msg.ReadFloat());
                if (unit != null)
                {
                    MoveCommand moveCommand = new MoveCommand(unit, destination);
                    Player.Players[team].ScheduledActions.Add(new ScheduledUnitCommand(scheduledTime, moveCommand, queued));
                    //Rts.pathFinder.AddHighPriorityPathFindRequest(moveCommand, (int)Vector2.DistanceSquared(moveCommand.Unit.CenterPoint, moveCommand.Destination), false);
                }
                else
                {
                    int wut = 0;
                }
            }
        }
예제 #23
0
        void processUnitDeath(NetIncomingMessage msg)
        {
            short unitID = msg.ReadInt16();
            short team = msg.ReadInt16();

            Unit unit = Player.Players[team].UnitArray[unitID];

            if (unit != null && !unit.IsDead)
                unit.Die();
        }
예제 #24
0
        void processStructureStatusUpdate(NetIncomingMessage msg)
        {
            short structureID = msg.ReadInt16();
            short team = msg.ReadInt16();
            short hp = msg.ReadInt16();

            Structure structure = Player.Players[team].StructureArray[structureID];
            if (structure != null && hp < structure.Hp && structure.HasTakenDamageEver)
            {
                structure.Hp = hp;
                if (hp <= 0)
                    structure.Die();
            }
        }
예제 #25
0
        void processStructureDeath(NetIncomingMessage msg)
        {
            short structureID = msg.ReadInt16();
            short team = msg.ReadInt16();

            Structure structure = Player.Players[team].StructureArray[structureID];

            if (structure != null && !structure.IsDead)
                structure.Die();
        }
예제 #26
0
        void processStructureCommand(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            short structureID = msg.ReadInt16();
            short commandTypeID = msg.ReadInt16();
            short unitID = msg.ReadInt16();

            Structure structure = Player.Players[team].StructureArray[structureID];
            CommandButtonType commandType = CommandButtonType.CommandButtonTypes[commandTypeID];

            if (structure == null)
            {
                int wut = 0;
            }

            Player.Players[team].ScheduledActions.Add(new ScheduledStructureCommand(scheduledTime, structure, commandType, unitID));
        }
예제 #27
0
        void processUnitAttackCommandBatch(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();
            bool queued = msg.ReadBoolean();
            short count = msg.ReadInt16();

            RtsObject target;
            short targetIsStructure = msg.ReadInt16();
            if (targetIsStructure == 0)
            {
                short targetID = msg.ReadInt16();
                short targetTeam = msg.ReadInt16();
                target = Player.Players[targetTeam].UnitArray[targetID];
            }
            else
            {
                short targetID = msg.ReadInt16();
                short targetTeam = msg.ReadInt16();
                target = Player.Players[targetTeam].StructureArray[targetID];
            }

            for (int i = 0; i < count; i++)
            {
                Unit unit = Player.Players[team].UnitArray[msg.ReadInt16()];
                if (unit != null)
                {
                    AttackCommand attackCommand = new AttackCommand(unit, target, false, false);
                    Player.Players[target.Team].ScheduledActions.Add(new ScheduledUnitCommand(scheduledTime, attackCommand, queued));
                    //Rts.pathFinder.AddHighPriorityPathFindRequest(attackCommand, (int)Vector2.DistanceSquared(attackCommand.Unit.CenterPoint, attackCommand.Destination), false);
                }
            }
        }
예제 #28
0
        void processUnitHpUpdate(NetIncomingMessage msg)
        {
            short unitID = msg.ReadInt16();
            short team = msg.ReadInt16();
            short hp = msg.ReadInt16();

            Unit unit = Player.Players[team].UnitArray[unitID];
            if (unit != null && hp < unit.Hp)
            {
                unit.Hp = hp;
                if (hp <= 0)
                    unit.Die();
            }
        }
예제 #29
0
 protected override void Read(NetIncomingMessage message)
 {
     x = message.ReadInt16();
     y = message.ReadInt16();
     rotation = message.ReadUInt16().FromNetworkRotation() * (180f / (float)Math.PI);
 }
예제 #30
0
        void processUnitBuildCommand(NetIncomingMessage msg)
        {
            float scheduledTime = msg.ReadFloat();
            short team = msg.ReadInt16();

            Unit unit = Player.Players[team].UnitArray[msg.ReadInt16()];

            StructureType structureType = StructureType.StructureTypes[msg.ReadInt16()];
            Point location = new Point(msg.ReadInt16(), msg.ReadInt16());
            bool queued = msg.ReadBoolean();

            BuildStructureCommand buildStructureCommand = new BuildStructureCommand(unit, structureType, location, new Vector2(location.X * map.TileSize + structureType.Size * map.TileSize / 2, location.Y * map.TileSize + structureType.Size * map.TileSize / 2));
            Player.Players[team].ScheduledActions.Add(new ScheduledUnitBuildCommand(scheduledTime, buildStructureCommand, queued));
            //Rts.pathFinder.AddPathFindRequest(buildStructureCommand, queued, false, false);
        }