Raised This Month: $ Target: $400
 0% 

A2S_PLAYER ( resolved ) & A2S_RULES ( need help )


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
red_bull2oo6
Senior Member
Join Date: Mar 2012
Location: Braila, Romania
Old 07-17-2013 , 18:08   Re: A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
Reply With Quote #6

thanks for your reply.
i kept trying and i finally got it working but i still have some problems when i parse the cvars..


PHP Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <sockets>

#define PLUGIN "Socket !!!"
#define VERSION "1.0"

new g_szHost32 ];
new 
g_szPort10 ];

new 
g_ch_ret[4] = {255,255,255,255}

new 
g_szHostName128 ];
new 
g_szMapName64 ];
new 
g_szDescription64 ];
new 
g_iMaxPlayers;
new 
g_iPlayers;
new 
g_iBots;
new 
g_szDir64 ];
new 
g_szPlayersNames33 ][ 33 ];
new 
g_iPlayersKills33 ];
new 
Float:g_fPlayersTime33 ];
new 
g_szPassword24 ];
new 
g_szRules[256][ 32 ];
new 
g_szRulesValue256 ][ 10 ];
new 
g_iSocket 0;

new 
szRequest32 ];

new 
part 0;
new 
total 0;

new 
iRules 0;

public 
plugin_init( )
{
    
register_pluginPLUGINVERSION"Sylwester & Askhanar" );
    
    
register_clcmd"amx_serverinfo""svinfo" );
    
// Add your code here...
}

public 
svinfoid )
{
    new 
szServer64 ];
    
read_argv1szServer63 );
    
    
strtokszServerg_szHost31g_szPort9':');
    if( 
connect_server( ) )
    {
        
send_request( );
        if( 
id == )
            
server_print" Waiting for server infos" );
        else
            
client_cmdid"echo Waiting for server infos" );
        
        
set_task10.0"task_info"id 1122 );
    }
    else
    {
        
client_cmdid"echo ERROR" );
    }
    
    return 
PLUGIN_HANDLED;
    
}

public 
task_infoid )
{
    
id -= 1122;
    
    if( !
is_user_connectedid ) )
        return;
    
    if( 
id == )
    {
        
server_print" HostName: %s"g_szHostName );
        
server_print" Map: %s"g_szMapName );
        
server_print" Description: %s"g_szDescription );
        
server_print" Slots: %i"g_iMaxPlayers );
        
server_print" Players %i/%i"g_iPlayersg_iMaxPlayers );
        
server_print" Bots: %i"g_iBots );
        
server_print" Dir: %s"g_szDir );
        
server_print" Password: %s"g_szPassword );
        for( new 
0iRules;i++ )
            
server_print"%s %s"g_szRules], g_szRulesValue] );
    }
    else
    {
        
client_cmdid"echo HostName: %s"g_szHostName );
        
client_cmdid"echo Map: %s"g_szMapName );
        
client_cmdid"echo Description: %s"g_szDescription );
        
client_cmdid"echo Slots: %i"g_iMaxPlayers );
        
client_cmdid"echo Players %i/%i"g_iPlayersg_iMaxPlayers );
        
client_cmdid"echo Bots: %i"g_iBots );
        
client_cmdid"echo Dir: %s"g_szDir );
        
client_cmdid"echo Pasword: %s"g_szPassword );
        for( new 
0iRules;i++ )
            
client_cmdid"echo %s %s"g_szRules], g_szRulesValue] );
    }
    
    for( new 
0;g_iPlayersi++ )
    {
        if( 
id == )
            
server_print"Nick: %s Frags: %i Time: %.1f"g_szPlayersNames], g_iPlayersKills], g_fPlayersTime] );
        else
            
client_cmd(id"echo Nick: %s Frags: %i Time: %.1f"g_szPlayersNames], g_iPlayersKills], g_fPlayersTime] );
    }
    
    
    
}
public 
connect_server()
{
    new 
iErrorszError64 ];
    new 
iPort str_to_numg_szPort );
    
    if( 
strleng_szHost ) < || iPort <=|| iPort >= 65536){
        
log_amx("incorrect datas ( ^"IP/DNS: %s  PORT: %s^" ), must be ^"ip:port^" or ^"dns:port^""g_szHostg_szPort );
        return 
false;
    }
    
    if( 
g_iSocket )
    {
        
socket_closeg_iSocket );
        
g_iSocket 0;
    }
    
    
g_iSocket socket_openg_szHostiPortSOCKET_UDPiError );
    if( 
g_iSocket <= || iError )
    {
        switch( 
iError )
        {
            case 
0szError "unknown"
                
case 1szError "error while creating socket"
                
case 2szError "could not resolve hostname"
                
case 3formatszErrorsizeof szError ) -1"could not connect to %s:%d"g_szHostiPort );
            }
        
        
log_amx"Socket error: %s"szError );
        return 
false;
    }
    
iRules 0;
    
log_amx"Connected to socket %i"g_iSocket );
    
set_task1.0"task_recive"112233__"b" );
    return 
true;
    
}

public 
task_recive( )
{
    
check_socket( );
}

public 
check_socket()
{
    if( 
g_iSocket <= 0)
        return
    new 
iCnt;
    if( 
socket_changeg_iSocket) && iCnt 10 )
    {
        
iCnt++
        
receive_data( );
    }
}


public 
disconnect_server()
{
    if( 
g_iSocket )
    {
        
socket_closeg_iSocket );
        
g_iSocket 0;
    }
}

public 
send_request()
{
    if( 
g_iSocket <= )
        return;
    
    
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_INFO
    
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%s%c"25525525525584"Source Engine Query");
    
socket_send2g_iSocketszRequest25 );
    
log_amx"sent INFO: %s"szRequest );
    
    
/*//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_PLAYER
    format( szRequest, sizeof ( szRequest ) -1, "%c%c%c%c%c%c%c%c%c", 255, 255, 255, 255, 85, g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3])  //ping
    socket_send2( g_iSocket, szRequest, 9 );
    log_amx( "sent PLAYERS: %s", szRequest );*/
    
    //http://developer.valvesoftware.com/wiki/Server_Queries#A2S_RULES
    
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%c%c%c%c"25525525525586g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3]);
    
socket_send2g_iSocketszRequest);
    
log_amx"sent RULES: %s"szRequest );
    
    
/*
    format( szRequest, sizeof ( szRequest ) -1, "%c%c%c%c%c", -1,-1,-1,-1, 87 );
    socket_send2( g_iSocket, szRequest, 5 );
    log_amx( "sent CHALANGE: %s", szRequest );*/
    
    
}

public 
receive_data()
{
    static 
szBuffer2048 ], iLen;
    
iLen socket_recvg_iSocketszBuffersizeofszBuffer ) -);
    
    if( 
iLen )
        return;
    
    
    if( 
equalszBuffer, { -1, -1, -1, -}, ) || equalszBuffer, { -2, -1, -1, -}, ) )
    {
        new 
end strlen(szBuffer)+1;
        
        switch( 
szBuffer] )
        {
            
//(correct challange number) A2S_PLAYER reply if sent challange number is unknown/incorrect
            
case 'A':
            {
                
log_amx"RECIVED CHALANGE: %s"szBuffer );
            
/*if( g_ch_ret[ 0 ] == 255 && g_ch_ret[ 1 ] == 255
            && g_ch_ret[ 2 ] == 255 && g_ch_ret[ 3 ] == 255 )
            {*/
                
log_amx"Changed chalange" );
                for( new 
04i++ )
                
g_ch_ret[i] = szBuffer[i+5];
                
                
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_RULES
                
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%c%c%c%c"25525525525586g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3]);
                
socket_send2g_iSocketszRequest);
                
log_amx"sent RULES FROM A: %s"szRequest );
            }
            
            case 
'D':
            { 
//(players details) A2S_PLAYER reply if sent challange number is correct
                
                
log_amx"RECIVED PLAYERS: %s"szBuffer );
                
g_iPlayers szBuffer];
                
                new 
j=6;
                for(new 
i=0i<g_iPlayersi++){
                    
j++
                    
+= copyc(g_szPlayersNames[i], 31szBuffer[j], 0)+1
                    g_iPlayersKills
[i] =  ret_ac(szBuffer[j+3])<<24|ret_ac(szBuffer[j+2])<<16|ret_ac(szBuffer[j+1])<<8|ret_ac(szBuffer[j]);
                    
                    
g_fPlayersTime] = Float:( ret_ac(szBuffer[j+7])<<24|ret_ac(szBuffer[j+6])<<16|ret_ac(szBuffer[j+5])<<8|ret_ac(szBuffer[j+4]) );  
                    
                    
j+= 8;
                    
                }
                
            }
            
            case 
'I':
            { 
//(server details) A2S_INFO reply
                
log_amx"RECIVED INFO: %s"szBuffer );
                new 
6;
                
+= copycg_szHostNamesizeof g_szHostName ) -1szBuffer], ) +1;
                
+= copycg_szMapNamesizeof g_szMapName ) -1szBuffer], ) +1;
                
+= copycg_szDirsizeof g_szDir ) -1szBuffer], ) +1;
                
+= copycg_szDescriptionsizeof g_szDescription ) -1szBuffer], ) +1;
                
g_iMaxPlayers szBuffer+];
                
g_iBots szBuffer+];
                
+= copyg_szPasswordsizeof g_szPassword ) -1szBuffer+] ? "Yes" "No" );
                
                if( 
g_iPlayers g_iMaxPlayers g_iPlayers g_iMaxPlayers;
                
            }
            default:
            {
                
                
                if( 
szBuffer] == -)
                {
                    if( !
part total szBuffer];
                    if( 
part total end 0;
                    else 
end 16;
                }
                else 
end 7;
                
                
//new name[64], rlen
                
while(end iLen)
                {
                    
//end += copyc(name,63, szBuffer[end], 0)
        
                    
end += copyg_szRulesiRules ], sizeof g_szRules[] ) -1szBufferend ] );
                    
end += 1;
                    
end += copyg_szRulesValueiRules ], sizeof g_szRulesValue[] ) -1szBuffer[end] ) 
    
                    
                    
//    end += rlen+1        //skip cvar name
                    
                    //end += strlen(szBuffer[end])+1    //skip cvar value
                    
iRules++;
                }
                
part++;
                
                
//log_amx( "%i, %i, %i, %i", iLen, end, total, part );
                
for( new 0iRulesz++ )
                {
                    
log_amx"%s | %s"g_szRules], g_szRulesValue] );
                }
            }
        }
    }
    
/*else if( equal( szBuffer, { -2, -1, -1, -1 }, 4 ) )
{
    log_amx( "RECIVED RULES: %s", szBuffer );
    if( szBuffer[ 4 ] == 'E' || szBuffer[ 4 ] == 'V' )
    {
        
    }
}*/

}



public 
ret_ac(num){ //change byte -128..127 into 0..255
    
if(num<0)
        return 
256+num
    
return num

it was suposed to be: CvarName | CvarValue but its like this:

Code:
L 07/18/2013 - 02:50:13: [1.amxx] aesp_version | 1.3
L 07/18/2013 - 02:50:13: [1.amxx]  | afkslay_v
L 07/18/2013 - 02:50:13: [1.amxx] ersion | 2.5.2
L 07/18/2013 - 02:50:13: [1.amxx]  | allow_spe
L 07/18/2013 - 02:50:13: [1.amxx] ctators | 1.0
L 07/18/2013 - 02:50:13: [1.amxx]  | amxmodx_v
L 07/18/2013 - 02:50:13: [1.amxx] ersion | 1.8.2
L 07/18/2013 - 02:50:13: [1.amxx]  | amx_clien
L 07/18/2013 - 02:50:13: [1.amxx] t_languages | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | amx_langu
L 07/18/2013 - 02:50:13: [1.amxx] age | en
L 07/18/2013 - 02:50:13: [1.amxx]  | amx_nextm
L 07/18/2013 - 02:50:13: [1.amxx] ap | de_westwo
L 07/18/2013 - 02:50:13: [1.amxx] od_big | amx_ptb_v
L 07/18/2013 - 02:50:13: [1.amxx] ersion | 1.8b3
L 07/18/2013 - 02:50:13: [1.amxx]  | coop
L 07/18/2013 - 02:50:13: [1.amxx]  | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | deathmatc
L 07/18/2013 - 02:50:13: [1.amxx] h | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | decalfreq
L 07/18/2013 - 02:50:13: [1.amxx] uency | 30
L 07/18/2013 - 02:50:13: [1.amxx]  | edgefrict
L 07/18/2013 - 02:50:13: [1.amxx] ion | 2
L 07/18/2013 - 02:50:13: [1.amxx]  | hostage_d
L 07/18/2013 - 02:50:13: [1.amxx] ebug | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | hostage_s
L 07/18/2013 - 02:50:13: [1.amxx] top | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | humans_jo
L 07/18/2013 - 02:50:13: [1.amxx] in_team | any
L 07/18/2013 - 02:50:13: [1.amxx]  | kgbbots
L 07/18/2013 - 02:50:13: [1.amxx]  | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | map_spawn
L 07/18/2013 - 02:50:13: [1.amxx] s | T(16) CT(
L 07/18/2013 - 02:50:13: [1.amxx] 16) | max_queri
L 07/18/2013 - 02:50:13: [1.amxx] es_sec | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | max_queri
L 07/18/2013 - 02:50:13: [1.amxx] es_sec_global | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | max_queri
L 07/18/2013 - 02:50:13: [1.amxx] es_window | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | mdbBans
L 07/18/2013 - 02:50:13: [1.amxx]  | 4.2
L 07/18/2013 - 02:50:13: [1.amxx]  | metamod_v
L 07/18/2013 - 02:50:13: [1.amxx] ersion | 1.21-am
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_allowm
L 07/18/2013 - 02:50:13: [1.amxx] onsters | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_autoki
L 07/18/2013 - 02:50:13: [1.amxx] ck | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_autote
L 07/18/2013 - 02:50:13: [1.amxx] ambalance | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_buytim
L 07/18/2013 - 02:50:13: [1.amxx] e | 0.35
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_c4time
L 07/18/2013 - 02:50:13: [1.amxx] r | 35
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_chatti
L 07/18/2013 - 02:50:13: [1.amxx] me | 3
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_consis
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_kickpe
L 07/18/2013 - 02:50:13: [1.amxx] rcent | 0.66
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_limitt
L 07/18/2013 - 02:50:13: [1.amxx] eams | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_logdet
L 07/18/2013 - 02:50:13: [1.amxx] ail | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_logfil
L 07/18/2013 - 02:50:13: [1.amxx] e | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_logmes
L 07/18/2013 - 02:50:13: [1.amxx] sages | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_mapvot
L 07/18/2013 - 02:50:13: [1.amxx] eratio | 0.66
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_maxrou
L 07/18/2013 - 02:50:13: [1.amxx] nds | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_mirror
L 07/18/2013 - 02:50:13: [1.amxx] damage | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_player
L 07/18/2013 - 02:50:13: [1.amxx] id | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_roundt
L 07/18/2013 - 02:50:13: [1.amxx] ime | 2
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_slaylo
L 07/18/2013 - 02:50:13: [1.amxx] sers | 1
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_startm
L 07/18/2013 - 02:50:13: [1.amxx] oney | 850
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_timele
L 07/18/2013 - 02:50:13: [1.amxx] ft | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_timeli
L 07/18/2013 - 02:50:13: [1.amxx] mit | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_tkpuni
L 07/18/2013 - 02:50:13: [1.amxx] sh | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | mp_windif
L 07/18/2013 - 02:50:13: [1.amxx] tround | 0
L 07/18/2013 - 02:50:13: [1.amxx]  | sv_stepsi
L 07/18/2013 - 02:50:13: [1.amxx] ze | 18
L 07/18/2013 - 02:50:13: [1.amxx]  | sv_stopsp
L 07/18/2013 - 02:50:13: [1.amxx] eed | 75
L 07/18/2013 - 02:50:13: [1.amxx]  | sv_upload
L 07/18/2013 - 02:50:13: [1.amxx] max | 0.5
LE: I finally got it working, thanks again.
if any1 needs the code..

PHP Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <sockets>

#define PLUGIN "Socket !!!"
#define VERSION "1.0"

new g_szHost32 ];
new 
g_szPort10 ];

new 
g_ch_ret[4] = {255,255,255,255}

new 
g_szHostName128 ];
new 
g_szMapName64 ];
new 
g_szDescription64 ];
new 
g_iMaxPlayers;
new 
g_iPlayers;
new 
g_iBots;
new 
g_szDir64 ];
new 
g_szPlayersNames33 ][ 33 ];
new 
g_iPlayersKills33 ];
new 
Float:g_fPlayersTime33 ];
new 
g_szPassword24 ];
new 
g_szRules[256][ 64 ];
new 
g_szRulesValue256 ][ 64 ];
new 
g_iSocket 0;

new 
szRequest32 ];

new 
part 0;
new 
total 0;

new 
iRules 0;

public 
plugin_init( )
{
    
register_pluginPLUGINVERSION"Sylwester & Askhanar" );
    
    
register_clcmd"amx_serverinfo""svinfo" );
    
// Add your code here...
}

public 
svinfoid )
{
    new 
szServer64 ];
    
read_argv1szServer63 );
    
    
strtokszServerg_szHost31g_szPort9':');
    if( 
connect_server( ) )
    {
        
send_request( );
        if( 
id == )
            
server_print" Waiting for server infos" );
        else
            
client_cmdid"echo Waiting for server infos" );
        
        
set_task10.0"task_info"id 1122 );
    }
    else
    {
        
client_cmdid"echo ERROR" );
    }
    
    return 
PLUGIN_HANDLED;
    
}

public 
task_infoid )
{
    
id -= 1122;
    
    if( !
is_user_connectedid ) )
        return;
    
    if( 
id == )
    {
        
server_print" HostName: %s"g_szHostName );
        
server_print" Map: %s"g_szMapName );
        
server_print" Description: %s"g_szDescription );
        
server_print" Slots: %i"g_iMaxPlayers );
        
server_print" Players %i/%i"g_iPlayersg_iMaxPlayers );
        
server_print" Bots: %i"g_iBots );
        
server_print" Dir: %s"g_szDir );
        
server_print" Password: %s"g_szPassword );
        for( new 
0iRules;i++ )
            
server_print"%s %s"g_szRules], g_szRulesValue] );
    }
    else
    {
        
client_cmdid"echo HostName: %s"g_szHostName );
        
client_cmdid"echo Map: %s"g_szMapName );
        
client_cmdid"echo Description: %s"g_szDescription );
        
client_cmdid"echo Slots: %i"g_iMaxPlayers );
        
client_cmdid"echo Players %i/%i"g_iPlayersg_iMaxPlayers );
        
client_cmdid"echo Bots: %i"g_iBots );
        
client_cmdid"echo Dir: %s"g_szDir );
        
client_cmdid"echo Pasword: %s"g_szPassword );
        for( new 
0iRules;i++ )
            
client_cmdid"echo %s %s"g_szRules], g_szRulesValue] );
    }
    
    for( new 
0;g_iPlayersi++ )
    {
        if( 
id == )
            
server_print"Nick: %s Frags: %i Time: %.1f"g_szPlayersNames], g_iPlayersKills], g_fPlayersTime] );
        else
            
client_cmd(id"echo Nick: %s Frags: %i Time: %.1f"g_szPlayersNames], g_iPlayersKills], g_fPlayersTime] );
    }
    
    
    
}
public 
connect_server()
{
    new 
iErrorszError64 ];
    new 
iPort str_to_numg_szPort );
    
    if( 
strleng_szHost ) < || iPort <=|| iPort >= 65536){
        
log_amx("incorrect datas ( ^"IP/DNS: %s  PORT: %s^" ), must be ^"ip:port^" or ^"dns:port^""g_szHostg_szPort );
        return 
false;
    }
    
    if( 
g_iSocket )
    {
        
socket_closeg_iSocket );
        
g_iSocket 0;
    }
    
    
g_iSocket socket_openg_szHostiPortSOCKET_UDPiError );
    if( 
g_iSocket <= || iError )
    {
        switch( 
iError )
        {
            case 
0szError "unknown"
                
case 1szError "error while creating socket"
                
case 2szError "could not resolve hostname"
                
case 3formatszErrorsizeof szError ) -1"could not connect to %s:%d"g_szHostiPort );
            }
        
        
log_amx"Socket error: %s"szError );
        return 
false;
    }
    
iRules 0;
    
log_amx"Connected to socket %i"g_iSocket );
    
set_task1.0"task_recive"112233__"b" );
    return 
true;
    
}

public 
task_recive( )
{
    
check_socket( );
}

public 
check_socket()
{
    if( 
g_iSocket <= 0)
        return
    new 
iCnt;
    if( 
socket_changeg_iSocket) && iCnt 10 )
    {
        
iCnt++
        
receive_data( );
    }
}


public 
disconnect_server()
{
    if( 
g_iSocket )
    {
        
socket_closeg_iSocket );
        
g_iSocket 0;
    }
}

public 
send_request()
{
    if( 
g_iSocket <= )
        return;
    
    
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_INFO
    
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%s%c"25525525525584"Source Engine Query");
    
socket_send2g_iSocketszRequest25 );
    
log_amx"sent INFO: %s"szRequest );
    
    
/*//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_PLAYER
    format( szRequest, sizeof ( szRequest ) -1, "%c%c%c%c%c%c%c%c%c", 255, 255, 255, 255, 85, g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3])  //ping
    socket_send2( g_iSocket, szRequest, 9 );
    log_amx( "sent PLAYERS: %s", szRequest );*/
    
    //http://developer.valvesoftware.com/wiki/Server_Queries#A2S_RULES
    
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%c%c%c%c"25525525525586g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3]);
    
socket_send2g_iSocketszRequest);
    
log_amx"sent RULES: %s"szRequest );
    
    
/*
    format( szRequest, sizeof ( szRequest ) -1, "%c%c%c%c%c", -1,-1,-1,-1, 87 );
    socket_send2( g_iSocket, szRequest, 5 );
    log_amx( "sent CHALANGE: %s", szRequest );*/
    
    
}

public 
receive_data()
{
    static 
szBuffer2048 ], iLen;
    
iLen socket_recvg_iSocketszBuffersizeofszBuffer ) -);
    
    if( 
iLen )
        return;
    
    
    if( 
equalszBuffer, { -1, -1, -1, -}, ) || equalszBuffer, { -2, -1, -1, -}, ) )
    {
        new 
end strlen(szBuffer)+1;
        
        switch( 
szBuffer] )
        {
            
//(correct challange number) A2S_PLAYER reply if sent challange number is unknown/incorrect
            
case 'A':
            {
                
log_amx"RECIVED CHALANGE: %s"szBuffer );
            
/*if( g_ch_ret[ 0 ] == 255 && g_ch_ret[ 1 ] == 255
            && g_ch_ret[ 2 ] == 255 && g_ch_ret[ 3 ] == 255 )
            {*/
                
log_amx"Changed chalange" );
                for( new 
04i++ )
                
g_ch_ret[i] = szBuffer[i+5];
                
                
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_RULES
                
formatszRequestsizeof szRequest ) -1"%c%c%c%c%c%c%c%c%c"25525525525586g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3]);
                
socket_send2g_iSocketszRequest);
                
log_amx"sent RULES FROM A: %s"szRequest );
            }
            
            case 
'D':
            { 
//(players details) A2S_PLAYER reply if sent challange number is correct
                
                
log_amx"RECIVED PLAYERS: %s"szBuffer );
                
g_iPlayers szBuffer];
                
                new 
j=6;
                for(new 
i=0i<g_iPlayersi++){
                    
j++
                    
+= copyc(g_szPlayersNames[i], 31szBuffer[j], 0)+1
                    g_iPlayersKills
[i] =  ret_ac(szBuffer[j+3])<<24|ret_ac(szBuffer[j+2])<<16|ret_ac(szBuffer[j+1])<<8|ret_ac(szBuffer[j]);
                    
                    
g_fPlayersTime] = Float:( ret_ac(szBuffer[j+7])<<24|ret_ac(szBuffer[j+6])<<16|ret_ac(szBuffer[j+5])<<8|ret_ac(szBuffer[j+4]) );  
                    
                    
j+= 8;
                    
                }
                
            }
            
            case 
'I':
            { 
//(server details) A2S_INFO reply
                
log_amx"RECIVED INFO: %s"szBuffer );
                new 
6;
                
+= copycg_szHostNamesizeof g_szHostName ) -1szBuffer], ) +1;
                
+= copycg_szMapNamesizeof g_szMapName ) -1szBuffer], ) +1;
                
+= copycg_szDirsizeof g_szDir ) -1szBuffer], ) +1;
                
+= copycg_szDescriptionsizeof g_szDescription ) -1szBuffer], ) +1;
                
g_iMaxPlayers szBuffer+];
                
g_iBots szBuffer+];
                
+= copyg_szPasswordsizeof g_szPassword ) -1szBuffer+] ? "Yes" "No" );
                
                if( 
g_iPlayers g_iMaxPlayers g_iPlayers g_iMaxPlayers;
                
            }
            default:
            {
                
                
                if( 
szBuffer] == -)
                {
                    if( !
part total szBuffer];
                    if( 
part total end 0;
                    else 
end 16;
                }
                else 
end 7;
                
                
//new name[64], rlen
                
while(end iLen)
                {
                    
//end += copyc(name,63, szBuffer[end], 0)
        
                    
end += copyg_szRulesiRules ], sizeof g_szRules[] ) -1szBufferend ] );
                    
end += 1;
                    
end += copyg_szRulesValueiRules ], sizeof g_szRulesValue[] ) -1szBuffer[end] ) 
                    
end += 1;
                    
                    
//    end += rlen+1        //skip cvar name
                    
                    //end += strlen(szBuffer[end])+1    //skip cvar value
                    
iRules++;
                }
                
part++;
                
                
//log_amx( "%i, %i, %i, %i", iLen, end, total, part );
                
for( new 0iRulesz++ )
                {
                    
log_amx"%s | %s"g_szRules], g_szRulesValue] );
                }
            }
        }
    }
    
/*else if( equal( szBuffer, { -2, -1, -1, -1 }, 4 ) )
{
    log_amx( "RECIVED RULES: %s", szBuffer );
    if( szBuffer[ 4 ] == 'E' || szBuffer[ 4 ] == 'V' )
    {
        
    }
}*/

}



public 
ret_ac(num){ //change byte -128..127 into 0..255
    
if(num<0)
        return 
256+num
    
return num

it's ugly coded.. for test.

Last edited by red_bull2oo6; 07-17-2013 at 20:08.
red_bull2oo6 is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:24.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode