Ejemplo n.º 1
0
        public static RpcSetSkin Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcSetSkin();

            msg.skinId = (Skin)reader.ReadPackedInt32();
            return(msg);
        }
Ejemplo n.º 2
0
        public static RpcSetHat Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcSetHat();

            msg.hatId = (Hat)reader.ReadPackedInt32();
            return(msg);
        }
Ejemplo n.º 3
0
        public static RpcSetPet Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcSetPet();

            msg.petId = reader.ReadPackedInt32();
            return(msg);
        }
Ejemplo n.º 4
0
        public static Ready Deserialize(HazelBinaryReader reader)
        {
            var msg = new Ready();

            msg.playerId = reader.ReadPackedInt32();
            return(msg);
        }
Ejemplo n.º 5
0
        public static Despawn Deserialize(HazelBinaryReader reader)
        {
            var msg = new Despawn();

            msg.netId = reader.ReadPackedInt32();

            return(msg);
        }
Ejemplo n.º 6
0
        public static RpcMurderPlayer Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcMurderPlayer();

            msg.netId = reader.ReadPackedInt32();

            return(msg);
        }
Ejemplo n.º 7
0
 public void Deserialize(HazelBinaryReader reader, bool onSpawn)
 {
     Countdown = reader.ReadSingle();
     if (reader.HasBytesLeft())
     {
         CompletedConsoles = reader.ReadList(read => reader.ReadPackedInt32());
     }
 }
Ejemplo n.º 8
0
        public static WaitForHost Deserialize(HazelBinaryReader reader)
        {
            var msg = new WaitForHost();

            msg.gameCode = reader.ReadInt32();
            msg.playerId = reader.ReadPackedInt32();
            return(msg);
        }
Ejemplo n.º 9
0
        public static RpcEnterVent Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcEnterVent();

            msg.id = reader.ReadPackedInt32();

            return(msg);
        }
Ejemplo n.º 10
0
        public static GetGameListV2Request Deserialize(HazelBinaryReader reader)
        {
            var msg = new GetGameListV2Request();

            reader.ReadPackedInt32(); // Hardcoded 0.
            msg.options = GameOptionsData.Deserialize(reader.ReadBytesAndSize());
            return(msg);
        }
Ejemplo n.º 11
0
        public static KickPlayerRequest Deserialize(HazelBinaryReader reader)
        {
            var msg = new KickPlayerRequest();

            msg.playerId = reader.ReadPackedInt32();
            msg.isBan    = reader.ReadBoolean();
            return(msg);
        }
Ejemplo n.º 12
0
        public static RpcCompleteTask Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcCompleteTask();

            msg.idx = reader.ReadPackedInt32();

            return(msg);
        }
Ejemplo n.º 13
0
        public static Data Deserialize(HazelBinaryReader reader)
        {
            var msg = new Data();

            msg.netId = reader.ReadPackedInt32();
            msg.data = reader.ReadBytesToEnd();
            
            return msg;
        }
Ejemplo n.º 14
0
        public static RpcCall Deserialize(HazelBinaryReader reader)
        {
            var msg = new RpcCall();

            msg.targetNetId = reader.ReadPackedInt32();
            msg.callId      = (RpcCalls)reader.ReadByte();

            return(msg);
        }
Ejemplo n.º 15
0
        public static SceneChange Deserialize(HazelBinaryReader reader)
        {
            var msg = new SceneChange();

            msg.clientId  = reader.ReadPackedInt32();
            msg.sceneName = reader.ReadString();

            return(msg);
        }
Ejemplo n.º 16
0
        public static RemovePlayerResponse Deserialize(HazelBinaryReader reader)
        {
            var msg = new RemovePlayerResponse();

            msg.gameCode = reader.ReadInt32();
            msg.playerId = reader.ReadPackedInt32();
            msg.hostId   = reader.ReadInt32();
            msg.reason   = (DisconnectReason)reader.ReadByte();
            msg.unknown  = reader.ReadByte();
            //msg.unknown2 = reader.ReadByte();
            return(msg);
        }
Ejemplo n.º 17
0
        public static Spawn Deserialize(HazelBinaryReader reader)
        {
            var msg = new Spawn();

            msg.spawnId = reader.ReadPackedInt32();
            msg.ownerId = reader.ReadPackedInt32();
            msg.flags   = (SpawnFlags)reader.ReadByte();

            msg.children = reader.ReadList(read =>
            {
                var netId = reader.ReadPackedInt32();
                var size  = reader.ReadInt16();
                var type  = reader.ReadByte();
                var body  = reader.ReadBytes(size);

                return(new SpawnChild()
                {
                    netId = netId,
                    body = body,
                });
            });

            return(msg);
        }
Ejemplo n.º 18
0
            public static GameListItem Deserialize(HazelBinaryReader reader)
            {
                var msg = new GameListItem();

                msg.adress     = reader.ReadInt32();
                msg.port       = reader.ReadUInt16();
                msg.code       = reader.ReadInt32();
                msg.name       = reader.ReadString();
                msg.players    = reader.ReadByte();
                msg.age        = reader.ReadPackedInt32();
                msg.mapid      = reader.ReadByte();
                msg.imposters  = reader.ReadByte();
                msg.maxplayers = reader.ReadByte();
                return(msg);
            }
Ejemplo n.º 19
0
        public static List <GameDataTo> Deserialize(HazelBinaryReader reader)
        {
            var gameId    = reader.ReadInt32();
            var netId     = reader.ReadPackedInt32();
            var gamedatas = new List <GameDataTo>();

            while (reader.HasBytesLeft())
            {
                var msg = new GameDataTo();
                msg.gameId = gameId;
                msg.netId  = netId;
                var size = reader.ReadInt16();
                msg.type = reader.ReadByte();
                msg.body = reader.ReadBytes(size);
                gamedatas.Add(msg);
            }

            return(gamedatas);
        }
Ejemplo n.º 20
0
        static void HandleGameData(HazelBinaryReader reader, GameDataType datatype, bool send)
        {
            var dir = send ? "SEND" : "RECV";

            switch (datatype)
            {
            case GameDataType.RpcCall:
                var RPC     = RpcCall.Deserialize(reader);
                var reciver = EntityTracker.Get(RPC.targetNetId);
                if (LogRPC)
                {
                    Console.WriteLine($"[RPC][{RPC.callId}]sent to {reciver?.GetType()?.Name ?? "unknown"} size: {reader.GetBytesLeft()}");
                }
                if (reciver != null)
                {
                    reciver.HandleRpcCall(RPC.callId, reader);
                }
                //DumpToConsole(RPC, LogRPC);
                //Console.WriteLine($"RPC for type: {RPC} size: {data.body.Length}");
                switch (RPC.callId)
                {
                case RpcCalls.CheckColor:
                    var CheckColor = CmdCheckColor.Deserialize(reader);
                    DumpToConsole(CheckColor, LogRPC);
                    break;

                case RpcCalls.CheckName:
                    var CheckName = CmdCheckName.Deserialize(reader);
                    DumpToConsole(CheckName, LogRPC);
                    break;

                case RpcCalls.CloseDoorsOfType:
                    var CloseDoorsOfType = RpcCloseDoorsOfType.Deserialize(reader);
                    DumpToConsole(CloseDoorsOfType, LogRPC);
                    break;

                case RpcCalls.EnterVent:
                    var EnterVent = RpcEnterVent.Deserialize(reader);
                    DumpToConsole(EnterVent, LogRPC);
                    break;

                case RpcCalls.ExitVent:
                    var ExitVent = RpcExitVent.Deserialize(reader);
                    DumpToConsole(ExitVent, LogRPC);
                    break;

                case RpcCalls.Exiled:
                    var exileid = reader.ReadPackedInt32();
                    Console.WriteLine("Exile id: " + exileid);
                    break;

                case RpcCalls.SendChat:
                    var chat = RpcSendChat.Deserialize(reader);
                    LogChatToConsole(RPC.targetNetId.ToString(), chat.text);
                    break;

                case RpcCalls.SendChatNote:
                    var chatnote = RpcSendChatNote.Deserialize(reader);
                    LogChatToConsole("server", "SendChatNote");
                    break;

                case RpcCalls.SetColor:
                    var SetColor = RpcSetColor.Deserialize(reader);
                    DumpToConsole(SetColor, LogRPC);
                    break;

                case RpcCalls.SetSkin:
                    var skin = RpcSetSkin.Deserialize(reader);
                    DumpToConsole(skin, LogRPC);
                    break;

                case RpcCalls.SetHat:
                    var hat = RpcSetHat.Deserialize(reader);
                    Console.WriteLine($"Set hat: [{(int)hat.hatId}]{hat.hatId}");
                    break;

                case RpcCalls.SetPet:
                    var setpet = RpcSetPet.Deserialize(reader);
                    DumpToConsole(setpet, LogRPC);
                    break;

                case RpcCalls.SetName:
                    var setname = RpcSetName.Deserialize(reader);
                    DumpToConsole(setname, LogRPC);
                    break;

                case RpcCalls.SetTasks:
                    var SetTasks = RpcSetTasks.Deserialize(reader);
                    DumpToConsole(SetTasks, LogRPC);
                    break;

                case RpcCalls.SetInfected:
                    var infected = RpcSetInfected.Deserialize(reader);
                    DumpToConsole(infected);
                    break;

                case RpcCalls.SetScanner:
                    var SetScanner = RpcSetScanner.Deserialize(reader);
                    DumpToConsole(SetScanner, LogRPC);
                    break;

                case RpcCalls.AddVote:
                    var addvote = RpcAddVote.Deserialize(reader);
                    DumpToConsole(addvote, LogRPC);
                    break;

                case RpcCalls.PlayAnimation:
                    var anim = RpcPlayAnimation.Deserialize(reader);
                    DumpToConsole(anim, LogRPC);
                    break;

                case RpcCalls.CastVote:
                    var castvote = CmdCastVote.Deserialize(reader);
                    DumpToConsole(castvote, LogRPC);
                    break;

                case RpcCalls.CompleteTask:
                    var complete = RpcCompleteTask.Deserialize(reader);
                    DumpToConsole(complete, LogRPC);
                    break;

                case RpcCalls.MurderPlayer:
                    var MurderPlayer = RpcMurderPlayer.Deserialize(reader);
                    var player       = EntityTracker.Get(MurderPlayer.netId);
                    DumpToConsole(MurderPlayer, LogRPC);
                    break;

                case RpcCalls.RepairSystem:
                    var RepairSystem = RpcRepairSystem.Deserialize(reader);
                    DumpToConsole(RepairSystem, LogRPC);
                    break;

                case RpcCalls.ReportDeadBody:
                    var ReportDeadBody = CmdReportDeadBody.Deserialize(reader);
                    DumpToConsole(ReportDeadBody, LogRPC);
                    break;

                case RpcCalls.SnapTo:
                    var SnapTo = RpcSnapTo.Deserialize(reader);
                    DumpToConsole(SnapTo, LogRPC);
                    break;

                case RpcCalls.StartMeeting:
                    var StartMeeting = RpcStartMeeting.Deserialize(reader);
                    DumpToConsole(StartMeeting, LogRPC);
                    break;

                case RpcCalls.VotingComplete:
                    var VotingComplete = RpcVotingComplete.Deserialize(reader);
                    DumpToConsole(VotingComplete, LogRPC);
                    break;

                case RpcCalls.SetStartCounter:
                    var startcounter = RpcSetStartCounter.Deserialize(reader);
                    DumpToConsole(startcounter, LogRPC);
                    break;

                case RpcCalls.SyncSettings:
                    var syncsettings = RpcSyncSettings.Deserialize(reader);
                    DumpToConsole(syncsettings, LogRPC);
                    break;

                //Dont have a message body
                case RpcCalls.Close:
                    break;

                //ComponentSpecific - it contains diffrent data depending on what component it's inteded for
                case RpcCalls.UpdateGameData:
                    var update = RpcUpdateGameData.Deserialize(reader);
                    DumpToConsole(update, LogRPC);
                    break;

                default:
                    Console.WriteLine($"Unhandled RPC command: " + RPC.callId);
                    break;
                }
                if (reader.GetBytesLeft() > 0 && LogNotConsumed)
                {
                    Console.WriteLine($"[{RPC.callId}]{reader.GetBytesLeft()} bytes not cunsumed");
                    reader.ReadBytesToEnd();
                }
                break;

            case GameDataType.Data:
                var            data = Data.Deserialize(reader);
                InnerNetObject entity;
                if (!EntityTracker.entities.TryGetValue(data.netId, out entity))
                {
                    Console.WriteLine($"Entity missing for id: {data.netId} size: {data.data.Length}");
                    return;
                }
                if (!(entity is CustomNetworkTransform))
                {
                    Console.WriteLine($"Recived Data for: {entity.GetType().Name} size: {data.data.Length}");
                }

                entity.Deserialize(new HazelBinaryReader(data.data), false);

                if (LogMoves && entity is CustomNetworkTransform move)
                {
                    Console.WriteLine($"[{dir}]Move command player: {move.OwnerId:0000} seq: {move.seq:0000} pos: {move.position} delta: {move.velocity}");
                }

                break;

            case GameDataType.Spawn:
                var spawn = Spawn.Deserialize(reader);
                Console.WriteLine("Spawning: " + spawn.spawnId);
                switch (spawn.spawnId)
                {
                case 0:
                    var shipStatus = new ShipStatus();
                    shipStatus.OwnerId = spawn.ownerId;
                    shipStatus.NetId   = spawn.children[0].netId;
                    shipStatus.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(shipStatus);
                    break;

                case 1:
                    var meeting = new MeetingHud();
                    meeting.OwnerId = spawn.ownerId;
                    meeting.NetId   = spawn.children[0].netId;
                    meeting.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(meeting);
                    break;

                case 2:
                    var lobby = new LobbyBehaviour();
                    lobby.OwnerId = spawn.ownerId;
                    lobby.NetId   = spawn.children[0].netId;
                    EntityTracker.Add(lobby);
                    break;

                case 3:
                    var gdc = new GameDataComponent();
                    gdc.OwnerId = spawn.ownerId;
                    gdc.NetId   = spawn.children[0].netId;
                    gdc.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(gdc);

                    var dummy2 = new DummyComponent();
                    dummy2.name    = "gamedata.dummy1";
                    dummy2.OwnerId = spawn.ownerId;
                    dummy2.NetId   = spawn.children[1].netId;
                    dummy2.Deserialize(new HazelBinaryReader(spawn.children[1].body), true);
                    EntityTracker.Add(dummy2);
                    break;

                case 4:        //player character
                    var player = new PlayerControl();
                    player.OwnerId = spawn.ownerId;
                    player.NetId   = spawn.children[0].netId;
                    player.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(player);

                    player.dummy1         = new DummyComponent();
                    player.dummy1.name    = "player.dummy1";
                    player.dummy1.OwnerId = spawn.ownerId;
                    player.dummy1.NetId   = spawn.children[1].netId;
                    player.dummy1.Deserialize(new HazelBinaryReader(spawn.children[1].body), true);
                    EntityTracker.Add(player.dummy1);

                    player.transform         = new CustomNetworkTransform();
                    player.transform.OwnerId = spawn.ownerId;
                    player.transform.NetId   = spawn.children[2].netId;
                    player.transform.Deserialize(new HazelBinaryReader(spawn.children[2].body), true);
                    EntityTracker.Add(player.transform);
                    DumpToConsole(player);
                    break;

                case 5:        //HeadQuarters
                    var hq = new ShipStatus();
                    hq.OwnerId = spawn.ownerId;
                    hq.NetId   = spawn.children[0].netId;
                    hq.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(hq);
                    break;

                case 6:        //PlanetMap
                    var polus = new ShipStatus();
                    polus.OwnerId = spawn.ownerId;
                    polus.NetId   = spawn.children[0].netId;
                    polus.Deserialize(new HazelBinaryReader(spawn.children[0].body), true);
                    EntityTracker.Add(polus);
                    break;

                case 7:        //AprilShipStatus
                default:
                    Console.WriteLine($"Unhandled spawnid: {spawn.spawnId}");
                    break;
                }
                break;

            case GameDataType.SceneChange:
                var scene = SceneChange.Deserialize(reader);
                if (scene.sceneName == "OnlineGame")
                {
                    //Starting game
                }
                DumpToConsole(scene);
                break;

            case GameDataType.Despawn:
                var despawn = Despawn.Deserialize(reader);
                EntityTracker.entities.Remove(despawn.netId);
                LogToConsole("Despawn Netid: " + despawn.netId);
                break;

            case GameDataType.Ready:
                var ready = Ready.Deserialize(reader);
                Console.WriteLine($"Ready: " + ready.playerId);
                break;

            case GameDataType.ChangeSettings:
                var changesettings = ChangeSettings.Deserialize(reader);
                DumpToConsole(changesettings);
                break;

            default:
                Console.WriteLine($"Unhandled Gamedatatype: {datatype}");
                break;
            }

            if (reader.GetBytesLeft() > 0 && LogNotConsumed)
            {
                Console.WriteLine($"[{datatype}]{reader.GetBytesLeft()} bytes not cunsumed");
                reader.ReadBytesToEnd();
            }
        }