Below is my code with another update (writing logs in seperate folder). I don't know exactly what I can move to plugin_init and what should be kept in client_connect. Keeping in mind that the server can be started on the last day of the month and a player connects on the first day of a new month. Then it should write to a new log file.
Code:
#include <amxmodx>
#include <amxmisc>
#include <geoip>
new szName[32], szIP[17], szID[25], szCountry[41]
public plugin_init()
{
register_plugin("AllinfoIP", "1.12b", "fatal")
}
public client_connect(id)
{
new AmxxLogsDir[20], LogFilesDir[28], LogFileName[28], LogFile[56]
get_localinfo("amxx_logs", AmxxLogsDir, charsmax(AmxxLogsDir))
formatex(LogFilesDir, charsmax(LogFilesDir), "%s/allinfo", AmxxLogsDir)
if(!dir_exists(LogFilesDir))
mkdir(LogFilesDir)
get_time("allinfo_players_%m_%Y.txt", LogFileName, charsmax(LogFileName))
formatex(LogFile, charsmax(LogFile), "%s/%s", LogFilesDir, LogFileName)
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szID, charsmax(szID))
get_user_ip(id, szIP, charsmax(szIP), 1)
geoip_country(szIP, szCountry, charsmax(szCountry))
if (!is_user_bot(id))
{
log_to_file(LogFile, " %s | %s | %s | %s", szName, szIP, szID, szCountry)
}
return PLUGIN_HANDLED
}
And this is the complete code with some of your suggestion implemented if I understood what you meant. I need confirmation from a more experienced coder if I did this right:
Code:
#include <amxmodx>
#include <amxmisc>
#include <geoip>
#define ADMIN ADMIN_LEVEL_G // Custom admin level
new AmxxLogsDir[20], LogFilesDir[28], LogFileName[28], LogFile[56], iPlayers[32], iPlayerNum, szName[32], szIP[17], szID[25], szCountry[41]
public plugin_init()
{
register_plugin("AllinfoIP", "1.12b", "fatal")
register_concmd("amx_allinfo", "cmd_allinfo", ADMIN, "- All info..")
get_localinfo("amxx_logs", AmxxLogsDir, charsmax(AmxxLogsDir))
formatex(LogFilesDir, charsmax(LogFilesDir), "%s/allinfo", AmxxLogsDir)
if(!dir_exists(LogFilesDir))
mkdir(LogFilesDir)
}
public client_connect(id)
{
get_time("allinfo_players_%m_%Y.txt", LogFileName, charsmax(LogFileName))
formatex(LogFile, charsmax(LogFile), "%s/%s", LogFilesDir, LogFileName)
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szID, charsmax(szID))
get_user_ip(id, szIP, charsmax(szIP), 1)
geoip_country(szIP, szCountry, charsmax(szCountry))
if (!is_user_bot(id))
{
log_to_file(LogFile, " %s | %s | %s | %s", szName, szIP, szID, szCountry)
}
get_players(iPlayers, iPlayerNum)
for (new i = 0; i < iPlayerNum; i++)
{
if (access(iPlayers[i], ADMIN))
{
if (!is_user_bot(id))
{
client_print(iPlayers[i], print_chat, "%s connected : %s : %s : %s", szName, szID, szIP, szCountry)
}
else
{
client_print(iPlayers[i], print_chat, "%s connected : %s", szName, szID)
}
}
}
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szID, charsmax(szID))
get_user_ip(id, szIP, charsmax(szIP), 1)
get_players(iPlayers, iPlayerNum)
for (new i = 0; i < iPlayerNum; i++)
{
if (access(iPlayers[i], ADMIN))
{
if (!is_user_bot(id))
{
client_print(iPlayers[i], print_chat, "%s disconnected : %s : %s", szName, szID, szIP)
}
else
{
client_print(iPlayers[i], print_chat, "%s disconnected : %s", szName, szID)
}
}
}
return PLUGIN_HANDLED
}
public cmd_allinfo(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
{
console_print(id, "You have no access to this command!")
return PLUGIN_HANDLED
}
get_players(iPlayers, iPlayerNum, "ch")
for (new i = 0; i < iPlayerNum; i++)
{
get_user_name(iPlayers[i], szName, charsmax(szName))
get_user_ip(iPlayers[i], szIP, charsmax(szIP), 1)
get_user_authid(iPlayers[i], szID, charsmax(szID))
geoip_country(szIP, szCountry, charsmax(szCountry))
console_print(id, "%s | %s | %s | %s", szName, szIP, szID, szCountry)
}
return PLUGIN_HANDLED
}