np. /Adi
#include <amxmodx>
#include <amxmisc>
#include <fdata>
#define PLUGIN "Players Seen"
#define VERSION "1.0"
#define AUTHOR "Alka"
enum {
seconds = 1,
minutes,
hours,
days,
months,
years
}
new gDataDir[64], gFile[64];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say", "cmdHookChat");
register_clcmd("say_team", "cmdHookChat");
}
public plugin_cfg()
{
get_datadir(gDataDir, sizeof gDataDir - 1);
formatex(gFile, sizeof gFile - 1, "%s/players_seen.data", gDataDir);
if(!file_exists(gFile))
write_file(gFile, "", -1);
}
public client_connect(id)
{
static sName[32];
get_user_name(id, sName, sizeof sName - 1);
static sTime[32];
num_to_str(get_systime(), sTime, sizeof sTime - 1);
fdata_set(gFile, sName, sTime);
}
public cmdHookChat(id)
{
static sArgs[128];
read_args(sArgs, sizeof sArgs - 1);
remove_quotes(sArgs);
if(!equali(sArgs, "/seen", 5))
return 0;
static sTargetName[32];
strtok(sArgs, sArgs, sizeof sArgs - 1, sTargetName, sizeof sTargetName - 1, ' ', 0);
if(!sTargetName[0])
return 0;
static iFile;
iFile = fopen(gFile, "rt");
static sBuffer[128], sTemp[2][64];
new iFind;
static sFileName[32], sFileTime[32];
while(!feof(iFile))
{
fgets(iFile, sBuffer, sizeof sBuffer - 1);
if(!sBuffer[0])
continue;
str_piece(sBuffer, sTemp, sizeof sTemp, sizeof sTemp[] - 1, ';');
if(containi(sTemp[0], sTargetName) != -1)
{
iFind += 1;
formatex(sFileName, sizeof sFileName - 1, sTemp[0]);
formatex(sFileTime, sizeof sFileTime - 1, sTemp[1]);
}
}
fclose(iFile);
if(iFind == 0)
{
client_print(id, print_chat, "No matches with this name.Be more specific!");
return 0;
}
else if(iFind == 1)
{
if(is_user_connected(get_user_index(sFileName)))
{
client_print(id, print_chat, "%s is on server now!", sFileName);
return 0;
}
else
{
new sTime[64], iLen;
if(get_time_dif(str_to_num(sFileTime), years) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%dy:", get_time_dif(str_to_num(sFileTime), years));
if( get_time_dif(str_to_num(sFileTime), months) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%dm:", get_time_dif(str_to_num(sFileTime), months) % 12);
if(get_time_dif(str_to_num(sFileTime), days) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%dd:", get_time_dif(str_to_num(sFileTime), days) % 30);
if(get_time_dif(str_to_num(sFileTime), hours) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%dh:", get_time_dif(str_to_num(sFileTime), hours) % 24);
if(get_time_dif(str_to_num(sFileTime), minutes) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%dm:", get_time_dif(str_to_num(sFileTime), minutes) % 60);
if(get_time_dif(str_to_num(sFileTime), seconds) >= 1)
iLen += formatex(sTime[iLen], (sizeof sTime - 1) - iLen, "%ds", get_time_dif(str_to_num(sFileTime), seconds) % 60);
client_print(id, print_chat, "%s was here %s ago.", sFileName, sTime);
}
}
else if(iFind > 1)
{
client_print(id, print_chat, "There are %d matches with this name.Be more specific!", iFind);
return 0;
}
return 0;
}
stock get_time_dif(StartTime, _:TimeUnits)
{
new ActualTime = get_systime();
switch(TimeUnits)
{
case seconds : { return ActualTime - StartTime; }
case minutes : { return (ActualTime - StartTime) / 60; }
case hours : { return (ActualTime - StartTime) / 3600; }
case days : { return (ActualTime - StartTime) / 86400; }
case months : { return (ActualTime - StartTime) / 2592000; }
case years : { return (ActualTime - StartTime) / 31104000; }
}
return -1;
}
stock str_piece(const input[], output[][], outputsize, piecelen, token = '|')
{
new i = -1, pieces, len = -1 ;
while ( input[++i] != 0 )
{
if ( input[i] != token )
{
if ( ++len < piecelen )
output[pieces][len] = input[i] ;
}
else
{
output[pieces++][++len] = 0 ;
len = -1 ;
if ( pieces == outputsize )
return pieces ;
}
}
return pieces + 1;
}


Dodatki SourceMod



Temat jest zamknięty








