então continuando nesse problema tentei outros jeito mas sem resultado continua repedindo
com esse modo revertido
math.randomseed(tonumber(tostring(os.time()):reverse())/5)
modo padrao
math.randomseed(tonumber(os.time())
então continuando nesse problema tentei outros jeito mas sem resultado continua repedindo
com esse modo revertido
math.randomseed(tonumber(tostring(os.time()):reverse())/5)
modo padrao
math.randomseed(tonumber(os.time())
Editado Agosto 19 por nociam
info
Grupo: Conde
Registrado: 14/04/15
Posts: 956
Reputação: +333
Gênero: Masculino

Você pode fazer assim,
na tabela, você deixa desse jeito:
local pokemons = { [1] = {name = "Vaporeon", level = 250, nick = "", ball = "normal"}, [2] = {name = "Gyarados", level = 300, nick = "", ball = "normal"}, [3] = {name = "Tentacruel", level = 320, nick = "", ball = "normal"}, [4] = {name = "Golduck", level = 330, nick = "", ball = "normal"}, [5] = {name = "Blastoise", level = 350, nick = "", ball = "normal"}, [6] = {name = "Starmie", level = 400, nick = "", ball = "normal"},}
Ai quando for fazer o random você faz assim:
local random = math.random(1, #pokemons)
No caso acima, na variável random eu coloquei para randomizar um valor de 1 a o valor máximo da tabela que no cas é 6, então vai randomizar de 1 a 6, esse valor vai ser guardado na variável random e quando for buscar alguma informação dessa tabela deve-se usar o pokemons[random] ou como coloquei na variável abaixo .
Espero q tenha ajudado ![]()
Uhm o problema que continua repedindo os pokemon no caso ela pode soltar 3 vezes o gyarados eu queria por random para o npc não ficar sempre com a mesma sequencia.
Mas valeu obrigado mesmo assim estou tentando fazer um array aonde eu faço o random e pego o numero sorteado e retiro esse numero da tabela to com um erro de ordenar ela no caso de posições ela pede posição 6 mas já não tem ai to pensando nessa logica
index = {}
y = true -- coloquei so pra não inserir no array de novo no fim arrumo pra quanto não tiver nada no array ele isere de novo
Editado Agosto 19 por nociam
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Para fazer isso; teria que setar uma store no player, pois ao usar arrays para armazenar valores, caso o servidor seja fechado, todos os dados serão perdidos da array.
mas eu estou fazendo essa array pro npc assim não a necessidade disso e a penas pra pegar números aleatório sem repetir mas da foda.
Usa um array auxiliar, e sempre que sortear remove desse array.
Resumindo, ficaria assim:
Editado Agosto 19 por dalvorsn
1 hora atrás, dalvorsn disse:Usa um array auxiliar, e sempre que sortear remove desse array.
Resumindo, ficaria assim:
Funcionou certinho não duplica, mas o problema que não estou conseguindo usar esses valores passada na array ou mostra que esta null ou se usar função __sort(used) ela retorna tudo, na verdade depois de feito esse random precisava pegar os valores por vez?
Editado Agosto 19 por nociam
imagen errada
27 minutos atrás, nociam disse:Funcionou certinho não duplica, mas o problema que não estou conseguindo usar esses valores passada na array ou mostra que esta null ou se usar função __sort(used) ela retorna tudo, na verdade depois de feito esse random precisava pegar os valores por vez?
Faz um array estatico so pra tu dar copy quando ele tiver um item só
7 minutos atrás, nociam disse:
tudo indica o certo ela faz o random sem repetir mais quanto tento puxar na array uma por vez e como não estivesse nada preciso puxar 1 numero dessa array por vez.
Esse Randon na verdade e pra essa tabela abaixo não repetir os pokemon sempre vir pokemon aleatório como não dava conseguindo pensei em fazer uma array de números e mudar a parte que pega os pokemon .
local it = pokemons[battle_turn] -- battle_turn e aonde pega os pokemon
local pokemons = {
{name = "Vaporeon", level = 250, nick = "", ball = "normal"},
{name = "Gyarados", level = 300, nick = "", ball = "normal"},
{name = "Tentacruel", level = 320, nick = "", ball = "normal"},
{name = "Golduck", level = 330, nick = "", ball = "normal"},
{name = "Blastoise", level = 350, nick = "", ball = "normal"},
{name = "Starmie", level = 400, nick = "", ball = "normal"},
}
Editado Agosto 20 por nociam
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Ja que é para npc, você podeeia criar uma outra tabela contendo os valores (index) que já foram sorteados, assim, quando for sorteado (random) um numero, é só verificar se ja foi sorteado, caso tenha sido, repete o random para obter outro numero até sair um que não tenha sido sorteado.
Bom com todas essas logicas hoje fiz uma diferente eu coloco outro valor na array no caso o 0 e faço um while ate achar um valor diferente gostaria de sabe como posso fazer pra quanto tudo dentro da array for 0 receber novamente os mesmo valor de 1 a 6 falta so isso para eu não ficar no loop infinito kkkkkkkk.Depois de bem feito vou transformar em uma função para não escrever ela toda em cada npc.
x= 0
while x == 0 do
p = based_array[math.random(1, #based_array)]
x = p
based_array[p]= 0
end
Editado Agosto 20 por nociam
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Você não pode setar index 0 (zero) para cada elemento dentro de uma array.
Ao setar index 0 para uma array e tentar por isso em outra, essa primeira será substituída pela segunda.
info
Grupo: Conde
Registrado: 04/02/13
Posts: 541
Reputação: +90
Gênero: Masculino
Como posso fazer um Randon dessa tabela para que a ordem de pokemon sempre seja diferente sem repetir os pokemon?
tabela
local pokemons = {
{name = "Vaporeon", level = 250, nick = "", ball = "normal"},
{name = "Gyarados", level = 300, nick = "", ball = "normal"},
{name = "Tentacruel", level = 320, nick = "", ball = "normal"},
{name = "Golduck", level = 330, nick = "", ball = "normal"},
{name = "Blastoise", level = 350, nick = "", ball = "normal"},
{name = "Starmie", level = 400, nick = "", ball = "normal"},
}
código aonde o battle_turn determina qual e o próximo pokemon
local battle_turn = 1
local function doSummonGymPokemon(npc)
local this = npc
if #getCreatureSummons(this) >= 1 or focus == 0 then return true end
local it = pokemons[battle_turn]
if not it then return true end
if it.nick ~= "" then nickselva = it.nick else nickselva = it.name end
doSummonMonster(npc, it.name, nickselva)
local summon = getCreatureSummons(this)[1]
local balleffect = pokeballs["normal"].effect
if it.ball and pokeballs[it.ball] then
balleffect = pokeballs[it.ball].effect
end
doSendMagicEffect(getThingPos(summon), balleffect)
setPlayerStorageValue(summon, 10000, balleffect)
setPlayerStorageValue(summon, 10001, it.name)
adjustGymPoke(summon, it.level)
setPlayerStorageValue(summon, 201, summon)
setPlayerStorageValue(summon, 99856201, getNpcCid())
doCreatureSay(npc, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", it.name), 1)
fighting = true
battle_turn = battle_turn + 1
updateTarget()
end
Bom em uma outro tópico o zipter98 me respondeu uma outra duvida de tabela então tentei fazer o mesmo procedimento e agora pega os pokemon em ordem aleatória mas os pokemon se repetem.
parte que mudei
local index = {}
for n = 1, 6 do
table.insert(index, n)
end
local it = pokemons[index[math.random(1, #index)]]
Editado Agosto 18 por nociam