Jump to content

Question

Como posso fazer um Randon dessa tabela para que a ordem de pokemon sempre seja diferente sem repetir os pokemon?

 

tabela

Spoiler

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

 

Spoiler

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)]]

 

Edited by nociam
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/
Share on other sites

15 answers to this question

Recommended Posts

  • 0

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())

 

for n = 1, 6 do
 p = math.random(1, 6)
end
print(p)
 
local it = pokemons[p]
 
vou ver como fazer uma array aonde o numero sorteado cai fora da array e faz um Randon de novo e assim sucessivamente se alguém bom souber como faz fico grato se não vou pesquisar como faz e se tiver resultado posto aqui.
Edited by nociam
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702031
Share on other sites

  • 0

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 :D

Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702032
Share on other sites

  • 0

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

 

 if y  then
      for i= 1, 6 do
        table.insert(index,i)
      end
   y= false
    end
 
 print("")
    print("Concatenated",table.concat(index,", "))
 print("")
 
 p = index[math.random(1, #index)]
 x = table.remove(index, index[p])
 
print("sorteado",p)
print("removido",x)

 

Edited by nociam
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702050
Share on other sites

  • 0
1 hora atrás, dalvorsn disse:

Usa um array auxiliar, e sempre que sortear remove desse array.
 

Resumindo, ficaria assim:

http://codepad.org/izc9hNbb
 

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?

 

 

Edited by nociam
imagen errada
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702112
Share on other sites

  • 0
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ó

 

Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702115
Share on other sites

  • 0

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"},
}

 

Sem título.png

57b7f714677a8_Semttulo.png.4d67dc4c4b5dc83666189681bbb3d961.png

Edited by nociam
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702127
Share on other sites

  • 0

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.

Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702130
Share on other sites

  • 0

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

Edited by nociam
Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702178
Share on other sites

  • 0

Sorteia eles no inicio da conversa com o npc, dai tu concatena os nomes dos pokemons em uma string e salva no npc, salva também o numero do pokemon, se tu quiser usar o serialize de table fica mais pratico ainda

 

http://codepad.org/EcwaoRhz

 

Ta ai em forma de função

Link to comment
https://xtibia.com/forum/topic/241792-random-tabela/#findComment-1702457
Share on other sites

×
×
  • Create New...