/*
*
* FPS:
*
*
* CVars:
* cfps 1/0 // Enable/Disable FPS. Default: 1/on.
* cfpsall 1/0 // Print FPS MSG to all players? Default: 1/on.
* cfpsvisual 1/0 // Show/Hide /fps chat message? Default: 1/on.
*
* Usage:
* Type " /fps <nick/#userid> " in say.
* Type " /cfps " in say/say_team for about plugin.
*
* Notes:
* To change delay between user /fps command, edit DELAY_COMMAND and recompile.
* This is engine FPS.
* Original FPS Code by newbie.
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define PLUGIN_NAME "FPS.Meter"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Raggy"
#pragma semicolon 1
#define DELAY_COUNT 1.0 //Delay between frame counts, adjust this according to server ticrate. MUST BE FLOAT
#define DELAY_COMMAND 5.0 //Delay between user /fps command. MUST BE FLOAT
#define COLOR 0x03 //0x01 normal, 0x04 green, 0x03 other. MUST BE CHAR
#define MAX_PLAYERS 32 + 1
new g_iUserFPS[MAX_PLAYERS];
new g_irFPS;
new g_irFPSAll;
new g_irFPSVisual;
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY);
g_irFPS = register_cvar("cfps", "1");
g_irFPSAll = register_cvar("cfpsall", "1");
g_irFPSVisual = register_cvar("cfpsvisual", "1");
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink");
register_clcmd("say", "sayHandle");
register_clcmd("say /fps", "cmdAboutrFPS");
register_clcmd("say_team /fps", "cmdAboutrFPS");
}
public fwdPlayerPreThink(id)
{
if ( !get_pcvar_num(g_irFPS) )
return FMRES_IGNORED;
static Float:fGameTime, Float:fCountNext[MAX_PLAYERS], iCountFrames[MAX_PLAYERS];
if ( fCountNext[id] >= (fGameTime = get_gametime()) )
{
iCountFrames[id]++;
return FMRES_IGNORED;
}
g_iUserFPS[id] = iCountFrames[id];
iCountFrames[id] = 0;
fCountNext[id] = fGameTime + DELAY_COUNT;
return FMRES_IGNORED;
}
public sayHandle(id)
{
if ( !get_pcvar_num(g_irFPS) )
return PLUGIN_CONTINUE;
new szArgs[64];
read_args(szArgs, charsmax(szArgs));
remove_quotes(szArgs);
trim(szArgs);
if ( !szArgs[0] )
return PLUGIN_HANDLED;
if ( szArgs[0] != '/' )
return PLUGIN_CONTINUE;
//Command
new szTarget[32];
parse(szArgs,\
szArgs, charsmax(szArgs),\
szTarget, charsmax(szTarget));
if ( !equali(szArgs, "/fps", 4) )
return PLUGIN_CONTINUE;
//Command
//Delay
new Float:fCommandDelay = DELAY_COMMAND;
static Float:fCommandUsed[MAX_PLAYERS];
if ( fCommandUsed[id] > get_gametime() )
{
printMessage(id, id, "^x01Kérlek várj^x04 %.0f^x03 másodpercet^x01 a parancsok között!", fCommandDelay);
return PLUGIN_HANDLED;
}
//Delay
//Display
trim(szTarget);
if ( !szTarget[0] )
fCommandUsed[id] = displayFPS(id, id, fCommandDelay);
else {
new targetId = cmd_target(id, szTarget, 2);
if ( targetId )
fCommandUsed[id] = displayFPS(id, targetId, fCommandDelay);
else {
printMessage(id, id, "Nem található vagy túl sok játékos található ezzel a névvel: ^x04 %s", szTarget);
return PLUGIN_HANDLED;
}
}
//Display
return get_pcvar_num(g_irFPSVisual) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
}
Float:displayFPS(id, targetId, Float:fCommandDelay)
{
new szName[32];
get_user_name(targetId, szName, charsmax(szName));
new szMsg[192];
formatex(szMsg, charsmax(szMsg), "^x04%s^x01-nak^x04 %d^x03 FPS^x01-e van.", szName, g_iUserFPS[targetId]);
printMessage(id, get_pcvar_num(g_irFPSAll) ? 0 : id, szMsg);
return get_gametime() + fCommandDelay;
}
printMessage(id, targetId, const sMsg[], any:...)
{
new szMessage[192];
vformat(szMessage, charsmax(szMessage), sMsg, 4);
format(szMessage, charsmax(szMessage), "%c[FPS] %s", COLOR, szMessage);
static iSayText;
if ( !iSayText )
iSayText = get_user_msgid("SayText");
message_begin(targetId ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, {0, 0, 0}, targetId);
write_byte(id);
write_string(szMessage);
message_end();
}