Skocz do zawartości

Featured Replies

Opublikowano

Siema, próbuję poprzez char.cpp wysłać wiadomość do gracza na innym kanale i gdy znajduję gracza w taki sposób
 

CCI * pkCCI = P2P_MANAGER::instance().Find(row[0]);

to gdy chcę uzyskać postać lub wysłać po prostu wiadomość, niezależnie jakim sposobem (pkCCI->pkDesc->ChatPacket(), pkCCI->pkDesc->GetCharacter()->ChatPacket()), to błędu żadnego nie ma, jednak wiadomość się nie wysyła.

Zaznaczę, że gdy sprawdzam ifem pkCCI->pkDesc to jest jak powinno być.

Edytowane przez ramzes

Rozwiązane przez ramzes

Przejdź do rozwiązania
Opublikowano
W dniu 26.04.2024 o 10:51, ramzes napisał(a):

Siema, próbuję poprzez char.cpp wysłać wiadomość do gracza na innym kanale i gdy znajduję gracza w taki sposób
 

CCI * pkCCI = P2P_MANAGER::instance().Find(row[0]);

to gdy chcę uzyskać postać lub wysłać po prostu wiadomość, niezależnie jakim sposobem (pkCCI->pkDesc->ChatPacket(), pkCCI->pkDesc->GetCharacter()->ChatPacket()), to błędu żadnego nie ma, jednak wiadomość się nie wysyła.

Zaznaczę, że gdy sprawdzam ifem pkCCI->pkDesc to jest jak powinno być.

ogólnie rzecz biorąc po tym jak to teraz widzę, to pobierasz rowa z mysql wstępnie pewnie masz tam wyżej selecta a ja się spytam po co? 

Najlepiej szukać po PID postaci a można uzyskać to np. w ten sposób:

CCI * pkCCI = P2P_MANAGER::instance().Find(GetPlayerID);

Jeśli chcesz po nazwie postaci:

CCI * pkCCI = P2P_MANAGER::instance().Find(GetName());

Nie mam na czym przetestować a nie chce mi się robić do tego mini systemik więc teoretycznie Ci podaję rozwiązania

 

A to że nie ma syserr to może go wcale nie być, to nie błąd w kodzie a błąd w logice kodu więc syserr nie wywali, w syslogu jak chcesz zobaczyć co się dzieje czy wgl dany pakiet dociera to można w łatwy sposób, ja sobie robię na chatpacket w grze bo nie chce mi się iść do logów i można dużo z tego wyciągnąć. Jeśli próbujesz szukać jakiejś postaci i niekoniecznie musi być w char.cpp cała funkcja i np. dostępna z poziomu tylko GMa to polecam operować na plikach cmd_general.cpp cmd_gm.cpp co do szukania postaci po argumentach a po znalezieniu wysyłać resztę kodu do char.cpp

Np. zobaczyć czy pobiera GetPlayerID i GetName naszej postaci:

ChatPacket(CHAT_TYPE_INFO, "Jaki jest nick postaci: %d, jaki jest PID postaci: %d", GetName(), GetPlayerID() );

 

Jeśli zapodasz więcej tego Twojego kodu to być może coś jeszcze znajdę do poprawy.

 

Opublikowano
  • Autor
  • Rozwiązanie

Row jest dlatego, że potrzebuję wyszukać graczy po konkretnych danych z db i wysłać wiadomość jeśli są online, tbh mało pomocna odpowiedź, bo nie to było problemem, a wystarczyło zrobić relay na uzyskany nick i problem już jest rozwiązany.

Opublikowano
1 godzinę temu, ramzes napisał(a):

Row jest dlatego, że potrzebuję wyszukać graczy po konkretnych danych z db i wysłać wiadomość jeśli są online, tbh mało pomocna odpowiedź, bo nie to było problemem, a wystarczyło zrobić relay na uzyskany nick i problem już jest rozwiązany.

no rozumiem, skoro sądzisz że mój pomysł nie był wgl pomocny i wolisz selectować i obciążać bazę dodatkowymi połączeniami to ja na ten moment skończyłem dyskusje z Tobą.

Tylko nie pisz potem że jakiś GM czy cokolwiek tam masz wywali Ci kanał albo coś innego. Na drugi raz warto napisać że jest rozwiązane

Opublikowano
10 godzin temu, ramzes napisał(a):

Row jest dlatego, że potrzebuję wyszukać graczy po konkretnych danych z db i wysłać wiadomość jeśli są online, tbh mało pomocna odpowiedź, bo nie to było problemem, a wystarczyło zrobić relay na uzyskany nick i problem już jest rozwiązany.

To zrob to przez proces db, wysyłasz pakiet, wyszukujesz konkretnych graczy przez określone parametry, a potem wysyłasz pakiet z db do peer'a na którym znajdują się dane postacie i wysyłasz im wtedy ChatPacket. W ten sposób unikniesz zbędnych zapytań do bazy danych i ewentualnych podatności silnika gry na różne exploity 

  • Sevence zmienił(a) tytuł na Problem P2P z wysłaniem wiadomości do gracza na innym kanale
  • Sevence zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.