{"id":1625,"date":"2026-01-01T23:17:35","date_gmt":"2026-01-01T23:17:35","guid":{"rendered":"https:\/\/grimms3dworlds.ddns.net\/?page_id=1625"},"modified":"2026-01-02T01:20:31","modified_gmt":"2026-01-02T01:20:31","slug":"1625-2","status":"publish","type":"page","link":"https:\/\/grimms3dworlds.ddns.net\/index.php\/1625-2\/","title":{"rendered":""},"content":{"rendered":"\n<div style=\"font-family: 'Segoe UI', Arial, sans-serif; max-width: 900px; margin: 0 auto; padding: 20px; background: #ffffff; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1);\">\n\n    <h1 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n        UT2004 Query Protocol \u2013 Practical Reference\n    <\/h1>\n\n    <p style=\"color: #4a4a4a; line-height: 1.6;\">\n        This document describes the Unreal Tournament 2004 (UT2004) UDP query protocol as observed from real server responses.\n        It focuses on three key query types: <strong>Server Info<\/strong>, <strong>Server Rules<\/strong>, and <strong>Player List<\/strong>.\n        All examples below are based on actual captured packets and include decoded values for clarity.\n    <\/p>\n\n    <p style=\"background: #e7f3fe; border: 1px solid #b6d4fe; padding: 15px; color: #0c5460; border-radius: 5px; margin-bottom: 20px;\">\n        <strong>Note:<\/strong> All packets shown are sent via UDP to the server\u2019s query port (typically gameport + 1).\n        Hex values are written as space-separated byte pairs, and numeric values are little-endian unless stated otherwise.\n        <br><br>\n        <strong>Ignored values are likely unknown or unused fields and can be treated as padding or reserved data.<\/strong>\n    <\/p>\n\n    <!-- Section 1: Query Packets -->\n\n    <h2 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n        1. Client Query Packets\n    <\/h2>\n\n    <p style=\"color: #4a4a4a; line-height: 1.6;\">\n        The client sends small 5-byte packets to request information from the UT2004 server. The first byte is always\n        <code>0x79<\/code>, followed by four bytes indicating the query type.\n    <\/p>\n\n    <table style=\"width: 100%; border-collapse: collapse; margin-bottom: 20px;\">\n        <thead>\n            <tr style=\"border: 1px solid #ddd; background: #f8f9fa; color: black;\">\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Purpose<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Hex Packet<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Description<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Server Info<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>79 00 00 00 00<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Requests basic server information such as hostname, map, game type, and player counts.<\/td>\n            <\/tr>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Server Rules<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>79 00 00 00 01<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Returns key\/value pairs describing server settings (mutators, limits, modes, etc.).<\/td>\n            <\/tr>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Player List (Single Packet)<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>79 00 00 00 02<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Returns a single player list packet.<\/td>\n            <\/tr>\n            <tr style=\"border: 1px solid #ddd; background:#f0f7ff;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><strong>Player List (Multi\u2011Packet)<\/strong><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><strong><code>79 00 00 00 03<\/code><\/strong><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><strong>Returns two packets: rules (0x01) and players (0x02).<\/strong><\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n\n\n\n    <!-- Section 2: Common Response Header -->\n\n    <h2 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n        2. Common Response Header\n    <\/h2>\n\n    <p style=\"color: #4a4a4a; line-height: 1.6;\">\n        All UT2004 query responses begin with a 5-byte header. The first four bytes are a fixed signature\n        <code>80 00 00 00<\/code>. The fifth byte indicates the response type.\n    <\/p>\n\n    <table style=\"width: 100%; border-collapse: collapse; margin-bottom: 20px;\">\n        <thead>\n            <tr style=\"border: 1px solid #ddd; background: #f8f9fa; color: black;\">\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Response Type<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Header Hex<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Meaning<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Server Info<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>80 00 00 00 00<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Response to the Server Info query.<\/td>\n            <\/tr>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Server Rules<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>80 00 00 00 01<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Response to the Server Rules query.<\/td>\n            <\/tr>\n            <tr style=\"border: 1px solid #ddd;\">\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Player List<\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>80 00 00 00 02<\/code><\/td>\n                <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Response to the Player List query.<\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n\n    <!-- Section 3: Server Info (Decoded) -->\n\n    <h2 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n        3. Server Info Response (Decoded)\n    <\/h2>\n\n    <p style=\"color:#4a4a4a;line-height:1.6;\">\n        The Server Info response provides hostname, map, game type, and player counts. Below is a captured example with key\n        fields decoded. Length-prefixed strings use: <code>[length][ASCII bytes][00]<\/code>.\n    <\/p>\n\n    <pre style=\"background: #1e1e1e; color: #ffffff; padding: 15px; border-radius: 5px; font-size: 14px; line-height: 1.4; max-height: 400px; overflow-y: auto; overflow-x: auto; white-space: pre;\">\n80 00 00 00 00\n00 00 00 00 00 00\n6C 1E 00 00 00 00 00 00\n18 47 72 69 6D 6D 73 2D 49 6E 73 74 61 2D 44 65 61 74 68 6D 61 74 63 68 00\n10 44 4D 2D 31 6F 6E 31 2D 53 71 75 61 64 65 72 00\n0C 78 44 65 61 74 68 4D 61 74 63 68 00\n04 00 00 00\n0A 00 00 00\n00 00 00 00 00 00 00 00 00 00 00 02 30 00 00 00\n<\/pre>\n\n    <h3 style=\"color: #1a3c5e; border-bottom: 1px solid #e0e6ed; margin-top: 25px; margin-bottom: 15px; padding-bottom: 8px;\">\n        3.1 Decoded Fields\n    <\/h3>\n\n    <table style=\"width: 100%; border-collapse: collapse; margin-bottom: 20px;\">\n        <thead>\n            <tr style=\"border: 1px solid #ddd; background: #f8f9fa; color: black;\">\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Field<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Raw Bytes<\/th>\n                <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Decoded Value \/ Meaning<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Header<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>80 00 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Server Info response header.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Unknown block 1<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>00 00 00 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Ignored (likely unknown or unused).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Unknown block 2<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>6C 1E 00 00 00 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Ignored (likely unknown or unused).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Hostname length<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>18<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">24 bytes follow for hostname (excluding the null terminator in the count).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Hostname<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>47 72 69 6D ... 63 68 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Grimms-Insta-Deathmatch<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Map name length<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>10<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">16 bytes follow for map name.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Map name<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>44 4D 2D 31 6F 6E 31 2D 53 71 75 61 64 65 72 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">DM-1on1-Squader<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Game type length<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>0C<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">12 bytes follow for game type.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Game type<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>78 44 65 61 74 68 4D 61 74 63 68 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">xDeathMatch<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Current players<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>04 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">4 players online.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Max players<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>0A 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">10 player slots.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Trailing block<\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\"><code>00 ... 30 00 00 00<\/code><\/td>\n                <td style=\"border:1px solid #ddd;padding:8px;\">Ignored (likely unknown or unused).<\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n\n    <!-- Section 4: Server Rules -->\n\n    <h2 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n        4. Server Rules Response (Decoded)\n    <\/h2>\n\n    <p style=\"color:#4a4a4a;line-height:1.6;\">\n        The Server Rules response returns a list of key\/value pairs. Each key and value is stored as a\n        length-prefixed ASCII string followed by a null terminator:\n    <\/p>\n\n    <ul style=\"color:#4a4a4a;padding-left:20px;margin-bottom:8px;\">\n        <li style=\"margin-bottom:8px;\"><strong>1 byte:<\/strong> length of key<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>N bytes:<\/strong> key<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>1 byte:<\/strong> 0x00 (null terminator)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>1 byte:<\/strong> length of value<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>M bytes:<\/strong> value<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>1 byte:<\/strong> 0x00 (null terminator)<\/li>\n    <\/ul>\n\n    <pre style=\"background:#1e1e1e;color:#fff;padding:15px;border-radius:5px;white-space:pre;overflow:auto;max-height:400px;\">\n80 00 00 00 01\n0B 53 65 72 76 65 72 4D 6F 64 65 00 0A 64 65 64 69 63 61 74 65 64 00\n0A 41 64 6D 69 6E 4E 61 6D 65 00 06 47 72 69 6D 6D 00\n0B 41 64 6D 69 6E 45 6D 61 69 6C 00 00\n0E 53 65 72 76 65 72 56 65 72 73 69 6F 6E 00 05 33 33 33 39 00\n0A 47 61 6D 65 53 74 61 74 73 00 06 46 61 6C 73 65 00\n0E 4D 61 78 53 70 65 63 74 61 74 6F 72 73 00 02 32 00\n0A 4D 61 70 56 6F 74 69 6E 67 00 05 74 72 75 65 00\n0B 4B 69 63 6B 56 6F 74 69 6E 67 00 06 66 61 6C 73 65 00\n08 4D 75 74 61 74 6F 72 00 0C 4D 75 74 49 6E 73 74 61 47 69 62 00\n0B 4D 69 6E 50 6C 61 79 65 72 73 00 02 34 00\n0D 45 6E 64 54 69 6D 65 44 65 6C 61 79 00 05 34 2E 30 30 00\n0A 47 6F 61 6C 53 63 6F 72 65 00 03 33 30 00\n0A 54 69 6D 65 4C 69 6D 69 74 00 03 31 35 00\n0D 54 72 61 6E 73 6C 6F 63 61 74 6F 72 00 06 46 61 6C 73 65 00\n0B 57 65 61 70 6F 6E 53 74 61 79 00 06 46 61 6C 73 65 00\n0D 46 6F 72 63 65 52 65 73 70 61 77 6E 00 06 46 61 6C 73 65 00\n08 6D 75 74 61 74 6F 72 00 0A 44 4D 4D 75 74 61 74 6F 72 00\n<\/pre>\n\n    <h3 style=\"color:#1a3c5e;border-bottom:1px solid #e0e6ed;margin-bottom:15px;padding-bottom:8px;\">\n        4.1 Decoded Key\/Value Pairs\n    <\/h3>\n\n    <table style=\"width:100%;border-collapse:collapse;margin-bottom:20px;\">\n        <thead>\n            <tr style=\"background:#f8f9fa;border:1px solid #ddd;\">\n                <th style=\"padding:8px;border:1px solid #ddd;text-align:left;\">Key<\/th>\n                <th style=\"padding:8px;border:1px solid #ddd;text-align:left;\">Value<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">ServerMode<\/td><td style=\"padding:8px;border:1px solid #ddd;\">dedicated<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">AdminName<\/td><td style=\"padding:8px;border:1px solid #ddd;\">Grimm<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">AdminEmail<\/td><td style=\"padding:8px;border:1px solid #ddd;\">(empty)<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">ServerVersion<\/td><td style=\"padding:8px;border:1px solid #ddd;\">3339<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">GameStats<\/td><td style=\"padding:8px;border:1px solid #ddd;\">False<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">MaxSpectators<\/td><td style=\"padding:8px;border:1px solid #ddd;\">2<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">MapVoting<\/td><td style=\"padding:8px;border:1px solid #ddd;\">true<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">KickVoting<\/td><td style=\"padding:8px;border:1px solid #ddd;\">false<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">Mutator<\/td><td style=\"padding:8px;border:1px solid #ddd;\">MutInstaGib \/ DMMutator<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">MinPlayers<\/td><td style=\"padding:8px;border:1px solid #ddd;\">4<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">EndTimeDelay<\/td><td style=\"padding:8px;border:1px solid #ddd;\">4.00<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">GoalScore<\/td><td style=\"padding:8px;border:1px solid #ddd;\">30<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">TimeLimit<\/td><td style=\"padding:8px;border:1px solid #ddd;\">15<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">Translocator<\/td><td style=\"padding:8px;border:1px solid #ddd;\">False<\/td><\/tr>\n            <tr><td style=\"padding:8px;border:1px solid #ddd;\">WeaponStay<\/td><td style=\"padding:8px;border:1px solid #ddd;\">False<\/td><\/tr>\n        <\/tbody>\n    <\/table>\n\n    <!-- Section 5: Player List -->\n\n    <h2 style=\"color:#1a3c5e;border-bottom:2px solid #e0e6ed;margin-bottom:15px;padding-bottom:8px;\">\n        5. Player List Response (Decoded)\n    <\/h2>\n\n    <p style=\"color:#4a4a4a;line-height:1.6;\">\n        The Player List response returns one or more player records. Each record has a fixed structure following the\n        common Player List header.\n    <\/p>\n\n    <pre style=\"background:#1e1e1e;color:#fff;padding:15px;border-radius:5px;white-space:pre;overflow:auto;\">\n80 00 00 00 02\n07 00 00 00\n0B 49 6C 6F 76 65 64 69 63 6B 73 00\n1C 00 00 00\n00 00 00 00\n00 00 00 00\n<\/pre>\n\n    <h3 style=\"color:#1a3c5e;border-bottom:1px solid #e0e6ed;margin-bottom:15px;padding-bottom:8px;\">\n        5.1 Player Entry Structure\n    <\/h3>\n\n    <ul style=\"color:#4a4a4a;padding-left:20px;margin-bottom:8px;\">\n        <li style=\"margin-bottom:8px;\"><strong>Header (packet):<\/strong> <code>80 00 00 00 02<\/code> (Player List response)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>4 bytes:<\/strong> Unknown \/ skip (ignored)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>1 byte:<\/strong> <code>nameLen<\/code> (name length including null terminator)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>nameLen bytes:<\/strong> ASCII name followed by <code>00<\/code><\/li>\n        <li style=\"margin-bottom:8px;\"><strong>4 bytes:<\/strong> Ping (32-bit little-endian)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>4 bytes:<\/strong> Score (32-bit little-endian)<\/li>\n        <li style=\"margin-bottom:8px;\"><strong>4 bytes:<\/strong> Unknown \/ skip (ignored)<\/li>\n    <\/ul>\n\n    <h3 style=\"color:#1a3c5e;border-bottom:1px solid #e0e6ed;margin-bottom:15px;padding-bottom:8px;\">\n        5.2 Decoded Player Example\n    <\/h3>\n\n    <table style=\"width:100%;border-collapse:collapse;margin-bottom:20px;\">\n        <thead>\n            <tr style=\"background:#f8f9fa;border:1px solid #ddd;\">\n                <th style=\"padding:8px;border:1px solid #ddd;text-align:left;\">Field<\/th>\n                <th style=\"padding:8px;border:1px solid #ddd;text-align:left;\">Raw Bytes<\/th>\n                <th style=\"padding:8px;border:1px solid #ddd;text-align:left;\">Decoded Value \/ Meaning<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Header<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>80 00 00 00 02<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Player List response header.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Skip (unknown)<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>07 00 00 00<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Ignored (likely unknown \/ unused).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Name length<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>0B<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">11 bytes including null terminator.<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Name<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>49 6C 6F 76 65 64 69 63 6B 73 00<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">&#8220;Ilovedicks&#8221; (null-terminated string, dont ask).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Ping<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>1C 00 00 00<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">28 ms (0x1C in little-endian).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Score<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>00 00 00 00<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">0 (no score).<\/td>\n            <\/tr>\n            <tr>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Trailing skip<\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\"><code>00 00 00 00<\/code><\/td>\n                <td style=\"padding:8px;border:1px solid #ddd;\">Ignored (likely padding \/ unused).<\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n<h2 style=\"color: #1a3c5e; border-bottom: 2px solid #e0e6ed; margin-top: 40px; margin-bottom: 15px; padding-bottom: 8px;\">\n    6. Multi\u2011Packet Player Query (0x03)\n<\/h2>\n\n<p style=\"color: #4a4a4a; line-height: 1.6;\">\n    Unreal Tournament 2004 supports a multi\u2011packet version of the player list query using the packet:\n    <code>79 00 00 00 03<\/code>.  \n    Unlike the standard single\u2011packet player query (<code>0x02<\/code>), this version returns <strong>two separate packets<\/strong>.\n    The client must continue reading until the final packet is received.\n<\/p>\n\n<p style=\"background: #e7f3fe; border: 1px solid #b6d4fe; padding: 15px; color: #0c5460; border-radius: 5px; margin-bottom: 20px;\">\n    <strong>Note:<\/strong> Multi\u2011packet responses always end with a packet whose header byte is\n    <code>0x02<\/code>.  \n    Any earlier packets (usually one) will use header <code>0x01<\/code>.  \n    Ignored values are likely unknown or unused fields.\n<\/p>\n\n<h3 style=\"color: #1a3c5e; border-bottom: 1px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n    6.1 Multi\u2011Packet Query Request\n<\/h3>\n\n<table style=\"width: 100%; border-collapse: collapse; margin-bottom: 20px;\">\n    <thead>\n        <tr style=\"border: 1px solid #ddd; background: #f8f9fa; color: black;\">\n            <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Purpose<\/th>\n            <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Hex Packet<\/th>\n            <th style=\"border: 1px solid #ddd; padding: 8px; text-align: left;\">Description<\/th>\n        <\/tr>\n    <\/thead>\n    <tbody>\n        <tr style=\"border: 1px solid #ddd;\">\n            <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Player List (Multi\u2011Packet)<\/td>\n            <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\"><code>79 00 00 00 03<\/code><\/td>\n            <td style=\"border: 1px solid #ddd; padding: 8px; color: black;\">Requests the extended multi\u2011packet player list.<\/td>\n        <\/tr>\n    <\/tbody>\n<\/table>\n\n<h3 style=\"color: #1a3c5e; border-bottom: 1px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n    6.2 Response Structure\n<\/h3>\n\n<p style=\"color: #4a4a4a; line-height: 1.6;\">\n    The server responds with <strong>two packets<\/strong>:\n<\/p>\n\n<ul style=\"color: #4a4a4a; padding-left: 20px;\">\n    <li style=\"margin-bottom: 8px;\"><strong>Packet 1:<\/strong> Header <code>80 00 00 00 01<\/code> \u2014 contains server rules (same as <code>0x01<\/code> query)<\/li>\n    <li style=\"margin-bottom: 8px;\"><strong>Packet 2:<\/strong> Header <code>80 00 00 00 02<\/code> \u2014 contains the actual player list<\/li>\n<\/ul>\n\n<p style=\"color: #4a4a4a; line-height: 1.6;\">\n    The client must continue receiving packets until the final header <code>0x02<\/code> is encountered.\n<\/p>\n\n<h3 style=\"color: #1a3c5e; border-bottom: 1px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n    6.3 Example Multi\u2011Packet Response (Captured)\n<\/h3>\n\n<p style=\"color: #4a4a4a; line-height: 1.6;\">\n    Below is a real multi\u2011packet response captured from a UT2004 server.\n<\/p>\n\n<h4 style=\"color: #1a3c5e; margin-bottom: 10px;\">Packet 1 \u2014 Rules (Header 0x01)<\/h4>\n\n<pre style=\"background:#1e1e1e;color:#fff;padding:15px;border-radius:5px;white-space:pre;overflow:auto;max-height:300px;\">\n80 00 00 00 01\n0B 53 65 72 76 65 72 4D 6F 64 65 00 0A 64 65 64 69 63 61 74 65 64 00\n0A 41 64 6D 69 6E 4E 61 6D 65 00 06 47 72 69 6D 6D 00\n0B 41 64 6D 69 6E 45 6D 61 69 6C 00 00\n0E 53 65 72 76 65 72 56 65 72 73 69 6F 6E 00 05 33 33 33 39 00\n...\n<\/pre>\n\n<h4 style=\"color: #1a3c5e; margin-bottom: 10px;\">Packet 2 \u2014 Player List (Header 0x02)<\/h4>\n\n<pre style=\"background:#1e1e1e;color:#fff;padding:15px;border-radius:5px;white-space:pre;overflow:auto;max-height:300px;\">\n80 00 00 00 02\n00 00 00 00\n0B 49 6C 6F 76 65 64 69 63 6B 73 00\n1C 00 00 00\n06 00 00 00\n00 00 00 00\n<\/pre>\n\n<h3 style=\"color: #1a3c5e; border-bottom: 1px solid #e0e6ed; margin-bottom: 15px; padding-bottom: 8px;\">\n    6.4 Client Handling Requirements\n<\/h3>\n\n<ul style=\"color:#4a4a4a;padding-left:20px;\">\n    <li style=\"margin-bottom:8px;\">The client must keep reading packets until the final header <code>0x02<\/code> is received.<\/li>\n    <li style=\"margin-bottom:8px;\">Packet 1 (<code>0x01<\/code>) contains rules, not players.<\/li>\n    <li style=\"margin-bottom:8px;\">Packet 2 (<code>0x02<\/code>) contains the actual player list.<\/li>\n    <li style=\"margin-bottom:8px;\">Ignored values are likely unknown or unused fields.<\/li>\n<\/ul>\n\n<p style=\"color:#4a4a4a;line-height:1.6;\">\n    This multi\u2011packet behavior is required for some servers and mods, and must be supported by any UT2004 query tool.\n<\/p>\n\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>UT2004 Query Protocol \u2013 Practical Reference This document describes the Unreal Tournament 2004 (UT2004) UDP query protocol as observed from real server responses. It focuses on three key query types: Server Info, Server Rules, and Player List. All examples below are based on actual captured packets and include decoded values for clarity. Note: All packets [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1625","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/pages\/1625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/comments?post=1625"}],"version-history":[{"count":8,"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/pages\/1625\/revisions"}],"predecessor-version":[{"id":1644,"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/pages\/1625\/revisions\/1644"}],"wp:attachment":[{"href":"https:\/\/grimms3dworlds.ddns.net\/index.php\/wp-json\/wp\/v2\/media?parent=1625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}