Raised This Month: $32 Target: $400
 8% 

A2S_PLAYER ( resolved ) & A2S_RULES ( need help )


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
red_bull2oo6
Senior Member
Join Date: Mar 2012
Location: Braila, Romania
Old 07-13-2013 , 21:23   A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
Reply With Quote #1

hi again, it seems i need some help.. so after i searched.. like 2 hours.. i decided to ask for it

i took some code from Sylvester's dsi ( duplucate server info ) plugin and i played a little bit with sockets.
the problem is that i cant get each player's played time.. it always says it's 0.0.
i must say that i tried like 5 types of getting it.. no chance.
i don't wanna use server querries.. its too complexe.

here's the code:

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

#include <amxmodx>
#include <sockets>

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

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

new 
g_szHost32 ];
new 
g_szPort10 ]

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_iSocket 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( );
        
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;
        
    
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 );
    
    for( new 
0;g_iPlayersi++ )
        
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;
    }
    
    
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;
    while( 
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;
        
    new 
szRequest32 ];
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_INFO
    
formatszRequest25"%c%c%c%c%c%s%c"25525525525584"Source Engine Query");
    
socket_send2g_iSocketszRequest25 );
    
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_PLAYER
    
format(szRequest9"%c%c%c%c%c%c%c%c%c"25525525525585g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3])  //ping
    
socket_send2(g_iSocketszRequest9);
}

public 
receive_data()
{
    static 
szBuffer2048 ], iLen;
    
iLen socket_recvg_iSocketszBuffersizeofszBuffer ) -);
    
    if( 
iLen )
        return;
    
    
    
    if( !
equalszBuffer, { -1, -1, -1, -}, ) )
        return;
    
    if( 
szBuffer] == 'D' )
    { 
//(players details) A2S_PLAYER reply if sent challange number is correct
        
        
        
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]);
            
            
/*Here i need the code for getting played time.. i tried lots of things.. it's always 0.0 or 23742983749.0 */
            
g_fPlayersTime] = str_to_floatszBuffer+] );
            
            
j+= 8;
            
        }
    }

    
    if( 
szBuffer] == 'I' )
    { 
//(server details) A2S_INFO reply
        
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+];
        
+= copycg_szPasswordsizeof g_szPassword ) -1szBuffer+], );
        
        if( 
g_iPlayers g_iMaxPlayers g_iPlayers g_iMaxPlayers;
    }
}

public 
ret_ac(num){ //change byte -128..127 into 0..255
    
if(num<0)
        return 
256+num
    
return num
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ froman\\ fcharset0 Times New Roman;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang11274\\ f0\\ fs24 \n\\ par }
*/ 
thanks in advance.

Last edited by red_bull2oo6; 07-17-2013 at 10:30. Reason: editting title
red_bull2oo6 is offline
Sylwester
Veteran Member
Join Date: Oct 2006
Location: Poland
Old 07-14-2013 , 04:54   Re: A2S_PLAYER players played time problem
Reply With Quote #2

You are doing it wrong. str_to_float converts from string to float (example string: "23.7"), but what you have stored in szBuffer array is not a string. It's actually the 32bit float split into 4 array cells (each containing 8 bits). You can get it back the same way as player kills:
PHP Code:
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]) ); 
__________________
Impossible is Nothing
Sylwester is offline
red_bull2oo6
Senior Member
Join Date: Mar 2012
Location: Braila, Romania
Old 07-14-2013 , 09:12   Re: A2S_PLAYER players played time problem
Reply With Quote #3

thank you again man, i go test it

EDIT: Worked, Thanks !

Last edited by red_bull2oo6; 07-14-2013 at 11:27.
red_bull2oo6 is offline
red_bull2oo6
Senior Member
Join Date: Mar 2012
Location: Braila, Romania
Old 07-17-2013 , 10:29   Re: A2S_PLAYER players played time problem
Reply With Quote #4

i'm sorry for bumping this thread, but i thought it's better than making a new topic.

i have this code from Sylwester's dpi plugin.. and i tried to add the request for A2S_RULES to get the amx_nextmap, amx_timeleft, and sv_airaccelerate but i suck at it.. ( i tried with some code from p3tsin's serverinfo plugin but nothing happens )

Can anyone give me a snippet or a little code for that?

This is 'my' code, all i need is getting those 3 rules.

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

#include <amxmodx>
#include <sockets>

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

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

new 
g_szHost32 ];
new 
g_szPort10 ]

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_iSocket 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( );
        
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;
        
    
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 );
    
    for( new 
0;g_iPlayersi++ )
        
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;
    }
    
    
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;
    while( 
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;
        
    new 
szRequest32 ];
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_INFO
    
formatszRequest25"%c%c%c%c%c%s%c"25525525525584"Source Engine Query");
    
socket_send2g_iSocketszRequest25 );
    
    
//http://developer.valvesoftware.com/wiki/Server_Queries#A2S_PLAYER
    
format(szRequest9"%c%c%c%c%c%c%c%c%c"25525525525585g_ch_ret[0], g_ch_ret[1], g_ch_ret[2], g_ch_ret[3])  //ping
    
socket_send2(g_iSocketszRequest9);
}

public 
receive_data()
{
    static 
szBuffer2048 ], iLen;
    
iLen socket_recvg_iSocketszBuffersizeofszBuffer ) -);
    
    if( 
iLen )
        return;
    
    
    
    if( !
equalszBuffer, { -1, -1, -1, -}, ) )
        return;
    
    if( 
szBuffer] == 'D' )
    { 
//(players details) A2S_PLAYER reply if sent challange number is correct
        
        
        
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;
            
        }
    }

    
    if( 
szBuffer] == 'I' )
    { 
//(server details) A2S_INFO reply
        
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+];
        
+= copycg_szPasswordsizeof g_szPassword ) -1szBuffer+] ? "YES" "NO");
        
        if( 
g_iPlayers g_iMaxPlayers g_iPlayers g_iMaxPlayers;
    }
}

public 
ret_ac(num){ //change byte -128..127 into 0..255
    
if(num<0)
        return 
256+num
    
return num
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ froman\\ fcharset0 Times New Roman;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang11274\\ f0\\ fs24 \n\\ par }
*/ 

Last edited by red_bull2oo6; 07-17-2013 at 10:31.
red_bull2oo6 is offline
Clauu
Senior Member
Join Date: Feb 2008
Location: RO
Old 07-17-2013 , 16:42   Re: A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
Reply With Quote #5

You have to send a new request '^xFF^xFF^xFF^xFF^x56' and then catch the response and parse the string according to your needs and if i remember correctly the buffer is truncated in 2 because of packet size limit.

Last edited by Clauu; 07-17-2013 at 16:46.
Clauu is offline
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
Reply


Thread Tools
Display Modes

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 09:37.


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