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

Lune Passive Skills

Iniciado por Raizen, 12/03/2014 às 01:06

12/03/2014 às 01:06 Última edição: 25/03/2014 às 23:11 por Raizen
Lune Passive Skills

Compativel com: RMVXAce
Compatibilidade :excelente
Facilidade de uso: fácil
Lag gerado: nulo
[box class=titlebg]
Condições de Uso
[/box]
  Pode ser modificado, e divulgado, mas mantenha os créditos a mim obrigado.

[box class=titlebg]
Para que serve o script
[/box]
  A ideia do script em si, é simplesmente de que tenha skills passivas, aquelas que são ativadas automaticamente no inicio da batalha.

O script foi feito especialmente para servir de suporte para um novo skill tree que estou programando, mas como não é dependente dele, é possível usa-lo separado se desejar.

[box class=titlebg]
Script.
[/box]

#=======================================================
#         Lune Passive Skills
# Autor : Raizen
# Communidade Centro RPG Maker
# Descrição: O script permite que o jogador crie skills passivas para
# o seu jogo.

# Esse script é compátivel e feito para o Lune Skill Tree 2.0, 
# Pode ser usado separado.
#=======================================================


# Para uma habilidade ser passiva, basta adicionar o seguinte ao bloco de notas
# daquela skill <passive>

# A skill estará apenas visível no mapa, na batalha ela não irá aparecer na
# lista de habilidades.

#==============================================================================
# A Partir daqui começa o script.
#==============================================================================


#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da tela de batalha.
#==============================================================================
$imported = {} if $imported == nil
$imported[:Lune_Passive_Skills] = true

class Scene_Battle < Scene_Base
alias :lune_passive_start :start
alias :lune_pre_terminate :pre_terminate
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def start(*args, &block)
    lune_passive_start(*args, &block)
    for n in 0...$game_party.members.size
      for i in 0...all_battle_members[n].skills.size
        i = all_battle_members[n].skills[i].id
        if $data_skills[i].note == "<passive>"
          all_battle_members[n].make_damage_value(all_battle_members[n], $data_skills[i])
          all_battle_members[n].execute_damage(all_battle_members[n])
          apply_passive_effects(all_battle_members[n], $data_skills[i])
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Aplicação do efeito da habilidades/item
  #     target : alvo
  #     item   : habilidade/item
  #--------------------------------------------------------------------------
  def apply_passive_effects(target, item)
    target.passive_apply(target, item)
    refresh_status
    @log_window.display_action_results(target, item)
  end
  #--------------------------------------------------------------------------
  # * Processamento pré finalização
  #--------------------------------------------------------------------------
  def pre_terminate
    for n in 0...$game_party.members.size
      for i in 0...all_battle_members[n].skills.size
        i = all_battle_members[n].skills[i].id
        if $data_skills[i].note == "<passive>"
          apply_reverse_passive_effects(all_battle_members[n], $data_skills[i])
        end
      end
    end
    lune_pre_terminate
  end
  #--------------------------------------------------------------------------
  # * Reversão do efeito da habilidades/item
  #     target : alvo
  #     item   : habilidade/item
  #--------------------------------------------------------------------------
  def apply_reverse_passive_effects(target, item)
    target.passive_reverse_apply(@subject, item)
    refresh_status
    @log_window.display_action_results(target, item)
  end
end


#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  Esta classe gerencia os battlers. Controla a adição de sprites e ações 
# dos lutadores durante o combate.
# É usada como a superclasse das classes Game_Enemy e Game_Actor.
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # * Aplicar habilidades/itens
  #     user : usuário
  #     item : habilidade/item
  #--------------------------------------------------------------------------
  def passive_apply(user, item)
    @result.clear
    @result.used = item_test(user, item)
    @result.missed = (@result.used && rand >= item_hit(user, item))
    @result.evaded = (!@result.missed && rand < item_eva(user, item))
    if @result.hit?
      unless item.damage.none?
        @result.critical = (rand < item_cri(user, item))
        make_damage_value(user, item)
        execute_damage(user)
      end
      item.effects.each {|effect| item_effect_apply(user, item, effect) }
    end
  end
  #--------------------------------------------------------------------------
  # * Aplicar habilidades/itens
  #     user : usuário
  #     item : habilidade/item
  #--------------------------------------------------------------------------
  def passive_reverse_apply(user, item)
    @result.clear
    @result.used = item_test(user, item)
    @result.missed = (@result.used && rand >= item_hit(user, item))
    @result.evaded = (!@result.missed && rand < item_eva(user, item))
    if @result.hit?
      unless item.damage.none?
        @result.critical = (rand < item_cri(user, item))
        make_damage_value(user, item)
        execute_damage(user)
      end
      item.effects.each {|effect| item_reverse_effect_apply(user, item, effect) }
    end
  end
  #--------------------------------------------------------------------------
  # * Aplicar efeito do uso habilidades/itens
  #     user   : usuário
  #     item   : habilidade/item
  #     effect : efeito
  #--------------------------------------------------------------------------
  def item_reverse_effect_apply(user, item, effect)
    method_table = {
      EFFECT_RECOVER_HP    => :item_effect_recover_hp,
      EFFECT_RECOVER_MP    => :item_effect_recover_mp,
      EFFECT_GAIN_TP       => :item_effect_gain_tp,
      EFFECT_ADD_STATE     => :item_effect_add_state,
      EFFECT_REMOVE_STATE  => :item_effect_remove_state,
      EFFECT_ADD_BUFF      => :item_effect_add_buff,
      EFFECT_ADD_DEBUFF    => :item_effect_add_debuff,
      EFFECT_REMOVE_BUFF   => :item_effect_remove_buff,
      EFFECT_REMOVE_DEBUFF => :item_effect_remove_debuff,
      EFFECT_SPECIAL       => :item_effect_special,
      EFFECT_GROW          => :item_effect_grow,
      EFFECT_LEARN_SKILL   => :item_effect_learn_skill,
      EFFECT_COMMON_EVENT  => :item_effect_common_event,
    }
    method_name = method_table[effect.code]
    if $imported[:Lune_Skill_Tree]
      @old_effect1 = effect.value1
      @old_effect2 = effect.value2
      effect.value1 += (effect.value1 * $game_actors[user.id].skill_mult[item.id])/100 
      effect.value2 += (effect.value2 * $game_actors[user.id].skill_mult[item.id])/100 
    end
    effect.value1 *= -1
    effect.value2 *= -1
    send(method_name, user, item, effect) if method_name
    effect.value1 *= -1
    effect.value2 *= -1
    if $imported[:Lune_Skill_Tree]
      effect.value1 = @old_effect1
      effect.value2 = @old_effect2
    end
  end
end


#==============================================================================
# ** Window_BattleSkill
#------------------------------------------------------------------------------
#  Esta janela para seleção de habilidades na tela de batalha.
#==============================================================================

class Window_BattleSkill < Window_SkillList
alias :lune_include? :include?
  #--------------------------------------------------------------------------
  # * Inclusão do item na lista
  #     item : item
  #--------------------------------------------------------------------------
  def include?(item)
    return false if item.note == "<passive>"
    lune_include?(item)
  end
end


[box class=titlebg]
Imagens
[/box]
A imagem abaixo mostra como é configurado a skill passiva
Spoiler
[close]

[box class=titlebg]
Download
[/box]

Não necessário

[box class=titlebg]
Créditos e Avisos
[/box]

Raizen

               Boa Raizen, ótima sacada. Vai ajudar a muitos, até porque eu prefiro muito as passivas, não gasta mana, não gasta turno, são ótimas. Obrigado pela contribuição

Abrçs, Ltmkr
Conteúdos novos sempre, o trem nunca para.


Zombie  Misty!

By:Zombie

Citação de: Lotmaker online 12/03/2014 às 12:43
               Boa Raizen, ótima sacada. Vai ajudar a muitos, até porque eu prefiro muito as passivas, não gasta mana, não gasta turno, são ótimas. Obrigado pela contribuição

Abrçs, Ltmkr
Ah aguarde que em breve esse script será bem útil para algo que estou fazendo :B





Enfim, peço que não usem e nem divulguem esse script ainda, eu cometi um erro nele e só vou poder arrumar hoje de noite, mas para quem quiser testar tá ai x).

Eu acho essas skills meio bizarras, você nunca sabe o efeito delas exatamente. Eu sempre me perco jogando Tales of Vesperia, conseguindo todas as skills mas nunca sabendo para que serve.  :noface:

Well, como você criou para suporte à sua skill tree, então fico no aguardo dela para dar um parecer maior, mas se eu compreendesse o funcionamento dessas skills, com certeza pensaria em usar.  :XD:

Raizen, vou usar o Sistema SAS no meu projeto, ou seja, ele não terá as batalhas de turno do RPG Maker.
Como eu faço para fazer com que as skills fiquem ativas o tempo todo, e não só nas batalhas? Ainda não manjo muito da linguagem de scripts, por isso estou perguntando.
Agradeço desde já!

Olha esse script mexe 100% com a classe de batalha, logo ele serve para todos os scripts menos ABS D:, no caso do SAS.

Para ele, você pode usar um script de árvore de habilidades, tenho 2 no caso, e por eventos colocar que quando obter tal skill, adicionar tantos atributos, mas para saber isso acho que é bom dar uma olhadinha nos eventos e talz xD

eu queria saber se tem com fazer uma passiva assim: a cada 3 ataques básicos o 4 atinge todos os inimigos, e ser apenas para um dos personagens, me ajuda por favor.

Citação de: CavaleiroHDT online 01/03/2015 às 22:41
eu queria saber se tem com fazer uma passiva assim: a cada 3 ataques básicos o 4 atinge todos os inimigos, e ser apenas para um dos personagens, me ajuda por favor.
Ixi cara isso parece bem especifico, com esse script não conseguirá isso e acho meio complicado achar algum que faça exatamente o que busca :/.

Talvez se fizer esse pedido para alguém com mais tempo que eu ele possa fazer para ti, já que não parece um script complicado de ser feito x).

Cara muito obrigado por criar esses 2 scripts maravilhosos, obrigado mesmo, de coração