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