PopulateChecksum() public method

public PopulateChecksum ( ) : Signature
return System.Signature
示例#1
0
        public static Packet RankReport(UInt16 gameId, int teamNumber, int teamRank, int[] playerRanks)
        {
            var packet = new Packet();

            packet.Type = PacketType.RankReport;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));

            var flags = (UInt16)(((teamNumber & 0xf) << 4) | (teamRank & 0xf));

            packet.Data.Add(new Signature(SignatureType.Data, flags));

            for (int i = 0; i < 8; i++)
            {
                if (playerRanks.Length > i)
                {
                    packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerRanks[i] & 0xff)));
                }
                else
                {
                    packet.Data.Add(new Signature(SignatureType.Data, 0));
                }
            }
            packet.PopulateChecksum();

            return(packet);
        }
示例#2
0
        public static Packet AssignPlayerFailed(UInt16 gameId, UInt16 taggerId)
        {
            var packet = new Packet();
            packet.Type = PacketType.AssignPlayerFailed;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, taggerId));
            packet.PopulateChecksum();

            return packet;
        }
示例#3
0
        public static Packet AssignPlayerFailed(UInt16 gameId, UInt16 taggerId)
        {
            var packet = new Packet();

            packet.Type = PacketType.AssignPlayerFailed;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, taggerId));
            packet.PopulateChecksum();

            return(packet);
        }
示例#4
0
        public static Packet RequestTagReport(UInt16 gameId, TeamPlayerId teamPlayerId)
        {
            var packet = new Packet();

            packet.Type = PacketType.RequestTagReport;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, teamPlayerId.Packed44));
            packet.Data.Add(new Signature(SignatureType.Data, 0x0f));         // TODO: Magic Number
            packet.PopulateChecksum();

            return(packet);
        }
示例#5
0
        public static Packet RequestJoinGame(UInt16 gameId, UInt16 taggerId, int preferredTeamNumber)
        {
            var packet = new Packet();

            packet.Type = PacketType.RequestJoinGame;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, taggerId));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(preferredTeamNumber & 0x3)));
            packet.PopulateChecksum();

            return(packet);
        }
示例#6
0
        public static Packet AnnounceGame(GameDefinition gameDefinition)
        {
            var packet = new Packet();

            packet.Type = gameDefinition.GameTypeInfo.PacketType;
            packet.Data.Add(new Signature(SignatureType.Data, gameDefinition.GameId));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.GameTimeMinutes)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Tags)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Reloads)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Shields)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Mega)));

            var flags1 = (byte)((gameDefinition.ExtendedTagging ? 1 : 0) << 7 |
                                (gameDefinition.LimitedReloads ? 1 : 0) << 6 |
                                (gameDefinition.LimitedMega ? 1 : 0) << 5 |
                                (gameDefinition.TeamTags ? 1 : 0) << 4 |
                                (gameDefinition.MedicMode ? 1 : 0) << 3 |
                                (gameDefinition.SlowTags ? 1 : 0) << 2 |
                                (gameDefinition.GameTypeInfo.HuntThePrey ? 1 : 0) << 1 |
                                (gameDefinition.GameTypeInfo.ReverseHuntDirection ? 1 : 0) << 0);

            var flags2 = (byte)((gameDefinition.GameTypeInfo.Zones ? 1 : 0) << 7 |
                                (gameDefinition.GameTypeInfo.TeamZones ? 1 : 0) << 6 |
                                (gameDefinition.GameTypeInfo.NeutralizePlayersTaggedInZone ? 1 : 0) << 5 |
                                (gameDefinition.GameTypeInfo.ZonesRevivePlayers ? 1 : 0) << 4 |
                                (gameDefinition.GameTypeInfo.HospitalZones ? 1 : 0) << 3 |
                                (gameDefinition.GameTypeInfo.ZonesTagPlayers ? 1 : 0) << 2 |
                                (gameDefinition.TeamCount & 0x03));

            // hard code these here for now
            switch (gameDefinition.GameType)
            {
            case GameType.Respawn:                     // RESP
            case GameType.RespawnTwoTeams:             // 2TRS
            case GameType.RespawnThreeTeams:           // 3TRS
                flags1 |= 0x80;
                flags2 |= 0x30;
                break;
            }

            packet.Data.Add(new Signature(SignatureType.Data, flags1));
            packet.Data.Add(new Signature(SignatureType.Data, flags2));

            if (gameDefinition.GameTypeInfo.PacketType == PacketType.AnnounceGameSpecial)
            {
                packet.Data.AddRange(gameDefinition.GameTypeInfo.Name.GetSignatures(4, true));
            }

            packet.PopulateChecksum();

            return(packet);
        }
示例#7
0
        public static Packet AnnounceGame(GameDefinition gameDefinition)
        {
            var packet = new Packet();
            packet.Type = gameDefinition.GameTypeInfo.PacketType;
            packet.Data.Add(new Signature(SignatureType.Data, gameDefinition.GameId));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.GameTimeMinutes)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Tags)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Reloads)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Shields)));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal((byte)gameDefinition.Mega)));

            var flags1 = (byte) ((gameDefinition.ExtendedTagging ? 1 : 0) << 7 |
                                 (gameDefinition.LimitedReloads ? 1 : 0) << 6 |
                                 (gameDefinition.LimitedMega ? 1 : 0) << 5 |
                                 (gameDefinition.TeamTags ? 1 : 0) << 4 |
                                 (gameDefinition.MedicMode ? 1 : 0) << 3 |
                                 (gameDefinition.SlowTags ? 1 : 0) << 2 |
                                 (gameDefinition.GameTypeInfo.HuntThePrey ? 1 : 0) << 1 |
                                 (gameDefinition.GameTypeInfo.ReverseHuntDirection ? 1 : 0) << 0);

            var flags2 = (byte) ((gameDefinition.GameTypeInfo.Zones ? 1 : 0) << 7 |
                                 (gameDefinition.GameTypeInfo.TeamZones ? 1 : 0) << 6 |
                                 (gameDefinition.GameTypeInfo.NeutralizePlayersTaggedInZone ? 1 : 0) << 5 |
                                 (gameDefinition.GameTypeInfo.ZonesRevivePlayers ? 1 : 0) << 4 |
                                 (gameDefinition.GameTypeInfo.HospitalZones ? 1 : 0) << 3 |
                                 (gameDefinition.GameTypeInfo.ZonesTagPlayers ? 1 : 0) << 2 |
                                 (gameDefinition.TeamCount & 0x03));

            // hard code these here for now
            switch (gameDefinition.GameType)
            {
                case GameType.Respawn: // RESP
                case GameType.RespawnTwoTeams: // 2TRS
                case GameType.RespawnThreeTeams: // 3TRS
                    flags1 |= 0x80;
                    flags2 |= 0x30;
                    break;
            }

            packet.Data.Add(new Signature(SignatureType.Data, flags1));
            packet.Data.Add(new Signature(SignatureType.Data, flags2));

            if (gameDefinition.GameTypeInfo.PacketType == PacketType.AnnounceGameSpecial)
            {
                packet.Data.AddRange(gameDefinition.GameTypeInfo.Name.GetSignatures(4, true));
            }

            packet.PopulateChecksum();

            return packet;
        }
示例#8
0
        public static Packet Countdown(UInt16 gameId, byte remainingSeconds, int playerCountTeam1, int playerCountTeam2, int playerCountTeam3)
        {
            var packet = new Packet();

            packet.Type = PacketType.AnnounceCountdown;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal(remainingSeconds)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam1 & 0xff)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam2 & 0xff)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam3 & 0xff)));
            packet.PopulateChecksum();

            return(packet);
        }
示例#9
0
        public static Packet TextMessage(String message)
        {
            var packet = new Packet();

            packet.Type = PacketType.TextMessage;

            if (message.Length > 10)
            {
                message = message.Substring(0, 10);
            }
            var messageChars = message.ToCharArray();

            foreach (var character in messageChars)
            {
                packet.Data.Add(new Signature(SignatureType.Data, character));
            }

            packet.Data.Add(new Signature(SignatureType.Data, 0));             // null terminator

            packet.PopulateChecksum();

            return(packet);
        }
示例#10
0
        public static Packet Countdown(UInt16 gameId, byte remainingSeconds, int playerCountTeam1, int playerCountTeam2, int playerCountTeam3)
        {
            var packet = new Packet();
            packet.Type = PacketType.AnnounceCountdown;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, BinaryCodedDecimal.FromDecimal(remainingSeconds)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam1 & 0xff)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam2 & 0xff)));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(playerCountTeam3 & 0xff)));
            packet.PopulateChecksum();

            return packet;
        }
示例#11
0
        public static Packet TextMessage(String message)
        {
            var packet = new Packet();
            packet.Type = PacketType.TextMessage;

            if (message.Length > 10) message = message.Substring(0, 10);
            var messageChars = message.ToCharArray();
            foreach (var character in messageChars)
            {
                packet.Data.Add(new Signature(SignatureType.Data, character));
            }

            packet.Data.Add(new Signature(SignatureType.Data, 0)); // null terminator

            packet.PopulateChecksum();

            return packet;
        }
示例#12
0
        public static Packet RequestTagReport(UInt16 gameId, TeamPlayerId teamPlayerId)
        {
            var packet = new Packet();
            packet.Type = PacketType.RequestTagReport;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, teamPlayerId.Packed44));
            packet.Data.Add(new Signature(SignatureType.Data, 0x0f)); // TODO: Magic Number
            packet.PopulateChecksum();

            return packet;
        }
示例#13
0
        public static Packet RequestJoinGame(UInt16 gameId, UInt16 taggerId, int preferredTeamNumber)
        {
            var packet = new Packet();
            packet.Type = PacketType.RequestJoinGame;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));
            packet.Data.Add(new Signature(SignatureType.Data, taggerId));
            packet.Data.Add(new Signature(SignatureType.Data, (UInt16)(preferredTeamNumber & 0x3)));
            packet.PopulateChecksum();

            return packet;
        }
示例#14
0
        public static Packet RankReport(UInt16 gameId, int teamNumber, int teamRank, int[] playerRanks)
        {
            var packet = new Packet();
            packet.Type = PacketType.RankReport;
            packet.Data.Add(new Signature(SignatureType.Data, gameId));

            var flags = (UInt16) (((teamNumber & 0xf) << 4) | (teamRank & 0xf));
            packet.Data.Add(new Signature(SignatureType.Data, flags));

            for (int i = 0; i < 8; i++)
            {
                if (playerRanks.Length > i)
                {
                    packet.Data.Add(new Signature(SignatureType.Data, (UInt16) (playerRanks[i] & 0xff)));
                }
                else
                {
                    packet.Data.Add(new Signature(SignatureType.Data, 0));
                }
            }
            packet.PopulateChecksum();

            return packet;
        }