Postado Fevereiro 7, 2020 5 anos Uso TFS 0.4, Tenho o seguinte script, quando abro a caixa da um item aleatorio de acordo com sua porcentagem, funcionando Ok. Fiz algumas modificações que gostaria q ele desse somente certo item, mas em outras quantidades, acontece q esse item não stack, tipo o gold, q em um espaço pode ter 100x, ele somente 1 por espaço. Então tentei coloca para adicionar uma backpack junto, ele está adicionando a backpack, mas acontece q sempre vem somente 1 do item, tentei fazer apenas com uma linha para teste --- doPlayeraAddItem(cid, 8300, 20) --- mas continua somente vindo 1, acredito q seja pq ele nao stack em lotes. Teria como ajeita esse script para funcionar como quero? Ou algum outro, estou pensando em forma de fazer talvez até consigo mas com meu conhecimento acredito q gestarei muitas linhas pra algo q me parece simples. local items = { --[numeração] = {id = ID DO ITEM, count = QUANTIDADE DO ITEM, c = CHANCE} [1]={id=8300, count=1, c=35}, [2]={id=8300, count=5, c=30}, [3]={id=8300, count=10, c=20}, [4]={id=8300, count=15, c=10}, [5]={id=8300, count=20, c=5}, } function getRandomItem(t) local i = math.random(1, #t) i = t[i] if math.random(1, 100) <= i.c then return i end return getRandomItem(t) end function onUse(cid, item, fromPosition, itemEx, toPosition) local i = getRandomItem(items) local bp = doPlayerAddItem(cid, 1988, 1) local rw = doPlayerAddItem(cid, i.id, i.count) doAddContainerItem(bp, rw, 1) doSendAnimatedText(getPlayerPosition(cid), "Box!", TEXTCOLOR_GREEN) doPlayerSendTextMessage(cid, 27, "Você abriu uma Box e Ganhou "..i.count.."x "..getItemNameById(i.id)..(i.count > 1 and "s" or "")..".") doRemoveItem(item.uid, 1) return true end Nessa imagem a recompensa foi 5, mas veio somente 1 e a bp Discord: Naze#3578 Ter Linux Dentro de Windows com Acesso 'localhost' para testes e + AutoLoot Otimizado Direto na Source (tfs 0.4/otx) // Pirataria é crime, original é roubo, compartilhar é legal.
Postado Fevereiro 7, 2020 5 anos local rewards = { {chance = 50, itemid = 8300,amount = 1}, {chance = 10, itemid = 2494,amount = 1}, {chance = 100, itemid = 2159,amount = 20}, {chance = 100, itemid = 2160,amount =100} } function GiveRewards(cid, items) local backpack,str = doPlayerAddItem(cid, 1999, 1), '' -- backpackID for i = 1, table.maxn(items) do local chance, itemid, amount = items[i].chance, items[i].itemid,items[i].amount if chance > math.random(1, 100) then if isItemStackable(itemid) or amount == 1 then doAddContainerItem(backpack, itemid, amount) else for i = 1, amount do doAddContainerItem(backpack, itemid, 1) end end str = str .. amount .. ' ' .. getItemNameById(itemid) str = i ~= table.maxn(items) and str .. ', ' or str .. '.' end end return str end function onUse(cid, item, fromPosition, itemEx, toPosition) doSendAnimatedText(getPlayerPosition(cid), "Box!", TEXTCOLOR_GREEN) local t = GiveRewards(cid, rewards) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Você abriu uma Box e Ganhou: "..t) doRemoveItem(item.uid) return true end OBS: Coloquei para vir mais que um item, ou seja, dependendo da sorte do player, poderá receber mais que um... ou você só quer 1 item de toda essa tabela? [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Fevereiro 7, 2020 5 anos Autor @Vodkart Testei, mas tipo ta vindo exatamente 100 - 2160, e 20 - 2159, as vezes vem 1 - 8300, gostaria q somente viesse 1 item, mais especificamente 8300, e diferente quantidades deles. Mas ele não é agrupável, por isso da bag. #edit Ajustei ele e ta vindo as quantidade certa, agora so preciso tirar para vim apenas uma das opções de recompensa Editado Fevereiro 7, 2020 5 anos por Naze (veja o histórico de edições) Discord: Naze#3578 Ter Linux Dentro de Windows com Acesso 'localhost' para testes e + AutoLoot Otimizado Direto na Source (tfs 0.4/otx) // Pirataria é crime, original é roubo, compartilhar é legal.
Postado Fevereiro 7, 2020 5 anos @Naze local t = { {chance = 10, amount = 5}, {chance = 20, amount = 4}, {chance = 40, amount = 3}, {chance = 50, amount = 2} } function GiveRewards(cid, items) local var = items[math.random(#items)] local chance = var.chance if chance > math.random(1, 100) then local backpack, str = doPlayerAddItem(cid, 1999, 1), '' -- backpackID local amount = var.amount for i = 1, amount do doAddContainerItem(backpack, 8300, 1) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Você abriu uma Box e Ganhou: "..amount.." "..getItemNameById(8300)..".") else GiveRewards(cid, items) end return true end function onUse(cid, item, fromPosition, itemEx, toPosition) doSendAnimatedText(getPlayerPosition(cid), "Box!", TEXTCOLOR_GREEN) GiveRewards(cid, t) doRemoveItem(item.uid) return true end @Zazeros sim, mas só colocar para checar se tem a cap, se nao tiver manda para o dp [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.