#include < amxmodx >
#include < amxmisc >
#include <fakemeta>
#include < geoip >
#define PLG_VERSION "1.2"
#define STR_LEN 32
new FPS = 0;
new Float:NC = 0.0;
new Float:g_nc[33] = 0.0;
new LASTFPS;
new textovariable;
new Pcvar[5];
new g_fps[33];
new g_lastfps[33];
new g_average[10];
enum _:Infos
{
gUserIp[ STR_LEN ],
gUserName[ STR_LEN ]
}
new gLastUsers[ 5 ][ Infos ];
#pragma semicolon 1
public plugin_init()
{
register_plugin("FPS & Ping Status", PLG_VERSION ,"adv");
register_forward(FM_StartFrame,"ForwardStartFrame");
register_forward(FM_PlayerPreThink,"PreThink");
register_concmd( "say /fps", "infomenu" );
register_cvar("amx_statusinfo_version", PLG_VERSION, FCVAR_SERVER | FCVAR_SPONLY );
register_concmd( "amx_showip", "cmd_showip", ADMIN_KICK );
register_concmd( "amx_lastip", "cmdLastIp", ADMIN_ADMIN );
Pcvar[0] = register_cvar("amx_statusinfo", "1");
Pcvar[1] = register_cvar("amx_statusinfo_msg", "1");
Pcvar[2] = register_cvar("amx_statusinfo_interval", "120.0");
textovariable = get_user_msgid("SayText");
set_task(60.0, "msglala");
}
public client_putinserver(id)
g_nc[id] = get_gametime();
public client_disconnect(id)
{
remove_task(id);
static sName[ 32 ];
get_user_name( id, sName, sizeof sName - 1 );
for( new i = 0; i < sizeof gLastUsers; i++ )
{
if( equali( gLastUsers[ i ][ gUserName ], sName ) )
return 1;
}
static iNum;
get_user_name( id, gLastUsers[ iNum ][ gUserName ], STR_LEN - 1 );
get_user_ip( id, gLastUsers[ iNum ][ gUserIp ], STR_LEN - 1, 1 );
iNum++;
if( iNum >= 5 )
iNum = 0;
return 0;
}
public ForwardStartFrame()
{
new Float:HLT = get_gametime();
if(NC >= HLT)
{
FPS++;
}
else
{
NC = NC + 1;
LASTFPS = FPS;
new rand = random_num(0,9);
g_average[rand] = FPS;
FPS = 0;
}
}
public PreThink(id)
{
new Float:HLT = get_gametime();
if( g_nc[id] >= HLT)
{
g_fps[id]++;
}
else
{
g_nc[id] = g_nc[id] + 1.0;
g_lastfps[id] = g_fps[id];
g_fps[id] = 0;
}
}
GetAverage()
{
new Average;
for(new i = 0; i < 10; i++)
{
new calculo = g_average;
Average += calculo;
}
return Average / 10;
}
GetPing()
{
new Playersnum,Players[32],Player,Count,Ping,Loss,Average;
get_players(Players,Playersnum,"ch");
if( Playersnum < 1 )
return 0;
for(Count = 0; Count < Playersnum; Count++)
{
Player = Players[Count];
get_user_ping(Player,Ping,Loss);
Average += Ping;
}
return Average / Playersnum;
}
GetFps()
{
new Playersnum,Players[32],Player,Count, Average;
get_players(Players,Playersnum,"ch");
if( Playersnum < 1 )
return 0;
for(Count = 0; Count < Playersnum; Count++)
{
Player = Players[Count];
Average += g_lastfps[Player];
}
return Average / Playersnum;
}
public msglala()
{
set_task(get_pcvar_float(Pcvar[2]), "msglala");
if( get_pcvar_num(Pcvar[0]) != 1 )
return;
if( get_pcvar_num(Pcvar[1]) != 1 )
return;
for( new i = 1; i <= 32 ; i++)
{
if( is_user_connected(i) && !is_user_bot(i) )
print(i,"^x04Scrie ^x01in^x04 chat ^x03/fps,^x01 pentru a vedea FPS-ul tuturor ^x03Playerilor ^x04info");
}
}
public infomenu(id)
{
if( get_pcvar_num(Pcvar[0]) != 1 )
return;
new msgtitulo[64];
formatex(msgtitulo, 63, "\rFPS \ysi \rPing \yViewer - \wAverage: \y%i", LASTFPS, GetAverage());
new menu = menu_create(msgtitulo, "menuinfo");
new contador = 0;
for( new i = 1; i <= 32; i++)
{
if( is_user_connected(i) && !is_user_bot(i) )
{
contador++;
new msg[128], name[32], numero[5], ping, loss;
get_user_name(i, name, 31);
get_user_ping(i, ping, loss);
formatex(msg, 127, "\y%s \ware \y%i \rFPS si \y%i \rPing", name, g_lastfps, ping );
num_to_str(contador, numero, 4);
menu_additem(menu, msg, numero, 0);
}
}
menu_display(id, menu, 0);
set_task(1.0, "infomenu", id, _, _, "b");
}
public menuinfo(id, menu, item)
{
if(item == MENU_EXIT)
{
remove_task(id);
return PLUGIN_HANDLED;
}
return 0;
}
public cmd_showip( id )
{
console_print( id, "IP-urile prezente pe server-ul DR.LEGENDCS.COM sunt:" );
console_print( id, "------------------------------------------------" );
new players[ 32 ], num;
get_players( players, num );
new i;
new szCountry[ 20 ];
for( i=0; i<num; i++ )
{
new name[ 32 ];
new ip[ 32 ];
new steamid[ 34 ];
get_user_name( players[ i ], name, 31 );
get_user_ip( players[ i ], ip, 31, 1 );
get_user_authid( players[ i ], steamid, 34 );
geoip_country( ip, szCountry, 19 );
console_print( id, " - %s - %s - %s - %s", name, ip, steamid, szCountry );
}
console_print(id, "-----------------------------------------------");
return PLUGIN_HANDLED;
}
public cmdLastIp( id, level, cid )
{
if ( !cmd_access ( id , level , cid , 1 ) )
return PLUGIN_HANDLED;
if( !gLastUsers[ 0 ][ gUserName ][ 0 ] )
{
client_print( id, 3, "Inca nu a iesit nici un jucator de pe server-ul DR.LEGENDCS.COM!" );
return 1;
}
for( new i = 0; i < 5; i++ )
{
if( !gLastUsers[ i ][ gUserName ][ 0 ] || ! gLastUsers[ i ][ gUserIp ][ 0 ] )
continue;
console_print( id,"%s - %s", gLastUsers[ i ][ gUserName ], gLastUsers[ i ][ gUserIp ] );
}
return 1;
}
print(id, const msg[], {Float,Sql,Result,_}:...)
{
new message[192];
vformat(message, 191, msg, 3);
message_begin(MSG_ONE_UNRELIABLE, textovariable, _, id);
write_byte(id);
write_string(message);
message_end();
}