Пример #1
0
    internal static Packet_Server EntityPositionAndOrientation(int id, Packet_PositionAndOrientation positionAndOrientation)
    {
        Packet_Server p = new Packet_Server();

        p.Id                = Packet_ServerIdEnum.EntityPosition;
        p.EntityPosition    = new Packet_ServerEntityPositionAndOrientation();
        p.EntityPosition.Id = id;
        p.EntityPosition.PositionAndOrientation = positionAndOrientation;
        return(p);
    }
Пример #2
0
        Packet_PositionAndOrientation ToNetworkEntityPosition(ServerPlatform platform, ServerEntityPositionAndOrientation position)
        {
            Packet_PositionAndOrientation p = new Packet_PositionAndOrientation();

            p.X       = platform.FloatToInt(position.x * 32);
            p.Y       = platform.FloatToInt(position.y * 32);
            p.Z       = platform.FloatToInt(position.z * 32);
            p.Heading = position.heading;
            p.Pitch   = position.pitch;
            p.Stance  = position.stance;
            return(p);
        }
Пример #3
0
    public static EntityPosition_ ToClientEntityPosition(Packet_PositionAndOrientation pos)
    {
        float           one = 1;
        EntityPosition_ p   = new EntityPosition_();

        p.x    = (one * pos.X) / 32;
        p.y    = (one * pos.Y) / 32;
        p.z    = (one * pos.Z) / 32;
        p.rotx = Game.Angle256ToRad(pos.Pitch);
        p.roty = Game.Angle256ToRad(pos.Heading);
        return(p);
    }
Пример #4
0
        // EntityPositionAndOrientation
        void NotifyPlayerPositions(Server server, int clientid, float dt)
        {
            ClientOnServer c = server.clients[clientid];

            c.notifyPlayerPositionsAccum += dt;
            if (c.notifyPlayerPositionsAccum < (one / PlayerPositionUpdatesPerSecond))
            {
                return;
            }
            c.notifyPlayerPositionsAccum = 0;
            foreach (var k in server.clients)
            {
                if (k.Value.state != ClientStateOnServer.Playing)
                {
                    continue;
                }
                if (!c.IsSpectator && k.Value.IsSpectator)
                {
                    // Do not send position updates for spectating players if player is not spectator himself
                    continue;
                }
                if (k.Key == clientid)
                {
                    if (k.Value.positionOverride == null)
                    {
                        continue;
                    }
                    else
                    {
                        k.Value.entity.position  = k.Value.positionOverride;
                        k.Value.positionOverride = null;
                    }
                }
                else
                {
                    if (server.DistanceSquared(server.PlayerBlockPosition(server.clients[k.Key]), server.PlayerBlockPosition(server.clients[clientid])) > server.config.PlayerDrawDistance * server.config.PlayerDrawDistance)
                    {
                        continue;
                    }
                }
                Packet_PositionAndOrientation position = ToNetworkEntityPosition(server.serverPlatform, server.clients[k.Key].entity.position);
                server.SendPacket(clientid, ServerPackets.EntityPositionAndOrientation(k.Key, position));
            }
        }
Пример #5
0
 public static EntityPosition_ ToClientEntityPosition(Packet_PositionAndOrientation pos)
 {
     float one = 1;
     EntityPosition_ p = new EntityPosition_();
     p.x = (one * pos.X) / 32;
     p.y = (one * pos.Y) / 32;
     p.z = (one * pos.Z) / 32;
     p.rotx = Game.Angle256ToRad(pos.Pitch);
     p.roty = Game.Angle256ToRad(pos.Heading);
     return p;
 }
Пример #6
0
    void ProcessPacket(int client, Packet_Client packet)
    {
        switch (packet.GetId())
        {
        case Packet_ClientIdEnum.PlayerIdentification:
        {
            if (packet.Identification == null)
            {
                return;
            }
            SendPacket(client, ServerPackets.Identification(0, MapSizeX, MapSizeY, MapSizeZ, platform.GetGameVersion()));
            clients[client].Name = packet.Identification.Username;
        }
        break;

        case Packet_ClientIdEnum.RequestBlob:
        {
            SendPacket(client, ServerPackets.LevelInitialize());
            for (int i = 0; i < blockTypesCount; i++)
            {
                Packet_BlockType blocktype = blockTypes[i];
                if (blocktype == null)
                {
                    blocktype = new Packet_BlockType();
                }
                SendPacket(client, ServerPackets.BlockType(i, blocktype));
            }
            SendPacket(client, ServerPackets.BlockTypes());
            SendPacket(client, ServerPackets.LevelFinalize());
            for (int i = 0; i < clientsCount; i++)
            {
                if (clients[i] == null)
                {
                    continue;
                }
                clients[i].glX = spawnGlX;
                clients[i].glY = spawnGlY;
                clients[i].glZ = spawnGlZ;
                Packet_PositionAndOrientation pos = new Packet_PositionAndOrientation();
                pos.X     = platform.FloatToInt(32 * clients[i].glX);
                pos.Y     = platform.FloatToInt(32 * clients[i].glY);
                pos.Z     = platform.FloatToInt(32 * clients[i].glZ);
                pos.Pitch = 255 / 2;
                //SendPacket(client, ServerPackets.Spawn(i, clients[i].Name, pos));
                Packet_ServerEntity e = new Packet_ServerEntity();
                e.DrawModel             = new Packet_ServerEntityAnimatedModel();
                e.DrawModel.Model_      = "player.txt";
                e.DrawModel.ModelHeight = platform.FloatToInt((one * 17 / 10) * 32);
                e.DrawModel.EyeHeight   = platform.FloatToInt((one * 15 / 10) * 32);
                e.Position = pos;
                SendPacket(client, ServerPackets.EntitySpawn(0, e));
                SendPacket(client, ServerPackets.PlayerStats(100, 100, 100, 100));
            }
            for (int i = 0; i < modsCount; i++)
            {
                mods[i].OnPlayerJoin(client);
            }
            clients[client].connected = true;
        }
        break;

        case Packet_ClientIdEnum.Message:
        {
            SendPacketToAll(ServerPackets.Message(platform.StringFormat2("{0}: &f{1}", clients[client].Name, packet.Message.Message)));
        }
        break;

        case Packet_ClientIdEnum.SetBlock:
        {
            int x     = packet.SetBlock.X;
            int y     = packet.SetBlock.Y;
            int z     = packet.SetBlock.Z;
            int block = packet.SetBlock.BlockType;
            int mode  = packet.SetBlock.Mode;
            if (mode == Packet_BlockSetModeEnum.Create)
            {
            }
            if (mode == Packet_BlockSetModeEnum.Destroy)
            {
                SendPacketToAll(ServerPackets.SetBlock(x, y, z, 0));
            }
            if (mode == Packet_BlockSetModeEnum.Use)
            {
            }
            if (mode == Packet_BlockSetModeEnum.UseWithTool)
            {
            }
        }
        break;

        case Packet_ClientIdEnum.PositionandOrientation:
        {
            clients[client].glX = one * packet.PositionAndOrientation.X / 32;
            clients[client].glY = one * packet.PositionAndOrientation.Y / 32;
            clients[client].glZ = one * packet.PositionAndOrientation.Z / 32;
        }
        break;

        case Packet_ClientIdEnum.InventoryAction:
        {
            switch (packet.InventoryAction.Action)
            {
            case Packet_InventoryActionTypeEnum.Click:
                break;
            }
        }
        break;
        }
    }
Пример #7
0
 internal static Packet_Server EntityPositionAndOrientation(int id, Packet_PositionAndOrientation positionAndOrientation)
 {
     Packet_Server p = new Packet_Server();
     p.Id = Packet_ServerIdEnum.EntityPosition;
     p.EntityPosition = new Packet_ServerEntityPositionAndOrientation();
     p.EntityPosition.Id = id;
     p.EntityPosition.PositionAndOrientation = positionAndOrientation;
     return p;
 }
Пример #8
0
 Packet_PositionAndOrientation ToNetworkEntityPosition(ServerPlatform platform, ServerEntityPositionAndOrientation position)
 {
     Packet_PositionAndOrientation p = new Packet_PositionAndOrientation();
     p.X = platform.FloatToInt(position.x * 32);
     p.Y = platform.FloatToInt(position.y * 32);
     p.Z = platform.FloatToInt(position.z * 32);
     p.Heading = position.heading;
     p.Pitch = position.pitch;
     p.Stance = position.stance;
     return p;
 }
Пример #9
0
 void ProcessPacket(int client, Packet_Client packet)
 {
     switch (packet.GetId())
     {
         case Packet_ClientIdEnum.PlayerIdentification:
             {
                 if (packet.Identification == null)
                 {
                     return;
                 }
                 SendPacket(client, ServerPackets.Identification(0, MapSizeX, MapSizeY, MapSizeZ, platform.GetGameVersion()));
                 clients[client].Name = packet.Identification.Username;
             }
             break;
         case Packet_ClientIdEnum.RequestBlob:
             {
                 SendPacket(client, ServerPackets.LevelInitialize());
                 for (int i = 0; i < blockTypesCount; i++)
                 {
                     Packet_BlockType blocktype = blockTypes[i];
                     if (blocktype == null)
                     {
                         blocktype = new Packet_BlockType();
                     }
                     SendPacket(client, ServerPackets.BlockType(i, blocktype));
                 }
                 SendPacket(client, ServerPackets.BlockTypes());
                 SendPacket(client, ServerPackets.LevelFinalize());
                 for (int i = 0; i < clientsCount; i++)
                 {
                     if (clients[i] == null)
                     {
                         continue;
                     }
                     clients[i].glX = spawnGlX;
                     clients[i].glY = spawnGlY;
                     clients[i].glZ = spawnGlZ;
                     Packet_PositionAndOrientation pos = new Packet_PositionAndOrientation();
                     pos.X = platform.FloatToInt(32 * clients[i].glX);
                     pos.Y = platform.FloatToInt(32 * clients[i].glY);
                     pos.Z = platform.FloatToInt(32 * clients[i].glZ);
                     pos.Pitch = 255 / 2;
                     //SendPacket(client, ServerPackets.Spawn(i, clients[i].Name, pos));
                     Packet_ServerEntity e = new Packet_ServerEntity();
                     e.DrawModel = new Packet_ServerEntityAnimatedModel();
                     e.DrawModel.Model_ = "player.txt";
                     e.DrawModel.ModelHeight = platform.FloatToInt((one * 17 / 10) * 32);
                     e.DrawModel.EyeHeight = platform.FloatToInt((one * 15 / 10) * 32);
                     e.Position = pos;
                     SendPacket(client, ServerPackets.EntitySpawn(0, e));
                     SendPacket(client, ServerPackets.PlayerStats(100, 100, 100, 100));
                 }
                 for (int i = 0; i < modsCount; i++)
                 {
                     mods[i].OnPlayerJoin(client);
                 }
                 clients[client].connected = true;
             }
             break;
         case Packet_ClientIdEnum.Message:
             {
                 SendPacketToAll(ServerPackets.Message(platform.StringFormat2("{0}: &f{1}", clients[client].Name, packet.Message.Message)));
             }
             break;
         case Packet_ClientIdEnum.SetBlock:
             {
                 int x = packet.SetBlock.X;
                 int y = packet.SetBlock.Y;
                 int z = packet.SetBlock.Z;
                 int block = packet.SetBlock.BlockType;
                 int mode = packet.SetBlock.Mode;
                 if (mode == Packet_BlockSetModeEnum.Create)
                 {
                 }
                 if (mode == Packet_BlockSetModeEnum.Destroy)
                 {
                     SendPacketToAll(ServerPackets.SetBlock(x, y, z, 0));
                 }
                 if (mode == Packet_BlockSetModeEnum.Use)
                 {
                 }
                 if (mode == Packet_BlockSetModeEnum.UseWithTool)
                 {
                 }
             }
             break;
         case Packet_ClientIdEnum.PositionandOrientation:
             {
                 clients[client].glX = one * packet.PositionAndOrientation.X / 32;
                 clients[client].glY = one * packet.PositionAndOrientation.Y / 32;
                 clients[client].glZ = one * packet.PositionAndOrientation.Z / 32;
             }
             break;
         case Packet_ClientIdEnum.InventoryAction:
             {
                 switch (packet.InventoryAction.Action)
                 {
                     case Packet_InventoryActionTypeEnum.Click:
                         break;
                 }
             }
             break;
     }
 }