Skocz do zawartości
Brum Brum

[CS:GO] Niestandardowy status

Rekomendowane odpowiedzi

Opis: Plugin dodaje niestandardowy status, który sami ustawicie.

KOD:

Spoiler

#include <sdktools>
#include <PTaH>

#pragma semicolon 1
#pragma newdecls required

ArrayList StatusArray;
ConVar gc_ShowOnlyPlayerInfo, gc_SortPlayerByUserId;
bool g_bHidden[MAXPLAYERS + 1];

public Plugin myinfo = 
{
	name = "ADEPT -> Status", 
	description = "Autorski plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum"
};

public void OnPluginStart()
{
	gc_ShowOnlyPlayerInfo = CreateConVar("sm_status_show_only_player_info", "0", "Show only information about player who executes the status command", _, true, 0.0, true, 1.0);
	gc_SortPlayerByUserId = CreateConVar("sm_status_sort_player_by_userid", "1", "Sort player by their userid", _, true, 0.0, true, 1.0);
	StatusArray = new ArrayList(512);
	PTaH(PTaH_ExecuteStringCommandPre, Hook, ExecuteStringCommand);
	AutoExecConfig(true, "ADEPT_Status");
}
public void OnMapStart() {
	LoadConfig();
}
public void OnClientPostAdminCheck(int client) {
	g_bHidden[client] = false;
}
public void OnClientDisconnect(int client) {
	g_bHidden[client] = false;
}
public void OnMapEnd() {
	StatusArray.Clear();
	for (int i = 1; i <= MaxClients; i++) {
		if (IsClientConnected(i) && !IsFakeClient(i) && !IsClientSourceTV(i)) {
			g_bHidden[i] = false;
		}
	}
}
public Action ExecuteStringCommand(int client, char sCommandString[512])
{
	if (IsValidClient(client))
	{
		static char sMessage[512];
		strcopy(sMessage, sizeof(sMessage), sCommandString);
		TrimString(sMessage);
		
		if (StrContains(sMessage, "status ") == 0 || StrEqual(sMessage, "status", false))
		{
			bool playerlist = false;
			for (int i = 0; i < StatusArray.Length; i++) {
				char buffer[512];
				StatusArray.GetString(i, buffer, sizeof(buffer));
				if (StrContains(buffer, "{USERID}") != -1 && !playerlist) {
					if (!gc_ShowOnlyPlayerInfo.BoolValue) {
						if (gc_SortPlayerByUserId.BoolValue) {
							ArrayList sorted = new ArrayList(2);
							for (int j = 1; j <= MaxClients; j++) {
								if (IsClientConnected(j) && !IsFakeClient(j) && !IsClientSourceTV(j) && !g_bHidden[j]) {
									int index = sorted.Push(GetClientUserId(j));
									sorted.Set(index, i, 1);
								}
							}
							SortADTArray(sorted, Sort_Ascending, Sort_Integer);
							for (int j = 0; j < sorted.Length; j++) {
								buffer = "";
								StatusArray.GetString(i, buffer, sizeof(buffer));
								Format(buffer, sizeof(buffer), "%s", CheckMessageVariables(buffer, GetClientOfUserId(sorted.Get(j, 0))));
								PrintToConsole(client, buffer);
							}
						} else {
							for (int j = 1; j <= MaxClients; j++) {
								if (IsClientConnected(j) && !IsFakeClient(j) && !IsClientSourceTV(j) && !g_bHidden[client]) {
									buffer = "";
									StatusArray.GetString(i, buffer, sizeof(buffer));
									Format(buffer, sizeof(buffer), "%s", CheckMessageVariables(buffer, j));
									PrintToConsole(client, buffer);
								}
							}
						}
					}
					else {
						Format(buffer, sizeof(buffer), "%s", CheckMessageVariables(buffer, client));
						PrintToConsole(client, buffer);
					}
					playerlist = true;
					continue;
				}
				Format(buffer, sizeof(buffer), "%s", CheckMessageVariables(buffer));
				PrintToConsole(client, buffer);
			}
			return Plugin_Handled;
		}
	}
	return Plugin_Continue;
}
char CheckMessageVariables(const char[] message, int client = -1) {
	char buffer[256], sMessage[512], Name[16];
	strcopy(sMessage, sizeof(sMessage), message);
	if (client > -1 && !IsClientConnected(client) && !IsFakeClient(client) && !IsClientSourceTV(client))return sMessage;
	
	if (StrContains(sMessage, "{SERVER_IP}", false) != -1) {
		ReplaceString(sMessage, sizeof(sMessage), "{SERVER_IP}", GetServerIP());
	}
	if (StrContains(sMessage, "{SERVER_NAME}", false) != -1) {
		GetConVarString(FindConVar("hostname"), buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{SERVER_NAME}", buffer);
	}
	if (StrContains(sMessage, "{CURRENT_MAP}", false) != -1) {
		GetCurrentMap(buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{CURRENT_MAP}", buffer);
	}
	if (StrContains(sMessage, "{PLAYER_COUNT}", false) != -1) {
		IntToString(GetPlayers(false), buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{PLAYER_COUNT}", buffer);
	}
	if (StrContains(sMessage, "{CONNECTING_PLAYERS}", false) != -1) {
		IntToString(GetPlayers(true), buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{CONNECTING_PLAYERS}", buffer);
	}
	if (StrContains(sMessage, "{MAXPLAYERS}", false) != -1) {
		IntToString(GetMaxHumanPlayers(), buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{MAXPLAYERS}", buffer);
	}
	if (StrContains(sMessage, "{USERID}", false) != -1) {
		IntToString(GetClientUserId(client), buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{USERID}", buffer);
	}
	if (StrContains(sMessage, "{PLAYERNAME}", false) != -1) {
		Format(Name, sizeof(Name), "%N", client);
		ReplaceString(sMessage, sizeof(sMessage), "{PLAYERNAME}", Name);
	}
	if (StrContains(sMessage, "{STEAM32}", false) != -1) {
		GetClientAuthId(client, AuthId_Steam2, buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{STEAM32}", buffer);
	}
	if (StrContains(sMessage, "{CONNECTION_TIME}", false) != -1) {
		Format(buffer, sizeof(buffer), "%s", FormatShortTime(RoundToFloor(GetClientTime(client))));
		ReplaceString(sMessage, sizeof(sMessage), "{CONNECTION_TIME}", buffer);
	}
	if (StrContains(sMessage, "{CLIENT_PING}", false) != -1) {
		Format(buffer, sizeof(buffer), "%d", GetEntProp(GetPlayerResourceEntity(), Prop_Send, "m_iPing", _, client));
		ReplaceString(sMessage, sizeof(sMessage), "{CLIENT_PING}", buffer);
	}
	if (StrContains(sMessage, "{CURRENT_DATE}", false) != -1) {
		FormatTime(buffer, sizeof(buffer), "%d.%m.%Y");
		ReplaceString(sMessage, sizeof(sMessage), "{CURRENT_DATE}", buffer);
	}
	if (StrContains(sMessage, "{CURRENT_TIME}", false) != -1) {
		FormatTime(buffer, sizeof(buffer), "%H:%M:%S");
		ReplaceString(sMessage, sizeof(sMessage), "{CURRENT_TIME}", buffer);
	}
	if (StrContains(sMessage, "{NEXTMAP}", false) != -1) {
		GetNextMap(buffer, sizeof(buffer));
		ReplaceString(sMessage, sizeof(sMessage), "{NEXTMAP}", buffer);
	}
	return sMessage;
}
void LoadConfig() {
	char inFile[PLATFORM_MAX_PATH];
	char line[512];
	
	BuildPath(Path_SM, inFile, sizeof(inFile), "configs/ADEPT_Status.txt");
	
	Handle file = OpenFile(inFile, "rt");
	if (file != INVALID_HANDLE)
	{
		while (!IsEndOfFile(file))
		{
			if (!ReadFileLine(file, line, sizeof(line))) {
				break;
			}
			
			TrimString(line);
			if (strlen(line) > 0)
			{
				if (StrContains(line, "//") != -1)
					continue;
				
				StatusArray.PushString(line);
			}
		}
		CloseHandle(file);
	}
}
public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int err_max) {
	CreateNative("Status_HidePlayer", Native_HidePlayer);
	CreateNative("Status_ShowPlayer", Native_ShowPlayer);
	CreateNative("Status_IsPlayerHidden", Native_IsPlayerHidden);
	
	RegPluginLibrary("Custom_Status");
	return APLRes_Success;
}
public int Native_HidePlayer(Handle plugin, int numParams) {
	int client = GetNativeCell(1);
	if (!IsValidClient(client))return;
	
	g_bHidden[client] = true;
}
public int Native_ShowPlayer(Handle plugin, int numParams) {
	int client = GetNativeCell(1);
	if (!IsValidClient(client))return;
	
	g_bHidden[client] = false;
}
public int Native_IsPlayerHidden(Handle plugin, int numParams) {
	int client = GetNativeCell(1);
	if (!IsValidClient(client))return false;
	
	return g_bHidden[client];
}
int GetPlayers(bool connecting) {
	int players;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (g_bHidden[i])continue;
		if (connecting && IsClientConnected(i) && !IsClientInGame(i))players++;
		else if (!connecting && IsValidClient(i))players++;
	}
	return players;
}
char FormatShortTime(int time) {
	char Time[12];
	int g_iHours = 0;
	int g_iMinutes = 0;
	int g_iSeconds = time;
	
	while (g_iSeconds > 3600) {
		g_iHours++;
		g_iSeconds -= 3600;
	}
	while (g_iSeconds > 60) {
		g_iMinutes++;
		g_iSeconds -= 60;
	}
	if (g_iHours >= 1)Format(Time, sizeof(Time), "%d:%d:%d", g_iHours, g_iMinutes, g_iSeconds);
	else if (g_iMinutes >= 1)Format(Time, sizeof(Time), "  %d:%d", g_iMinutes, g_iSeconds);
	else Format(Time, sizeof(Time), "   %d", g_iSeconds);
	return Time;
}
char GetServerIP() {
	char NetIP[32];
	int pieces[4];
	int longip = FindConVar("hostip").IntValue;
	
	pieces[0] = (longip >> 24) & 0x000000FF;
	pieces[1] = (longip >> 16) & 0x000000FF;
	pieces[2] = (longip >> 8) & 0x000000FF;
	pieces[3] = longip & 0x000000FF;
	
	Format(NetIP, sizeof(NetIP), "%d.%d.%d.%d:%d", pieces[0], pieces[1], pieces[2], pieces[3], FindConVar("hostport").IntValue);
	return NetIP;
}
bool IsValidClient(int client) {
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
}

 

Wymagania:

PTaH - Najnowsza wersja( https://ptah.zizt.ru/
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! ). 

 

unknown.pngunknown.png

 

INSTALACJA

Kompilujemy plik ADEPT_Status.sp następnie wrzucamy go do folderu /addons/sourcemod/plugins

Następnie wrzucamy plik konfiguracyjny ADEPT_Status.txt do folderu /addons/sourcemod/configs

 

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

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

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

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Niepotrzebny kod w ładowaniu configu (i, totallines).

Poza tym plugin wygląda bardzo fajnie, pozdro 🙂

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kozak 😄

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#————————————————————————————————————————————————————————————————————————
#     _____  _               _  _          ___  ______  _____ ______  _____
#    /  ___|| |             | |(_)        / _ \ |  _  \|  ___|| ___ \|_   _|
#    \ `--. | |_  _   _   __| | _   ___  / /_\ \| | | || |__  | |_/ /  | |
#     `--. \| __|| | | | / _` || | / _ \ |  _  || | | ||  __| |  __/   | |
#    /\__/ /| |_ | |_| || (_| || || (_) || | | || |/ / | |___ | |      | |
#    \____/  \__| \__,_| \__,_||_| \___/ \_| |_/|___/  \____/ \_|      \_/
#
#
#            Nazwa serwera: 
#            Właściciel serwera: Brum Brum
#            Forum: StudioADEPT.net/forum
#            IP Serwera: 
#            Liczba graczy: 4(1)/16
#            Aktualna data i godzina: 18.07.2020 20:01:52
#            Akutalna mapa: am_aztec2
#            Następna mapa: am_grass2_64
—————————————————————————————————————————————————————————————————————————
# userid  | Nick gracza     |      SteamID     |  Czas połączenia  |  ping
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
 

1 osobę tylko pokazuje PTAH mam najnowszego tylko ja mam taki problem?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
19 godzin temu, Danski napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

#————————————————————————————————————————————————————————————————————————
#     _____  _               _  _          ___  ______  _____ ______  _____
#    /  ___|| |             | |(_)        / _ \ |  _  \|  ___|| ___ \|_   _|
#    \ `--. | |_  _   _   __| | _   ___  / /_\ \| | | || |__  | |_/ /  | |
#     `--. \| __|| | | | / _` || | / _ \ |  _  || | | ||  __| |  __/   | |
#    /\__/ /| |_ | |_| || (_| || || (_) || | | || |/ / | |___ | |      | |
#    \____/  \__| \__,_| \__,_||_| \___/ \_| |_/|___/  \____/ \_|      \_/
#
#
#            Nazwa serwera: 
#            Właściciel serwera: Brum Brum
#            Forum: StudioADEPT.net/forum
#            IP Serwera: 
#            Liczba graczy: 4(1)/16
#            Aktualna data i godzina: 18.07.2020 20:01:52
#            Akutalna mapa: am_aztec2
#            Następna mapa: am_grass2_64
—————————————————————————————————————————————————————————————————————————
# userid  | Nick gracza     |      SteamID     |  Czas połączenia  |  ping
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
# 3        [DENTY]><HAPPY><           STEAM_1:0:120462579        13:20          15
 

1 osobę tylko pokazuje PTAH mam najnowszego tylko ja mam taki problem?

Skorzystaj z wersji na aliedach, tutaj na razie nie mam jak zaktualizować 

https://forums.alliedmods.net/showthread.php?p=2710354
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@UPDATE
1. Dodano limit znaków nicku gracza do 16 (jeśli chcesz zmienić na więcej znaków edytuj 103 linie). To nadal nie wygląda zbyt dobrze, ale lepiej (jeśli wiesz jak mogę to zrobić lepiej napisz tutaj <3) (Chodzi o odstęp między nickiem gracza, a steamid screen
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
)
2. Dodano convar do sortowania graczy po userid (rosnąco)
3. Dodano native do ukrywania/pokazywania gracza ze statusu. Przydatne z pluginem admin stealth
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
, gdy admin jest niewidoczny w tabeli wtedy można go ukryć ze statusu, ale musisz najpierw dodać tego native'a do tego pluginu.

 

Oczywiście poprawiono błędy, które występowały w tej wersji na forum.

Udostępnij tę odpowiedź


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

1. Dodano limit znaków nicku gracza do 16 (jeśli chcesz zmienić na więcej znaków edytuj 103 linie). To nadal nie wygląda zbyt dobrze, ale lepiej (jeśli wiesz jak mogę to zrobić lepiej napisz tutaj <3) (Chodzi o odstęp między nickiem gracza, a steamid screen
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
)

 

Przenieś kolumnę "Nick gracza" na koniec tabeli i pozbędziesz się problemu. 😄

Udostępnij tę odpowiedź


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

 

Przenieś kolumnę "Nick gracza" na koniec tabeli i pozbędziesz się problemu. 😄

To też jest rozwiązanie 😄 Jednak będę próbował też jakoś to ogarnąć 😉 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 15.07.2020 o 21:50, Brum Brum napisał:

Kompilujemy plik ADEPT_Status.sp następnie wrzucamy go do folderu /addons/sourcemod/plugins

1902408668_Zrzutekranu(542).thumb.png.8154234704b983a139efe3341f98bd99.png Nie mogę skompilować pliku 😕

Udostępnij tę odpowiedź


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

nie posiadasz includa Ptah w scripting/include

Edytowane przez Shadow

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ę...