dhud znika po jakimś czasie gdy wyswietlam...
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
Rivit
08.04.2018
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:
FireMachine
08.04.2018
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ą.
Najlepsza odpowiedź
_McHappy
09.04.2018
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
_McHappy
10.04.2018
Zawsze można dołączyć wiadomość o czasie przetrzymania 15s do pętli (skracając owy czas do czasu zapętlenia).
_McHappy
10.04.2018
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