Ledger Nano X - The secure hardware wallet
SHARE
TWEET

Untitled

a guest Apr 4th, 2020 129 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Game_Party < Game_Unit
  2.   alias initialize_without_step_alert initialize
  3.   alias increase_steps_without_step_alert increase_steps
  4.   alias gain_item_without_step_alert gain_item
  5.  
  6.   def initialize
  7.     initialize_without_step_alert
  8.     # Hash para contagem regressiva para os passos por item.
  9.     @item_steps = {}
  10.   end
  11.  
  12.   # Sobrescrevemos a função `increase_steps`, que é chamada cada
  13.   # vez que o jogador conta um passo.
  14.   # A diferença de modificar esse método ou modificar o `update`
  15.   # da Scene_Map é que o `update` roda a todo frame, e este método
  16.   # roda apenas quando o evento em que estamos interessados acontece.
  17.   def increase_steps
  18.     increase_steps_without_step_alert
  19.  
  20.     # Para cada item que temos no Hash, diminuímos em 1 a contagem
  21.     # a cada vez que o jogador conta um passo.
  22.     # Optei pela contagem regressiva porque contagem progressiva
  23.     # exigiria armazenar o valor máximo para poder disparar o
  24.     # alerta, enquanto a contagem regressiva permite só comparar
  25.     # com zero.
  26.     @item_steps.each_key { |item| @item_steps[item] -= 1 }
  27.  
  28.     # Feito isso, chamamos o método de atualização para mostrar
  29.     # o alerta se cabível.
  30.     # Veja que isso não precisa estar no método update, porque o
  31.     # valor da contagem de passos só muda no `increase_steps`.
  32.     check_step_alerts
  33.   end
  34.  
  35.   def check_step_alerts
  36.     # Vamos verificar o alerta para cada item no Hash.
  37.     # O .to_a aqui serve para copiar os pares de item/contagem do
  38.     # Hash para um Array antes de percorrer, e é necessário porque
  39.     # enquanto percorremos o hash queremos deletar elementos dele.
  40.     # Ao invés de .to_a, poderíamos usar o método .dup, apesar que
  41.     # o .to_a deve ser mais eficiente.
  42.     @item_steps.to_a.each do |item, steps|
  43.  
  44.       # Como temos uma contagem *regressiva*, só nos interessa o
  45.       # momento em que ela chega a zero.
  46.       next if steps > 0
  47.  
  48.       # Nesse caso, ativamos o alerta. É legal colocar isso em um
  49.       # método à parte para segmentar bem as coisas.
  50.       step_alert(item)
  51.  
  52.       # Feito isso, tiramos o item do Hash, porque não faz mais
  53.       # sentido contar passos para ele.
  54.       @item_steps.delete(item)
  55.     end
  56.   end
  57.  
  58.   # Modificamos também o método responsável por adicionar itens ao
  59.   # inventário. Assim, conseguimos marcar todos os itens para os
  60.   # quais os passos devem ser contados sem ter que checar o
  61.   # inventário da party a cada frame.
  62.   def gain_item(item, amount, include_equip = false)
  63.     gain_item_without_step_alert(item, amount, include_equip)
  64.  
  65.     # Aqui, sim, vemos se o item tem nas notas a anotação que queremos.
  66.     # Se ele não tiver, ignoramos ele.
  67.     note_steps = item.note.scan(/steps:\s*(\d+)/i).flatten.last
  68.     return if note_steps.nil?
  69.  
  70.     add_step_alert(item, note_steps.to_i)
  71.   end
  72.  
  73.   def add_step_alert(item, max_steps)
  74.     @item_steps[item] = note_steps.to_i
  75.   end
  76.  
  77.   def step_alert(item)
  78.     msgbox "Número de passos excedido para o item [#{item.name}]."
  79.   end
  80. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top