O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Fazer menu de itens parar de contar eles

Iniciado por sc19, 31/03/2020 às 17:15



Ainda com uns obstáculos na criação do menu, no gif peguei 3 ervas e teoricamente era para as 3 ervas aparecerem no menu (e não terem seus ícones criados infinitamente)

Programação abaixo (ainda não consegui criar uma forma de fazer essa contagem parar)


Apague o evento e insira esse script call:

HERB_ID = 10 # Trocar pelo ID do item [Erva]

$oy ||= $game_variables[242]
$picId ||= $game_variables[244]
$pics_drawn ||= {}
if $game_variables[243] < 97
  $pics_drawn[:herb] ||= 0
  
  if $pics_drawn[:herb] < $game_party.item_number($data_items[HERB_ID])
    $pics_drawn[:herb] += 1
    $picId += 1
    $game_map.screen_pictures[$picId].show("Item - Item (1)", 1, $pics_drawn[:herb] * 32, $oy, 100, 100, 255, 0)
  end
end


Deve ser o código mais feio que já fiz na minha vida recente, mas certamente é menos feio que fazer o menu por eventos. (Fiz no celular também, pode ser que não funcione haha)

A ideia é contar o número de ervas já desenhadas ($pics_drawn[:herb]) e garantir sempre que é menor que o número contido no inventário.

E não me diga que você pretende ter um desse pra cada item.




Um dado interessante: com 245+ variáveis, se cada uma tiver 4 bytes (costuma ser o mínimo pra números), você consegue representar na memória qualquer um desses programas aqui. Nice.
~ Masked

31/03/2020 às 18:45 #2 Última edição: 31/03/2020 às 18:47 por sc19
Citação de: Brandt online 31/03/2020 às 18:26
Apague o evento e insira esse script call:

HERB_ID = 10 # Trocar pelo ID do item [Erva]

$oy ||= $game_variables[242]
$picId ||= $game_variables[244]
$pics_drawn ||= {}
if $game_variables[243] < 97
  $pics_drawn[:herb] ||= 0
  
  if $pics_drawn[:herb] < $game_party.item_number($data_items[HERB_ID])
    $pics_drawn[:herb] += 1
    $picId += 1
    $game_map.screen_pictures[$picId].show("Item - Item (1)", 1, $pics_drawn[:herb] * 32, $oy, 100, 100, 255, 0)
  end
end


Deve ser o código mais feio que já fiz na minha vida recente, mas certamente é menos feio que fazer o menu por eventos. (Fiz no celular também, pode ser que não funcione haha)

A ideia é contar o número de ervas já desenhadas ($pics_drawn[:herb]) e garantir sempre que é menor que o número contido no inventário.

E não me diga que você pretende ter um desse pra cada item.




Um dado interessante: com 245+ variáveis, se cada uma tiver 4 bytes (costuma ser o mínimo pra números), você consegue representar na memória qualquer um desses programas aqui. Nice.

Valeu mesmo, entretanto o código não funcionou por algum motivo... :sera:
Não entendi direito a  ideia do script, mas talvez dê pra entender 100% quando ele funcionar.



Mas a ideia é essa mesma, contar cada item e não passar dos 96 slots. Por falar neles, é capaz que eu reduza ainda esse número porque é coisa demais até pra quem tá cheio dos itens

Curiosidade top demais

Só porque o Brandt tá pelo celular xD:

HERB_ID = 10 # Trocar pelo ID do item [Erva]

$oy ||= $game_variables[242]
$picId ||= $game_variables[244]
$pics_drawn ||= {}
if $game_variables[243] < 97
  $pics_drawn[:herb] ||= 0
 
  if $pics_drawn[:herb] < $game_party.item_number($data_items[HERB_ID])
    $pics_drawn[:herb] += 1
    $picId += 1
    $game_map.screen.pictures[$picId].show("Item - Item (1)", 1, $pics_drawn[:herb] * 32, $oy, 100, 100, 255, 0)
  end
end


Não tá feio não Brandt... Mas eu sei o que você sentiu a cada $qualquer_coisa escrita haha..

31/03/2020 às 19:23 #4 Última edição: 31/03/2020 às 19:26 por Brandt
Citação de: Raizen online 31/03/2020 às 18:52
Só porque o Brandt tá pelo celular xD:

HERB_ID = 10 # Trocar pelo ID do item [Erva]

$oy ||= $game_variables[242]
$picId ||= $game_variables[244]
$pics_drawn ||= {}
if $game_variables[243] < 97
  $pics_drawn[:herb] ||= 0
 
  if $pics_drawn[:herb] < $game_party.item_number($data_items[HERB_ID])
    $pics_drawn[:herb] += 1
    $picId += 1
    $game_map.screen.pictures[$picId].show("Item - Item (1)", 1, $pics_drawn[:herb] * 32, $oy, 100, 100, 255, 0)
  end
end


Não tá feio não Brandt... Mas eu sei o que você sentiu a cada $qualquer_coisa escrita haha..

Yeah, miopia bateu forte :feelsbatman:
$killMePlease

Aproveitando que liguei o computador aqui, fiz o código que desenha todos os itens do inventário na tela, em linhas e colunas, com seus respectivos ícones:

X = 0 # Posição X inicial dos itens
Y = 0 # Posição Y inicial dos itens
WIDTH = Graphics.width   # Largura da janela de itens
HEIGHT = Graphics.height # Altura da janela de itens
COLUMNS = WIDTH / 32 # N° de colunas, pode deixar assim

$item_index ||= 0
$drawn_items ||= 0
$total_drawn_items ||= 0
if $items_window.nil?
  $items_window = Window_Base.new(X, Y, WIDTH, HEIGHT)
  $items_window.opacity = 0
end
return if $item_index >= $game_party.items.size

item = $game_party.items[$item_index]
if $drawn_items < $game_party.item_number(item)
  x = $total_drawn_items % COLUMNS * 32
  y = $total_drawn_items / COLUMNS * 32
  $items_window.draw_icon(item.icon_index, x, y)
  $total_drawn_items += 1
  $drawn_items += 1
else
  $drawn_items = 0
  $item_index += 1
end


Só ajustar as constantes conforme a posição que você quiser na tela e colocar no evento. Ou, melhor, coloque num script acima do main:

X = 0 # Posição X inicial dos itens
Y = 0 # Posição Y inicial dos itens
WIDTH = Graphics.width   # Largura da janela de itens
HEIGHT = Graphics.height # Altura da janela de itens
COLUMNS = WIDTH / 32 # N° de colunas, pode deixar assim

def start_show_items
  $items_window = Window_Base.new(X, Y, WIDTH, HEIGHT)
  $items_window.opacity = 0
  $item_index = 0
  $drawn_items = 0
  $total_drawn_items = 0
end

def update_show_items
  return if $item_index >= $game_party.items.size

  item = $game_party.items[$item_index]
  if $drawn_items < $game_party.item_number(item)
    x = $total_drawn_items % COLUMNS * 32
    y = $total_drawn_items / COLUMNS * 32
    $items_window.draw_icon(item.icon_index, x, y)
    $total_drawn_items += 1
    $drawn_items += 1
  else
    $drawn_items = 0
    $item_index += 1
  end
end


E no evento chame somente:

update_show_items


Nesse caso, chame também, logo antes de iniciar a cena de itens, o seguinte comando:

start_show_items
~ Masked

31/03/2020 às 21:42 #5 Última edição: 31/03/2020 às 21:43 por sc19
Citação de: Brandt online 31/03/2020 às 19:23
Yeah, miopia bateu forte :feelsbatman:
$killMePlease

Aproveitando que liguei o computador aqui, fiz o código que desenha todos os itens do inventário na tela, em linhas e colunas, com seus respectivos ícones:

X = 0 # Posição X inicial dos itens
Y = 0 # Posição Y inicial dos itens
WIDTH = Graphics.width   # Largura da janela de itens
HEIGHT = Graphics.height # Altura da janela de itens
COLUMNS = WIDTH / 32 # N° de colunas, pode deixar assim

$item_index ||= 0
$drawn_items ||= 0
$total_drawn_items ||= 0
if $items_window.nil?
  $items_window = Window_Base.new(X, Y, WIDTH, HEIGHT)
  $items_window.opacity = 0
end
return if $item_index >= $game_party.items.size

item = $game_party.items[$item_index]
if $drawn_items < $game_party.item_number(item)
  x = $total_drawn_items % COLUMNS * 32
  y = $total_drawn_items / COLUMNS * 32
  $items_window.draw_icon(item.icon_index, x, y)
  $total_drawn_items += 1
  $drawn_items += 1
else
  $drawn_items = 0
  $item_index += 1
end


Só ajustar as constantes conforme a posição que você quiser na tela e colocar no evento. Ou, melhor, coloque num script acima do main:

X = 0 # Posição X inicial dos itens
Y = 0 # Posição Y inicial dos itens
WIDTH = Graphics.width   # Largura da janela de itens
HEIGHT = Graphics.height # Altura da janela de itens
COLUMNS = WIDTH / 32 # N° de colunas, pode deixar assim

def start_show_items
  $items_window = Window_Base.new(X, Y, WIDTH, HEIGHT)
  $items_window.opacity = 0
  $item_index = 0
  $drawn_items = 0
  $total_drawn_items = 0
end

def update_show_items
  return if $item_index >= $game_party.items.size

  item = $game_party.items[$item_index]
  if $drawn_items < $game_party.item_number(item)
    x = $total_drawn_items % COLUMNS * 32
    y = $total_drawn_items / COLUMNS * 32
    $items_window.draw_icon(item.icon_index, x, y)
    $total_drawn_items += 1
    $drawn_items += 1
  else
    $drawn_items = 0
    $item_index += 1
  end
end


E no evento chame somente:

update_show_items


Nesse caso, chame também, logo antes de iniciar a cena de itens, o seguinte comando:

start_show_items


Muito obrigado mesmo, usei o segundo método e funcionou muito bem. Só gostaria que os ícones não aparecem um por um, e sim de forma instantânea. Como faço pra apagar esses itens também, quando for sair do menu?