Skocz do zawartości

Rekomendowane odpowiedzi

Witam,

 

Wiem, że nie pasuje do działu, ale innego chyba nie ma, ale potrzebuje by ktoś napisał pluginu liczący ilość wejść na serwer. Z góry dziękuje.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Dziękuje 1
Napisano (edytowane)

Takie coś z wykorzystaniem SQLite
 

Spoiler
Database g_hDb = null;

public void OnPluginStart()
{
	RegAdminCmd("sm_connections_count", CMDConnectionsCount, ADMFLAG_ROOT);
	
	Database.Connect(SQL_ConnectToDatabase, "storage-local");
}

public void OnMapStart()
{
	if (g_hDb == null)
		Database.Connect(SQL_ConnectToDatabase, "storage-local");
}

public void SQL_ConnectToDatabase(Database db, const char[] error, any data)
{
	db.Query(SQL_OnFastQuery, "CREATE TABLE IF NOT EXISTS `connections_counter` ( `name` VARCHAR(16) PRIMARY KEY, `value` INT NULL DEFAULT '0');");
	g_hDb = db;
}

public void OnClientPutInServer() {
	g_hDb.Query(SQL_OnFastQuery, "INSERT INTO `connections_counter` (`name`) VALUES ('connections') ON CONFLICT(`name`) DO UPDATE SET `value` = `value`+1");
}

public Action CMDConnectionsCount(int client, int args)
{
	g_hDb.Query(SQL_CMDConnectionsCount, "SELECT `value` FROM `connections_counter` WHERE `name` = 'connections'", client);
}

public void SQL_CMDConnectionsCount(Database db, DBResultSet result, const char[] error, any data)
{
	if (result == null)
	{
		LogError("(SQL_OnFastQuery) %s", error);
	} else {
		int numberOfConnections = result.FetchInt(0);
		PrintToChat(data, "Number of connections to the server: %i", numberOfConnections);
	}
}

public void SQL_OnFastQuery(Database db, DBResultSet result, const char[] error, any data)
{
	if (result == null)
	{
		LogError("(SQL_OnFastQuery) %s", error);
	}
}

 


i takie coś z wykorzystaniem MYSQL:
 

Spoiler
Spoiler
Database g_hDb = null;

public void OnPluginStart()
{
	RegAdminCmd("sm_connections_count", CMDConnectionsCount, ADMFLAG_ROOT);
	
	Database.Connect(SQL_ConnectToDatabase, "connections_counter");
}

public void OnMapStart()
{
	if (g_hDb == null)
		Database.Connect(SQL_ConnectToDatabase, "connections_counter");
}

public void SQL_ConnectToDatabase(Database db, const char[] error, any data)
{
	db.Query(SQL_OnFastQuery, "CREATE TABLE IF NOT EXISTS `connections_counter` ( `name` VARCHAR(16) PRIMARY KEY, `value` INT NULL DEFAULT '0');");
	g_hDb = db;
}

public void OnClientPutInServer() {
	g_hDb.Query(SQL_OnFastQuery, "INSERT INTO `connections_counter` (`name`) VALUES ('connections') ON DUPLICATE KEY UPDATE `value` = `value`+1");
}

public Action CMDConnectionsCount(int client, int args)
{
	g_hDb.Query(SQL_CMDConnectionsCount, "SELECT `value` FROM `connections_counter` WHERE `name` = 'connections'", client);
}

public void SQL_CMDConnectionsCount(Database db, DBResultSet result, const char[] error, any data)
{
	int numberOfConnections
	if (result == null)
	{
		LogError("(SQL_OnFastQuery) %s", error);
	} else {
		if (SQL_FetchRow(result)) {
			numberOfConnections = result.FetchInt(0);
		} else 
			numberOfConnections = 0;
		PrintToChat(data, "Number of connections to the server: %i", numberOfConnections);
	}
}

public void SQL_OnFastQuery(Database db, DBResultSet result, const char[] error, any data)
{
	if (result == null)
	{
		LogError("(SQL_OnFastQuery) %s", error);
	}
}

 


Aby używać pluginu z wykorzystaniem MYSQL musisz stworzyć drzewko databases.cfg
o nazwie "connections_counter" albo zmienić sobie w pluginie na jakąś już istniejącą konfigurację

pod komendą:
sm_connections_count - pokazuje ile już jest tych połączeń z serwerem, dostęp tylko mając flagę "z" (root)

 

 

 

connections_counter_sqlite.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! connections_counter_sqlite.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! connections_counter_mysql.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! connections_counter_mysql.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Edytowane przez fejmek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki wielkie, ale zapomniałem dodać, że wolałbym by nie było to robione mysql ani sqlite, za co przepraszan. Więc poczekam jeszcze.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

to w jakim sposobem ma zapisywać ci te informacje?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
2 minuty temu, fejmek napisał:

to w jakim sposobem ma zapisywać ci te informacje?

nie wiem czy one moga działać, ale

cookies (wiem ze to podobne do sql)

keyvalues 

i zapis do pliku txt

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Dziękuje 1
Napisano (edytowane)

Przyznaje się bez bicia, że może 2 raz robiłem jakieś operacje na plikach i do tego jest 5 rano
ale wydaje mi się, że wygląda to git i no testowałem

 

Spoiler
char sPath[PLATFORM_MAX_PATH];
int numberOfConnections;
Handle s_hFile;

#define fPath "connections_count.txt"

public void OnPluginStart()
{
	RegAdminCmd("sm_connections_count", CMDConnectionsCount, ADMFLAG_ROOT);
}

public void OnMapStart()
{
	char existNum[32];
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "a");
	ReadFileString(s_hFile, existNum, sizeof(existNum), -1);
	CloseHandle(s_hFile);
	
	StringToInt(existNum, numberOfConnections);
}

public void OnClientPostAdminCheck() {
	numberOfConnections++;
}

public void OnMapEnd()
{
	char Num[32];
	
	IntToString(numberOfConnections, Num, sizeof(Num));
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "w+");
	WriteFileLine(s_hFile, Num, false);
	CloseHandle(s_hFile);
} 

public Action CMDConnectionsCount(int client, char args)
{
	char existString[32];
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "r");
	ReadFileString(s_hFile, existString, sizeof(existString), -1);
	CloseHandle(s_hFile);
	
	PrintToChat(client, "Number of connections to the server: %s" ,existString);
	
}

 

 

najlepiej zmień tam sobie scieżke do pliku, gdzie tam chcesz 

 

 

 

connections_counter_files.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! connections_counter_files.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Edytowane przez fejmek
estetyka kodu ziomek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
9 godzin temu, fejmek napisał:

Przyznaje się bez bicia, że może 2 raz robiłem jakieś operacje na plikach i do tego jest 5 rano
ale wydaje mi się, że wygląda to git i no testowałem

 

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Ukryj zawartość

char sPath[PLATFORM_MAX_PATH];
int numberOfConnections;
Handle s_hFile;

#define fPath "connections_count.txt"

public void OnPluginStart()
{
	RegAdminCmd("sm_connections_count", CMDConnectionsCount, ADMFLAG_ROOT);
}

public void OnMapStart()
{
	char existNum[32];
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "a");
	ReadFileString(s_hFile, existNum, sizeof(existNum), -1);
	CloseHandle(s_hFile);
	
	StringToInt(existNum, numberOfConnections);
}

public void OnClientPostAdminCheck() {
	numberOfConnections++;
}

public void OnMapEnd()
{
	char Num[32];
	
	IntToString(numberOfConnections, Num, sizeof(Num));
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "w+");
	WriteFileLine(s_hFile, Num, false);
	CloseHandle(s_hFile);
} 

public Action CMDConnectionsCount(int client, char args)
{
	char existString[32];
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "r");
	ReadFileString(s_hFile, existString, sizeof(existString), -1);
	CloseHandle(s_hFile);
	
	PrintToChat(client, "Number of connections to the server: %s" ,existString);
	
}

 

 

najlepiej zmień tam sobie scieżke do pliku, gdzie tam chcesz 

 

 

connections_counter_files.smx 3 kB · 0 pobrań
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! connections_counter_files.sp 1 kB · 0 pobrań
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Po co w komendzie otwierasz plik skoro liczbe polaczen masz w 

int numberOfConnections;

?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Racja, głupota, zapomniałem przerobić tej komendy
we wcześniejszej metodzie int numberOfConnections;
zwracał ilość połączeń na danej mapie, bo nie pobieralem danych w onmapstart
i wszystko dzialo sie w onmapend...
Dzieki, poprawione

 

Spoiler
char sPath[PLATFORM_MAX_PATH];
int numberOfConnections;
Handle s_hFile;

#define fPath "connections_count.txt"

public void OnPluginStart()
{
	RegAdminCmd("sm_connections_count", CMDConnectionsCount, ADMFLAG_ROOT);
}

public void OnMapStart()
{
	char existNum[32];
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "a");
	ReadFileString(s_hFile, existNum, sizeof(existNum), -1);
	CloseHandle(s_hFile);
	
	StringToInt(existNum, numberOfConnections);
}

public void OnClientPostAdminCheck() {
	numberOfConnections++;
}

public void OnMapEnd()
{
	char Num[32];
	
	IntToString(numberOfConnections, Num, sizeof(Num));
	
	BuildPath(Path_SM, sPath, sizeof(sPath), fPath);
	
	s_hFile = OpenFile(sPath, "w+");
	WriteFileLine(s_hFile, Num, false);
	CloseHandle(s_hFile);
}

public Action CMDConnectionsCount(int client, char args)
{
	PrintToChat(client, "Number of connections to the server: %i", numberOfConnections);
} 

 

 

Edytowane przez fejmek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...