Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Players Seen


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 Adi

    Pomocny

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:64
Offline

Napisano 14.07.2010 02:44

Proszę o przerobienie tego pluginu tak, aby zamiast wpisywać /seen nick, wystarczyło wpisać /nick,
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;
}


  • +
  • -
  • 0

#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 14.07.2010 08:37

Zamień
if(!equali(sArgs, "/seen", 5))
		return 0;
na
if(sArgs[0] != '/')
		return 0;

  • +
  • -
  • 1

#3 Change

    Super Hero

  • Użytkownik

Reputacja: 129
Zaawansowany

  • Postów:1 161
  • Lokalizacja:Konin
Offline

Napisano 14.07.2010 09:08

To chyba będzie reagowało na / nick a nie /nick ^^
  • +
  • -
  • 0

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 14.07.2010 09:10

no tak :P /nick jest bez sensu, bo wpisując /top15 zamiast listy TOP15 pokaże się kiedy ostatnio grał gracz o nicku 'top15'

Jeśli to nie przeszkadza to trzeba zmienić jeszcze:
static sTargetName[32];
strtok(sArgs, sArgs, sizeof sArgs - 1, sTargetName, sizeof sTargetName - 1, ' ', 0);

na
static sTargetName[32];
copy(sTargetName, sizeof sTargetName - 1, sArgs[1]);

  • +
  • -
  • 1

#5 Adi

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:64
Offline

Napisano 14.07.2010 15:46

Coś nie zadziałało, więc zostałem przy /seen :)
Rep za dobre chęci.
Temat do zamknięcia.
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych