![]() |
callClientFunction zwraca wartość null - 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: callClientFunction zwraca wartość null (/thread-2324.html) |
callClientFunction zwraca wartość null - nerdlv7 - 21.01.2018 Witam, to znowu ja. Prawdopodobnie często będę się zwracał do Was o pomoc, jak sam niczego nie wymyślę. Wracając do problemu, próbuję przekazać wartość pobraną od klienta za pomocą funkcji getExp() do serwera, używając callClientFunction. Próbowałem też używać pakietów, niestety wynik jest ten sam. Gdy wyświetlam to po stronie klienta, wszystko śmiga, ale po przekazaniu tej wartości na stronę serwera, wyświetla mi "(null : 0x00000000). Chwytałem się wszystkiego, ale nie potrafię wymyśleć co robię źle ![]() RE: callClientFunction zwraca wartość null - Quarchodron - 21.01.2018 jeżeli np. chcesz zapisać gdzieś tą wartość to używasz w kliencie : callServerFunc("Zapis", heroId, getExp()); Serwer : function Zapis(pid, exp) { print(exp); } Prawdopodobnie zwróci ci exp ![]() Najprościej jednak mieć gdzieś zapisane na serwerze te funkcje. Powiedzmy na szybko wklepane : Players <- []; for (local i = 0; i < getMaxSlots(); ++i) { Players[i] <- {}; Players[i].exp <- 0; } function setPlayerExp(pid, val) { Players[pid].exp = val; callClientFunc(pid, "setExp", val); } function getPlayerExp(pid) { return Players[pid].exp; } Jak chcesz zrozumiec jak działa wysyłanie pakietu itd. Popróbuj bez callClientFunc,callServerFunc tylko na sendPacket RE: callClientFunction zwraca wartość null - nerdlv7 - 21.01.2018 Nie do końca o to mi chodzi. Chciałbym pobrać ilość doświadczenia od gracza i zapisać ją w zmiennej po stronie serwera. Mniej-więcej orientuje się jak działają pakiety i używam ich do ustawienia poziomu czy punktów nauki wcześniej zapisanych w bazie danych: function setLvl(pid, lvl) { local packet = Packet(); packet.writeUInt8(packetID.Lvl); packet.writeUInt8(lvl); packet.send(pid, RELIABLE_ORDERED); } Jednakże, w drugą stronę już nie jest tak dobrze, więc dla ułatwienia używam callClientFunc. W tej chwili mój kod wygląda tak: Klient: function test() { return getExp(); } Serwer: function onPlayerDisconnect(pid, reason) { local value = callClientFun(pid, "test"); print(value); } No i na końcu handler onPlayerDisconnect. Wszystko działa, aż do momentu kiedy wyjdę, a w konsoli zamiast posiadanego doświadczenia, pojawia się wyżej juz wymieniona wartość :/ RE: callClientFunction zwraca wartość null - Quarchodron - 21.01.2018 local value = callClientFun(pid, "test"); print(value); Prześledź jak działa Funkcja callClientFunc i czy coś wogóle ma prawo cos zwracać. RE: callClientFunction zwraca wartość null - Tommy - 21.01.2018 Squirrel Script
Pakiet nie dotrze, bo gracza już nie ma. Zapisuj sobie doświadczenie po stronie serwera tak jak w przykładzie od Quarhodrona, pobieranie od strony klienta jest trochę głupie, gdyż wystarczy głupi Cheat Engine żeby go zwiększyć. RE: callClientFunction zwraca wartość null - nerdlv7 - 21.01.2018 Problem rozwiązany, rzeczywiście callClientFunc nie zwraca żadnej wartości. Musiałem się wcześniej pomylić przy użyciu pakietów, bo teraz śmiga. Jednak teraz Tommy mi uświadomił, że przechowywanie jakiejkolwiek statystyki po stronie klienta nie jest dobrym rozwiązaniem. Dzięki za pomoc! RE: callClientFunction zwraca wartość null - Quarchodron - 21.01.2018 Nie ma sprawy. dobrze,żę sie uczysz a nie powielasz głupie rozwiązania. |