Skocz do zawartości

Rekomendowane odpowiedzi

Na prośbę jednego z użytkowników poniżej umieszczam rozpiskę i przykłady zastosowania tekstu w hint i hud.

 

 

HudText

 

Tekst, który jest wyświetlany bezpośrednio na ekranie gracza. Tekst, który nie jest ani w menu, ani w żadnym z okienek dialogowych.

To jest właśnie tzw HudText. 

Istnieją co najmniej dwa sposoby wyświetlania takiego tekstu. Skupimy się na funkcji ShowHudText
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!, która zawsze idzie w parze z funkcją SetHudTextParams
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!, lub SetHudTextParamsEx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!.

Różnica między tymi dwiema polega na tym, że w pierwszej z nich określamy jeden zestaw kolorów, a w drugiej dwa. 

Nie będę się w to zagłębiał, bo przyznam szczerze że z drugiej funkcji nie korzystałem bodajże nigdy, więc nie czuję się w tym obszarze ekspertem.

 

W kodzie wygląda to tak, że najpierw należy określić parametry tekstu, a potem można go wyświetlić. Używając wcześniej wspomnianej funkcji SetHudTextParams możemy określić położenie na osiach X i Y, czas wyświetlania tekstu, kolor wraz z alfą i efekt (fade in/out z czasem zanikania).

 

Śmiało mogę powiedzieć, że odpowiednie ustawienie tekstu nierzadko wymaga nakładu pracy. Mamy do czynienia z różnymi rozdzielczościami ekranów graczy, i tylko środek pozostanie środkiem.

 

Dla przykładu - mnie interesuje tekst, który docelowo ma zostać wyświetlony w górnym lewym rogu ekranu. Nie ma mieć żadnego efektu, ma być zielony i w lekko przezroczysty.

SetHudTextParams(0.01, 0.20, 0.2, 0, 255, 0, 140); 
ShowHudText(client, -1, "ŁADUNKI : %i", ilosc_min_gracza[client]);

Po ustaleniu parametrów, funkcją ShowHudText wyświetlamy tekst klientowi, na kanale -1 = kanale poprzednio używanym, bądź najprawopodobniej randomowym przy pierwszym użyciu.

Trzecim argumentem jest właśnie tekst - może to być wcześniej Format
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!owany string, może to być tekst w cudzysłowie. Argumenty wypisujemy po przecinku w odpowiedniej kolejności, dokładnie jak w przypadku np funkcji PrintToChat
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!.

 

Przykład zastosowania kodu w timerze, którzy wyświetla tekst zawierający zabójstwa gracza w różnych kolorach, zależnie od ich ilości. Przy śmierci gracza resetujemy te wartości.

 

Spoiler

#include <sourcemod>

int zabojstwa[MAXPLAYERS+1];
Handle timer_handler[MAXPLAYERS+1]; 

public Plugin myinfo =
{
        name = "",
        author = "",
        description = "",
        version = "",
        url = ""
};

public OnPluginStart()
{
		HookEvent("player_death", SmiercGracza);
		HookEvent("player_spawn", OdrodzenieGracza);	
}
public Action HudTextTimer(Handle:timer, any:client)
{
	if(IsPlayerAlive(client))
	{
		if (zabojstwa[client] <= 1)
		{
			SetHudTextParams(0.01, 0.20, 0.2, 0, 255, 0, 140);
			ShowHudText(client, -1, "Zabójstwa : %i", zabojstwa[client]);
		}
		else if (zabojstwa[client] == 2)
		{
			SetHudTextParams(0.01, 0.20, 0.2, 204, 255, 0, 140);
			ShowHudText(client, -1, "Zabójstwa : %i", zabojstwa[client]);		
		}
		else if (zabojstwa[client] == 3)
		{
			SetHudTextParams(0.01, 0.20, 0.2, 255, 215, 0, 140);
			ShowHudText(client, -1, "Zabójstwa : %i", zabojstwa[client]);		
		}
		else if (zabojstwa[client] > 3)
		{
			SetHudTextParams(0.01, 0.20, 0.2, 255, 0, 0, 140);
			ShowHudText(client, -1, "Zabójstwa : %i", zabojstwa[client]);		
		}
	}
	else
		return Plugin_Stop;
		
	return Plugin_Continue;
}
public Action SmiercGracza(Event event, char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	int killer = GetClientOfUserId(GetEventInt(event, "attacker"));
	
	if(!IsValidClient(killer))
		return Plugin_Continue;

	if(!IsValidClient(client) || !IsPlayerAlive(killer))
		return Plugin_Continue;

	if(GetClientTeam(client) == GetClientTeam(killer))
		return Plugin_Continue;

	zabojstwa[killer] ++;
	ClearTimer(timer_handler[client]);
	return Plugin_Continue;
}
public Action OdrodzenieGracza(Event event, char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(!IsValidClient(client))
		return Plugin_Continue;

	timer_handler[client] = CreateTimer(0.1, HudTextTimer, client, TIMER_REPEAT);
	zabojstwa[client] = 0;
	return Plugin_Continue;
}

stock void ClearTimer(Handle timer)
{
	if (timer != INVALID_HANDLE)
	{
		KillTimer(timer);
		timer = INVALID_HANDLE;
	} 
}
public bool IsValidClient(int client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

 

 

Hint text

 

Tekst, który jest wyświetlany w okienku z informacją np przy rozbrajaniu bomby.

W tej sytuacji sprawa wygląda nieco inaczej, bo mimo używania tylko jednej funkcji
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! możemy kolorować bądź zmieniać wielkość liter używając HTML.

 

Przykład użycia znajdziemy m.in w codmodzie
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. 

Cytat

        PrintHintText(client, "<font color='#FFF'>[Klasa: <b>%s</b>]\n[Exp: <b>%i</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]\n[Killstreak: <b>%i</b>]\n[Monety: <b>%i</b>]</font>", nazwy_klas[klasa_gracza[client]], doswiadczenie_gracza[client], poziom_gracza[client], citem, wytrzymalosc_itemu_gracza[client], killstreak[client], monety[client]);


Wygląda groźnie? To złudzenie. Pierwszym argumentem jest index klienta, któremu wyświetlamy tekst. Jeśli chcemy wyświetlić go wszystkim, użyjemy funkcji PrintHintTextToAll
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. W tym wypadku nie umieszczamy żadnego ID. Treść zostanie wyświetlona wszystkim.

Wracając - po indexie klienta umieszczamy stringa - albo formatowanego tak jak w przypadku HudTextu, albo w cudzysłowie. Możemy również używać \n, czyli skoku linijkę w dół. 

Co tu dużo mówić, zwyczajny tekst - z tym że formatowanie polega na używaniu HTML, a argumenty wciskane są tak jak w przypadku PrintToChat, i implementowane po cudzysłowie w odpowiedniej kolejności.

Nic trudnego, spróbujcie sami 🙂

 

 

Co do HudText'u - bardzo pomocnym może okazać się plugin naszego kolegi z forum, @Master

Dzięki temu pluginowi w dość prosty sposób jesteśmy w stanie określić położenie i kolor HUD tekstu, który chcemy wyświetlić. Bardzo polecam to rozwiązanie.

 

W razie pytań piszcie, bo trzasnąłem to dość na szybko i jestem delikatnie zmęczony, ale chciałem dotrzymać słowa i chyba mi się udało 😛

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