Autor Wątek: Wyszukanie gracza  (Przeczytany 966 razy)

Salomon

  • Gość
# Marzec 06, 2010, 22:14:58
Witam, mam pewien problem, a dokładnie:
Korzystam z Ogre + RakNet, chciałbym wiedzieć jak mam "podpowiedzieć" serwerowi by znalazł klienta o danym  playernetID i wysłał dla niego pakiet nakazujący wpisanie tekstu do konsoli.

std::map<unsigned short, Actor*>::iterator i = actors.find(playerNetID);

if(i != actors.end())
{
Actor* actor = (*i).second;
actor->say(message);
chatConsole->addText(message);
}
To sprawia, że pakiet jest wysyłany do wszystkich klientów jakie znajdzie serwer, a ja chciałbym by wysłał go tylko do klienta o playerNetID równym 1.

Z góry dziękuje za pomoc.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline BrutalComputer

  • Użytkownik

# Marzec 07, 2010, 02:41:45
Ten kawałek kodu nic nie mówi o problemie. Zapewne gdzieś masz instrukcję typu "Wyślij pakiet UDP o zawartości do klienta nr x"... Tutaj masz tylko kilka nic nie mówiących odwołań do funkcji w klasach. Wyszukiwanie w iteratorze masz zrobione poprawnie. Tak więc błędu szukaj w actor->say.

Btw. ciekawi mnie ile czasu szukałeś rozwiązania.

Salomon

  • Gość
# Marzec 07, 2010, 11:58:45
Cytuj
Btw. ciekawi mnie ile czasu szukałeś rozwiązania.
Tym razem około 2h + szukanie w sieci czy ktoś nie miał takiego problemu.

Cytuj
"Wyślij pakiet UDP o zawartości do klienta nr x"
Znalazłem:
server->Send(&loginFail, HIGH_PRIORITY, RELIABLE, 0, packet->systemAddress, false);
Myśle, że "packet->systemAddress" to odnośnik do odbiorcy, do którego ma zostać wysłany packet..
Polazłem do dokumentacji chcąc coś znaleźć na temat systemAddress, tam znalazłem:
"The system that send this packet."
Jednakże nie wpadło mi do głowy jakbym mógł tym znaleźć klienta, który mnie interesuje.
Jedyne co wymyśliłem, to nadanie każdemu wchodzącemu "graczowi" ID = jegonick / i wtedy tego ID używać jako wskaźnika do interesującego nas klienta.

Jeśli macie jakieś inne pomysły to prosiłbym o pomoc ;]

Offline Rodrigo

  • Użytkownik

# Marzec 07, 2010, 13:24:16
No wiec musisz zapamietac ten systemAddress dla kazdego klienta w chwili inicjalizacji(laczenia sie doi serwera). Jakies odwolanie ze player o takim i takim ID posiada taki a taki systemAddress nadany przez RakNet.
A potem masz juz z górki bo wiesz na jaki adres wyslac jesli chcesz wyslac do gracza nr 1 na lsicie... Reszta odnosnie tej funkcji jest w dokumentacji RakNet.

Pozdrawiam,
Rodrigo