Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef _H_SOLDATINFOX_
- #define _H_SOLDATINFOX_
- // Comment out this line if you want to compile for 1.5.1
- #define OLDSOLDAT
- // soldatinfo.h originally by ramirez
- // modified constructor to 'default'
- // defined REFRESH parsing as a method (for multiple acc)
- #include <vector>
- #include <string>
- #include <sstream>
- #include <stdexcept>
- #ifndef OLDSOLDAT
- #define REFRESHX_PACKET_SIZE 1960
- #else
- #define REFRESHX_PACKET_SIZE 1608
- #endif
- struct playerX
- {
- unsigned char namelen; // 1
- char name[25]; // 24
- unsigned char tagidlen; // 1
- char tagid[11]; // 10
- unsigned char team; // 1
- unsigned short kills; // 2
- unsigned char caps; // 1
- unsigned short deaths; // 2
- signed long ping; // 4
- unsigned char id; // 1
- unsigned char ip[4]; // 4
- float x; // 4
- float y; // 4
- // 1 + 24 + 1 + 2 + 1 + 2 + 4 + 1 + 4 + 4 + 4 = 48
- };
- struct refreshX
- {
- struct playerX players[32];
- float redflagx;
- float redflagy;
- float blueflagx;
- float blueflagy;
- unsigned short alphascore;
- unsigned short bravoscore;
- unsigned short charliescore;
- unsigned short deltascore;
- unsigned char currentmaplen;
- char currentmap[17];
- unsigned long timelimit;
- unsigned long timeleft;
- unsigned char limit;
- unsigned char gamestyle;
- unsigned char maxplayers;
- unsigned char maxspectators;
- unsigned char password;
- unsigned char nextmaplen;
- char nextmap[17];
- };
- // players * 32
- /*
- # Player (1856 Bytes)
- * Names (32*25 Bytes; first Byte (unsigned char) indicates length of the nick)
- * Tagid (32*10 Bytes; char)
- * Teams (32*1 Byte; 0=DM Team, 1..4=Alpha..Delta, 5=Spectator)
- * Kills (32*2 Bytes; unsigned short)
- * Caps (32*1 Byte; unsigned char)
- * Deaths (32*2 Bytes; unsigned short)
- * Pings (32*4 Bytes; signed long)
- * IDs (32*1 Byte; unsigned char)
- * IPs (32*4 Bytes; each byte can be decoded as unsigned char then put together in the given order to a 0.0.0.0 format; or unpack as unsigned long (big endian) and use long2ip())
- * X Locations (32*4 Bytes; float)
- * Y Locations (32*4 Bytes; float)
- */
- #ifndef OLDSOLDAT
- #define XNAMELEN_OFFSET 0
- #define XNAMELEN_SIZE 1
- #define XNAME_OFFSET 1
- #define XNAME_SIZE 24
- #define XTAGIDLEN_OFFSET 25*32
- #define XTAGIDLEN_SIZE 1
- #define XTAGID_OFFSET 26*32
- #define XTAGID_SIZE 10
- #define XTEAM_OFFSET 36*32
- #define XTEAM_SIZE 1
- #define XKILLS_OFFSET 37*32
- #define XKILLS_SIZE 2
- #define XCAPS_OFFSET 39*32
- #define XCAPS_SIZE 1
- #define XDEATHS_OFFSET 40*32
- #define XDEATHS_SIZE 2
- #define XPINGS_OFFSET 42*32
- #define XPINGS_SIZE 4
- #define XID_OFFSET 46*32
- #define XID_SIZE 1
- #define XIP_OFFSET 47*32
- #define XIP_SIZE 4
- #define XLOCX_OFFSET 51*32
- #define XLOCX_SIZE 4
- #define XLOCY_OFFSET 55*32
- #define XLOCY_SIZE 4
- // Rest
- /*
- # Red Flag X Location (4 Bytes; float)
- # Red Flag Y Location (4 Bytes; float)
- # Blue Flag X Location (4 Bytes; float)
- # Blue Flag Y Location (4 Bytes; float)
- # Team Scores (4*2 Bytes; unsigned short)
- # Map Name (17 Bytes; first Byte (unsigned char) indicates length)
- # Time Limit (4 Bytes; unsigned long; in Ticks)
- # Time Left (4 Bytes; unsigned long; in Ticks)
- # Cap/Kill Limit (2 Bytes; unsigned short)
- # Gamestyle (1 Byte; unsigned char; 0=DM, 1=PM, 2=TM, 3=CTF, 4=RM, 5=INF, 6=HTF)
- # Max Players (1 Byte; unsigned char)
- # Max Spectators (1 Byte; unsigned char)
- # Game Passworded? (1 Byte; boolean)
- # Next Map (17 Bytes; first Byte (unsigned char) indicates length)
- */
- #define XREDFLAGX_OFFSET 1888
- #define XREDFLAGX_SIZE 4
- #define XREDFLAGY_OFFSET 1892
- #define XREDFLAGY_SIZE 4
- #define XBLUEFLAGX_OFFSET 1864
- #define XBLUEFLAGX_SIZE 4
- #define XBLUEFLAGY_OFFSET 1900
- #define XBLUEFLAGY_SIZE 4
- #define XALPHATEAMSCORE_OFFSET 1904
- #define XALPHATEAMSCORE_SIZE 2
- #define XBRAVOTEAMSCORE_OFFSET 1906
- #define XBRAVOTEAMSCORE_SIZE 2
- #define XCHARLIETEAMSCORE_OFFSET 1908
- #define XCHARLIETEAMSCORE_SIZE 2
- #define XDELTATEAMSCORE_OFFSET 1910
- #define XDELTATEAMSCORE_SIZE 2
- #define XCURRENTMAPLEN_OFFSET 1912
- #define XCURRENTMAPLEN_SIZE 1
- #define XCURRENTMAP_OFFSET 1913
- #define XCURRENTMAP_SIZE 16
- #define XTIMELIMIT_OFFSET 1929
- #define XTIMELIMIT_SIZE 4
- #define XTIMELEFT_OFFSET 1933
- #define XTIMELEFT_SIZE 4
- #define XLIMIT_OFFSET 1937
- #define XLIMIT_SIZE 2
- #define XGAMESTYLE_OFFSET 1939
- #define XGAMESTYLE_SIZE 1
- #define XMAXPLAYERS_OFFSET 1940
- #define XMAXPLAYERS_SIZE 1
- #define XMAXSPECTATORS_OFFSET 1941
- #define XMAXSPECTATORS_SIZE 1
- #define XPASSWORD_OFFSET 1942
- #define XPASSWORD_SIZE 1
- #define XNEXTMAPLEN_OFFSET 1943
- #define XNEXTMAPLEN_SIZE 1
- #define XNEXTMAP_OFFSET 1944
- #define XNEXTMAP_SIZE 16
- #else
- // players * 32
- /*
- # Player (1536 Bytes)
- * Names (32*25 Bytes; first Byte (unsigned char) indicates length of the nick)
- * Teams (32*1 Byte; 0=DM Team, 1..4=Alpha..Delta, 5=Spectator)
- * Kills (32*2 Bytes; unsigned short)
- * Caps (32*1 Byte; unsigned char)
- * Deaths (32*2 Bytes; unsigned short)
- * Pings (32*4 Bytes; signed long)
- * IDs (32*1 Byte; unsigned char)
- * IPs (32*4 Bytes; each byte can be decoded as unsigned char then put together in the given order to a 0.0.0.0 format; or unpack as unsigned long (big endian) and use long2ip())
- * X Locations (32*4 Bytes; float)
- * Y Locations (32*4 Bytes; float)
- */
- #define XNAMELEN_OFFSET 0
- #define XNAMELEN_SIZE 1
- #define XNAME_OFFSET 1
- #define XNAME_SIZE 24
- #define XTEAM_OFFSET 25*32
- #define XTEAM_SIZE 1
- #define XKILLS_OFFSET 26*32
- #define XKILLS_SIZE 2
- #define XCAPS_OFFSET 28*32
- #define XCAPS_SIZE 1
- #define XDEATHS_OFFSET 29*32
- #define XDEATHS_SIZE 2
- #define XPINGS_OFFSET 31*32
- #define XPINGS_SIZE 4
- #define XID_OFFSET 35*32
- #define XID_SIZE 1
- #define XIP_OFFSET 36*32
- #define XIP_SIZE 4
- #define XLOCX_OFFSET 40*32
- #define XLOCX_SIZE 4
- #define XLOCY_OFFSET 44*32
- #define XLOCY_SIZE 4
- // Rest
- /*
- # Red Flag X Location (4 Bytes; float)
- # Red Flag Y Location (4 Bytes; float)
- # Blue Flag X Location (4 Bytes; float)
- # Blue Flag Y Location (4 Bytes; float)
- # Team Scores (4*2 Bytes; unsigned short)
- # Map Name (17 Bytes; first Byte (unsigned char) indicates length)
- # Time Limit (4 Bytes; unsigned long; in Ticks)
- # Time Left (4 Bytes; unsigned long; in Ticks)
- # Cap/Kill Limit (2 Bytes; unsigned short)
- # Gamestyle (1 Byte; unsigned char; 0=DM, 1=PM, 2=TM, 3=CTF, 4=RM, 5=INF, 6=HTF)
- # Max Players (1 Byte; unsigned char)
- # Max Spectators (1 Byte; unsigned char)
- # Game Passworded? (1 Byte; boolean)
- # Next Map (17 Bytes; first Byte (unsigned char) indicates length)
- */
- #define XREDFLAGX_OFFSET 1536
- #define XREDFLAGX_SIZE 4
- #define XREDFLAGY_OFFSET 1540
- #define XREDFLAGY_SIZE 4
- #define XBLUEFLAGX_OFFSET 1544
- #define XBLUEFLAGX_SIZE 4
- #define XBLUEFLAGY_OFFSET 1548
- #define XBLUEFLAGY_SIZE 4
- #define XALPHATEAMSCORE_OFFSET 1552
- #define XALPHATEAMSCORE_SIZE 2
- #define XBRAVOTEAMSCORE_OFFSET 1554
- #define XBRAVOTEAMSCORE_SIZE 2
- #define XCHARLIETEAMSCORE_OFFSET 1556
- #define XCHARLIETEAMSCORE_SIZE 2
- #define XDELTATEAMSCORE_OFFSET 1558
- #define XDELTATEAMSCORE_SIZE 2
- #define XCURRENTMAPLEN_OFFSET 1560
- #define XCURRENTMAPLEN_SIZE 1
- #define XCURRENTMAP_OFFSET 1561
- #define XCURRENTMAP_SIZE 16
- #define XTIMELIMIT_OFFSET 1577
- #define XTIMELIMIT_SIZE 4
- #define XTIMELEFT_OFFSET 1581
- #define XTIMELEFT_SIZE 4
- #define XLIMIT_OFFSET 1585
- #define XLIMIT_SIZE 2
- #define XGAMESTYLE_OFFSET 1587
- #define XGAMESTYLE_SIZE 1
- #define XMAXPLAYERS_OFFSET 1588
- #define XMAXPLAYERS_SIZE 1
- #define XMAXSPECTATORS_OFFSET 1589
- #define XMAXSPECTATORS_SIZE 1
- #define XPASSWORD_OFFSET 1590
- #define XPASSWORD_SIZE 1
- #define XNEXTMAPLEN_OFFSET 1591
- #define XNEXTMAPLEN_SIZE 1
- #define XNEXTMAP_OFFSET 1592
- #define XNEXTMAP_SIZE 16
- #endif
- class SoldatInfoX
- {
- public:
- struct refreshX packet;
- SoldatInfoX(void)
- {
- memset(&packet, '\0', sizeof(struct refreshX));
- }
- SoldatInfoX(char * buffer)
- {
- memset(&packet, '\0', sizeof(struct refreshX));
- int loop=0;
- for(loop=0;loop < 32;loop++)
- {
- // name length
- memcpy(&packet.players[loop].namelen,buffer+(loop*(XNAME_SIZE+XNAMELEN_SIZE)+XNAMELEN_OFFSET), XNAMELEN_SIZE);
- // name
- memcpy(&packet.players[loop].name,buffer+(loop*(XNAME_SIZE+XNAMELEN_SIZE)+XNAME_OFFSET), XNAME_SIZE);
- #ifndef OLDSOLDAT
- // tagid length
- memcpy(&packet.players[loop].tagid,buffer+(loop*XTAGIDLEN_SIZE+XTAGIDLEN_OFFSET), XTAGIDLEN_SIZE);
- // tagid
- memcpy(&packet.players[loop].tagid,buffer+(loop*XTAGID_SIZE+XTAGID_OFFSET), XTAGID_SIZE);
- #endif
- // team
- memcpy(&packet.players[loop].team,buffer+(loop*XTEAM_SIZE+XTEAM_OFFSET), XTEAM_SIZE);
- // kills
- memcpy(&packet.players[loop].kills,buffer+(loop*XKILLS_SIZE+XKILLS_OFFSET), XKILLS_SIZE);
- // caps
- memcpy(&packet.players[loop].caps,buffer+(loop*XCAPS_SIZE+XCAPS_OFFSET), XCAPS_SIZE);
- // Deaths
- memcpy(&packet.players[loop].deaths,buffer+(loop*XDEATHS_SIZE+XDEATHS_OFFSET), XDEATHS_SIZE);
- // ping
- memcpy(&packet.players[loop].ping,buffer+(loop*XPINGS_SIZE+XPINGS_OFFSET), XPINGS_SIZE);
- // id
- memcpy(&packet.players[loop].id,buffer+(loop*XID_SIZE+XID_OFFSET), XID_SIZE);
- // ip
- memcpy(&packet.players[loop].ip,buffer+(loop*XIP_SIZE+XIP_OFFSET), XIP_SIZE);
- // X location
- memcpy(&packet.players[loop].x,buffer+(loop*XLOCX_SIZE+XLOCX_OFFSET), XLOCX_SIZE);
- // y location
- memcpy(&packet.players[loop].y,buffer+(loop*XLOCY_SIZE+XLOCY_OFFSET), XLOCY_SIZE);
- }
- // red flag x
- memcpy(&packet.redflagx,buffer+(XREDFLAGX_OFFSET), XREDFLAGX_SIZE);
- // red flag y
- memcpy(&packet.redflagx,buffer+(XREDFLAGY_OFFSET), XREDFLAGY_SIZE);
- // blue flag x
- memcpy(&packet.blueflagx,buffer+(XBLUEFLAGX_OFFSET), XBLUEFLAGX_SIZE);
- // blue flag y
- memcpy(&packet.blueflagx,buffer+(XBLUEFLAGY_OFFSET), XBLUEFLAGY_SIZE);
- // Alpha team score
- memcpy(&packet.alphascore,buffer+(XALPHATEAMSCORE_OFFSET), XALPHATEAMSCORE_SIZE);
- // Bravo team score
- memcpy(&packet.bravoscore,buffer+(XBRAVOTEAMSCORE_OFFSET), XBRAVOTEAMSCORE_SIZE);
- // Charlie team score
- memcpy(&packet.charliescore,buffer+(XCHARLIETEAMSCORE_OFFSET), XCHARLIETEAMSCORE_SIZE);
- // Delta team score
- memcpy(&packet.deltascore,buffer+(XDELTATEAMSCORE_OFFSET), XDELTATEAMSCORE_SIZE);
- // Current map length
- memcpy(&packet.currentmaplen,buffer+(XCURRENTMAPLEN_OFFSET), XCURRENTMAPLEN_SIZE);
- // Current map
- memcpy(&packet.currentmap,buffer+(XCURRENTMAP_OFFSET), XCURRENTMAP_SIZE);
- // Time limit
- memcpy(&packet.timelimit,buffer+(XTIMELIMIT_OFFSET), XTIMELIMIT_SIZE);
- // Time left
- memcpy(&packet.timeleft,buffer+(XTIMELEFT_OFFSET), XTIMELEFT_SIZE);
- // Cap/kill limit
- memcpy(&packet.limit,buffer+(XLIMIT_OFFSET), XLIMIT_SIZE);
- // Game style
- memcpy(&packet.gamestyle,buffer+(XGAMESTYLE_OFFSET), XGAMESTYLE_SIZE);
- // Max Players
- memcpy(&packet.maxplayers,buffer+(XMAXPLAYERS_OFFSET), XMAXPLAYERS_SIZE);
- // Max Spectators
- memcpy(&packet.maxspectators,buffer+(XMAXSPECTATORS_OFFSET), XMAXSPECTATORS_SIZE);
- // Password ?
- memcpy(&packet.password,buffer+(XPASSWORD_OFFSET), XPASSWORD_SIZE);
- // Next map length
- memcpy(&packet.nextmaplen,buffer+(XNEXTMAPLEN_OFFSET), XNEXTMAPLEN_SIZE);
- // Next map
- memcpy(&packet.nextmap,buffer+(XNEXTMAP_OFFSET), XNEXTMAP_SIZE);
- }
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement