🤔 Para Refletir :
"De jogo pequeno em jogo pequeno, consegue-se experiência para o jogo grande."
- Eliyud

Sistema de Mineração

Brandt Masculino

Assistente
Colaboração
Colaboração
Quod erat demonstrandum
Juntou-se
22 de Junho de 2015
Postagens
336
Bravecoins
1.156
giphy.gif



Jesus Christ Marie! They're Minerals! | v1.0.0 | por Masked

HW2lYbO.png

para RPG Maker VX Ace




Descrição

O script implementa um sistema de mineração baseado em eventos. Além da funcionalidade básica de "interage com evento, ganha item", é possível definir o comportamento do evento, configurar animações e efeitos sonoros, além do sistema de popup dos itens ganhos e barra de progresso. Para todos os recursos, veja a configuração no script.


Instruções

Vide script.


Script

Código (Pastebin)
Demo (Dropbox)


Licensa: Creative Commons Attribution-ShareAlike 4.0 International
 
Incrível '0'
High quality plugins pra gincana de natal, pegou o pedido do plugin e fez algo completasso...
Parabéns, vi pouca gente fazer isso.
 
[member=78]Masked[/member]

Parabéns!!! seu sistema ficou incrível, gostei bastante, a parte de configuração, documentação e legibilidade estão ótimas.

Existem alguns pontos de melhorias que eu gostaria de ressaltar.

Código:
def self.failed?
  return @@_failed
end

Em Ruby ou (RGSS), um método sempre retorna a sua ultima linha, isso fica redundante caso exista um return na ultima linha de um método.

Podemos mudar o método acima para:

Código:
def self.failed?
  @@_failed
end


Geralmente o return é usado para um retorno forçado quando o método não deve executar todo o seu código por algum motivo.
EX:

Código:
  def mine!
    return false if has_been_mined?
    
    @mined = true
    dropped = @minerals.select {|m| rand(100) < m.mining_success_rate }

    ...
  end

-------------------------------------

Código:
class RPG::Mineral
  #--------------------------------------------------------------------------
  # * Atributos
  #--------------------------------------------------------------------------
  attr_accessor :item_id              # ID do item derrubado pelo minério
  attr_accessor :mining_success_rate  # Taxa de sucesso de mineração

No código acima, você definiu um attr_accessor para :item_id e :mining_success_rate.

A macro attr_accessor é utilizada apenas para quando você deseja que o seu atributo seja lido e escrito fora da classe.

EX:

Código:
  mineral = RPG::Mineral.new

  # Leitura
  mineral.mining_success_rate

  # Escrita
  mineral.mining_success_rate = 10


No seu caso, você só utilizou os atributos :mining_success_rate e :item_id para leitura e não para escrita:

Código:
$game_party.gain_item($data_items[mineral.item_id], 1)

Código:
dropped = @minerals.select {|m| rand(100) < m.mining_success_rate }

Para os casos onde você deseja apenas ler o atributo, você deve usar o attr_reader.

EX:

Código:
class RPG::Mineral
  #--------------------------------------------------------------------------
  # * Atributos
  #--------------------------------------------------------------------------
  attr_reader :item_id              # ID do item derrubado pelo minério
  attr_reader :mining_success_rate  # Taxa de sucesso de mineração

Caso você queira apenas escrever no atributo, você deve usar o attr_writer.

EX:

Código:
class RPG::Mineral
  #--------------------------------------------------------------------------
  # * Atributos
  #--------------------------------------------------------------------------
  attr_writer :item_id              # ID do item derrubado pelo minério
  attr_writer :mining_success_rate  # Taxa de sucesso de mineração

Ao utilizar o attr_accessor, o Ruby vai criar um attr_writer e um attr_reader automagicamente para esse atributo, isso leva mais tempo de execução do sistema (lag), além de confundir quem está lendo o seu código.

---------------------------

Código:
MINING_PROGRESS_BAR_FILE = "MiningBar"

Utilize string com aspas duplas apenas em caso de interpolação e aspas simples para string normais, isso irá ajudar a performance do seu script.

EX:

Código:
#String simples (aspas simples).

nome = 'Resque'

Código:
#String com interpolação (aspas duplas)

nome = 'Bruno'
sobrenome = 'Souza'

nome_completo = "#{nome} #{sobrenome}"
 
[member=1052]Kawthar[/member] Obrigado! Fazia tanto tempo que eu não fazia scripts pro RPG Maker que eu tive que aproveitar o máximo que pude kkk



[member=770]Resque[/member] Valeu pelas dicas! Só alguns comentários:

Em Ruby ou (RGSS), um método sempre retorna a sua ultima linha, isso fica redundante caso exista um return na ultima linha de um método.

Sim, mas o return ao final também não traz nenhum efeito negativo e deixa o código mais legível pra quem mexe com outras linguagens também (retorno implícito é bonito mas... Só tem em Ruby ;u;).
Como esse return não vai afetar a execução do código, acho que isso é mais preferência pessoal mesmo.

No código acima, você definiu um attr_accessor para :item_id e :mining_success_rate.

Eu tinha pensado em usar um attr_reader, porque não é essencial que esses atributos sejam escritos no meu script, mas na dúvida segui a documentação do RPG Maker, onde todas as estruturas de dados do módulo RPG tem accessors ao invés de writers ou readers, o que realmente faz sentido já que são estruturas bem básicas que não exigem tanta proteção.
É a mesma ideia das structs no C++, que são identicas às classes mas não se preocupam com herança e proteção de acesso e são usados em contextos mais simples, como esse onde só é necessário guardar um id e uma taxa de sucesso.

Na classe Game_ItemPopup, por exemplo, eu não deixei esses accessors voadores, porque não é cabível. É mais uma questão de padronizar o script com o Ace (que eu acho boa prática).

Utilize string com aspas duplas apenas em caso de interpolação e aspas simples para string normais, isso irá ajudar a performance do seu script.

Uma coisa que eu aprendi nessa vida é que não se escova bit com Ruby.
Fora isso, que eu me lembre não tem strings em nenhum ponto muito crítico, então eu achei preferível padrozinar as strings no código (e vamos combinar, aspas duplas são superiores) a economizar esse pouco tempo de execução.
 
Voltar
Topo Inferior