Jump to content

[HELP]Trabalho Caminhoneiro


Recommended Posts

Galera eu e um amigo estamos tentando criar um trabalho de caminhoneiro com o simples conceito de funcionamento da seguinte forma, cria-se uma marker em um local especifico o player passa na marker e abre um dx (a principio era um guiPainel), com algumas opções de locais para entregar cargas até ai tudo bem porem encontramos alguns erros e sempre que resolvemos 1 surge novos 2 ou 3 o problema agora e que ele não esta reconhecendo a marker nos não sabemos mais oque fazer a respeito do mesmo, vou deixar o lado do client e do server e gostaria muito que vocês dessem uma olhada no roteiro e vejam se vocês podem encontrar a fonte do erro.

Client

function onClientResourceStart() 
    truckerMarker = createMarker(2205, -2252, 12.5, "cylinder", 1.5, 255, 0, 0, 153) 
    createBlip(2205, -2252, 12.5, 51, 1, 255, 255, 255, 255, 0, 250) 
end 
addEventHandler("onClientResourceStart", getRootElement(), onClientResourceStart) 
  
function trucker(hitPlayer) 
    if (hitPlayer == localPlayer and source == truckerMarker) then 
        if isPedInVehicle(hitPlayer) then 
            return 
        else 
            hPlayer = hitPlayer 
            addEventHandler("onClientRender", getRootElement(), truckerDX) 
            addEventHandler("onClientKey", getRootElement(),  pressKey) 
        end 
    end 
end 
addEventHandler("onClientMarkerHit", getRootElement(), trucker) 
  
function truckerF(leftPlayer) 
    if (leftPlayer == localPlayer and source == truckerMarker) then 
        removeEventHandler("onClientRender", getRootElement(), truckerDX) 
        removeEventHandler("onClientKey", getRootElement(),  pressKey) 
    end 
end 
addEventHandler("onClientMarkerLeave", getRootElement(), truckerF) 
  
function truckerDX() 
    local sW,sH = guiGetScreenSize() 
    dxDrawLine(sW*813/1280, sH*240/800, sW*813/1280, sH*569/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*1154/1280, sH*240/800, sW*813/1280, sH*240/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*813/1280, sH*569/800, sW*1154/1280, sH*569/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*1154/1280, sH*569/800, sW*1154/1280, sH*240/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawRectangle(sW*814/1280, sH*241/800, sW*340/1280, sH*328/800, tocolor(0, 0, 0, 200), false) 
    dxDrawLine(sW*812/1280, sH*280/800, sW*1154/1280, sH*280/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawText("1. Carga para Los Santos\n2. Carga para Las Venturas", sW*824/1280, sH*299/800, sW*1144/1280, sH*555/800, tocolor(255, 255, 255, 255), 1.00, "sans", "left", "top", false, false, false, false, false) 
    dxDrawLine(sW*812/1280, sH*280/800, sW*1154/1280, sH*280/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawText("Caminhoneiro", sW*859/1280, sH*250/800, sW*1116/1280, sH*270/800, tocolor(255, 255, 255, 255), 1, "diploma", "center", "center", false, false, false, false, false) 
end 
  
function pressKey(button, press) 
    if button == "1" then 
        triggerServerEvent("jobLS", localPlayer, hPlayer) 
        removeEventHandler("onClientKey", getRootElement(), pressKey) 
    elseif button == "2" then 
        triggerServerEvent("jobLV", localPlayer, hPlayer) 
        removeEventHandler("onClientKey", getRootElement(), pressKey) 
    end 
end 

Server

jTrucker = {} 
  
function jobLS(hPlayer) 
    if (isElement(hPlayer) and getElementType(hPlayer) == "player") then 
        local marker = createMarker(2234, -2216, 12.5, "cylinder", 4, 255, 0, 0, 255, hPlayer) 
        local blip = createBlip(-64, -1134, 0.5, 53, 2, 255, 255, 255, 255, 0, 99999, hPlayer) 
        local money = 350 
        hP = hPlayer 
        addEventHandler("onMarkerHit", marker, finishJob) 
        takeJob() 
    end 
end 
addEvent("jobLS", true) 
addEventHandler("jobLS", getRootElement(), jobLS) 
  
function jobLV(hPlayer) 
    if (isElement(hPlayer) and getElementType(hPlayer) == "player") then 
        local marker = createMarker(1501, 1531, 11, "cylinder", 4, 255, 0, 0, 255, hPlayer) 
        local blip = createBlip(1501, 1531, 11, 53, 2, 255, 255, 255, 255, 0, 99999, hPlayer) 
        local money = 450 
        hP = hPlayer 
        addEventHandler("onMarkerHit", marker, finishJob) 
        takeJob() 
    end 
end 
addEvent("jobLV", true) 
addEventHandler("jobLV", getRootElement(), jobLV) 
  
function takeJob() 
    if (isElement(hP) and getElementType(hP) == "player") then 
        local truck = createVehicle(515, 2202, -2249, 14) 
        local trailer = createVehicle(435, 0, 0, 4) 
  
        local pTrucker = jTrucker[hP] 
        pTrucker = {} 
        pTrucker["marker"] = marker 
        pTrucker["blip"] = blip 
        pTrucker["truck"] = truck 
        pTrucker["trailer"] = trailer 
        pTrucker["money"] = money 
                 
        setElementRotation(pTrucker["truck"], 0, 0, -45) 
        setElementRotation(pTrucker["trailer"], 0, 0, -45) 
        warpPedIntoVehicle(hP, pTrucker["truck"]) 
        attachTrailerToVehicle(pTrucker["truck"], pTrucker["trailer"]) 
  
        outputChatBox("#FFFFFF[#00FF00SERVER#FFFFFF] Você obteve um caminhão, leve-o até a marcação.", hP, 255, 255, 255, true) 
    end 
end   
  
function finishJob(hitElement) 
    local pTrucker = jTrucker[hitElement] 
    if pTrucker then 
        if (getVehicleTowedByVehicle(pTrucker["truck"]) == pTrucker["trailer"]) then 
            outputChatBox ("#FFFFFF[#00FF00SERVER#FFFFFF] Você trouxe a carga e recebeu seu pagamento.", hitElement, 255, 255, 255, true) 
            givePlayerMoney(hitElement, pTrucker["money"]) 
        else 
            outputChatBox ("#FFFFFF[#FF0000SERVER#FFFFFF] Você não trouxe a carga, portanto, não receberá.", hitElement, 255, 255, 255, true) 
        end 
         
        pTrucker = nil 
  
        if (isElement(pTrucker["marker"])) then 
            destroyElement(pTrucker["marker"]) 
        end 
        if (isElement(pTrucker["blip"])) then 
            destroyElement(pTrucker["blip"]) 
        end 
        if (isElement(pTrucker["truck"])) then 
            destroyElement(pTrucker["truck"]) 
        end 
        if (isElement(pTrucker["trailer"])) then 
            destroyElement(pTrucker["trailer"]) 
        end 
         
        removeEventHandler("onMarkerHit", pTrucker["marker"], finishJob) 
    end 
end 

Link to comment

Você não precisa adicionar um novo evento onMarkerHit toda vez que alguem pegar uma carga, Basta colocar isso:

addEventHandler ( "onMarkerHit", root, finishJob ) 

Abaixo da função finishJob, Já essa parte:

pTrucker = {} 
pTrucker["marker"] = marker 
pTrucker["blip"] = blip 
pTrucker["truck"] = truck 
pTrucker["trailer"] = trailer 
pTrucker["money"] = money 

Não vai funcionar, toda vez que alguém pegar uma carga a tabela pTrucker irá perder os dados dos outros jogadores.

Você pode definir pTrucker no topo do codigo:

pTrucker = {} 

E na função takeJob fazer da seguinte maneira:

pTrucker[hP] = {} -- criar uma nova tabela (dentro da pTrucker) para o player 
pTrucker[hP]["marker"] = marker 
pTrucker[hP]["blip"] = blip 
pTrucker[hP]["truck"] = truck 
pTrucker[hP]["trailer"] = trailer 
pTrucker[hP]["money"] = money 
  
-- Lembre-se de alterar as funções que vem logo abaixo com as novas tabelas... 

^ Detalhe que no código acima marker, blip e money não vão estar definidos (coloque eles como variaveis globais na função jobLS/jobLV ou os passe como parâmetro da função takeJob (aconselhável))

Com isso não será mais necessário o uso da tabela jTrucker, Agora, na função finishJob você checa da seguinte maneira:

if pTrucker[hitElement] and source == pTrucker[hitElement]["marker"] then 
    if (getVehicleTowedByVehicle(pTrucker[hitElement]["truck"]) == pTrucker[hitElement]["trailer"]) then 
        outputChatBox ("#FFFFFF[#00FF00SERVER#FFFFFF] Você trouxe a carga e recebeu seu pagamento.", hitElement, 255, 255, 255, true) 
        givePlayerMoney(hitElement, pTrucker[hitElement]["money"]) 
    else 
        outputChatBox ("#FFFFFF[#FF0000SERVER#FFFFFF] Você não trouxe a carga, portanto, não receberá.", hitElement, 255, 255, 255, true) 
    end 

Na linha 61 tinha outro problema, você destruía a tabela antes de destruir os elementos

-- Maneira correta: 
function finishJob(hitElement) 
    if pTrucker[hitElement] then 
        if (getVehicleTowedByVehicle(pTrucker[hitElement]["truck"]) == pTrucker[hitElement]["trailer"]) then 
            outputChatBox ("#FFFFFF[#00FF00SERVER#FFFFFF] Você trouxe a carga e recebeu seu pagamento.", hitElement, 255, 255, 255, true) 
            givePlayerMoney(hitElement, pTrucker["money"]) 
        else 
            outputChatBox ("#FFFFFF[#FF0000SERVER#FFFFFF] Você não trouxe a carga, portanto, não receberá.", hitElement, 255, 255, 255, true) 
        end 
  
        if (isElement(pTrucker[hitElement]["marker"])) then 
            destroyElement(pTrucker[hitElement]["marker"]) 
        end 
        if (isElement(pTrucker[hitElement]["blip"])) then 
            destroyElement(pTrucker[hitElement]["blip"]) 
        end 
        if (isElement(pTrucker[hitElement]["truck"])) then 
            destroyElement(pTrucker[hitElement]["truck"]) 
        end 
        if (isElement(pTrucker[hitElement]["trailer"])) then 
            destroyElement(pTrucker[hitElement]["trailer"]) 
        end 
  
        pTrucker[hitElement] = nil 
    end 
end 
addEventHandler ( "onMarkerHit", root, finishJob ) 

Acho que com isso o código já vai funcionar, caso contrario poste aqui o resultado final junto com o problema...

Link to comment

Olá amigo muito obrigado mesmo graças a você resolvemos quase todos os problemas apenas falto 1 bom e simples de explicar e assim, Se eu pegar a carga 1 para LS e o meu amigo a 2 para LV e ele passar por cima da marker 1 de LS fazendo a corrida 2 ele recebe o dinheiro mensagem e tem o veiculo e trailer que são destruídos.

Video para ajudar a intender

Client

function onClientResourceStart() 
    truckerMarker = createMarker(2205, -2252, 12.5, "cylinder", 1.5, 255, 0, 0, 153) 
    createBlip(2205, -2252, 12.5, 51, 1, 255, 255, 255, 255, 0, 250) 
end 
addEventHandler("onClientResourceStart", getRootElement(), onClientResourceStart) 
  
function trucker(hitPlayer) 
    if (hitPlayer == localPlayer and source == truckerMarker) then 
        if isPedInVehicle(hitPlayer) then 
            return 
        else 
            hPlayer = hitPlayer 
            addEventHandler("onClientRender", getRootElement(), truckerDX) 
            addEventHandler("onClientKey", getRootElement(),  pressKey) 
        end 
    end 
end 
addEventHandler("onClientMarkerHit", getRootElement(), trucker) 
  
function truckerF(leftPlayer) 
    if (leftPlayer == localPlayer and source == truckerMarker) then 
        removeEventHandler("onClientRender", getRootElement(), truckerDX) 
        removeEventHandler("onClientKey", getRootElement(),  pressKey) 
    end 
end 
addEventHandler("onClientMarkerLeave", getRootElement(), truckerF) 
  
function truckerDX() 
    local sW,sH = guiGetScreenSize() 
    dxDrawLine(sW*813/1280, sH*240/800, sW*813/1280, sH*569/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*1154/1280, sH*240/800, sW*813/1280, sH*240/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*813/1280, sH*569/800, sW*1154/1280, sH*569/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawLine(sW*1154/1280, sH*569/800, sW*1154/1280, sH*240/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawRectangle(sW*814/1280, sH*241/800, sW*340/1280, sH*328/800, tocolor(0, 0, 0, 200), false) 
    dxDrawLine(sW*812/1280, sH*280/800, sW*1154/1280, sH*280/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawText("1. Carga para Los Santos\n2. Carga para Las Venturas", sW*824/1280, sH*299/800, sW*1144/1280, sH*555/800, tocolor(255, 255, 255, 255), 1.00, "sans", "left", "top", false, false, false, false, false) 
    dxDrawLine(sW*812/1280, sH*280/800, sW*1154/1280, sH*280/800, tocolor(255, 255, 255, 255), 1, false) 
    dxDrawText("Caminhoneiro", sW*859/1280, sH*250/800, sW*1116/1280, sH*270/800, tocolor(255, 255, 255, 255), 1, "diploma", "center", "center", false, false, false, false, false) 
end 
  
function pressKey(button, press) 
    if button == "1" then 
        triggerServerEvent("jobLS", localPlayer, hPlayer) 
        removeEventHandler("onClientKey", getRootElement(), pressKey) 
    elseif button == "2" then 
        triggerServerEvent("jobLV", localPlayer, hPlayer) 
        removeEventHandler("onClientKey", getRootElement(), pressKey) 
    end 
end 

Server

jTrucker = {} 
  
function jobLS(hPlayer) 
    if (isElement(hPlayer) and getElementType(hPlayer) == "player") then 
        local marker = createMarker(2234, -2216, 12.5, "cylinder", 4, 255, 0, 0, 255, hPlayer) 
        local blip = createBlip(-64, -1134, 0.5, 53, 2, 255, 255, 255, 255, 0, 99999, hPlayer) 
        local money = 350 
        local hP = hPlayer 
        takeJob(marker, blip, money, hP) 
    end 
end 
addEvent("jobLS", true) 
addEventHandler("jobLS", getRootElement(), jobLS) 
  
function jobLV(hPlayer) 
    if (isElement(hPlayer) and getElementType(hPlayer) == "player") then 
        local marker = createMarker(1501, 1531, 11, "cylinder", 4, 255, 0, 0, 255, hPlayer) 
        local blip = createBlip(1501, 1531, 11, 53, 2, 255, 255, 255, 255, 0, 99999, hPlayer) 
        local money = 450 
        local hP = hPlayer 
        takeJob(marker, blip, money, hP) 
    end 
end 
addEvent("jobLV", true) 
addEventHandler("jobLV", getRootElement(), jobLV) 
  
function takeJob(marker, blip, money, hP) 
    if (isElement(hP) and getElementType(hP) == "player") then 
        local truck = createVehicle(515, 2202, -2249, 14) 
        local trailer = createVehicle(435, 0, 0, 4) 
  
        jTrucker[hP] = {} -- criar uma nova tabela (dentro da jTrucker) para o player 
        jTrucker[hP]["marker"] = marker 
        jTrucker[hP]["blip"] = blip 
        jTrucker[hP]["truck"] = truck 
        jTrucker[hP]["trailer"] = trailer 
        jTrucker[hP]["money"] = money 
                 
        setElementRotation(jTrucker[hP]["truck"], 0, 0, -45) 
        setElementRotation(jTrucker[hP]["trailer"], 0, 0, -45) 
        warpPedIntoVehicle(hP, jTrucker[hP]["truck"]) 
        attachTrailerToVehicle(jTrucker[hP]["truck"], jTrucker[hP]["trailer"]) 
  
        outputChatBox("#FFFFFF[#00FF00SERVER#FFFFFF] Você obteve um caminhão, leve-o até a marcação.", hP, 255, 255, 255, true) 
    end 
end 
  
function finishJob(hitElement) 
    if jTrucker[hitElement] then 
        if (getVehicleTowedByVehicle(jTrucker[hitElement]["truck"]) == jTrucker[hitElement]["trailer"]) then 
            outputChatBox("#FFFFFF[#00FF00SERVER#FFFFFF] Você trouxe a carga e recebeu seu pagamento.", hitElement, 255, 255, 255, true) 
            givePlayerMoney(hitElement, jTrucker[hitElement]["money"]) 
        else 
            outputChatBox("#FFFFFF[#FF0000SERVER#FFFFFF] Você não trouxe a carga, portanto, não receberá.", hitElement, 255, 255, 255, true) 
        end 
  
        if (isElement(jTrucker[hitElement]["marker"])) then 
            destroyElement(jTrucker[hitElement]["marker"]) 
        end 
        if (isElement(jTrucker[hitElement]["blip"])) then 
            destroyElement(jTrucker[hitElement]["blip"]) 
        end 
        if (isElement(jTrucker[hitElement]["truck"])) then 
            destroyElement(jTrucker[hitElement]["truck"]) 
        end 
        if (isElement(jTrucker[hitElement]["trailer"])) then 
            destroyElement(jTrucker[hitElement]["trailer"]) 
        end 
  
        jTrucker[hitElement] = nil 
    end 
end 
addEventHandler("onMarkerHit", root, finishJob) 

Link to comment

É porque você removeu/não adicionou a parte que checa qual marker o player entrou

[...] na função finishJob você checa da seguinte maneira:
if pTrucker[hitElement] and source == pTrucker[hitElement]["marker"] then 

[...]

^ Só lembre de trocar pTrucker por jTrucker...

Link to comment
É porque você removeu/não adicionou a parte que checa qual marker o player entrou

Nossa Amigo muito obrigado agora parece estar funcionando sem erros vou fazer mais alguns testes mais pelos testes já aplicado e bem provável que esta sem erros muito obrigado pela ajuda.

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