iMessage - dodanie informacje o rankingu
MrStrajker
12.02.2023
Witam,
Czy byłby ktoś tak dobry i dodał do pluginu imessage w wiadomości hud informacje o aktualnej pozycji w rankingu danego gracza oraz jej całkowitą ilość?
Aktualnie wygląda to tak:
amx_imessage "Witamy na serwerze %hostname%\nZyczmy udanej zabawy!" "000100255"
A potrzebowałbym coś na zasadzie:
amx_imessage "Witamy na serwerze %hostname%\nTwoj ranking wynosi %rank% na %rankmax% graczy\nZyczymy udanej zabawy!" "000100255"
Załączone pliki
Boski Z Polski
12.02.2023
Pewnie można byłoby inaczej pobrać index gracza, do której idzie wiadomość.
Załączone pliki
Boski Z Polski
12.02.2023
%rankmax% wyświetla poprawnie natomiast przy %rank% jest 0
Interesujące. U mnie na serwerze wszystko normalnie pokazuje. Pozdrawiam
MrStrajker
13.02.2023
No to nie mam pojęcia co jest nie tak, ponieważ testowałem na dwóch różnych klientach i u mnie %rank% wyświetla jako 0
PANDA_2zl
14.02.2023
MrStrajker
14.02.2023
A głupie pytanie, byłeś w ogóle w rankingu? Czy zmieniałes konto i po wbiciu od razu sprawdzałeś?
Na pierwszym koncie steamowym jestem na 2 miejscu spośród tysiąca graczy a na drugim nonsteamowym również wyświetla się 0 pomimo tego, że jestem wysoko w ranku.
MrStrajker
14.02.2023
Zresetowałem całkowicie ranking na serwerze i teraz %rank% pokazuje, lecz pokazuje różne rankingi graczy którzy są aktualnie na serwerze.
Czyli jeśli jestem ja i kolega na serwerze to wyświetla na zmianę w wiadomości raz jego rank raz mój.
Użytkownik MrStrajker edytował ten post 14.02.2023 19:10
Deus Vult
14.02.2023
Musisz przypisać identyfikator do funkcji infoMessage() bo jest ona wywoływana taskiem więc użycie pętli for może nie być skutecznym rozwiązaniem w tym przypadku.
Zamień:
if (freq_im > 0.0) set_task(freq_im, "infoMessage", 12345)
Na:
if (freq_im > 0.0) { for(new i=1; i<=32; i++) { if(!is_user_connected(i) || is_user_hltv(i)) continue; set_task(freq_im, "infoMessage", i+12345) } }
Oraz te podmień te funkcje
public infoMessage(id) { id -= 12345 if (g_Current >= g_MessagesNum) g_Current = 0 // No messages, just get out of here if (g_MessagesNum==0) { return; } new values[3]; new Message[384]; ArrayGetString(g_Messages, g_Current, Message, charsmax(Message)); ArrayGetArray(g_Values, g_Current, values); new hostname[64]; get_cvar_string("hostname", hostname, charsmax(hostname)); replace(Message, charsmax(Message), "%hostname%", hostname); new rankmax[10]; formatex(rankmax, charsmax(rankmax), "%i", get_statsnum()); replace(Message, charsmax(Message), "%rankmax%", rankmax); set_hudmessage(values[0], values[1], values[2], X_POS, Y_POS, 0, 0.5, HOLD_TIME, 2.0, 2.0, -1); new stats[8], bodyhits[8] //tworzymy tablice na dane statystyk new pos = get_user_stats(id, stats, bodyhits) // pobieramy statysytki gracza new rank[10]; formatex(rank, charsmax(rank), "%i", pos); replace(Message, charsmax(Message), "%rank%", rank); show_hudmessage(i, "%s", Message); client_print(0, print_console, "%s", Message); ++g_Current; new Float:freq_im = get_pcvar_float(amx_freq_imessage); if (freq_im > 0.0) set_task(freq_im, "infoMessage", id+12345); }
Powyższa funkcja jest modyfikacją modyfikacji boskiego wiec nie gwarantuje ze sie skompiluje, ale jest przykładem jak to powinno działać
Użytkownik Deus Vult edytował ten post 14.02.2023 19:28
MrStrajker
16.02.2023
Zeedytowałem plugin i chyba coś poknociłem, bo występują dwa błędy:
1) Po zmianie mapy/restarcie serwera pierwsza wiadomość wyświetla na serwerze zamiast prawidłowego ranku wyświetla 0 a każda kolejna pojawiająca się wiadomość wyświetla już poprawnie rank.
2) Mam dodane kilka wiadomości które powinny jedna po drugiej się pojawiać natomiast często jest tak, że pojawiają się wszystkie na raz i nachodzą na siebie.
Załączone pliki
Deus Vult
16.02.2023
2) Zamień show_hudmessage(i, "%s", Message); zamiast i wpisz id
Użytkownik Deus Vult edytował ten post 16.02.2023 11:43