Skocz do zawartości
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

Featured Replies

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