Jaga Posted August 15, 2021 Share Posted August 15, 2021 Opa rapaziada eu tava precisando de ajuda com um bglh, vou mostrar aq. Estou tentando fzr um emprego de lixeiro mas nao queria usar tantos e tantos elementData e queria fazer por tabela. A parte de pegar o emprego está suave, e para aparecer os blip e marker tbm apenas quando pegar o emprego ta suave. lixeira1 = createMarker(1983.001, -1744.44, 13.547, "cylinder", 1.2, 70, 58, 88, 100) lixeira2 = createMarker(1993.668, -1738.607, 13.547, "cylinder", 1.2, 70, 58, 88, 100) bliplixeira1 = createBlipAttachedTo(lixeira1, 2) setBlipVisibleDistance(bliplixeira1, 2000) setElementVisibleTo(bliplixeira1, root, false) setElementVisibleTo(lixeira1, root, false) setElementVisibleTo(lixeira2, root, false) Eu quero transformar os marker em uma tabela para ficar mais limpo o codigo function PegarLixo1(source) local Lixeiro = getElementData(source, "Lixeiro") if Lixeiro == true then if isElementWithinMarker(source, lixeira1) then local random = math.random(4, 20) exports["Bahamas_Inventory"]:BHM_GiveItem(source, "dollars", random) setElementVisibleTo(lixeira1, source, false) setElementVisibleTo(bliplixeira1, source, false) setElementFrozen(source, true) setTimer(triggerClientEvent, 1100, 1, source, "progressService", root, 6, "") setPedAnimation(source, "uzi", "uzi_reload", 6500, true, false, false, false) setTimer(function() exports['infobox']:showInfobox(source, "Você recolheu oque estava nessa lata de lixo", "success") setElementFrozen(source, false) end, 6500, 1) end end end addEventHandler("onMarkerHit", lixeira1, PegarLixo1) Aqui é a parte que seria para pegar oq estaria nos markers, mas eu queria que quando pegasse em 1 marker sumiria e apenas quando sair e pegar o emprego dnv resetaria tudo. e eu sei fzr para n ficar repetindo o marker e tals mas eu teria q ficar duplicando esse codigo varias e varias vezes e nao quero fazer isso, eu quero deixar limpo e leve quem poder me ajudar eu ia agradecer dms pprt Link to comment
Boechat Posted August 16, 2021 Share Posted August 16, 2021 (edited) Você está passando o source como parâmetro, nunca faça isso! O source é o marker que foi "hitado", o 1° argumento é o hitElement (pode ser um carro, player, objeto etc...). Você quer fazer uma função mais genérica né, eu estou meio sem tempo pra algo perfeitinho mas ficaria mais ou menos assim: local posLixeiras = { [1] = {1983.001, -1744.44, 13.547}, [2] = {1993.668, -1738.607, 13.547}, } local Lixeiras = {} local blipLixeiras = {} addEventHandler('onResourceStart', resourceRoot, function () for i, pos in ipairs (posLixeiras) do Lixeiras[i] = createMarker(pos[1], pos[2], pos[3], "cylinder", 1.2, 70, 58, 88, 100) blipLixeiras[i] = createBlipAttachedTo(Lixeiras[i], 2) setBlipVisibleDistance(blipLixeiras[i], 2000) setElementVisibleTo(blipLixeiras[i], root, false) setElementVisibleTo(Lixeiras[i], root, false) setElementVisibleTo(Lixeiras[i], root, false) addEventHandler("onMarkerHit", Lixeiras[i], PegarLixo) end end) function getMarkerPositionInTable (marker) for i, m in ipairs (Lixeiras) do if marker == m then return i end end return false end function PegarLixo(hitElement) if getElementData(hitElement, "Lixeiro") then local i = getMarkerPositionInTable(source) if not i then return end local random = math.random(4, 20) exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, "dollars", random) setElementVisibleTo(Lixeiras[i], hitElement, false) setElementVisibleTo(blipLixeiras[i], hitElement, false) setElementFrozen(hitElement, true) setTimer(triggerClientEvent, 1100, 1, hitElement, "progressService", root, 6, "") setPedAnimation(hitElement, "uzi", "uzi_reload", 6500, true, false, false, false) setTimer(function() exports['infobox']:showInfobox(hitElement, "Você recolheu oque estava nessa lata de lixo", "success") setElementFrozen(hitElement, false) end, 6500, 1) end end Para adicionar novas lixeiras é só colocar novas posições no posLixeiras, conforme os exemplos. Obs: Mudei muita coisa no seu script e não testei, teste aí e traga possíveis erros que possam dar no console (digite "/debugscript 3" e fique de olho enquanto testa). Edited August 16, 2021 by Boechat 1 Link to comment
Boechat Posted August 16, 2021 Share Posted August 16, 2021 (edited) Faltou a parte em que deixa os markers visíveis quando a pessoa entra no emprego né, mas você não postou essa parte... Mas acho que com o que eu já mandei você consegue se virar para implementar essa parte kkk Edited August 16, 2021 by Boechat 1 Link to comment
Jaga Posted August 16, 2021 Author Share Posted August 16, 2021 --==================================== Markers e Visibilidades ====================================-- local posLixeiras = { [1] = {1983.001, -1744.44, 13.547}, [2] = {1993.668, -1738.607, 13.547}, } local Lixeiras = {} local blipLixeiras = {} addEventHandler('onResourceStart', resourceRoot, function () for i, pos in ipairs (posLixeiras) do Lixeiras[i] = createMarker(pos[1], pos[2], pos[3], "cylinder", 1.2, 70, 58, 88, 100) blipLixeiras[i] = createBlipAttachedTo(Lixeiras[i], 2) setBlipVisibleDistance(blipLixeiras[i], 2000) setElementVisibleTo(blipLixeiras[i], root, true) setElementVisibleTo(Lixeiras[i], root, true) setElementVisibleTo(Lixeiras[i], root, true) addEventHandler("onMarkerHit", Lixeiras[i], PegarLixo) end end) function getMarkerPositionInTable (marker) for i, m in ipairs (Lixeiras) do if marker == m then return i end end return false end --==================================== Pegar Emprego ====================================-- function Emprego(player) local Lixeiro = getElementData(player, "Lixeiro") if Lixeiro == false then setElementData(player, "Lixeiro", true) exports['infinity_infobox']:showInfobox(player, "Você agora está trabalhando de lixeiro", "success") elseif Lixeiro == true then setElementData(player, "Lixeiro", false) exports['infinity_infobox']:showInfobox(player, "Você não está mais trabalhando de lixeiro", "info") end end addCommandHandler("lixeiro", Emprego) --==================================== Pegar Item na Lixeira ====================================-- Itens = { {"plastic"}, {"battery"}, {"legos"}, {"glass"}, {"battery"}, {"glass"}, {"legos"}, {"plastic"}, {"plastic"}, {"battery"}, {"legos"}, {"glass"}, {"legos"}, {"battery"}, {"glass"}, {"plastic"}, {"glass"}, {"legos"}, {"plastic"}, {"battery"}, {"legos"}, {"glass"}, {"plastic"}, {"battery"}, {"legos"}, {"glass"}, {"legos"}, {"battery"}, {"glass"}, {"plastic"}, {"glass"}, {"legos"}, {"plastic"}, {"battery"}, {"legos"}, {"glass"}, {"battery"}, {"glass"}, {"legos"}, {"plastic"}, {"plastic"}, {"battery"}, {"legos"}, {"glass"}, } function PegarLixo(hitElement) local RandomItens = math.random(#Itens) local random = math.random(4, 20) if getElementData(hitElement, "Lixeiro") then local i = getMarkerPositionInTable(source) if not i then return end if not isPedInVehicle (hitElement) then setElementFrozen(hitElement, true) setTimer(triggerClientEvent, 1100, 1, hitElement, "progressService", root, 6, "") setPedAnimation(hitElement, "CARRY", "liftup", 6500, true, false, false, false) setTimer(function() if isElement(Lixeiras[i]) then destroyElement(Lixeiras[i]) end exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, RandomItens, random) exports['infinity_infobox']:showInfobox(hitElement, "Você recolheu oque estava nessa lata de lixo", "success") setElementFrozen(hitElement, false) end, 6500, 1) end end end Ele meio que está pronto soque o RandomItens não está funcionando e não estou conseguindo colocar ele para funfar, e eu eu coloquei o destroyElement apos usar o marker, mas queria fzr q o element do marker voltasse quando eu saisse e voltasse para o emprego pelo o /lixeiro mas n sei como fazer Link to comment
Boechat Posted August 17, 2021 Share Posted August 17, 2021 Não sei como está o funcionamento desse exports mas acho que assim vai funcionar Mude essa linha: exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, RandomItens, random) Para: exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, Itens[RandomItens][1], random) *#Itens retorna um numero do tamanho do array, depois você pegou um número aleatório nesse intervalo e passou ele como referência. Você está passando o RandomItens como parâmetro, que é um número aleatório, talvez o correto não seria passar o nome do item? Já o [1] é porque você colocou os nomes dos itens dentro de outra tabela, n entendi o porquê disso já que só tem um conteúdo dentro da tabela, poderia salvar a string normal mesmo... Testa aí e me fala. E sobre o marker, acho que se usar setElementVisibleTo como false seja mais fácil do que destruir o marker, você já está fazendo dessa forma... Link to comment
Jaga Posted August 17, 2021 Author Share Posted August 17, 2021 Opa funcionou para pegar o itens mas oque faz ele funcionar é eu retirando o... if isElement(Lixeiras[i]) then destroyElement(Lixeiras[i]) end Soque se eu retirar esse destroyElement e so colocar o setElementVisibleTo ele apenas vai fazer o marker sumir, mas mesmo assim vai continuar pegando os itens caso passe os cima, entao precisava fazer o destroyElement e dps fzr o Element voltar quando saisse e voltasse para o trabalho Link to comment
Boechat Posted August 20, 2021 Share Posted August 20, 2021 On 17/08/2021 at 09:43, Jaga said: Opa funcionou para pegar o itens mas oque faz ele funcionar é eu retirando o... if isElement(Lixeiras[i]) then destroyElement(Lixeiras[i]) end Soque se eu retirar esse destroyElement e so colocar o setElementVisibleTo ele apenas vai fazer o marker sumir, mas mesmo assim vai continuar pegando os itens caso passe os cima, entao precisava fazer o destroyElement e dps fzr o Element voltar quando saisse e voltasse para o trabalho É só checar se o marker está sendo exibido para o player, ou você pode mudar a lógica de criação do marker e criar eles client-side sempre que o player entrar no emprego. Da primeira forma é bem mais simples e é só colocar essa condição a mais na função "PegarLixo": function PegarLixo(hitElement) if isElementVisibleTo ( source, hitElement ) and getElementData(hitElement, "Lixeiro") then ... ... ... ... end end Obs: Não testei! 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