#Gubiani Posted November 19, 2018 Share Posted November 19, 2018 Boa tarde pessoal! Tudo certo? Então eu comecei a desenvolver uns trabalhos pra MTA, porém to enfrentando alguns problemas quando eu rodo eles em um servidor com mais de um jogador, por exemplo esse trabalho de carregador que eu estou desenvolvendo ainda, ele consiste em pegar a carga e levar para a balsa e dai em diante fazer a entrega do mesmo, mas na parte de fazer a entrega ainda não fiz, meu problema é o seguinte, quando o jogador pega a carga, é criado um marker aonde ele tem que levar a carga para ela aprecer em cima da balsa certo? Ok até aí beleza, o problema é se eu pegar a carga e outro player ir no mesmo lugar do marker que faz a carga ir para a balsa, ele ativa e a minha carga que eu ia levar some e aparece la sem eu ter ativado o marker, então meu problema é esse o script ele ta entendo como todos os players fossem um só (cada player que começa a trabalhar seja diferente que o outro), eu queria saber como eu faço pra bloquear isso abaixo está o código: server-side mCarregamento = createMarker(-2253.13, 2387.62, 3.95, "cylinder", 2, 255, 0, 0, 255, getRootElement()) balsa = createVehicle (454, -2224.43, 2432.65, 2.14, 0, 0, 45) function criarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if source == mCarregamento then obj1 = createObject(964, -2260.14, 2382.28, 3.90, 0, 0, 0, true) setObjectScale (obj1, 0.5) ox, oy, oz = getElementPosition(obj1) mObjeto = createMarker(ox, oy, oz, "cylinder", 2.5, 255, 0, 0, 255, thePlayer) addEventHandler("onMarkerHit", mObjeto, carregarObjeto) end end end addEventHandler("onMarkerHit", mCarregamento, criarObjeto) function carregarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if source == mObjeto then setPedAnimation( thePlayer, "CARRY", "liftup", 1.0, false ) setTimer(function() setPedAnimation( thePlayer, nil ) setPedAnimation( thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true ) attachElementToElement(obj1, thePlayer, 0, 0.5, 0.3) toggleControl( thePlayer, "jump", false ) toggleControl( thePlayer, "fire", false ) destroyElement(mObjeto) mEntrega = createMarker(-2230.40, 2438.80, 1.49, "cylinder", 2, 255, 0, 0, 255, thePlayer) mEntrega2 = createMarker(-2230.40, 2438.80, 1.49, "cylinder", 2, 255, 0, 0, 0, thePlayer) bEntrega = createBlipAttachedTo(mEntrega, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) addEventHandler("onMarkerHit", mEntrega, entregarObjeto) end, 1000, 1) end end end function entregarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if source == mEntrega then setPedAnimation( thePlayer, "CARRY", "liftup", 1.0, false ) setTimer(function () setPedAnimation( thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true ) toggleControl( thePlayer, "jump", true ) toggleControl( thePlayer, "fire", true ) destroyElement(mEntrega) destroyElement(bEntrega) end, 1000, 1) addEventHandler("onMarkerHit", mEntrega2, carregarBalsa) destroyElement(mEntrega2) end end end function carregarBalsa(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if source == mEntrega then attachElementToElement(obj1, balsa, 0, 0, 0.3) createBlipAttachedTo(obj1, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) end end end E outra coisa se for possível, eu quero criar algo que tenha varias caixas para varias coordenadas por exemplo, quero que cada caixa que criar o jogador entregasse e ela ficasse em outra coordenada dentro da balsa. Eu teria que usar a condição FOR mas eu não entendo como ela funciona, se poder me ajudar fico muito grato pelo meu aprendizado. Obs( o barco que estou utilizando está com textura modificada ). Link to comment
Other Languages Moderators Lord Henry Posted November 19, 2018 Other Languages Moderators Share Posted November 19, 2018 1 hour ago, #Gubiani said: Então eu comecei a desenvolver uns trabalhos pra MTA, porém to enfrentando alguns problemas quando eu rodo eles em um servidor com mais de um jogador Sempre tive esse mesmo problema, hauahuahaua. Meus resources funcionam perfeitamente em server local, mas dai quando eu coloco em server público, entope de erros e bugs. -------------- Quanto ao seu primeiro problema, sugiro que crie os markers client-side e dai verifique se o hitElement == localPlayer. Caso não queira fazer isso, então sete uma data no marker identificando o jogador que criou aquele marker como "dono" usando setElementData no marker, então crie uma condição que verifica se o hitElement == getElementData do marker. O primeiro jeito tem melhor desempenho, mas você precisa tomar cuidado ao fazer o triggerClientEvent e depois o triggerServerEvent ao colidir naquele marker. Quanto ao seu segundo problema, primeiro resolva o problema anterior antes de pensar em implementar ele. Mas já vou logo adiantando que você precisará criar uma table com todas as posições de caixas, por exemplo assim: boxPositions = { [1] = {-1200.62, 522, 10}, -- Coordenadas x, y, z. [2] = {-1222.22, 530, 10}, [3] = {-1224, 515, 10}, } 1 Link to comment
#Gubiani Posted November 20, 2018 Author Share Posted November 20, 2018 Muito Obrigado @Lord Henry Vou tentar bloquear usando o setElementData, depois que eu conseguir, eu retorno para gente ver como vou fazer para usar condição For. Link to comment
#Gubiani Posted November 20, 2018 Author Share Posted November 20, 2018 Então eu fiz o esquema das datas porém ele continua bugando pra quem esta nas datas hehe, mas pra quem nao ta não buga segue a baixo: mCarregamento = createMarker(-2253.13, 2387.62, 3.95, "cylinder", 2, 255, 0, 0, 255, getRootElement()) balsa = createVehicle (454, -2224.43, 2432.65, 2.14, 0, 0, 45) function criarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if not getElementData(thePlayer, "criar.objeto") or getElementData(thePlayer, "criar.objeto") ~= 1 then if source == mCarregamento then setElementData(thePlayer, "criar.objeto", 1) obj1 = createObject(964, -2260.14, 2382.28, 3.90, 0, 0, 0, true) setObjectScale (obj1, 0.5) ox, oy, oz = getElementPosition(obj1) mObjeto = createMarker(ox, oy, oz, "cylinder", 2.5, 255, 0, 0, 0, thePlayer) bObjeto = createBlipAttachedTo(mObjeto, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) addEventHandler("onMarkerHit", mObjeto, carregarObjeto) end end end end addEventHandler("onMarkerHit", mCarregamento, criarObjeto) function carregarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if not getElementData(thePlayer, "carregando.objeto") or getElementData(thePlayer, "carregando.objeto") ~= 1 then if source == mObjeto then destroyElement(bObjeto) setElementData(thePlayer, "carregando.objeto", 1) setPedAnimation( thePlayer, "CARRY", "liftup", 1.0, false ) setTimer(function() setElementData(thePlayer, "caixa.armas", 1) setPedAnimation( thePlayer, nil ) setPedAnimation( thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true ) attachElements(obj1, thePlayer, 0, 0.5, 0.3) toggleControl( thePlayer, "jump", false ) toggleControl( thePlayer, "fire", false ) toggleControl( thePlayer, "sprint", false ) toggleControl( thePlayer, "crouch", false ) toggleControl( thePlayer, "enter_exit", false ) destroyElement(mObjeto) mEntrega = createMarker(-2230.40, 2438.80, 1.49, "cylinder", 2, 255, 0, 0, 255, thePlayer) bEntrega = createBlipAttachedTo(mEntrega, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) addEventHandler("onMarkerHit", mEntrega, entregarObjeto) end, 1000, 1) end end end end function entregarObjeto(thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if getElementData(thePlayer, "caixa.armas") and getElementData(thePlayer, "caixa.armas") ~= 0 then if source == mEntrega then setPedAnimation( thePlayer, "CARRY", "liftup", 1.0, false ) setTimer(function () setPedAnimation( thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true ) toggleControl( thePlayer, "jump", true ) toggleControl( thePlayer, "fire", true ) toggleControl( thePlayer, "sprint", true ) toggleControl( thePlayer, "crouch", true ) toggleControl( thePlayer, "enter_exit", true ) destroyElement(mEntrega) destroyElement(bEntrega) print("01") end, 1000, 1) carg1 = attachElements(obj1, balsa, 0, 0, 0.3) setElementData(thePlayer, "caixa.armas", 0) setElementData(thePlayer, "criar.objeto", 0) setElementData(thePlayer, "carregando.objeto", 0) end end end end function teste( thePlayer, command ) setElementData(thePlayer, "caixa.armas", 0) setElementData(thePlayer, "criar.objeto", 0) setElementData(thePlayer, "carregando.objeto", 0) outputChatBox("Desbugado", thePlayer, 255, 0, 0, true) end addCommandHandler("desbugar", teste, command) Seria mais viável fazer o esquema dos markers e das cols na client? Link to comment
Other Languages Moderators Lord Henry Posted November 20, 2018 Other Languages Moderators Share Posted November 20, 2018 (edited) Tente assim: mCarregamento = createMarker(-2253.13, 2387.62, 3.95, "cylinder", 2, 255, 0, 0, 255, getRootElement()) balsa = createVehicle (454, -2224.43, 2432.65, 2.14, 0, 0, 45) obj1 = {} mObjeto = {} bObjeto = {} mEntrega = {} bEntrega = {} function criarObjeto (thePlayer) if getPedOccupiedVehicle(thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if not getElementData (thePlayer, "criar.objeto") or getElementData (thePlayer, "criar.objeto") ~= 1 then if source == mCarregamento then setElementData (thePlayer, "criar.objeto", 1) obj1[thePlayer] = createObject(964, -2260.14, 2382.28, 3.90, 0, 0, 0, true) setObjectScale (obj1, 0.5) ox, oy, oz = getElementPosition(obj1) mObjeto[thePlayer] = createMarker (ox, oy, oz, "cylinder", 2.5, 255, 0, 0, 0, thePlayer) bObjeto[thePlayer] = createBlipAttachedTo (mObjeto, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) setElementData (mObjeto[thePlayer], "owner", thePlayer) -- SETA O PLAYER COMO DONO DAQUELE MARKER, assim só funciona pra esse player. end end end end addEventHandler ("onMarkerHit", mCarregamento, criarObjeto) function carregarObjeto (thePlayer) if getElementData (source, "owner") then -- Se o marker tem um dono, então: if getElementData (source, "owner") ~= thePlayer then return end -- Se o elemento que colidiu no marker não for o player dono dele, nada acontece. if getPedOccupiedVehicle (thePlayer) then return end if thePlayer and isElement(thePlayer) and getElementType(thePlayer) == "player" then if not getElementData(thePlayer, "carregando.objeto") or getElementData(thePlayer, "carregando.objeto") ~= 1 then if source == mObjeto[thePlayer] then destroyElement (bObjeto[thePlayer]) setElementData (thePlayer, "carregando.objeto", 1) setPedAnimation (thePlayer, "CARRY", "liftup", 1.0, false) setTimer(function() setElementData (thePlayer, "caixa.armas", 1) setPedAnimation (thePlayer, nil) setPedAnimation (thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true) attachElements (obj1, thePlayer, 0, 0.5, 0.3) toggleControl (thePlayer, "jump", false) toggleControl (thePlayer, "fire", false) toggleControl (thePlayer, "sprint", false) toggleControl (thePlayer, "crouch", false) toggleControl (thePlayer, "enter_exit", false) destroyElement (mObjeto[thePlayer]) mEntrega[thePlayer] = createMarker(-2230.40, 2438.80, 1.49, "cylinder", 2, 255, 0, 0, 255, thePlayer) setElementData (mEntrega[thePlayer], "owner", thePlayer) bEntrega[thePlayer] = createBlipAttachedTo(mEntrega, 0, 2, 255, 0, 0, 255, 0, 999, thePlayer) end, 1000, 1) end end end end end addEventHandler ("onMarkerHit", getRootElement(), carregarObjeto) function entregarObjeto(thePlayer) if getElementData (source, "owner") then -- Se o marker tem um dono, então: if getElementData (source, "owner") ~= thePlayer then return end -- Se o elemento que colidiu no marker não for o player dono dele, nada acontece. if getPedOccupiedVehicle (thePlayer) then return end if thePlayer and isElement (thePlayer) and getElementType (thePlayer) == "player" then if getElementData (thePlayer, "caixa.armas") and getElementData (thePlayer, "caixa.armas") ~= 0 then if source == mEntrega[thePlayer] then setPedAnimation (thePlayer, "CARRY", "liftup", 1.0, false) setTimer (function () setPedAnimation (thePlayer, "CARRY", "crry_prtial", 4.1, true, true, true) toggleControl (thePlayer, "jump", true) toggleControl (thePlayer, "fire", true) toggleControl (thePlayer, "sprint", true) toggleControl (thePlayer, "crouch", true) toggleControl (thePlayer, "enter_exit", true) destroyElement (mEntrega[thePlayer]) destroyElement (bEntrega[thePlayer]) print("01") end, 1000, 1) attachElements (obj1[thePlayer], balsa, 0, 0, 0.3) setElementData (thePlayer, "caixa.armas", 0) setElementData (thePlayer, "criar.objeto", 0) setElementData (thePlayer, "carregando.objeto", 0) end end end end end addEventHandler ("onMarkerHit", getRootElement(), entregarObjeto) Não testei. Mas deve funcionar. Edited November 20, 2018 by Lord Henry 1 Link to comment
#Gubiani Posted November 21, 2018 Author Share Posted November 21, 2018 Valeu @Lord Henry Deu tudo certo aqui só tive que adicionar umas variáveis na table por que tava dando erro no debug, agora vou batalhar pra tentar criar mais caixas muito obrigado mesmo. 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