Skocz do zawartości

Rozbudowany komunikat zapraszania do gildii o nazwę gracza

Opublikowano

Cześć, 

 

Ten temat poświęcony jest wprowadzeniu ulepszenia w komunikacie zapraszania do gildii. Nowa wersja pakietu będzie przekazywać dodatkową informację - nazwę gracza wysyłającego zaproszenie. Umożliwi to wyświetlenie w komunikacie zarówno nazwy gildii, jak i nazwy gracza zapraszającego.

 

Stara wersja komunikatu:

image.png.4853a38c96c86d277d9cb2419b562dbf.png

 

Nowa wersja komunikatu:

Zrzutekranu2024-05-25173944.png.fd53bd2cf8807a25a13609032aac76ce.png

 

Implementacja

📂Lokalizacja pliku: 'game -> guild.cpp' 

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

 

📂Lokalizacja pliku: 'UserInterface -> PythonNetworkStreamPhaseGame.cpp' 

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

 

📂Lokalizacja pliku: 'root -> game.py' 

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

 

📂Lokalizacja pliku: 'locale -> locale_game.txt' 

 

🔍Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

Featured Replies

Opublikowano
  • Premium

Wyglada o wiele lepiej, dzięki ❤️ 

  • Sevence zmienił(a) tytuł na Rozbudowany komunikat zapraszania do gildii o nazwę gracza
Opublikowano

Maestro kimpembe

Opublikowano

Dzięki

  • 3 tygodnie później...
Opublikowano

@Sevence Nie wiem czy wiesz ale bufor się przepełnia i działa dopiero gdy złączysz dwa ciągi znaków w jeden.

Chyba że ten poradnik nie jest pełny, albo masz coś pozmieniane w Source, bo standardowa martysama nie potrafi tego kodu odczytać. Wywala się na

buf.write(GetName(), GUILD_NAME_MAX_LEN + 1);

bufor

buf.write(inviterName, CHARACTER_NAME_MAX_LEN + 1);

 

a jak zrobisz buf.write("test", GUILD_NAME_MAX_LEN + 1);

 

wtedy dopiero działa ale klient generuje randomowe znaki w nazwie gracza, pomimo że debug odbiera poprawnie.

 

Zadziałało dopiero gdy zrobiłem

 

    TPacketGCGuild p;
    p.header = HEADER_GC_GUILD;
    p.size = sizeof(p) + sizeof(DWORD) + (GUILD_NAME_MAX_LEN + 1 + CHARACTER_NAME_MAX_LEN + 1);
    p.subheader = GUILD_SUBHEADER_GC_GUILD_INVITE;

    TEMP_BUFFER buf;
    buf.write(&p, sizeof(p));
    buf.write(&gid, sizeof(DWORD));
    char szCombined[GUILD_NAME_MAX_LEN + 1 + CHARACTER_NAME_MAX_LEN + 1];
    snprintf(szCombined, sizeof(szCombined), "%s;%s", GetName(), inviterName);
    buf.write(szCombined, sizeof(szCombined));

    pchInvitee->GetDesc()->Packet(buf.read_peek(), buf.size());

 

Edytowane przez koka

Opublikowano
  • Autor

@koka Masz rację, istnieje problem z przepełnieniem bufora i taki problem z losowymi znakami może wystąpić. W tym poradniku po prostu zapomniałem w warunku odbierającym dodać +1, aby tego przepełnienie nie było, oficjalnie tak zrobiłem i nie miałem takich problemów. Oczywiście zaktualizowałem poradnik. 

 

W tym warunku odbierającym

if (!Recv(GUILD_NAME_MAX_LEN, &szGuildName))

 

Dodaj +1 i wtedy bufor będzie miał odpowiedni rozmiar:

if (!Recv(GUILD_NAME_MAX_LEN + 1, &szGuildName))

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