AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   A2S_PLAYER ( resolved ) & A2S_RULES ( need help ) (https://forums.alliedmods.net/showthread.php?t=220742)

red_bull2oo6 07-13-2013 21:23

A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
 
hi again, it seems i need some help.. so after i searched.. like 2 hours.. i decided to ask for it:D

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.

Sylwester 07-14-2013 04:54

Re: A2S_PLAYER players played time problem
 
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]) ); 


red_bull2oo6 07-14-2013 09:12

Re: A2S_PLAYER players played time problem
 
thank you again man, i go test it :)

EDIT: Worked, Thanks !

red_bull2oo6 07-17-2013 10:29

Re: A2S_PLAYER players played time problem
 
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 }
*/ 


Clauu 07-17-2013 16:42

Re: A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
 
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.

red_bull2oo6 07-17-2013 18:08

Re: A2S_PLAYER ( resolved ) & A2S_RULES ( need help )
 
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.


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

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