Tosti Posted May 29, 2013 Share Posted May 29, 2013 Witam, postanowiłem napisać autorski skrypt na freeroam począwszy od systemy wyścigów. Jest więc sobie komenda /wyzwij [Nick] lecz po wpisaniu jej nie ma błędu a wyskakuje na czacie wiadomość "Błąd przy ifie z getElementData". Kodzik (clientside): function wyzwanie(komenda, cel) if cel then gracz=getPlayerName(getLocalPlayer()) nick=getPlayerFromName(cel) if (getElementData(getLocalPlayer(),"gracz.wyzwany")) == "nie" and (getElementData(nick,"gracz.wyzwany")) == "nie" then setElementData(getLocalPlayer(),"gracz.wyzwany", "tak") setElementData(nick,"gracz.wyzwany", "tak") outputChatBox("Wyzwałeś/aś gracza "..cel.." na wyścig!", getLocalPlayer()) outputChatBox("Gracz "..gracz.." wyzwał cię na wyścig! Wpisz /akceptuj by zaakceptować wyzwanie", nick) else outputChatBox("Błąd przy ifie z getElementData", getLocalPlayer()) end else outputChatBox("WZÓR: /"..komenda.." [Nick Gracza]", getLocalPlayer()) end end addCommandHandler("wyzwij", wyzwanie) Link to comment
dzek (varez) Posted May 29, 2013 Share Posted May 29, 2013 a czy kiedykolwiek ustawiałeś dane "gracz.wyzywany" na "nie"? Link to comment
Mefisto_PL Posted May 29, 2013 Share Posted May 29, 2013 a czy kiedykolwiek ustawiałeś dane "gracz.wyzywany" na "nie"? Tak jakbyś Tostuch nie ogarnął, bo Cię znam.. chodzi o to, żebyś ustawił graczowi dane np. przy wejściu na serwer, bo aktualnie ta dana jest pusta. Link to comment
Tosti Posted May 29, 2013 Author Share Posted May 29, 2013 Mefi, wiem że jestem nieogarem ale nie kieruj się stereotypami (skąd ja znam to słowo ). Ale wracając do rzeczy, to zrobiłem rzecz oczywistą (czego z początku nie zrobiłem) a mianowicie ustawiłem setElementData przy wejściu na serwer. Nie ma żadnych błędów w debugu a skrypt jak się nie wykonywał tak się nie wykonuje. Kodzik wypocin (standardowo clientside): function ustawianie() setElementData(source,"gracz.wyzwany", "nie") end addEventHandler("onClientPlayerJoin", getRootElement(), ustawianie) Link to comment
Wielebny Posted May 30, 2013 Share Posted May 30, 2013 (edited) Linia 5 i odwolanie do getLocalPlayer() mowi nam jednoznacznie, ze jest to kod client-side. Z kolei w kolejnych liniach uzywasz argumentow dostepnych tylko server-side (np. drugi parametr outputChatBox). Poza tym setElementData uzyte na elemencie samodzielnie niesynchronizowanym (inny klient) nie będzie na pewno rozpropagowane ani do serwera ani dalej. Inna sprawa to ten nieszczesny 'gracz.wyzwany'. Po co ustawiać te dane przy połączeniu? Masz za dużo pasma? Skorzystaj z takiej konstrukcji: local wyzwany=getElementData(player, "gracz.wyzwany") if not wyzwany then .. gracz nie byl nigdy wyzwany .. else ... gracz byl wyzwany end Ewentualnie możesz też przypisywać domyślną wartość jeśli ta nie była wcześniej ustawiona local wartosc=getElementData(player, "gracz.wyzwany") or "nie" Inna sprawa to to, że zamiast przechowywania tak/nie powinieneś przechowywać tam element przeciwnika lub przynajmniej jego nick - w przeciwnym przypadku kod Ci się posypie jeśli więcej niż 2 osoby bedą z niego korzystać. Edited May 30, 2013 by Guest Link to comment
dzek (varez) Posted May 30, 2013 Share Posted May 30, 2013 Od siebie jeszcze dodam, że marnotrawieniem pamięci i danych jest wpisywanie tam "tak"/"nie" jako string. Od tego masz true/false - 1 bit vs 3 bajty, czyli 24 bity. O ile znaki nie są kodowane wielobajtowo (tj. wszystkie, bo chyba jakiś unikod mamy już w mta?) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now