Kii Posted April 30, 2021 Share Posted April 30, 2021 Mas não consigo, algo da errado no 'isElementInRange', alguém poderia me ajudar? addCommandHandler("car", function(thePlayer,veh) local x, y, z = getElementPosition (thePlayer) local veh = getElementsByType('vehicle') if isElementInRange(veh, x, y, z, 25) then outputChatBox("teste",thePlayer,255,255,255,true) end end end ) Print do erro: https://prnt.sc/12bhy03 Link to comment
RomanDev Posted April 30, 2021 Share Posted April 30, 2021 52 minutes ago, Kii said: Mas não consigo, algo da errado no 'isElementInRange', alguém poderia me ajudar? addCommandHandler("car", function(thePlayer,veh) local x, y, z = getElementPosition (thePlayer) local veh = getElementsByType('vehicle') if isElementInRange(veh, x, y, z, 25) then outputChatBox("teste",thePlayer,255,255,255,true) end end end ) Print do erro: https://prnt.sc/12bhy03 Já tentou utilizar o attachElements? addCommandHandler("car", function(player) local pPos = {getElementPosition(player)} local pRot = {getElementRotation(player)} local pVeh = createVehicle(429, pPos[1], pPos[2], pPos[3], 0, 0, pRot[3]) attachElements(pVeh, player, 0, 0, 0) end ) Ou, caso queira verificar se o carro próximo está com o attachsElements, use: isElementAttached: addCommandHandler("proxcar", function(player) local pPos = {getElementPosition(player)} for _, vehicle in ipairs(getElementsByType("vehicle")) do local vPos = {getElementPosition(vehicle)} if (getDistanceBetweenPoints3D(pPos[1], pPos[2], pPos[3], vPos[1], vPos[2], vPos[3]) <= 3) then if (isElementAttached(vehicle)) then print("O veículo está atachado.") else print("Não está atachado!") end end end end ) Link to comment
Kii Posted April 30, 2021 Author Share Posted April 30, 2021 3 hours ago, RomanDev said: Já tentou utilizar o attachElements? addCommandHandler("car", function(player) local pPos = {getElementPosition(player)} local pRot = {getElementRotation(player)} local pVeh = createVehicle(429, pPos[1], pPos[2], pPos[3], 0, 0, pRot[3]) attachElements(pVeh, player, 0, 0, 0) end ) Ou, caso queira verificar se o carro próximo está com o attachsElements, use: isElementAttached: addCommandHandler("proxcar", function(player) local pPos = {getElementPosition(player)} for _, vehicle in ipairs(getElementsByType("vehicle")) do local vPos = {getElementPosition(vehicle)} if (getDistanceBetweenPoints3D(pPos[1], pPos[2], pPos[3], vPos[1], vPos[2], vPos[3]) <= 3) then if (isElementAttached(vehicle)) then print("O veículo está atachado.") else print("Não está atachado!") end end end end ) Bom, acho que não ficou muito claro o que eu disse, peço desculpas então tentarei explicar o "contexto", estou tentando criar algo para puxar um veiculo (com o attachElement) em uma certa distancia (entre 25 metros), mas não entendo muito então não sei muito bem como fazer... Se pudesse me dar uma ideia de como prosseguir para puxar o veiculo seria grato! Link to comment
Other Languages Moderators Lord Henry Posted May 1, 2021 Other Languages Moderators Share Posted May 1, 2021 AttachElements seria mais para "colar" um elemento em outro. Mas você pode usar os parâmetros de offset dele para deixar o elemento "colado porém distante" do outro elemento. @Kii, sobre seu problema é pq veh é uma tabela e não um veículo. Veja oq a função getElementsByType retorna. 2 Link to comment
Kii Posted May 1, 2021 Author Share Posted May 1, 2021 Então senhores, creio que consegui chegar em algo... Mas ainda a um problema, quando eu utilizo o comando o veiculo vem até mim e "cola", mas caso eu me locomova para um outro local com o veiculo "colado", e tentar solta-lo depois, ele simplesmente não solta. Se os senhores poderem me ajudar... gpStaff = "Staff" function testePa (thePlayer) if isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup (gpStaff)) then local x, y, z = getElementPosition (thePlayer) local pcM = createMarker(x, y, z, "cylinder",20,255,255,0,25) attachElements(pcM, thePlayer, 0, 0, -1) setTimer ( function() destroyElement(pcM) end, 2000, 1 ) local nearbyVehicles = getElementsWithinRange(x, y, z, 10, "vehicle") for i,v in ipairs(nearbyVehicles) do if v and isElement(v) then if getElementData(thePlayer, "vehMarkerHited") == false then setElementData(thePlayer, "vehMarkerHited", true) outputChatBox("pegou") attachElements(v, thePlayer) setVehicleDamageProof(v, true) else setElementData(thePlayer, "vehMarkerHited", false) outputChatBox("soltou") detachElements(v, thePlayer) setVehicleDamageProof(v, false) end end end end end addCommandHandler("t",testePa) Link to comment
RomanDev Posted May 1, 2021 Share Posted May 1, 2021 19 minutes ago, Kii said: Então senhores, creio que consegui chegar em algo... Mas ainda a um problema, quando eu utilizo o comando o veiculo vem até mim e "cola", mas caso eu me locomova para um outro local com o veiculo "colado", e tentar solta-lo depois, ele simplesmente não solta. Se os senhores poderem me ajudar... gpStaff = "Staff" function testePa (thePlayer) if isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup (gpStaff)) then local x, y, z = getElementPosition (thePlayer) local pcM = createMarker(x, y, z, "cylinder",20,255,255,0,25) attachElements(pcM, thePlayer, 0, 0, -1) setTimer ( function() destroyElement(pcM) end, 2000, 1 ) local nearbyVehicles = getElementsWithinRange(x, y, z, 10, "vehicle") for i,v in ipairs(nearbyVehicles) do if v and isElement(v) then if getElementData(thePlayer, "vehMarkerHited") == false then setElementData(thePlayer, "vehMarkerHited", true) outputChatBox("pegou") attachElements(v, thePlayer) setVehicleDamageProof(v, true) else setElementData(thePlayer, "vehMarkerHited", false) outputChatBox("soltou") detachElements(v, thePlayer) setVehicleDamageProof(v, false) end end end end end addCommandHandler("t",testePa) Olá novamente, desculpe-me pelo meu erro acima! Eu acho que consegui entender o que você precisa, sendo assim eu fiz outro código (baseado no seu) com algumas funções a mais. function getNearestVehicle(player, distance) local lastMinDis = distance - 0.0001 local nearestVeh = false local px, py, pz = getElementPosition(player) local pint = getElementInterior(player) local pdim = getElementDimension(player) for _, v in pairs(getElementsByType("vehicle")) do local vint, vdim = getElementInterior(v), getElementDimension(v) if vint == pint and vdim == pdim then local vx,vy,vz = getElementPosition(v) local dis = getDistanceBetweenPoints3D(px, py, pz, vx, vy, vz) if dis <= distance then if dis <= lastMinDis then lastMinDis = dis nearestVeh = v end end end end return nearestVeh end local gpStaff = "Staff" function detachVehicle(player) if (isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(player))), aclGetGroup(gpStaff))) then local pPos = {getElementPosition(player)} -- Posição do player local pVeh = getNearestVehicle(player, 3) -- Todos os veículos até 3 metros de você local pMarker = createMarker(pPos[1], pPos[2], pPos[3], "cylinder", 1.5, 255, 255, 0, 180) attachElements(pMarker, player, 0, 0, -1) setTimer( function() destroyElement(pMarker) end , 2000, 1) if (pVeh and isElement(pVeh)) then if (not getElementData(player, "vehMarkerHited")) then outputChatBox("pegou") attachElements(pVeh, player) setVehicleDamageProof(pVeh, true) setElementData(player, "vehMarkerHited", true) else outputChatBox("soltou") setVehicleDamageProof(pVeh, false) setElementData(player, "vehMarkerHited", false) if (isElementAttached(pVeh)) then detachElements(pVeh, player) end end end end end addCommandHandler("t", detachVehicle) Espero que te ajude! 1 Link to comment
Kii Posted May 2, 2021 Author Share Posted May 2, 2021 Funcionando perfeitamente, obrigado! 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