raynner Posted December 1, 2015 Share Posted December 1, 2015 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
n3wage Posted December 1, 2015 Share Posted December 1, 2015 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
raynner Posted December 1, 2015 Author Share Posted December 1, 2015 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
n3wage Posted December 1, 2015 Share Posted December 1, 2015 É 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
raynner Posted December 1, 2015 Author Share Posted December 1, 2015 É 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
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