Jump to content

duvida com "for"


Recommended Posts

Ola boa noite, gostaria de uma ajuda quanto a função abaixo, sempre que spawna o "airdrop" (dayz) ele contém sempre apenas um dos itens abaixo... tem como fazer conter de 1 a 4 itens da lista?

lootItems = {
{"M4A3 CCO",70},
{"M16A2",70},
{"Steyr AUG",70},
{"AKS (gold)",70},
{"AKM",70},
{"AK-74",70},
{"AK-107",70},
{"G36C (camo)",70},
{"FN FAL",70},
{"LK-05 SD",70},
{"FN SCAR-L",70},
{"DMR",70},
{"M107",60},
{"M40A3",60},
{"AS50",60},
{"KSVK",60},
{"M249 SAW",40},
{"PKM",30},
{"MG36",30},
{"M240",30},
{"Mk 48 Mod 0",30},
{"Medic Kit",85},
{"Painkiller",50},
{"Morphine",50},
{"Bandage",50},
{"Toolbox",80},
{"Scrap Metal",34},
{"Steel Sheet",100},
{"Engine",43},
{"Tire",43},
{"Tank Parts",43},
{"MP5SD6",50}, 
{"Revolver",50},
{"Coyote Camo Backpack",60},
{"Drybag Backpack",80},
{"Alice Backpack",70},
{"Czech Backpack",60},
{"Motorbike Helmet 1",50},
{"Police Vest",50},
{"UK Vest Black",50},
{"Gas Mask 2",50},
  }

 

 

 

function spawnAirdrop(player)
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup("Admin"))then
	return
  end
  if isElement(productq) then
	destroyElement(productq)
  end
  if isElement(avialColq) then
	destroyElement(avialColq)
  end
  if isElement(blipq) then
	destroyElement(blipq)

  end
  if isElement(variavel) then
	destroyElement(variavel)

  end
  if isTimer(respawnAirdropTimer)then
	killTimer(respawnAirdropTimer)
  end
  respawnAirdropTimer = setTimer(spawnAirdrop,120000,1)
  local item_id = math.random(1,#spawnLocations)
  xq,yq,zq = spawnLocations[item_id][1],spawnLocations[item_id][2],spawnLocations[item_id][3]+0.35
  xpsq,ypsq,zpsq = xq,yq,zq+7,3
  xpvq,ypvq,zpvq = xq-48,yq-16,zq+37
  xsbq,ysbq,zsbq = xq-48,yq-16,zq+41
  xssq,yssq,zssq = xq-528,yq+2,zq+141
  xsdq,ysdq,zsdq = xq+528,yq+2,zq+141
  blipq = createBlip(xq,yq,zq,5)
  aviaNavaq = createObject(1683,xssq,yssq,zssq,0,0,0)
  moveObject(aviaNavaq,8000,xsbq,ysbq,zsbq)
    setTimer(function()
	parasProdq = createObject(2903,xpvq,ypvq,zpvq,0,0,0)
	moveObject(aviaNavaq,8000,xsdq,ysdq,zsdq)
	moveObject(parasProdq,15000,xpsq,ypsq,zpsq)
	triggerClientEvent("playAirdropSound",getRootElement())
	outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255,255,255,true)
  end,8000,1)
  setTimer(destroyElement,16100,1,aviaNavaq)
  setTimer(function()
	destroyElement(parasProdq)
	destroyElement(variavel)
	productq = createObject(2669,xq,yq,zq,0,0,0)
    variavel = createObject(2060, xq, yq, zq +1.3, 1, 0, 0 )
	setElementFrozen(productq,true)
	avialColq = createColSphere(xq,yq,zq,2)
	attachElements(avialColq,productq,0,0,0)
	setElementData(avialColq,"parent",object)
	setElementData(avialColq,"hospitalbox",true)
	setElementData(avialColq,"MAX_Slots",5000)
	for i,item in pairs(lootItems)do
	  local value =  math.percentChance(item[2],1)
	  if value >= 1 then
		setElementData(avialColq,item[1],value)
		local ammoData,weapID = getWeaponAmmoType(item[1],true)
		if ammoData then
		  local minBullets,maxBullets = math.floor(getAmmoPlus(ammoData)/3),getAmmoPlus(ammoData)*2
		  local ammoQuantity = math.random(minBullets,maxBullets)
		  setElementData(avialColq,ammoData,ammoQuantity)
		end
	  end
	end
  end,23100,1)
end

 

Edited by sirrjohn
Link to comment
  • sirrjohn changed the title to duvida com "for"

Fala meu brother, como vai você? Que nostalgia me aventurar  neste ambiente tão legal de comunicado aqui de novo, após tanto tempo. Vou tentar te ajudar, afinal faz tempo que não sei o que é Lua, viu? Kkkk!

 

Em resposta a sua dúvida, irei responder, levando em conta que você saiba algo sobre lógica de programação.

 

Existem vários objetos (itens) com chave e valor sendo armazenado dentro da nossa variável (lista) lootItems, desta forma, certifique-se de que está lista contenha todos os itens que precisam ser adicionados.

 

Agora, vamos para a função. Comentei em blocos para identar o código e melhorar o entendimento.

function spawnAirdrop(player)
  -- Verifica se o jogador não é um administrador
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
    return
  end

  -- Limpa objetos e timers antigos
  if isElement(productq) then
    destroyElement(productq)
  end
  if isElement(avialColq) then
    destroyElement(avialColq)
  end
  if isElement(blipq) then
    destroyElement(blipq)
  end
  if isElement(variavel) then
    destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer) then
    killTimer(respawnAirdropTimer)
  end

  -- Define um novo timer para respawn do airdrop
  respawnAirdropTimer = setTimer(spawnAirdrop, 120000, 1)

  -- Escolhe aleatoriamente uma localização para o airdrop
  local item_id = math.random(1, #spawnLocations)
  xq, yq, zq = spawnLocations[item_id][1], spawnLocations[item_id][2], spawnLocations[item_id][3] + 0.35
  xpsq, ypsq, zpsq = xq, yq, zq + 7
  xpvq, ypvq, zpvq = xq - 48, yq - 16, zq + 37
  xsbq, ysbq, zsbq = xq - 48, yq - 16, zq + 41
  xssq, yssq, zssq = xq - 528, yq + 2, zq + 141
  xsdq, ysdq, zsdq = xq + 528, yq + 2, zq + 141

  -- Cria um blip para o airdrop
  blipq = createBlip(xq, yq, zq, 5)

  -- Criação do avião e movimentação
  aviaNavaq = createObject(1683, xssq, yssq, zssq, 0, 0, 0)
  moveObject(aviaNavaq, 8000, xsbq, ysbq, zsbq)

  -- Criação do paraquedas
  setTimer(function()
    parasProdq = createObject(2903, xpvq, ypvq, zpvq, 0, 0, 0)
    moveObject(aviaNavaq, 8000, xsdq, ysdq, zsdq)
    moveObject(parasProdq, 15000, xpsq, ypsq, zpsq)
    triggerClientEvent("playAirdropSound", getRootElement())
    outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255, 255, 255, true)
  end, 8000, 1)

  -- Define um timer para destruir o avião
  setTimer(destroyElement, 16100, 1, aviaNavaq)

  -- Cria o conteúdo do airdrop
  setTimer(function()
    destroyElement(parasProdq)
    destroyElement(variavel)
    productq = createObject(2669, xq, yq, zq, 0, 0, 0)
    variavel = createObject(2060, xq, yq, zq + 1.3, 1, 0, 0)
    setElementFrozen(productq, true)
    avialColq = createColSphere(xq, yq, zq, 2)
    attachElements(avialColq, productq, 0, 0, 0)
    setElementData(avialColq, "parent", object)
    setElementData(avialColq, "hospitalbox", true)
    setElementData(avialColq, "MAX_Slots", 5000)

    -- Adiciona de 1 a 4 itens da lista lootItems
    for i = 1, math.random(1, 4) do
      local item = lootItems[math.random(1, #lootItems)]
      local value = math.percentChance(item[2], 1)
      if value >= 1 then
        setElementData(avialColq, item[1], value)
        local ammoData, weapID = getWeaponAmmoType(item[1], true)
        if ammoData then
          local minBullets, maxBullets = math.floor(getAmmoPlus(ammoData) / 3), getAmmoPlus(ammoData) * 2
          local ammoQuantity = math.random(minBullets, maxBullets)
          setElementData(avialColq, ammoData, ammoQuantity)
        end
      end
    end
  end, 23100, 1)
end

A sua função spawnAirdrop original tinha o objetivo de criar um airdrop com um único item escolhido aleatoriamente da lista lootItems. Para modificar essa função e para que o airdrop contenha de 1 a 4 itens adicionei um loop 

for i = 1, math.random(1, 4) do

Isso cria um loop que escolhe um número aleatório entre 1 e 4, representado por math.random(1, 4), que determinará quantos itens serão adicionados ao airdrop.

 

Espero que tenha funcionado para você e que tenha entendido, no mais, fique a vontade para voltar com qualquer dúvida. Abraços!

  • Thanks 1
Link to comment
33 minutes ago, gustavorn said:

Fala meu brother, como vai você? Que nostalgia me aventurar  neste ambiente tão legal de comunicado aqui de novo, após tanto tempo. Vou tentar te ajudar, afinal faz tempo que não sei o que é Lua, viu? Kkkk!

 

Em resposta a sua dúvida, irei responder, levando em conta que você saiba algo sobre lógica de programação.

 

Existem vários objetos (itens) com chave e valor sendo armazenado dentro da nossa variável (lista) lootItems, desta forma, certifique-se de que está lista contenha todos os itens que precisam ser adicionados.

 

Agora, vamos para a função. Comentei em blocos para identar o código e melhorar o entendimento.

function spawnAirdrop(player)
  -- Verifica se o jogador não é um administrador
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
    return
  end

  -- Limpa objetos e timers antigos
  if isElement(productq) then
    destroyElement(productq)
  end
  if isElement(avialColq) then
    destroyElement(avialColq)
  end
  if isElement(blipq) then
    destroyElement(blipq)
  end
  if isElement(variavel) then
    destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer) then
    killTimer(respawnAirdropTimer)
  end

  -- Define um novo timer para respawn do airdrop
  respawnAirdropTimer = setTimer(spawnAirdrop, 120000, 1)

  -- Escolhe aleatoriamente uma localização para o airdrop
  local item_id = math.random(1, #spawnLocations)
  xq, yq, zq = spawnLocations[item_id][1], spawnLocations[item_id][2], spawnLocations[item_id][3] + 0.35
  xpsq, ypsq, zpsq = xq, yq, zq + 7
  xpvq, ypvq, zpvq = xq - 48, yq - 16, zq + 37
  xsbq, ysbq, zsbq = xq - 48, yq - 16, zq + 41
  xssq, yssq, zssq = xq - 528, yq + 2, zq + 141
  xsdq, ysdq, zsdq = xq + 528, yq + 2, zq + 141

  -- Cria um blip para o airdrop
  blipq = createBlip(xq, yq, zq, 5)

  -- Criação do avião e movimentação
  aviaNavaq = createObject(1683, xssq, yssq, zssq, 0, 0, 0)
  moveObject(aviaNavaq, 8000, xsbq, ysbq, zsbq)

  -- Criação do paraquedas
  setTimer(function()
    parasProdq = createObject(2903, xpvq, ypvq, zpvq, 0, 0, 0)
    moveObject(aviaNavaq, 8000, xsdq, ysdq, zsdq)
    moveObject(parasProdq, 15000, xpsq, ypsq, zpsq)
    triggerClientEvent("playAirdropSound", getRootElement())
    outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255, 255, 255, true)
  end, 8000, 1)

  -- Define um timer para destruir o avião
  setTimer(destroyElement, 16100, 1, aviaNavaq)

  -- Cria o conteúdo do airdrop
  setTimer(function()
    destroyElement(parasProdq)
    destroyElement(variavel)
    productq = createObject(2669, xq, yq, zq, 0, 0, 0)
    variavel = createObject(2060, xq, yq, zq + 1.3, 1, 0, 0)
    setElementFrozen(productq, true)
    avialColq = createColSphere(xq, yq, zq, 2)
    attachElements(avialColq, productq, 0, 0, 0)
    setElementData(avialColq, "parent", object)
    setElementData(avialColq, "hospitalbox", true)
    setElementData(avialColq, "MAX_Slots", 5000)

    -- Adiciona de 1 a 4 itens da lista lootItems
    for i = 1, math.random(1, 4) do
      local item = lootItems[math.random(1, #lootItems)]
      local value = math.percentChance(item[2], 1)
      if value >= 1 then
        setElementData(avialColq, item[1], value)
        local ammoData, weapID = getWeaponAmmoType(item[1], true)
        if ammoData then
          local minBullets, maxBullets = math.floor(getAmmoPlus(ammoData) / 3), getAmmoPlus(ammoData) * 2
          local ammoQuantity = math.random(minBullets, maxBullets)
          setElementData(avialColq, ammoData, ammoQuantity)
        end
      end
    end
  end, 23100, 1)
end

A sua função spawnAirdrop original tinha o objetivo de criar um airdrop com um único item escolhido aleatoriamente da lista lootItems. Para modificar essa função e para que o airdrop contenha de 1 a 4 itens adicionei um loop 

for i = 1, math.random(1, 4) do

Isso cria um loop que escolhe um número aleatório entre 1 e 4, representado por math.random(1, 4), que determinará quantos itens serão adicionados ao airdrop.

 

Espero que tenha funcionado para você e que tenha entendido, no mais, fique a vontade para voltar com qualquer dúvida. Abraços!

Oi amigo, primeiramente agradeço imensamente pela sua atenção e ajuda, sou muito grato! Segundo, continua dando apenas 1 item mas por outro lado resolveu outro problema que estava acontecendo, de vir sempre o mesmo item todas as vezes. Agora está vindo 100% aleatório de acordo com as porcentagens! Pra ficar perfeito so dando mais de 1 item simultâneo agora

 

PS.: Adorei seus comentários !! Eu já tive servidores de outros games mas Lua é totalmente novo pra mim

Edited by sirrjohn
Link to comment
7 minutes ago, sirrjohn said:

Oi amigo, primeiramente agradeço imensamente pela sua atenção e ajuda, sou muito grato! Segundo, continua dando apenas 1 item mas por outro lado resolveu outro problema que estava acontecendo, de vir sempre o mesmo item todas as vezes. Agora está vindo 100% aleatório de acordo com as porcentagens! Pra ficar perfeito so dando mais de 1 item simultâneo agora

 

PS.: Adorei seus comentários !! Eu já tive servidores de outros games mas Lua é totalmente novo pra mim

Não há de que, amigo. Vamos tentar adicionar mais uma função para simular a alternância de 1 a 4 itens.

-- Função para adicionar de 1 a 4 itens da lista lootItems ao airdrop
function addRandomItemsToAirdrop(avialColq)
    for i = 1, math.random(1, 4) do
        local item = lootItems[math.random(#lootItems)]
        local value = math.percentChance(item[2], 1)
        if value >= 1 then
            setElementData(avialColq, item[1], value)
            local ammoData, weapID = getWeaponAmmoType(item[1], true)
            if ammoData then
                local minBullets, maxBullets = math.floor(getAmmoPlus(ammoData) / 3), getAmmoPlus(ammoData) * 2
                local ammoQuantity = math.random(minBullets, maxBullets)
                setElementData(avialColq, ammoData, ammoQuantity)
            end
        end
    end
end

function spawnAirdrop(player)
  -- Verifica se o jogador não é um administrador
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
    return
  end

  -- Limpa objetos e timers antigos
  if isElement(productq) then
    destroyElement(productq)
  end
  if isElement(avialColq) then
    destroyElement(avialColq)
  end
  if isElement(blipq) then
    destroyElement(blipq)
  end
  if isElement(variavel) then
    destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer) then
    killTimer(respawnAirdropTimer)
  end

  -- Define um novo timer para respawn do airdrop
  respawnAirdropTimer = setTimer(spawnAirdrop, 120000, 1)

  -- Escolhe aleatoriamente uma localização para o airdrop
  local item_id = math.random(1, #spawnLocations)
  xq, yq, zq = spawnLocations[item_id][1], spawnLocations[item_id][2], spawnLocations[item_id][3] + 0.35
  xpsq, ypsq, zpsq = xq, yq, zq + 7
  xpvq, ypvq, zpvq = xq - 48, yq - 16, zq + 37
  xsbq, ysbq, zsbq = xq - 48, yq - 16, zq + 41
  xssq, yssq, zssq = xq - 528, yq + 2, zq + 141
  xsdq, ysdq, zsdq = xq + 528, yq + 2, zq + 141

  -- Cria um blip para o airdrop
  blipq = createBlip(xq, yq, zq, 5)

  -- Criação do avião e movimentação
  aviaNavaq = createObject(1683, xssq, yssq, zssq, 0, 0, 0)
  moveObject(aviaNavaq, 8000, xsbq, ysbq, zsbq)

  -- Criação do paraquedas
  setTimer(function()
    parasProdq = createObject(2903, xpvq, ypvq, zpvq, 0, 0, 0)
    moveObject(aviaNavaq, 8000, xsdq, ysdq, zsdq)
    moveObject(parasProdq, 15000, xpsq, ypsq, zpsq)
    triggerClientEvent("playAirdropSound", getRootElement())
    outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255, 255, 255, true)
  end, 8000, 1)

  -- Define um timer para destruir o avião
  setTimer(destroyElement, 16100, 1, aviaNavaq)

  -- Cria o conteúdo do airdrop
  setTimer(function()
    destroyElement(parasProdq)
    destroyElement(variavel)
    productq = createObject(2669, xq, yq, zq, 0, 0, 0)
    variavel = createObject(2060, xq, yq, zq + 1.3, 1, 0, 0)
    setElementFrozen(productq, true)
    avialColq = createColSphere(xq, yq, zq, 2)
    attachElements(avialColq, productq, 0, 0, 0)
    setElementData(avialColq, "parent", object)
    setElementData(avialColq, "hospitalbox", true)
    setElementData(avialColq, "MAX_Slots", 5000)

    -- Chama a função para adicionar itens aleatórios
    addRandomItemsToAirdrop(avialColq)
  end, 23100, 1)
end

Não tenho mais o jogo instalado mas acredito que funcione. Espero que ajude, abraços!

  • Thanks 1
Link to comment
21 minutes ago, gustavorn said:

Não há de que, amigo. Vamos tentar adicionar mais uma função para simular a alternância de 1 a 4 itens.

-- Função para adicionar de 1 a 4 itens da lista lootItems ao airdrop
function addRandomItemsToAirdrop(avialColq)
    for i = 1, math.random(1, 4) do
        local item = lootItems[math.random(#lootItems)]
        local value = math.percentChance(item[2], 1)
        if value >= 1 then
            setElementData(avialColq, item[1], value)
            local ammoData, weapID = getWeaponAmmoType(item[1], true)
            if ammoData then
                local minBullets, maxBullets = math.floor(getAmmoPlus(ammoData) / 3), getAmmoPlus(ammoData) * 2
                local ammoQuantity = math.random(minBullets, maxBullets)
                setElementData(avialColq, ammoData, ammoQuantity)
            end
        end
    end
end

function spawnAirdrop(player)
  -- Verifica se o jogador não é um administrador
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
    return
  end

  -- Limpa objetos e timers antigos
  if isElement(productq) then
    destroyElement(productq)
  end
  if isElement(avialColq) then
    destroyElement(avialColq)
  end
  if isElement(blipq) then
    destroyElement(blipq)
  end
  if isElement(variavel) then
    destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer) then
    killTimer(respawnAirdropTimer)
  end

  -- Define um novo timer para respawn do airdrop
  respawnAirdropTimer = setTimer(spawnAirdrop, 120000, 1)

  -- Escolhe aleatoriamente uma localização para o airdrop
  local item_id = math.random(1, #spawnLocations)
  xq, yq, zq = spawnLocations[item_id][1], spawnLocations[item_id][2], spawnLocations[item_id][3] + 0.35
  xpsq, ypsq, zpsq = xq, yq, zq + 7
  xpvq, ypvq, zpvq = xq - 48, yq - 16, zq + 37
  xsbq, ysbq, zsbq = xq - 48, yq - 16, zq + 41
  xssq, yssq, zssq = xq - 528, yq + 2, zq + 141
  xsdq, ysdq, zsdq = xq + 528, yq + 2, zq + 141

  -- Cria um blip para o airdrop
  blipq = createBlip(xq, yq, zq, 5)

  -- Criação do avião e movimentação
  aviaNavaq = createObject(1683, xssq, yssq, zssq, 0, 0, 0)
  moveObject(aviaNavaq, 8000, xsbq, ysbq, zsbq)

  -- Criação do paraquedas
  setTimer(function()
    parasProdq = createObject(2903, xpvq, ypvq, zpvq, 0, 0, 0)
    moveObject(aviaNavaq, 8000, xsdq, ysdq, zsdq)
    moveObject(parasProdq, 15000, xpsq, ypsq, zpsq)
    triggerClientEvent("playAirdropSound", getRootElement())
    outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255, 255, 255, true)
  end, 8000, 1)

  -- Define um timer para destruir o avião
  setTimer(destroyElement, 16100, 1, aviaNavaq)

  -- Cria o conteúdo do airdrop
  setTimer(function()
    destroyElement(parasProdq)
    destroyElement(variavel)
    productq = createObject(2669, xq, yq, zq, 0, 0, 0)
    variavel = createObject(2060, xq, yq, zq + 1.3, 1, 0, 0)
    setElementFrozen(productq, true)
    avialColq = createColSphere(xq, yq, zq, 2)
    attachElements(avialColq, productq, 0, 0, 0)
    setElementData(avialColq, "parent", object)
    setElementData(avialColq, "hospitalbox", true)
    setElementData(avialColq, "MAX_Slots", 5000)

    -- Chama a função para adicionar itens aleatórios
    addRandomItemsToAirdrop(avialColq)
  end, 23100, 1)
end

Não tenho mais o jogo instalado mas acredito que funcione. Espero que ajude, abraços!

Não deu certo :( está dando 0 itens, eu vou postar o script inteiro ok pode ser isso, talvez está em outro lugar o problema

 

spawnLocations = {
{314.83642578125,2506.2631835938,16.484375}, --1
{2617.6479492188,825.74291992188,5.3157968521118}, --2
{1576.1378173828,1447.9056396484,10.831636428833}, --3
{1691.6828613281,1448.0660400391,10.76537322998}, --4
{2004.66015625,1544.4243164063,13.590750694275}, --5
{2181.5466308594,1676.5620117188,11.064884185791}, --6
{2448.1176757813,1273.7723388672,10.8203125}, --7
{2137.3835449219,1442.6499023438,10.8203125}, --8
{2575.3510742188,1824.5400390625,10.8203125}, --9
{2419.8813476563,1920.921875,6.015625}, --10
{2240.4582519531,2045.9215087891,11.0625}, --11
{2179.2749023438,1989.0098876953,10.8203125}, --12
{2127.1943359375,2358.7133789063,10.8203125}, --13
{1997.0966796875,2490.3330078125,10.830327987671}, --14
{1615.7999267578,2377.9553222656,10.8203125}, --15
{1490.2097167969,2188.0922851563,10.8203125}, --16
{1347.8723144531,2153.9106445313,11.015625}, --17
{957.20593261719,2036.7243652344,10.8203125}, --18
{960.08746337891,1730.7059326172,8.6484375}, --19
{271.10870361328,1412.4757080078,10.456546783447}, --20
{10.840476989746,1527.2421875,12.75}, --21
{-334.07357788086,1523.8828125,75.359375}, --22
{-299.88012695313,1025.5218505859,19.59375}, --23
{-702.23919677734,965.90991210938,12.38724899292}, --24
{364.03866577148,874.66436767578,20.40625}, --25
{1088.8571777344,1072.4573974609,10.8359375}, --26
{1489.9666748047,726.11511230469,10.8203125}, --27
{68.575103759766,-254.28695678711,1.578125}, --28
{-864.30541992188,1554.6318359375,23.846151351929}, --29
{-740.29302978516,2058.623046875,60.381847381592}, --30
{-1291.6973876953,2695.0310058594,50.0625}, --31
{-1406.4880371094,2642.3232421875,55.6875}, --32
{-2264.1694335938,2315.4348144531,4.8125}, --33
{-2466.390625,2232.5173339844,4.8093810081482}, --34
{-2614.7595214844,2258.6372070313,8.1994504928589}, --35
{-2681.3798828125,1815.4410400391,68.126068115234}, --36
{224.79331970215,-1832.55859375,3.7705931663513}, --37
{284.9049987793,-1176.2043457031,80.9140625}, --38
{755.96240234375,-1257.9576416016,13.564019203186}, --39
{773.50372314453,-1358.9060058594,13.535238265991},--40
{1128.8109130859,-1447.4973144531,15.796875}, --41
{1268.8708496094,-1251.5638427734,13.722779273987}, --42
{1588.3646240234,-1617.8371582031,13.3828125}, --43
{836.51336669922,-1999.4309082031,12.8671875}, --45
{977.61590576172,-2148.6538085938,13.09375}, --46
{1766.6722412109,-2543.4919433594,13.546875}, --47
{1786.4699707031,-1913.0993652344,13.39405632019}, --48
{1880.51953125,-1395.1171875,13.5703125}, --49
{2101.5480957031,-1572.7170410156,13.371836662292}, --50
{2316.2751464844,-1527.4803466797,25.34375}, --51
{2225.3930664063,-1343.8658447266,23.984144210815},--52
{2154.4069824219,-1168.8410644531,23.821853637695}, --53
{2217.7885742188,-1164.4217529297,25.7265625}, --54
{2028.7626953125,-1195.8115234375,21.663816452026}, --55
{1698.3475341797,-1053.8067626953,23.90625}, --56
{2488.0227050781,-1670.6463623047,13.335947036743}, --57
{2592.5354003906,-1560.2576904297,9.0321044921875}, --58
{2780.2709960938,-1855.2202148438,9.799732208252}, --59
{2874.2202148438,-1572.2838134766,11.100312232971}, --60
{2366.556640625,-111.22863769531,27.541097640991}, --61
{2140.7541503906,-70.945930480957,2.9356446266174}, --62
{-2531.8095703125,1229.8636474609,37.428329467773}, --63
{-2457.4055175781,730.96234130859,35.022338867188},--64
{-2511.1162109375,353.08959960938,35.1171875}, --65
{-2906.40625,472.73828125,4.9140625},--66
{-2327.1994628906,194.27606201172,35.3125},--67
{-2414.2265625,428.54388427734,34.9609375},--68
{-2087.9938964844,261.86730957031,35.669929504395},--69
{-1918.8548583984,264.65570068359,41.046875},--70
{-1968.3210449219,188.20690917969,27.15994644165},--71
{-2182.8562011719,-409.66201782227,35.3359375},--72
{-2406.6630859375,-597.85241699219,132.6484375},--73
{-2520.9538574219,-608.611328125,132.5625},--74
{-2140.0119628906,-860.41796875,32.0234375},--75
{-1515.9364013672,-401.26516723633,7.078125},--76
{-1328.1328125,-17.730365753174,14.1484375},--77
{-1653.7340087891,290.01672363281,7.1875},--78
{-1839.4580078125,144.68249511719,15.1171875},--79
{-1628.8912353516,664.92175292969,7.1875},--80
{-1504.8503417969,737.44427490234,7.1875},--81
{-1833.3952636719,-1574.7811279297,21.75},--82
{-2328.5769042969,-1628.1723632813,483.7038269043},--83
{-2209.6984863281,-2366.5932617188,30.892566680908},--84
{-2011.8569335938,-2430.955078125,30.618188858032},--85
{-1538.6431884766,-2756.8186035156,48.5390625},--86
{-1119.9534912109,-2857.6271972656,67.71875},--87
{-25.108991622925,-2509.640625,36.6484375},--88
}

lootItems = {
{"M4A1",70},
{"M4A3 CCO",70},
{"M16A2",70},
{"Steyr AUG",70},
{"AKS (gold)",70},
{"AKM",70},
{"AK-74",70},
{"AK-107",70},
{"G36C (camo)",70},
{"FN FAL",70},
{"LK-05 SD",70},
{"FN SCAR-L",70},
{"DMR",70},
{"M107",60},
{"M40A3",60},
{"AS50",60},
{"KSVK",60},
{"M249 SAW",40},
{"PKM",30},
{"MG36",30},
{"M240",30},
{"Mk 48 Mod 0",30},
{"Medic Kit",85},
{"Painkiller",50},
{"Morphine",50},
{"Bandage",50},
{"Toolbox",80},
{"Scrap Metal",34},
{"Steel Sheet",100},
{"Engine",43},
{"Tire",43},
{"Tank Parts",43},
{"MP5SD6",50}, 
{"Revolver",50},
{"Coyote Camo Backpack",60},
{"Drybag Backpack",80},
{"Alice Backpack",70},
{"Czech Backpack",60},
{"Motorbike Helmet 1",50},
{"Police Vest",50},
{"UK Vest Black",50},
{"Gas Mask 2",50},
}

function math.percentChance(percent,repeatTime)
  local hits = 0
  for i = 1,repeatTime do
	local number = math.random(1,1000)/10
	if number <= percent then
	  hits = hits+1
	end
  end
  return hits
end

respawnAirdropTimer = false
-- Função para adicionar de 1 a 4 itens da lista lootItems ao airdrop
function addRandomItemsToAirdrop(avialColq)
    for i = 1, math.random(1, 4) do
        local item = lootItems[math.random(#lootItems)]
        local value = math.percentChance(item[2], 1)
        if value >= 1 then
            setElementData(avialColq, item[1], value)
            local ammoData, weapID = getWeaponAmmoType(item[1], true)
            if ammoData then
                local minBullets, maxBullets = math.floor(getAmmoPlus(ammoData) / 3), getAmmoPlus(ammoData) * 2
                local ammoQuantity = math.random(minBullets, maxBullets)
                setElementData(avialColq, ammoData, ammoQuantity)
            end
        end
    end
end

function spawnAirdrop(player)
  -- Verifica se o jogador não é um administrador
  if isElement(player) and not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
    return
  end

  -- Limpa objetos e timers antigos
  if isElement(productq) then
    destroyElement(productq)
  end
  if isElement(avialColq) then
    destroyElement(avialColq)
  end
  if isElement(blipq) then
    destroyElement(blipq)
  end
  if isElement(variavel) then
    destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer) then
    killTimer(respawnAirdropTimer)
  end

  -- Define um novo timer para respawn do airdrop
  respawnAirdropTimer = setTimer(spawnAirdrop, 120000, 1)

  -- Escolhe aleatoriamente uma localização para o airdrop
  local item_id = math.random(1, #spawnLocations)
  xq, yq, zq = spawnLocations[item_id][1], spawnLocations[item_id][2], spawnLocations[item_id][3] + 0.35
  xpsq, ypsq, zpsq = xq, yq, zq + 7
  xpvq, ypvq, zpvq = xq - 48, yq - 16, zq + 37
  xsbq, ysbq, zsbq = xq - 48, yq - 16, zq + 41
  xssq, yssq, zssq = xq - 528, yq + 2, zq + 141
  xsdq, ysdq, zsdq = xq + 528, yq + 2, zq + 141

  -- Cria um blip para o airdrop
  blipq = createBlip(xq, yq, zq, 5)

  -- Criação do avião e movimentação
  aviaNavaq = createObject(1683, xssq, yssq, zssq, 0, 0, 0)
  moveObject(aviaNavaq, 8000, xsbq, ysbq, zsbq)

  -- Criação do paraquedas
  setTimer(function()
    parasProdq = createObject(2903, xpvq, ypvq, zpvq, 0, 0, 0)
    moveObject(aviaNavaq, 8000, xsdq, ysdq, zsdq)
    moveObject(parasProdq, 15000, xpsq, ypsq, zpsq)
    triggerClientEvent("playAirdropSound", getRootElement())
    outputChatBox("#ff0000[AIRDROP] #ffffffUM PACOTE COM LOOT MILITAR FOI LANÇADO AO CHÃO. SEU MAPA FOI MARCADO COM O LOCAL.", getRootElement(), 255, 255, 255, true)
  end, 8000, 1)

  -- Define um timer para destruir o avião
  setTimer(destroyElement, 16100, 1, aviaNavaq)

  -- Cria o conteúdo do airdrop
  setTimer(function()
    destroyElement(parasProdq)
    destroyElement(variavel)
    productq = createObject(2669, xq, yq, zq, 0, 0, 0)
    variavel = createObject(2060, xq, yq, zq + 1.3, 1, 0, 0)
    setElementFrozen(productq, true)
    avialColq = createColSphere(xq, yq, zq, 2)
    attachElements(avialColq, productq, 0, 0, 0)
    setElementData(avialColq, "parent", object)
    setElementData(avialColq, "hospitalbox", true)
    setElementData(avialColq, "MAX_Slots", 5000)

    -- Chama a função para adicionar itens aleatórios
    addRandomItemsToAirdrop(avialColq)
  end, 23100, 1)
end
spawnAirdrop()
addCommandHandler("spawnairdrop",spawnAirdrop)

addCommandHandler("removeairdrop",function(player)
  if not isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup("Admin"))then
	return
  end
  if isElement(productq) then
	destroyElement(productq)
  end
  if isElement(avialColq) then
	destroyElement(avialColq)
  end
  if isElement(blipq) then
	destroyElement(blipq)
  end
  if isElement(variavel) then
	destroyElement(variavel)
  end
  if isTimer(respawnAirdropTimer)then
	killTimer(respawnAirdropTimer)
  end
end)

 

Edited by sirrjohn
Link to comment
7 hours ago, sirrjohn said:

Oi amigo seu código estava correto, é que estava gerando itens que não existiam rs ai porque não tinha nenhum ou que nunca tinha mais de 1. mas na verdade eles eram criados mas sem existir por isso não apareciam.

Obrigado!! tudo bem.

Bacana meu camarada, fico feliz que tenha dado certo. Como mencionei, era preciso se atentar aos itens da lista. Qualquer outra dúvida, fica a vontade para perguntar neste fórum.

Um grande abraço!

Edited by gustavorn
  • Thanks 1
Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...