Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Game_Party < Game_Unit
- alias initialize_without_step_alert initialize
- alias increase_steps_without_step_alert increase_steps
- alias gain_item_without_step_alert gain_item
- def initialize
- initialize_without_step_alert
- # Hash para contagem regressiva para os passos por item.
- @item_steps = {}
- end
- # Sobrescrevemos a função `increase_steps`, que é chamada cada
- # vez que o jogador conta um passo.
- # A diferença de modificar esse método ou modificar o `update`
- # da Scene_Map é que o `update` roda a todo frame, e este método
- # roda apenas quando o evento em que estamos interessados acontece.
- def increase_steps
- increase_steps_without_step_alert
- # Para cada item que temos no Hash, diminuímos em 1 a contagem
- # a cada vez que o jogador conta um passo.
- # Optei pela contagem regressiva porque contagem progressiva
- # exigiria armazenar o valor máximo para poder disparar o
- # alerta, enquanto a contagem regressiva permite só comparar
- # com zero.
- @item_steps.each_key { |item| @item_steps[item] -= 1 }
- # Feito isso, chamamos o método de atualização para mostrar
- # o alerta se cabível.
- # Veja que isso não precisa estar no método update, porque o
- # valor da contagem de passos só muda no `increase_steps`.
- check_step_alerts
- end
- def check_step_alerts
- # Vamos verificar o alerta para cada item no Hash.
- # O .to_a aqui serve para copiar os pares de item/contagem do
- # Hash para um Array antes de percorrer, e é necessário porque
- # enquanto percorremos o hash queremos deletar elementos dele.
- # Ao invés de .to_a, poderíamos usar o método .dup, apesar que
- # o .to_a deve ser mais eficiente.
- @item_steps.to_a.each do |item, steps|
- # Como temos uma contagem *regressiva*, só nos interessa o
- # momento em que ela chega a zero.
- next if steps > 0
- # Nesse caso, ativamos o alerta. É legal colocar isso em um
- # método à parte para segmentar bem as coisas.
- step_alert(item)
- # Feito isso, tiramos o item do Hash, porque não faz mais
- # sentido contar passos para ele.
- @item_steps.delete(item)
- end
- end
- # Modificamos também o método responsável por adicionar itens ao
- # inventário. Assim, conseguimos marcar todos os itens para os
- # quais os passos devem ser contados sem ter que checar o
- # inventário da party a cada frame.
- def gain_item(item, amount, include_equip = false)
- gain_item_without_step_alert(item, amount, include_equip)
- # Aqui, sim, vemos se o item tem nas notas a anotação que queremos.
- # Se ele não tiver, ignoramos ele.
- note_steps = item.note.scan(/steps:\s*(\d+)/i).flatten.last
- return if note_steps.nil?
- add_step_alert(item, note_steps.to_i)
- end
- def add_step_alert(item, max_steps)
- @item_steps[item] = note_steps.to_i
- end
- def step_alert(item)
- msgbox "Número de passos excedido para o item [#{item.name}]."
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement