Guest Posted August 27, 2012 Share Posted August 27, 2012 Witam !!! Dopiero zaczynam swoją przygodę z programowaniem lua. Umiem podstawy c++, więc łatwo mi się oswoić z lua. Napisałem swój skrypt rozwożenia towarów, ale on nie działa. Blipy i markery na mapce się pokazują, ale po wjechaniu w nie, nic się nie dzieje. Bardzo proszę o szybką pomoc. http://www.sendspace.pl/file/f8d6a543675a9e658555fac Link to comment
verona Posted August 27, 2012 Share Posted August 27, 2012 Rozumiem, że sprawdziłeś waringi/errory w konsoli serwera ? Link to comment
Guest Posted August 28, 2012 Share Posted August 28, 2012 Oto screen z debugowania: http://img577.imageshack.us/img577/396/19137299.png Niektóre błędy umiem naprawić, ale na przykład te, to nie za bardzo. Jeżeli mi ktoś wytłumaczy to będę sam naprawiał. Link to comment
Guest Posted August 28, 2012 Share Posted August 28, 2012 Oto link do aktualnego skryptu: http://www.sendspace.pl/file/c778dca3acfadf46f3f6612 Link to comment
verona Posted August 28, 2012 Share Posted August 28, 2012 Specem od lua nie jestem, no ale postaram się pomóc. Takie błędy jak w linii 49 chyba wiesz skąd się biorą? Oczywiście z powodu odwołania do zmiennej która nie istnieje. Co do błędu z gui, to nie podoba mi się sposób stworzenia okienka. Radzę ci zrobić wszystkie elementy w funkcji, która będzie wywoływana przy onClientResourceStart. W tamtej twojej funkcji, nie tworzyć za każdym razem wszystkiego od nowa po najechaniu na marker, tylko zwyczajnie ustawić parametr visible okienka na true. Event z buttonem dodaj bezpośrednio pod linie gdzie tworzysz ten button, w tej samej funkcji. Nie dam głowy że to ma znaczenie, ale tak robili na wiki, tak robię ja, no i tak mi działa. Po za tym w towarTrociny widzę argument Player, a odwołując się do funkcji go nie przekazujesz. addEventHandler( "onClientMarkerHit", markers, towary() ) Czy zamiast "markers" nie powinno być getRootElement()? Link to comment
Guest Posted August 28, 2012 Share Posted August 28, 2012 A ja jestem dopiero początkującym, więc napisz jakiej funkcji użyć. Ok, będę używał event z buttonem bezpośrednio pod linię gdzie tworzę button, ponieważ kiedyś będzie mi lepiej odczytać skrypt. Proszę zrób mi gotowy kod tak jak mówiłeś wyżej, bo nie za bardzo wiem o co chodzi. Znowu nie wiem o co chodzi. Tak, tam powinno być getRootElement(). Poprawiłem już to. PS. Staraj się tłumaczyć mi jak najwięcej. Link to comment
verona Posted August 28, 2012 Share Posted August 28, 2012 source = getLocalPlayer() function onresourceStart () outputChatBox("Skrypt wystartował",255,0,0) -- gui GUIEditor_Window = {} GUIEditor_Button = {} GUIEditor_Window[1] = guiCreateWindow(131,55,586,509,"",false) GUIEditor_Button[1] = guiCreateButton(23,42,130,32,"Trociny 0 Pkt.",false,GUIEditor_Window[1]) addEventHandler( "onClientGUIClick", GUIEditor_Button[1], towarTrociny ) GUIEditor_Button[2] = guiCreateButton(18,383,550,54,"Zaladuj",false,GUIEditor_Window[1]) GUIEditor_Button[3] = guiCreateButton(130,454,332,46,"Zamknij",false,GUIEditor_Window[1]) guiSetVisible(GUIEditor_Window[1], false) end addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), onresourceStart) local markers = { { -1725, -121, 2 }, {-1854, 1402, 6.1}, {-2282, 2278, 4,5}, {-367, 1547, 75,1}, {345, 2534, 16,2}, {1641, 2412, 10}, {-2887, 503, 4}, {-1515, 721, 6}, {-683, 965, 12}, {948, 2279, 11}, {1488, 2146, 10}, {1910, 2157, 10}, {2242, 1977, 9}, {-658, 2318, 138}, {-2054, -2565, 30}, {-1416, -1468, 101}, {-605, -483, 25}, {-55, -326, 5}, {1077, -307, 75}, {-2644, 1334, 7}, {2481, 2796, 10}, {-857, -1944, 15}, {-87, -1574, 2}, {-2264, -1688, 480}, { -2029.1010742188, 172.45364379883, 27.35425567627 } } local pmoney = getPlayerMoney(source) points = getElementData(getLocalPlayer(), "Pkt") local vehicle_ids = {[524] = true, [578] = true, [403] = true, [514] = true, [414] = true, [515] = true, [440] = true, [455] = true} -- Cement Truck, DFT-30, Linerunner, Tanker, Mule, RoadTrain, Rumpo, Flatbed local dest = markers[math.random(1, #markers)] for k, v in ipairs (markers) do createMarker(v[1], v[2], v[3], "cylinder", 3, 255, 255, 0, 255) createBlip(v[1],v[2],v[3], 51) end local towar = 0 function towary(hitElement) local v = getPedOccupiedVehicle(hitElement) if v then if vehicle_ids[getElementModel(v)] then if towar == 0 and destblip ~= destmarker then guiSetVisible(GUIEditor_Window[1], true) showCursor(true) else rozladunek() end else outputChatBox("To nie jest pojazd dostawczy!", 0, 255, 0) end else outputChatBox("Aby załadować towar musisz mieć pojazd dostawczy!", 0, 255, 0) end end function rozladunek() if towar == 1 and destblip == destmarker then setElementData(source,"Pkt",tonumber(Pkt + 1)) rmoney = math.random(350,700) givePlayerMoney ( source, rmoney ) else outputChatBox("To nie jest ten rozładunek!", 0, 255, 0) end end function towarTrociny (player) if points >= 0 and towar == 0 then local towar = 1 outputChatBox("Załadowałeś trociny!", player) local destblip = createBlip( dest[1], dest[2], dest[3], 41, 2, 255, 255, 0, 0, 100) else outputChatBox("Aby załadować ten towar musisz mieć minimum 0 punktów!", 0, 255, 0) end end addEventHandler( "onClientMarkerHit", getRootElement(), towary ) Nie wszystko jest gotowe, bo nie rozumiem za bardzo logiki tego skryptu. Będziesz musiał do tego dojść sam, by działało tak jak zaplanowałeś w swojej głowie. Nie ma już błędów i waringów. Wykrywanie markera działa, i gdy wjade do niego tirem to wyskakuje "To nie jest ten rozładunek". Jeżeli to nie tak, to będziesz musiał pozmieniać kolejność w skrypcie. Co do poprawek to po prostu porównaj sobie twój skrypt i moje poprawki. Moim zdaniem zrobiłeś to za szybko. Skoro nie masz wprawy w lua, tak samo jak ja, to rób wszystko małymi krokami. Najpierw marker - sprawdzasz czy działa. Potem gui - sprawdzasz czy działa. I tak krok po kroku wszystko łączysz i rozbudowujesz. Tym sposobem będziesz miał jeden błąd do rozmyślania, a nie 5 za jednym zamachem.... Pozdrawiam PS czytaj dokładnie wiki i stosuj jej przykłady, bo moje poprawki polegały zwyczajnie na odwiedzeniu kilku podstron z danymi eventsami/funkcjami. Link to comment
Guest Posted August 28, 2012 Share Posted August 28, 2012 Bardzo dziękuję za ten kod. Czy możesz podać swoje gadu-gadu (jak masz) lub skype? PS. Trzeba usunąć "and destblip ~= destmarker" z instrukcji warunkowej bo w przeciwnym razie, po wjechaniu pojazdem dostawczym w marker, skrypt wyświetli komunikat "To nie ten rozładunek!". Link to comment
verona Posted August 28, 2012 Share Posted August 28, 2012 Forum jest od pomocy, nie gg. Łatwo znaleźć moje gg w necie - 5569666 Link to comment
Guest Posted August 28, 2012 Share Posted August 28, 2012 Proszę o zamknięcie tego tematu. PS. To forum jest naprawdę dobre. Chętnie pomagają, a na niektórych forach, musiałem czekać tygodniami na odpowiedź. Link to comment
dzek (varez) Posted August 28, 2012 Share Posted August 28, 2012 Zamykam na wniosek, jakbyś się rozmyślił - napisz PM, odblokuję. edit: Otwieram ponownie na wniosek (skądś wiedziałem, że tak będzie ;p) Link to comment
Guest Posted August 29, 2012 Share Posted August 29, 2012 Skrypt: http://www.sendspace.pl/file/00f5834dbc43cde038ed63c Jeżeli załaduję towar, skrypt wylosuje miejsce rozładunku, ale gdy wjadę w nie to znowu otwiera się gui. Link to comment
verona Posted August 29, 2012 Share Posted August 29, 2012 Czyli na logike, problem jest z tym warunkiem, i to jego powinieneś prześledzić, i sprawdzić czy zmiennej towar przypisujesz odpowiednio wartości: if towar == 0 then Nikt tu nie będzie za ciebie sprawdzał skryptu krok po kroku (ponownie), bo każdy ma swoje zajęcia A nie, że dasz paczke i naprawcie... Link to comment
Guest Posted August 29, 2012 Share Posted August 29, 2012 Przypisywanie wartości zmiennej towar: setElementData(source,"towar",1) Przypisywanie wartości zmiennej Pkt: setElementData(source,"Pkt",tonumber(Pkt + 1)) Raczej myślę, że przypisuje dobrze. Nie wiem z czym jest problem, więc piszę na forum. "Nikt tu nie będzie za ciebie sprawdzał skryptu krok po kroku (ponownie), bo każdy ma swoje zajęcia A nie, że dasz paczke i naprawcie..." - Od tego jest forum ;d Link to comment
verona Posted August 29, 2012 Share Posted August 29, 2012 "Nikt tu nie będzie za ciebie sprawdzał skryptu krok po kroku (ponownie), bo każdy ma swoje zajęcia A nie, że dasz paczke i naprawcie..." - Od tego jest forum ;d Żartujesz prawda? Przypisywanie wartości zmiennej towar: setElementData(source,"towar",1)Przypisywanie wartości zmiennej Pkt: setElementData(source,"Pkt",tonumber(Pkt + 1)) Mówiłem ci żebyć czytał wiki. Wartość zmiennej przypisujesz podobnie jak w prawie każdym języku programowania czyli "nazwa = wartość". To co użyłeś to przechowywanie danych dla danego gracza, że np. możesz przypisać dla danego gracza punkty, zawartość kieszeni i co kolwiek innego, po czym możesz odwoływać się do tego z dowolnego miejsca między skryptami. if towar == 0 then to odwołanie do zwykłej zmiennej w pamięci skryptu. Jeżeli chcesz się odwołać do danych przypisanych do gracza, to używasz getElementData. Link to comment
Guest Posted August 29, 2012 Share Posted August 29, 2012 Tak, to był żart. Ok. Zrobiłem tak jak mówiłeś. source = getLocalPlayer() function closegui() guiSetVisible(GUIEditor_Window[1],false) showCursor(false) end function onresourceStart () outputChatBox("Skrypt wystartował!",255,0,0) local towar = 0 if towar == 0 then outputChatBox("Zmienna towar wynosi 0", 0, 255, 0) else outputChatBox("Zmienna towar nie wynosi 0.", 0, 255, 0) end GUIEditor_Window = {} GUIEditor_Button = {} GUIEditor_Window[1] = guiCreateWindow(131,55,586,509,"",false) GUIEditor_Button[1] = guiCreateButton(23,42,130,32,"Trociny 0 Pkt.",false,GUIEditor_Window[1]) GUIGetText = guiCreateLabel ( 0.45,0.48, 0.10, 0.04,"Trociny",true,GUIEditor_Window[1] ) addEventHandler( "onClientGUIClick", GUIEditor_Button[1], towarTrociny ) GUIEditor_Button[2] = guiCreateButton(18,383,550,54,"Zaladuj",false,GUIEditor_Window[1]) GUIEditor_Button[3] = guiCreateButton(130,454,332,46,"Zamknij",false,GUIEditor_Window[1]) addEventHandler( "onClientGUIClick", GUIEditor_Button[3], closegui ) guiSetVisible(GUIEditor_Window[1], false) end addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), onresourceStart) local markers = { { -1725, -121, 2 }, {-1854, 1402, 6.1}, {-2282, 2278, 4,5}, {-367, 1547, 75,1}, {345, 2534, 16,2}, {1641, 2412, 10}, {-2887, 503, 4}, {-1515, 721, 6}, {-683, 965, 12}, {948, 2279, 11}, {1488, 2146, 10}, {1910, 2157, 10}, {2242, 1977, 9}, {-658, 2318, 138}, {-2054, -2565, 30}, {-1416, -1468, 101}, {-605, -483, 25}, {-55, -326, 5}, {1077, -307, 75}, {-2644, 1334, 7}, {2481, 2796, 10}, {-857, -1944, 15}, {-87, -1574, 2}, {-2264, -1688, 480}, { -2029.1010742188, 172.45364379883, 27.35425567627 } } local pmoney = getPlayerMoney(source) points = getElementData(getLocalPlayer(), "Pkt") towar = getElementData(getLocalPlayer(), "towar") local vehicle_ids = {[524] = true, [578] = true, [403] = true, [514] = true, [414] = true, [515] = true, [440] = true, [455] = true} -- Cement Truck, DFT-30, Linerunner, Tanker, Mule, RoadTrain, Rumpo, Flatbed local dest = markers[math.random(1, #markers)] for k, v in ipairs (markers) do destmarker = createMarker(v[1], v[2], v[3], "cylinder", 3, 255, 255, 0, 255) createBlip(v[1],v[2],v[3], 51) end function towary(hitElement) local v = getPedOccupiedVehicle(hitElement) if v then if vehicle_ids[getElementModel(v)] then if towar == 0 then guiSetVisible(GUIEditor_Window[1], true) showCursor(true) else rozladunek() end else outputChatBox("To nie jest pojazd dostawczy!", 0, 255, 0) end else outputChatBox("Aby załadować towar musisz mieć pojazd dostawczy!", 0, 255, 0) end end addEventHandler( "onClientMarkerHit", getRootElement(), towary ) function rozladunek() if towar == 1 and destblip == destmarker then setElementData(source,"Pkt",tonumber(Pkt + 1)) towar = 0 rmoney = math.random(350,700) givePlayerMoney ( source, rmoney ) outputChatBox("Rozładowałeś trociny!", player) else outputChatBox("To nie jest ten rozładunek!", 0, 255, 0) end end function towarTrociny (player) if points >= 0 and towar == 0 then towar = 1 outputChatBox("Załadowałeś trociny!", player) local destblip = createBlip( dest[1], dest[2], dest[3], 41, 2, 255, 255, 0, 0, 100) else outputChatBox("Aby załadować ten towar musisz mieć minimum 0 punktów!", 0, 255, 0) end end Ale teraz gdy wjadę w marker pokazuje się komunikat, że to nie ten rozładunek, czyli zmienna towar jest ustawione wtedy na 1. Ale zrobiłem sprawdzenie przy starcie skryptu (patrz wyżej) i pokazuje się komunikat, że zmienna towar wynosi 0. Link to comment
verona Posted August 29, 2012 Share Posted August 29, 2012 Nie rozumiem co ty tam kombinujesz. Jakim cudem zmienna towar ma wynosić 1 jeżeli jej tak nie ustawiłeś? towar = getElementData(getLocalPlayer(), "towar") Co ty tutaj pobierasz skoro nigdzie nie ustawiłeś nic o nazwie "towar"? Jak możesz pobierać wartość czegoś, czego nie utworzyłeś? Po raz setny - czytaj wiki. Albo jeszcze lepiej - zacznij od prostszego skryptu, bo się rzuciłeś na głęboką i toniesz... Link to comment
Guest Posted August 30, 2012 Share Posted August 30, 2012 Problem był z twoją funkcją onresourceStart (). Zrobiłem tak jak dawniej i działa (nie do końca). Link to comment
Guest Posted August 30, 2012 Share Posted August 30, 2012 source = getLocalPlayer() function closegui() guiSetVisible(GUIEditor_Window[1],false) showCursor(false) end outputChatBox("Skrypt wystartował!",255,0,0) local towar = 0 if towar == 0 then outputChatBox("Zmienna towar wynosi 0", 0, 255, 0) else outputChatBox("Zmienna towar nie wynosi 0.", 0, 255, 0) end GUIEditor_Window = {} GUIEditor_Button = {} GUIEditor_Window[1] = guiCreateWindow(131,55,586,509,"",false) GUIEditor_Button[1] = guiCreateButton(23,42,130,32,"Trociny 0 Pkt.",false,GUIEditor_Window[1]) GUIGetText = guiCreateLabel ( 0.45,0.48, 0.10, 0.04,"Trociny",true,GUIEditor_Window[1] ) GUIEditor_Button[2] = guiCreateButton(18,383,550,54,"Zaladuj",false,GUIEditor_Window[1]) GUIEditor_Button[3] = guiCreateButton(130,454,332,46,"Zamknij",false,GUIEditor_Window[1]) addEventHandler( "onClientGUIClick", GUIEditor_Button[3], closegui ) guiSetVisible(GUIEditor_Window[1], false) local markers = { { -1725, -121, 2 }, {-1854, 1402, 6.1}, {-2282, 2278, 4,5}, {-367, 1547, 75,1}, {345, 2534, 16,2}, {1641, 2412, 10}, {-2887, 503, 4}, {-1515, 721, 6}, {-683, 965, 12}, {948, 2279, 11}, {1488, 2146, 10}, {1910, 2157, 10}, {2242, 1977, 9}, {-658, 2318, 138}, {-2054, -2565, 30}, {-1416, -1468, 101}, {-605, -483, 25}, {-55, -326, 5}, {1077, -307, 75}, {-2644, 1334, 7}, {2481, 2796, 10}, {-857, -1944, 15}, {-87, -1574, 2}, {-2264, -1688, 480}, { -2029.1010742188, 172.45364379883, 27.35425567627 } } local pmoney = getPlayerMoney(source) points = getElementData(getLocalPlayer(), "Pkt") local vehicle_ids = {[524] = true, [578] = true, [403] = true, [514] = true, [414] = true, [515] = true, [440] = true, [455] = true} -- Cement Truck, DFT-30, Linerunner, Tanker, Mule, RoadTrain, Rumpo, Flatbed dest = markers[math.random(1, #markers)] for k, v in ipairs (markers) do destmarker = createMarker(v[1], v[2], v[3], "cylinder", 3, 255, 255, 0, 255) pozmark = v[1] createBlip(v[1],v[2],v[3], 51) end function towary(hitElement) local vehicle = getPedOccupiedVehicle(hitElement) if vehicle then if vehicle_ids[getElementModel(vehicle)] then if towar == 0 then guiSetVisible(GUIEditor_Window[1], true) showCursor(true) else rozladunek() end else outputChatBox("To nie jest pojazd dostawczy!", 0, 255, 0) end else outputChatBox("Aby załadować towar musisz mieć pojazd dostawczy!", 0, 255, 0) end end addEventHandler( "onClientMarkerHit", getRootElement(), towary ) function rozladunek() if towar == 1 and pozmark == pozblip then setElementData(source,"Pkt",tonumber(Pkt + 1)) towar = 0 rmoney = math.random(350,700) givePlayerMoney ( source, rmoney ) outputChatBox("Rozładowałeś trociny!", player) else outputChatBox("To nie jest ten rozładunek!", 0, 255, 0) end end function towarTrociny() if points >= 0 and towar == 0 then towar = 1 outputChatBox("Załadowałeś trociny!", player) destblip = createBlip( dest[1], dest[2], dest[3], 41, 2, 255, 255, 0, 0, 100) pozblip = dest[1] else outputChatBox("Aby załadować ten towar musisz mieć minimum 0 punktów!", 0, 255, 0) end end addEventHandler( "onClientGUIClick", GUIEditor_Button[1], towarTrociny) Proszę o pomoc, ponieważ załadując towar i wjeżdżając w wylosowany marker skrypt wypisuje "To nie jest ten rozładunek", a errorów i warning'ów nie ma. Link to comment
Wielebny Posted August 31, 2012 Share Posted August 31, 2012 addEventHandler( "onClientMarkerHit", getRootElement(), towary ) Powinno być zamienione na addEventHandler( "onClientMarkerHit", resourceRoot, towary ) gdyż funkcja towary nie obsługuje nigdy markerów spoza tego zasobu. Tak jak jest obecnie działa, ale jest mniej optymalnie. Link to comment
Guest Posted August 31, 2012 Share Posted August 31, 2012 Skrypt już prawie działa, ale mam jeszcze problemy bo nie dodaje pieniędzy i punkty graczowi. Link do skryptu + punkty: http://www.sendspace.pl/file/7debabbc81367b309fce5a2 Bardzo proszę o szybką odpowiedź, ponieważ znowu będzie tak, że kolega na gg mi pomoże, a tutaj znowu będzie burdel. Link to comment
Guest Posted September 29, 2012 Share Posted September 29, 2012 function zakup(hitElement) if kupuj[1] then outputChatBox("Załadowałeś towar o id 1!", hitElement) end if kupuj[2] then outputChatBox("Załadowałeś towar o id 2!", hitElement) end if kupuj[3] then outputChatBox("Załadowałeś towar o id 3!", hitElement) end end oknotow = guiCreateWindow((x-500)/2,(y-350)/2,500,350,"System towarów",false) for k, v in ipairs (towary) do towar = {} kupuj = {} info = guiCreateLabel (0.06,0.08,0.9,0.3,"Towar Ilość score Min. suma Max. suma", true, oknotow) guiSetFont ( info, "default-bold-small" ) towar[1] = guiCreateLabel (0.03,0.1+0.08*k,0.9,0.3,v[2],true,oknotow) towar[2] = guiCreateLabel (0.27,0.1+0.08*k,0.9,0.3,v[3],true,oknotow) towar[3] = guiCreateLabel (0.46,0.1+0.08*k,0.9,0.3,v[4].."$",true,oknotow) towar[4] = guiCreateLabel (0.68,0.1+0.08*k,0.9,0.3,v[5].."$",true,oknotow) kupuj[k] = guiCreateButton (0.8,0.095+0.08*k,0.13,0.06,"Załaduj",true,oknotow) addEventHandler( "onClientGUIClick", kupuj[k], zakup) zamknij = guiCreateButton (0.45,0.9,0.15,0.07,"Zamknij",true,oknotow) addEventHandler( "onClientGUIClick", zamknij, closegui ) guiSetVisible(oknotow, false) end Dlaczego tylko 3 button mi działa ? Inne po prostu się nie "świecą". Link to comment
Guest Posted October 3, 2012 Share Posted October 3, 2012 Wielkie dzięki za tą pomoc! Błąd rozwiązany. Od razu widać jaka grupa ludzi na tym forum jest głupia... Link to comment
dzek (varez) Posted October 3, 2012 Share Posted October 3, 2012 To, że nikt nie ma czasu, szczególnie w tak małym gronie jak polska sekcja, nie oznacza, że ludziom brakuje wiedzy. Teraz też wiemy, że nie warto Tobie pomagać. Link to comment
Guest Posted October 4, 2012 Share Posted October 4, 2012 Gdyby polskich użytkowników było 20 to nie trzeba byłoby się dziwić, że nikt nie odpowie, ale nas jest przynajmniej ze 100, tak myślę. 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