Gothic Online Forums
Pobieranie świata gracza o podanym id - Printable Version

+- Gothic Online Forums (https://archive.gothic-online.com)
+-- Forum: Community (https://archive.gothic-online.com/forum-18.html)
+--- Forum: Polish (Polski) (https://archive.gothic-online.com/forum-19.html)
+---- Forum: Pomoc (https://archive.gothic-online.com/forum-23.html)
+---- Thread: Pobieranie świata gracza o podanym id (/thread-239.html)

Pages: 1 2


Pobieranie świata gracza o podanym id - Buras - 26.12.2015

Witam.

Próbuję stworzyć komendę teleportu do gracza o wybranym ID. Z poziomu serwera jestem w stanie pobrać pozycję gracza, ale nie widzę żadnej funkcji serwera, która pobierałaby świat. Gdyby dało się wywołać funkcję klienta u innego gracza i wyciągnąć od niego informacje, byłoby świetnie, ale nie jestem pewien, czy takie coś jest możliwe.

Istnieje szansa na napisane takiej komendy na obecnym etapie rozwoju projektu, czy powinienem jeszcze poczekać?


RE: Pobieranie świata gracza o podanym id - Sative - 26.12.2015

Da się, to jest bardzo proste. Poczytaj o callClientFunc i callServerFunc. Mianowicie client po wykrytej zmianie świata może użyć funkcji callServerFunc z id i nazwą świata jako parametrami. Serwer następnie może te nazwy światów trzymać w tablicy/klasie danego gracza.


RE: Pobieranie świata gracza o podanym id - Buras - 26.12.2015

Rozumiem, że serwer może wykonać funkcję klienta i odwrotnie. Mimo to muszę przyznać, że o ile separacja serwera i klienta ma wyjść na dobre, to mi sprawia to straszną trudność z poziomu logiki kodu, a czasami realizacji. Mój tok myślenia wygląda tak, że parametr id, który gracz przekazuje za pomocą komendy, musi zostać wykorzystany przez serwer, który wykona funkcję klienta getWorld() na kliencie gracza o tym id i zwróci wynik, który zostanie wykorzystany przez gracza wykonującego komendę.

Pisanie kodu sprawiało przyjemność, dopóki nie musiałem tworzyć korelacji pomiędzy klientem i serwerem, ale teraz jest to wręcz frustrujące.

EDIT:
Udało mi się wykonać coś takiego w ramach ćwiczeń:
Code:
callClientFunc(pid, "setPosition", x, y, z);
Przez co przeniosłem gracza o wskazanym pid (wskazałem na siebie, ale powinno działać na innych). Problem pojawia się, gdy funkcja klienta zwraca wartość, na której mi zależy. Następujący zapis:
Code:
local test = callClientFunc(pid, "getWorld");
print(test);
Wyświetla mi jedynie true. Zapewne callClientFunc zwraca true, jeśli wykona funkcję, albo coś takiego. Nie mam zielonego pojęcia, jak wydobyć wartość zwracaną przez funkcję klienta.


RE: Pobieranie świata gracza o podanym id - Quarchodron - 26.12.2015

Powiedzmy chcesz zwrócić ten WORLD :
SS :
function ...
{callClientFunc(pid, "getWorldek");}
function ...2(value)
{print(value) /// WORLD}
CS :
function getWorldek()
{local get = getWorld();
callServerFunc("...2", get);}

Możesz to to też inaczej zrobić. Jak chcesz coś to pisz pw.


RE: Pobieranie świata gracza o podanym id - Bimbol - 26.12.2015

EDIT. Użyj funkcji getPlayerWorld(pid) po stronie serwera Smile


RE: Pobieranie świata gracza o podanym id - Quarchodron - 26.12.2015

Heh..rzeczywiście taka jestBig Grin. HWDP JP 100%!


RE: Pobieranie świata gracza o podanym id - Sative - 26.12.2015

(26.12.2015, 01:17)Buras Wrote: Rozumiem, że serwer może wykonać funkcję klienta i odwrotnie. Mimo to muszę przyznać, że o ile separacja serwera i klienta ma wyjść na dobre, to mi sprawia to straszną trudność z poziomu logiki kodu, a czasami realizacji. Mój tok myślenia wygląda tak, że parametr id, który gracz przekazuje za pomocą komendy, musi zostać wykorzystany przez serwer, który wykona funkcję klienta getWorld() na kliencie gracza o tym id i zwróci wynik, który zostanie wykorzystany przez gracza wykonującego komendę.

Pisanie kodu sprawiało przyjemność, dopóki nie musiałem tworzyć korelacji pomiędzy klientem i serwerem, ale teraz jest to wręcz frustrujące.

EDIT:
Udało mi się wykonać coś takiego w ramach ćwiczeń:
Code:
callClientFunc(pid, "setPosition", x, y, z);
Przez co przeniosłem gracza o wskazanym pid (wskazałem na siebie, ale powinno działać na innych). Problem pojawia się, gdy funkcja klienta zwraca wartość, na której mi zależy. Następujący zapis:
Code:
local test = callClientFunc(pid, "getWorld");
print(test);
Wyświetla mi jedynie true. Zapewne callClientFunc zwraca true, jeśli wykona funkcję, albo coś takiego. Nie mam zielonego pojęcia, jak wydobyć wartość zwracaną przez funkcję klienta.

To tak nie działa, trzeba po prostu po stronie clienta stworzyć timer który będzie sprawdzał czy świat się zmienił i jak świat się zmieni, pakiet ma być wysyłany do serwera.


RE: Pobieranie świata gracza o podanym id - Bimbol - 26.12.2015

Spokojnie po ogarnięciu dev 6-1, dodam do dev 7 większość funkcji klienta od gracza na stronie serwera. Póki co musicie radzić sobie z wywoływaniem funkcji.


RE: Pobieranie świata gracza o podanym id - Buras - 26.12.2015

To trochę dziwne, ale getPlayerWorld(pid) nie zwraca mi obecnego świata gracza, tylko defaultowy świat serwera (nawet po zmianie świata). Mimo to myślę, że wreszcie udało mi się napisać chyba działające rozwiązanie.


RE: Pobieranie świata gracza o podanym id - Bimbol - 26.12.2015

Pewnie bug, bo były problemy ze światami w obecnej wersji.