Jump to content

Skrypt rozwożenia towarów/paczek.


Guest Guest26901

Recommended Posts

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

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
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

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

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

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

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
"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

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

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
  
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

  
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
  • 4 weeks later...
  
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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...