MACIEKW89 Posted August 4, 2013 Share Posted August 4, 2013 Witam! Mam problem z moim skryptem na Arenę minigun. Po zabiciu gracza nie dodaje mi score ani pieniędzy.... a zabitemu graczowi czasami zostaje minigun. function poZabiciu(napastnik) if (napastnik) then if (getElementType(napastnik)=="player") then if getElementData(napastnik,"zabawa")==minigun then if getElementData(source,"zabawa")==minigun then --Dla napastnika setPlayerMoney(napastnik,getPlayerMoney(napastnik)+500) setElementData(napastnik,tonumber(getElementData(napastnik, "Score"))+1) outputChatBox("Dostałeś 500$ i 1 score za wykończenie przeciwnika.",napastnik,27,224,89) --Dla zamordowanego takeWeapon(source,38) setElementData(source, "zabawa", brak) end end end end end addEventHandler("onPlayerWasted",root,poZabiciu) Proszę o pomoc. Z góry thx. Link to comment
Wielebny Posted August 5, 2013 Share Posted August 5, 2013 Co przechowujesz w zmiennej minigun i co powinno znajdować się w getElementData(napastnik,"zabawa")? Zabieranie broni w trakcie smierci nie ma żadnego znaczenia, prawdopodobnie bron nadawana mu jest przy lub tuż po respawnie. Link to comment
MACIEKW89 Posted August 5, 2013 Author Share Posted August 5, 2013 Ma to wyglądać tak: Gracz wpisuje /mg i wtedy ustawia mu (zabawa minigun) czyli setElementData(player, "zabawa", minigun) , losuje jeden z 4 spawnów na arenie i daje miniguna. Nie działa mi tylko dodawanie score i kasy po zabiciu przeciwnika. Więc w getElementData powinien być minigun czyli getElementData(napastnik, "zabawa", minigun). Niewiem jak dokładniej wytłumaczyć . Link to comment
dzek (varez) Posted August 5, 2013 Share Posted August 5, 2013 Twoim problemem jest pewnie brak cudzysłowiów w linijce 4,5,12 (minigun i brak - to raczej nie zmienne, a więc wszędzie tam jest `nil`) Link to comment
MACIEKW89 Posted August 5, 2013 Author Share Posted August 5, 2013 Dodałem cudzysłowia i nic.. zero błedów w Debugu. Pieniędzy ani Score niedodaje.. Link to comment
Wielebny Posted August 6, 2013 Share Posted August 6, 2013 Więc w getElementData powinien być minigun czyli getElementData(napastnik, "zabawa", minigun). Niewiem jak dokładniej wytłumaczyć . Zapewne masz na myśli, że w getElementData(napastnik, "zabawa") ma być "minigun", bo minigun bez cudzysłowów to nazwa zmiennej (której prawdopodobnie nie masz zdefiniowanej). Pokaż nam fragment w kodzie gdzie robisz setElementData(napastnik, "zabawa") Link to comment
MACIEKW89 Posted August 6, 2013 Author Share Posted August 6, 2013 (edited) No niech będzie moja strata... po usunięciu problemu usunę ztąd kod. Może nikt nie skopiuje.. Client: ... Server: ... Błagam pomóżcie. Edited August 7, 2013 by Guest Link to comment
Wielebny Posted August 7, 2013 Share Posted August 7, 2013 Jak możemy Ci pomóc, skoro opisujesz inny błąd, a kod wklejasz inny. Wcześniej Twój problem polegał na tym, że zapisywałeś string setElementData(player,"zabawa","minigun") A odczytywałeś poprzez: getElementData(napastnik,"zabawa")==minigun Zamiast: getElementData(napastnik,"zabawa")=="minigun" Obecnie tego problemu nie ma, gdyż poprawiłeś go w międzyczasie. .... a zabitemu graczowi czasami zostaje minigun. Masz podpięte dwa handlery obsługujące onPlayerWasted. Pierwszy nam właśnie pokazałeś i on przydziela kasę i usuwa setElementData(source, "zabawa"). Drugi respawnuje gracza. Problem polega na tym, że błędnie założyłeś, że zawsze bedą wykonywać się w takiej kolejności. W sytuacji, w której ten drugi wykona się przed pierwszym, gracz zostanie zespawnowany na arenie (kod kliencki) a chwile później "zabawa" zostanie usunięta. Dlatego czasami minigun dawany jest po śmierci. Ogólnie popełniłeś też błąd umieszczając kod spawnowania peda na arenie po stronie klienta. Funkcje takie jak setElementDimension i setElementInterior jeśli nie zostaną wykonane po stronie serwera, nie zostaną zsynchronizowane. W efekcie gracz albo nie będzie widział innych, albo inni nie bedą widzieli go, albo będą dziać się jeszcze inne dziwne rzeczy. Proponuje Ci podejść do tematu od nowa i napisać całość po stronie serwera z wpięciem do posiadanych juz przez Ciebie funkcji respawnujących gracza po śmierci. No niech będzie moja strata... po usunięciu problemu usunę ztąd kod. Może nikt nie skopiuje.. Cóż, pomyśl kiedyś o oddaniu społeczności czegoś w zamian za to co bierzesz. MTA to otwarty projekt i dzięki temu, że jest otwarty, jest taki potężny. Link to comment
MACIEKW89 Posted August 7, 2013 Author Share Posted August 7, 2013 Pierwszy nam właśnie pokazałeś i on przydziela kasę i usuwa setElementData(source, "zabawa"). Problem w tym, że nie przydziela kasy. Obecnie tego problemu nie ma, gdyż poprawiłeś go w międzyczasie. Poprawiłem kiedy varez mówił o cudzysłowiach.. i dalej niedziała. Cóż, pomyśl kiedyś o oddaniu społeczności czegoś w zamian za to co bierzesz. MTA to otwarty projekt i dzięki temu, że jest otwarty, jest taki potężny. Właśnie chce to udostępnić...ale najpierw chce skończyć wszystkie zabawy (Chowany, Wojna Gangów, Wyścig, Derby, MG, Biegi i parę innych). Pomożecie w pisaniu od nowa? Link to comment
dzek (varez) Posted August 7, 2013 Share Posted August 7, 2013 Pomożemy, ale póki co masz straszne podejście do wszystkiego, tj: 1) Bierzesz się z góry na zbyt skomplikowane rzeczy. Jeżeli zapominasz w losowych miejscach o cudzysłowiach to znaczy, że nie ogarniasz jeszcze tego na tyle, by napisać cokolwiek poza prostymi zabawami z kodem 2) Nie stosuj polskich nazw w kodzie, nigdzie. Tekst wyświetlany na menusach i innych może być po polsku (a może warto z góry założyć wielojęzyczność skryptu i przygotować sobie teksty chociażby w zmiennych), ale żadnych "zabawa" czy poZabiciu 3) Nazwa funkcji niech będzie krótka, ale niech określa też co robi (poZabiciu określa kiedy się wykonuje, ale nie wiadomo co robi, w dużym projekcie takie nazwy Cię zgubią) 4) Napisałeś 50 linijek kodu, na który ciężko się patrzy, a jednocześnie boisz się, że Ci go ktoś ukradnie - to jest związane z punktem pierwszym - wydaje Ci się, że umiesz i tworzysz coś niesamowitego, zapatrzenie w siebie na wczesnym etapie nigdy nikomu nie przyniosło nic dobrego (na późnym etapie zresztą też) A więc wróć do podstaw (programowania ogólnie, poczytaj o KISS, DRY, o tworzeniu wcięć, ogólnie o językach programowania, czym są tablice, stringi, poczytaj tutoriale o LUA pod MTA, poznaj różnice między stroną klienta i serwera, dowiedz się jak debugować skrypty, a potem zacznij od prostych skryptów, takich zabaw, które na prawdziwy serwer się nie nadadzą, ale pomogą Ci zrozumieć synchronizację i inne tajniki MTA/Lua), a potem w razie problemów - zapraszamy po pomoc Powodzenia! Link to comment
MACIEKW89 Posted August 7, 2013 Author Share Posted August 7, 2013 Dwa słowa: Wielki dzięki. 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