#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
public Plugin myinfo =
{
name = "Players count in hostname",
author = "D1maxa",
description = "Showing number of players and version in name of server",
version = "1.21",
url = "http://forums.alliedmods.net/showthread.php?t=126060"
};
int g_iNumClients = 0, g_iVisibleMaxPlayers = 0;
ConVar hostname, sv_visiblemaxplayers, formatted_hostname;
char cVersion[16] = "", cBuf[64], cHostName[64];
public void OnPluginStart()
{
formatted_hostname = CreateConVar("sm_formatted_hostname", "My Server %d/%d (%s)", "Formatted string for dynamic hostname", FCVAR_NOTIFY);
AutoExecConfig(true, "players_count_in_hostname");
formatted_hostname.AddChangeHook(OnConVarsChanged);
hostname = FindConVar("hostname");
sv_visiblemaxplayers = FindConVar("sv_visiblemaxplayers");
sv_visiblemaxplayers.AddChangeHook(OnConVarsChanged);
File steaminf = OpenFile("steam.inf", "r");
if(steaminf == null)
{
LogError("Cannot open steam.inf");
return;
}
char buffer[128];
while(steaminf.ReadLine(buffer, sizeof(buffer)) && (StrContains(buffer, "PatchVersion=", false) == -1))
{}
steaminf.Close();
if(StrContains(buffer, "PatchVersion=", false) != -1)
{
int j = 0, i = FindCharInString(buffer, '=') + 1;
do
{
cVersion[j++] = buffer[i++];
}
while(buffer[i] != '\0' && j < sizeof(cVersion));
cVersion[7] = '\0';
}
}
public void OnMapStart()
{
g_iNumClients = 0;
}
public void OnConfigsExecuted()
{
OnConVarHostnameChanged(formatted_hostname, "", "");
OnConVarHostnameChanged(sv_visiblemaxplayers, "", "");
}
void OnConVarHostnameChanged(ConVar cvar, const char[] oldVal, const char[] newVal)
{
if(cvar == formatted_hostname)
{
cvar.GetString(cHostName, sizeof(cHostName));
}
else if(cvar == sv_visiblemaxplayers)
{
g_iVisibleMaxPlayers = cvar.IntValue;
}
SetNumberOfPlayersInHostname();
}
public void OnClientConnected(int client)
{
if(!IsFakeClient(client))
{
g_iNumClients++;
SetNumberOfPlayersInHostname();
}
}
public void OnClientDisconnect(int client)
{
if(!IsFakeClient(client))
{
g_iNumClients--;
SetNumberOfPlayersInHostname();
}
}
void SetNumberOfPlayersInHostname()
{
Format(cBuf, sizeof(cBuf), cHostName, g_iNumClients, g_iVisibleMaxPlayers, cVersion);
hostname.SetString(cBuf);
ServerCommand("heartbeat");
}