SherlocK Posted September 9, 2019 Author Share Posted September 9, 2019 (edited) 12 minutes ago, Lord Henry said: Como funciona essa função getVehicleByID? Ela usa elementData? sim, tem o banco de dados, eh um script de concessionária function getFreeID() local result = dbPoll(dbQuery(db, "SELECT ID FROM VehicleList ORDER BY ID ASC"), -1) newID = false for i, id in pairs (result) do if id["ID"] ~= i then newID = i break end end if newID then return newID else return #result + 1 end end function getVehicleByID(id) v = false for i, veh in ipairs (getElementsByType("vehicle")) do if getElementData(veh, "ID") == id then v = veh break end end return v end Edited September 9, 2019 by SherlocK Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 (edited) Spoiler [vídeo removido pelo usuário] Edited September 10, 2019 by Lord Henry Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 (edited) 15 hours ago, Lord Henry said: Ocultar conteúdo [vídeo removido pelo usuário] ok, entendi como funciona e agradeço as alterações a mais q você fez, mas eu não gostaria q para recuperar fosse por comando, pois o cara la na casa do chapéu vai dar o comando e vai ser teleportado ali, teria como fazer algo juntamente neste meu script que é de concessionária onde o cara chega no detran e mostra os carros dele que estão ali para ele recuperar, ou então como vc msm citou que seria bem mais simples acredito eu, que seria criar um shape onde identifica se tem um carro ali ou n para aplicar se a vaga esta livre ou ocupada ainda Edited September 10, 2019 by Lord Henry Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Como eu disse no vídeo, eu fiz por comando pois eu não tenho o painel. A questão do comando é apenas para simular mais ou menos os dados que o painel iria enviar pro servidor. O objetivo final não é pra ser com comando mesmo. Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 2 minutes ago, Lord Henry said: Como eu não disse nenhum vídeo, eu fiz o comando pois eu não tenho o painel. A questão do comando é apenas para simular mais ou menos os dados que o painel enviará para o servidor. O objetivo final não é ser com o mesmo comando. sim, eu digo a parte do recv entendeu, q tem q dar o comando para q o script entenda q a vaga ficou livre Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 (edited) Sim. No seu caso seria o painel que iria liberar a vaga. Mas se o cara for lá manualmente buscar o carro (como eu fiz) sem usar comando nenhum. Dai a vaga vai continuar sendo considerada ocupada pelo script. É por isso que depois de ocupar as vagas, quando você tenta enviar outro veículo, não acontece nada. Pois ele não encontrou vaga livre. Lembra o que eu perguntei pra você lá no começo do tópico? Quote E o que acontece se todos os lugares estiverem cheios? Edited September 10, 2019 by Lord Henry Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 (edited) 3 minutes ago, Lord Henry said: Sim. No seu caso seria o painel que iria liberar a vaga. Mas se o cara for lá manualmente buscar o carro (como eu fiz) sem usar comando nenhum. Dai a vaga vai continuar sendo considerada ocupada pelo script. É por isso que depois de ocupar as vagas, quando você tenta enviar outro veículo, não acontece nada. Pois ele não encontrou vaga livre. e n ficaria mais simples de colocar um shape para reconhecer se o veículo está no local da vaga ou não? pois pelo painel o cara poderia clicar em sla "Pegar Carro", e ser teleportado pra la de onde estivesse, quebrando o RP. pq tipo teria o Recuperar q o carro é teleportado para lá, e o "Pegar Carro" q seria pra retirar ele do pátio. Ou sla, tem como definir uma zona onde o comando só vai funcionar se ele tiver naquele local do detran? Edited September 10, 2019 by SherlocK Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 (edited) Ou você poderia tornar os locais de DETRAN inacessíveis pelos jogadores. De forma que não tem como entrar nos veículos que estão lá. Ou então você simplesmente freeza e tranca todos os veículos quando eles são mandados ao DETRAN. Destrancando-os e descongelando-os somente quando o jogador pegar ele pelo painel. Dai o jogador é obrigado a puxar o carro pelo painel. (dai vc muda o sistema que em vez de teleportar o jogador pra lá, teleporta o carro pro jogador) Edited September 10, 2019 by Lord Henry Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 Just now, Lord Henry said: Ou você poderia tornar os locais de DETRAN inacessíveis pelos jogadores. De forma que não tem como entrar nos veículos que estão lá. Dai o jogador é obrigado a puxar o carro pelo painel. (dai vc muda o sistema que em vez de teleportar o jogador pra lá, teleporta o carro pro jogador) Eu retirei essa função, quando recuperava o carro, ele ia direto para o jogador. Agr ele vai para o pátio do detran, onde ele tem q ir la e pegar o carro. O servidor eh de RP, se colocar pra teleportar vai quebrar esse RP Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Pois é, mas em todos os casos ocorre o teleporte. Quando o carro vai pro DETRAN. Quando o carro vai pro jogador. Quando o jogador vai pro DETRAN. Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 Just now, Lord Henry said: Pois é, mas em todos os casos ocorre o teleporte. Quando o carro vai pro DETRAN. Quando o carro vai pro jogador. Quando o jogador vai pro DETRAN. sim, mas o carro só vai para o detran, caso não esteja com ele dentro, entao ele terá q ir apé até o detran para retirar o carro. Se ele teleportar pra la vai quebrar o RP da seguinte forma, exemplo: ele está em LV e o carro quebrou, pra n chamar mec q vai demorar um monte para ir até la, ele vai manda o carro para o detran e vai e teleporta pra la logo após usando o "recv" para voltar pra cidade. ou se o carro teleportar até ele pode acontecer o seguinte, ele esta dando fuga, o carro dele quebrou, ele spawna outro e clica em recuperar, o carro eh teleportado até ele e ele continua a fuga usando outro carro. Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 1 minute ago, SherlocK said: vai e teleporta pra la logo após usando o "recv" para voltar pra cidade. Cara, já falei. Esse negócio de comando é só no MEU CASO pois eu não tenho o painel. Esqueça o uso de comandos. Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 Just now, Lord Henry said: Cara, já falei. Esse negócio de comando é só no MEU CASO pois eu não tenho o painel. Esqueça o uso de comandos. sim, mas pelo oq entendi o comando seria substituído por uma função do painel de veículos. que teria o msm princípio Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Sim, caso o jogador for lá e buscar o veículo manualmente, o problema da vaga vai continuar. Dai que entra o esquema do colShape. Que detecta quando um elemento sai de dentro dele. Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 oq estou tentando pedir é, tem como fazer com que ou fazer um shape nas vagas para reconhecer se há um veículo la ou não para acusar se a vaga está livre ou ocupada, ou fazer com que o comando para recuperar o carro do detran ( tirar da vaga ) seja restrito para o local do detran, onde ninguem q estiver fora do pátio consiga dar este comando, ou recuperar pelo painel e tals Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Claro que dá. Você tem uma table com todas as coordenadas das vagas, certo? Passa um loop nas vagas criando um colShape em cada uma das coordenadas. Recomendo o createColSphere, pois não precisa determinar coordenadas e tamanhos dos lados, apenas seu raio (que vc pode usar um valor fixo para todas) Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 (edited) 7 minutes ago, Lord Henry said: Claro que dá. Você tem uma table com todas as coordenadas das vagas, certo? Passa um loop nas vagas criando um colShape em cada uma das coordenadas. Recomendo o createColSphere, pois não precisa determinar coordenadas e tamanhos dos lados, apenas seu raio (que vc pode usar um valor fixo para todas) certo e como faria isso? nunca mexi com colShape, olhei a sintaxe e os exemplos mas ainda n entendi em como encaixar essa função no script q tenho. No caso isso tiraria a função recover do script certo? pois no próprio warp reconheceria q a vaga está livre Edited September 10, 2019 by SherlocK Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 (edited) detran = { -- x, y, z, ocupado, colShape [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script. [2] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei. } for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. end Obs: Para poder ver colShapes precisa usar /showcol (comando só funciona em Modo Desenvolvedor). Edited September 10, 2019 by Lord Henry Link to comment
DNL291 Posted September 10, 2019 Share Posted September 10, 2019 Ou pode criar marker que vai fazer o mesmo e acredito que é mais fácil pra iniciante. Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 (edited) 1 hour ago, Lord Henry said: detran = { -- x, y, z, ocupado, colShape [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script. [2] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei. } for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. end Obs: Para poder ver colShapes precisa usar /showcol (comando só funciona em Modo Desenvolvedor). fiz isso juntamente com a rotação, mas ele n reconheceu q a vaga ficou livre novamente, esta certo? ou eu fiz errado? detran = { -- x, y, z, ocupado [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script. [2] = {751.4, -1334.81, 13.54, false}, [3] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei. } addEvent("WarpMyVehicle", true) addEventHandler("WarpMyVehicle", root, function(id) if not isPedInVehicle (source) then if getElementInterior(source) == 0 then if getPlayerMoney(source) >= tonumber(1000) then local vehicle = getVehicleByID(id) if isElement(vehicle) then for i, vaga in ipairs (detran) do -- Para cada vaga, faça: local x, y, z, status = unpack (vaga) -- x, y, z são as coordenadas pra onde teleportar o veículo. if not status then -- Se a vaga está desocupada, então: vaga[4] = vehicle vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. takePlayerMoney (source, 1000) setElementPosition (vehicle, x, y, z) setElementRotation(vehicle,0,0,180) outputChatBox ("O seu veiculo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).." foi entregue ao Detran.", source, 193, 193, 193, true) return end end outputChatBox ("Não há vagas disponíveis no Detran.", source, 193, 193, 193, true) else outputChatBox ("O seu veiculo não está spawnado.", source, 193, 193, 193, true) end else outputChatBox ("Você não tem os meios de se teletransportar para o veiculo.", source, 193, 193, 193, true) end else outputChatBox ("Você só poderá mudar de veiculo se sair do atual.", source, 193, 193, 193, true) end else outputChatBox ("Nós não podemos dirigir seu veiculo. Por favor, sair do outro veiculo.", source, 193, 193, 193, true) end end) ----- assim tbm n deu addEvent("WarpMyVehicle", true) addEventHandler("WarpMyVehicle", root, function(id) if not isPedInVehicle (source) then if getElementInterior(source) == 0 then if getPlayerMoney(source) >= tonumber(1000) then local vehicle = getVehicleByID(id) if isElement(vehicle) then for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. local x, y, z, status = unpack (vaga) -- x, y, z são as coordenadas pra onde teleportar o veículo. if not status then -- Se a vaga está desocupada, então: vaga[4] = vehicle takePlayerMoney (source, 1000) setElementPosition (vehicle, x, y, z) setElementRotation(vehicle,0,0,180) outputChatBox ("O seu veiculo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).." #c1c1c1foi entregue ao Detran.", source, 193, 193, 193, true) return end end outputChatBox ("Não há vagas disponíveis no Detran.", source, 193, 193, 193, true) else outputChatBox ("O seu veiculo não está spawnado.", source, 193, 193, 193, true) end else outputChatBox ("Você não tem os meios de se teletransportar para o veiculo.", source, 193, 193, 193, true) end else outputChatBox ("Você só poderá mudar de veiculo se sair do atual.", source, 193, 193, 193, true) end else outputChatBox ("Nós não podemos dirigir seu veiculo. Por favor, sair do outro veiculo.", source, 193, 193, 193, true) end end) Edited September 10, 2019 by SherlocK Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 (edited) Vídeo: Spoiler [vídeo removido pelo usuário] Script: Spoiler detran = { -- x, y, z, rotation, vehicle, colShape, ownerAccount [1] = {746.4, -1334.81, 13.54, 180, false, nil, nil}, -- Esta coordenada está no seu script. [2] = {756.4, -1334.81, 13.54, 180, false, nil, nil}, -- Esta coordenada eu inventei. } customCarNames = {} function criarShapes () -- Cria cada colShape nas vagas e coloca eles na mesma table das vagas, como sendo o 5º elemento de cada uma. for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[6] = createColSphere (vaga[1], vaga[2], vaga[3], 4) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 4 metros de raio. end addEventHandler ("onColShapeLeave", resourceRoot, liberarVaga) -- Ativa essa função quando um elemento sair de dentro de qualquer colShape deste resource. (se usar root, funcionaria com todos os colShapes do server e seria mais pesado de processar) addEventHandler ("onColShapeHit", resourceRoot, liberarVehicle) -- Ativa essa função quando um elemento entrar em qualquer colShape deste resource. Vai verificar se o elemento que entrou é o dono daquela vaga. end addEventHandler ("onResourceStart", resourceRoot, criarShapes) addEvent("WarpMyVehicle", true) addEventHandler("WarpMyVehicle", root, function(id) local vehicle = getVehicleByID(id) if isElement(vehicle) then if (not getVehicleOccupant (vehicle, 0)) and (not getVehicleOccupant (vehicle, 1)) and (not getVehicleOccupant (vehicle, 2)) and (not getVehicleOccupant (vehicle, 3)) then -- Se o veículo a ser rebocado está vazio, então: for i, vaga in ipairs (detran) do -- Para cada vaga, faça: if (vaga[5] == vehicle) then return outputChatBox ("Seu veículo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).."#ff3232 já está no DETRAN.", source, 255, 50, 50, true) -- Manda isso pro jogador e para de executar essa função. end end if getElementInterior(source) == 0 then if getPlayerMoney(source) >= tonumber(1000) then for i, vaga in ipairs (detran) do -- Para cada vaga, faça: if not vaga[5] then -- Se a vaga está desocupada (não tem nenhum veículo no 5º elemento da vaga), então: vaga[5] = vehicle vaga[7] = getAccountName (getPlayerAccount (source)) -- takePlayerMoney (source, 1000) setElementPosition (vaga[5], vaga[1], vaga[2], vaga[3]) -- Troquei o unpack por declarar direto os itens da table. setElementRotation (vaga[5], 0, 0, vaga[4]) -- outputChatBox ("congelou, trancou e blindou") -- Somente para testes. setElementFrozen (vaga[5], true) -- Congela o veículo. setVehicleLocked (vaga[5], true) -- Tranca o veículo. setVehicleDamageProof (vaga[5], true) -- Blinda o veículo. setVehicleDoorOpenRatio (vaga[5], 0, 0) setVehicleDoorOpenRatio (vaga[5], 1, 0) setVehicleDoorOpenRatio (vaga[5], 2, 0) setVehicleDoorOpenRatio (vaga[5], 3, 0) setVehicleDoorOpenRatio (vaga[5], 4, 0) setVehicleDoorOpenRatio (vaga[5], 5, 0) -- Fecha todas as portas do veículo, para evitar que entrem nele pra zoar. setVehicleEngineState (vaga[5], false) -- Desliga o motor do veículo. outputChatBox ("O seu veiculo #00ff66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).."#c1c1c1 foi levado ao DETRAN.", source, 193, 193, 193, true) return end end outputChatBox ("Não há vagas disponíveis no DETRAN.", source, 255, 50, 50, true) else outputChatBox ("Você não tem dinheiro suficiente para levarmos seu veículo até o DETRAN.", source, 255, 50, 50, true) end else outputChatBox ("Não podemos levar seu veículo ao DETRAN se você estiver em interiores.", source, 255, 50, 50, true) end else outputChatBox ("Não podemos levar seu veículo enquanto ele estiver ocupado por alguém.", source, 255, 50, 50, true) end else outputChatBox ("O seu veiculo não está spawnado.", source, 255, 50, 50, true) end end) function getVehicleByID(id) for i, veh in ipairs (getElementsByType("vehicle")) do if getElementData(veh, "ID") == id then return veh end end end function liberarVaga (leaveElement) -- Essa função é ativada quando qualquer elemento sair de qualquer colShape deste resource. O evento ativador só é adicionado depois que os colShapes são criados, evitando erros. for i, vaga in ipairs (detran) do -- Para cada vaga, faça: if (source == vaga[6]) then -- Se o colShape cujo elemento saiu pertence a esta vaga, então: (source = colShape envolvido no evento) if (leaveElement == vaga[5]) then -- Se o elemento que saiu é o veículo desta vaga, então: (evita de liberar a vaga quando algo sai da vaga sem ser o veículo dela) vaga[5] = false -- Libera a vaga. vaga[7] = nil -- Libera o proprietário da vaga. if (getVehicleController(leaveElement)) then outputChatBox ("Liberou a vaga #00ff66"..i.."#c1c1c1 do DETRAN.", getVehicleController(leaveElement), 193, 193, 193, true) -- Somente para testes. end return -- Para de executar essa função pois não precisa nem verificar o resto do loop. elseif (leaveElement) and (getElementType (leaveElement) == "player") and (not getPedOccupiedVehicle (leaveElement)) then -- Senão se o elemento que saiu for um jogador que não está em um veículo, então: if (getAccountName (getPlayerAccount (leaveElement)) == vaga[7]) then -- Se o jogador que saiu tem o mesmo login do proprietário desta vaga, então: -- outputChatBox ("congelou, trancou e blindou") -- Somente para testes. setElementPosition (vaga[5], vaga[1], vaga[2], vaga[3]) setElementRotation (vaga[5], 0, 0, vaga[4]) setElementFrozen (vaga[5], true) -- Congela novamente o veículo. setVehicleLocked (vaga[5], true) -- Tranca novamente o veículo. setVehicleDamageProof (vaga[5], true) -- Blinda novamente o veículo. setVehicleDoorOpenRatio (vaga[5], 0, 0) setVehicleDoorOpenRatio (vaga[5], 1, 0) setVehicleDoorOpenRatio (vaga[5], 2, 0) setVehicleDoorOpenRatio (vaga[5], 3, 0) setVehicleDoorOpenRatio (vaga[5], 4, 0) -- Fecha todas as portas do veículo novamente. setVehicleDoorOpenRatio (vaga[5], 5, 0) setVehicleEngineState (vaga[5], false) -- Desliga o motor do veículo. outputChatBox ("Seu #00ff66"..(customCarNames[getElementModel(vaga[5])] or getVehicleNameFromModel(getElementModel(vaga[5]))).."#c1c1c1 voltou a ficar protegido e trancado.", leaveElement, 193, 193, 193, true) return -- Para de executar essa função pois não precisa verificar o resto do loop. end end end end end function liberarVehicle (hitElement) -- Essa função é ativada quando qualquer elemento entra em qualquer colShape deste resource. for i, vaga in ipairs (detran) do -- Para cada vaga, faça: if (source == vaga[6]) then -- Se o colShape cujo elemento entrou pertence a esta vaga, então: (source = colShape envolvido no evento) if (hitElement) and (getElementType (hitElement) == "player") then -- Se o elemento que colidiu for um player, então: if (getAccountName (getPlayerAccount (hitElement)) == vaga[7]) then -- Se o jogador que entrou tem o mesmo login do proprietário desta vaga, então: (evita de liberar o veículo quando um jogador entra no colShape sem ser dono dela) -- outputChatBox ("descongelou, destrancou e desblindou") -- Somente para testes. setElementFrozen (vaga[5], false) -- Descongela o veículo. setVehicleLocked (vaga[5], false) -- Destranca o veículo. setVehicleDamageProof (vaga[5], false) -- Desblinda o veículo. outputChatBox ("Este é seu #00ff66"..(customCarNames[getElementModel(vaga[5])] or getVehicleNameFromModel(getElementModel(vaga[5]))).."#c1c1c1. Liberamos ele pra você.", hitElement, 193, 193, 193, true) return -- Para de executar essa função pois não precisa nem verificar o resto do loop. end end end end end Edited September 11, 2019 by Lord Henry 1 Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 (edited) 1 hour ago, Lord Henry said: Hide contents [vídeo removido pelo usuário] no caso o parâmetro ownerAccount eu n vou precisar fazer correto? Edited September 11, 2019 by Lord Henry Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Eu deixaria do jeito que está, utilizando todos os parâmetros. 1 Link to comment
SherlocK Posted September 10, 2019 Author Share Posted September 10, 2019 1 minute ago, Lord Henry said: Eu deixaria do jeito que está, utilizando todos os parâmetros. ok, vc n me passou o código então vou assistindo e fazendo aqui Link to comment
Other Languages Moderators Lord Henry Posted September 10, 2019 Other Languages Moderators Share Posted September 10, 2019 Atualize essa aba com F5. Eu coloquei o código depois. 1 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