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

dhud znika po jakimś czasie gdy wyswietlam nowe wiadomosci


Najlepsza odpowiedź _McHappy, 09.04.2018 22:48

Logika działania wiadomości typu DHUD wygląda następująco:

strncpy( m_HUDMessageText[m_lastHudMessage], READ_STRING(), 128 );
m_HUDMessageText[m_lastHudMessage][127]=0;	// text

msg->pMessage = m_HUDMessageText[m_lastHudMessage];
msg->pName	  = "HUD_MESSAGE";

gHUD.m_Message.MessageAdd( msg );

m_lastHudMessage++;
m_lastHudMessage %= MAX_SPEC_HUD_MESSAGES;

Gdzie MAX_SPEC_HUD_MESSAGES = 8

 

Wysyłając kolejne wiadomości DHUD, można zaobserwować zjawisko rotacji przy zapisywaniu nowego tekstu wiadomości do tablicy-pola klasy.

Innymi słowy: wysyłając wiadomość o czasie przetrzymania 15s, jej tekst zapisuje się <powiedzmy> w m_HUDMessageText[0]. Kolejne wiadomości (z czasem przetrzymania równym 1s) zapisują się w kolejnych polach tablicy - 1, 2, 3 ... aż do 7. Jako że cały algorytm jest zapętlony, a maks. ilość wiadomości wynosi 8, zmienna wskazująca na kolejne pole tablicy jest zerowana, przez co następna w kolejności wiadomość nadpisze tą początkową - z czasem przetrzymania równym 15s.

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
7 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2018 09:16

Witam. Mam taki problem. Wyświetlam sobie dhud trwający 15s. Wszystko okej. Ale jak podczas tego wyświetlania będę wyświetlał jeszcze jeden dhud, który odświeża sie co 1s i trwa 1s, to po chwili tamten znika (tak po około 6-10s). Czym to moze byc spowodowane?

 

Kod pluginu:

Spoiler

  • +
  • -
  • 0

#2 FireMachine

    Pomocny

  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:48
  • GG:
  • Imię:Michał
  • Lokalizacja:Gdańsk
Offline

Napisano 08.04.2018 10:31

Z tego co widzę jeden i drugi dhud może na siebie nachodzić. Sam w sobie ma ograniczenia do 8 wyświetlonych wiadomości naraz.

Wiadomości zapewne blokują wyświetlanie ale są dalej w tle.

Przy jednosekundowych ustaw działanie  - Float:fxtime na długość wyświetlania -  tak samo zrób też z dłuższą wiadomością.


  • +
  • -
  • 0

Pomogłem?

Zostaw plusa zanim ja postawie plusa nad tobą  :D 


#3 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 09.04.2018 22:48   Najlepsza odpowiedź

Logika działania wiadomości typu DHUD wygląda następująco:

strncpy( m_HUDMessageText[m_lastHudMessage], READ_STRING(), 128 );
m_HUDMessageText[m_lastHudMessage][127]=0;	// text

msg->pMessage = m_HUDMessageText[m_lastHudMessage];
msg->pName	  = "HUD_MESSAGE";

gHUD.m_Message.MessageAdd( msg );

m_lastHudMessage++;
m_lastHudMessage %= MAX_SPEC_HUD_MESSAGES;

Gdzie MAX_SPEC_HUD_MESSAGES = 8

 

Wysyłając kolejne wiadomości DHUD, można zaobserwować zjawisko rotacji przy zapisywaniu nowego tekstu wiadomości do tablicy-pola klasy.

Innymi słowy: wysyłając wiadomość o czasie przetrzymania 15s, jej tekst zapisuje się <powiedzmy> w m_HUDMessageText[0]. Kolejne wiadomości (z czasem przetrzymania równym 1s) zapisują się w kolejnych polach tablicy - 1, 2, 3 ... aż do 7. Jako że cały algorytm jest zapętlony, a maks. ilość wiadomości wynosi 8, zmienna wskazująca na kolejne pole tablicy jest zerowana, przez co następna w kolejności wiadomość nadpisze tą początkową - z czasem przetrzymania równym 15s.


Użytkownik _McHappy edytował ten post 09.04.2018 22:50

  • +
  • -
  • 1

#4 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 10.04.2018 17:11

Tak teraz patrze na ten kod, to trzeba bedzie to obejść jakoś


  • +
  • -
  • 0

#5 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 10.04.2018 17:13

Zawsze można dołączyć wiadomość o czasie przetrzymania 15s do pętli (skracając owy czas do czasu zapętlenia).


  • +
  • -
  • 0

#6 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 10.04.2018 20:00

Chodzi Ci o to żeby jedną wiadomość wyświetlić 5 razy ale co 3s?
  • +
  • -
  • 0

#7 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 10.04.2018 20:30

Raczej, żeby to:

        //duration 15s
	set_dhudmessage(255, 255, 255, -1.0, 0.78, 0, 6.0, 1.0, 1.0, 0.1, false) // zamiana 15s->1s
	show_dhudmessage(0, "dluga message")

umieścić tu:

public msg()
{
	for(new id = 1; id <= g_MaxPlayers; id++)
	{	
		if(is_user_connected(id))
		{
			//duration 1s
			set_dhudmessage(0, 255, 0, 0.02, 0.78, 0, 6.0, 1.0, 0.1, 0.1, false)
			show_dhudmessage(0, "%0.0f", get_gametime())
		}
	}
}

~>

public msg()
{
	for(new id = 1; id <= g_MaxPlayers; id++)
	{	
		if(is_user_connected(id))
		{
			//duration 1s
			set_dhudmessage(0, 255, 0, 0.02, 0.78, 0, 6.0, 1.0, 0.1, 0.1, false)
			show_dhudmessage(0, "%0.0f", get_gametime())

                        //duration 15s->1s
                        set_dhudmessage(255, 255, 255, -1.0, 0.78, 0, 6.0, 1.0, 1.0, 0.1, false) // zamiana 15s->1s
                        show_dhudmessage(0, "dluga message")
		}
	}
}

Nie jest to optymalne rozwiązanie, ale tylko tym sposobem możesz mieć pewność, że oba DHUD'y pozostaną na ekranie niezakryte.

To tylko podpowiedź, pokombinuj trochę, a dojdziesz do rozwiązania problemu ;)


  • +
  • -
  • 0

#8 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.04.2018 08:16

No już wiem jak to. Mam dwa osobne pluginy także będę musiał zrobić refreshing. Dzięki
  • +
  • -
  • 0




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

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