Blue, Geomancy E Level Skills

9 de dezembro de 2011

Blue, Geomancy E Level Skills é um script para o RPG Maker XP, feito por SephirothSpawn que incrementa bastante o sistema de habilidades (skills) em um jogo feito neste maker.

Blue Skills permitem que o herói aprenda novas skills quando o personagem é alvo de habilidade. Você pode controlar quais habilidades são Blue, quando os personagens podem aprendâ-las, que as classes a aprendem ou também você pode controlar manualmente os actors que aprendem os Blue Skills.

Geomancy dá aos personagens, habilidades determinadas pelo mapa atual ou tag do terreno. É customizável para cada actor mapa e terreno.

Level skills só vão fazer de alvo heróis que são divisíveis por este level. Ele lhe dá a opção de definir o nível de habilidades para todas as skills.

Níveis dos inimigos serão aleatoriamente definidos de acordo com a média do grupo ou de alguns poucos níveis. Se Dynamic Enemies System está presente, o nível é baseado disto.

Instruções: Coloque o script embaixo do SDK e acima do Main. O script tem maiores informações sobre como customizar os skills.

#==============================================================================
# ** Blue, Geomancy & Level Skills
#------------------------------------------------------------------------------
# SephirothSpawn
# Version 1
# 2006-08-24
#------------------------------------------------------------------------------
# * Description :
#
#   Blue Skills Allow you to learn new skills when character is targeted by
#   skill. You can control which skills are blue, when characters can learn
#   blue skills, which classes learn blue skills or manually control the
#   actors that learn blue skills.
#
#   Geomancy will give characters skills determinded by the current map or
#   terrain tags. Is customizable for each actor, map and terrain.
#
#   Level skills will only target people that are divisable by that level.
#   It gives you the option to set the skills level for any skills.
#
#   Enemy Levels - Enemy Levels will be randomly set depending on average
#                  party levels give or take a few levels. If Dynamic Enemies
#                  System exist, the level is based off that.
#------------------------------------------------------------------------------
# * Instructions :
#
#   Place The Script Below the SDK and Above Main.
#   To Customize your skills, refer to the customization instructions.
#------------------------------------------------------------------------------
# * Customization :
#
#   ** Blue Magic **
#
#   Setting Up "Blue Skills"
#    - Blue_Skills = [skill_id, skill_id, ...]
#   Setting Up Actors That Learn Blue Skills
#    - Blue_Skill_Actors = [actor_id, actor_id, ...]
#   Setting Up Classes That Learn Blue Skills
#    - Blue_Skill_Classes = [class_id, class_id, ...]
#   Setting Specific Actor During Game Play to Learn Blue Skills
#    - <game_actor>.learn_blue_skills = true (LEARN) or false (DON'T LEARN)
#
#   ** Geomancy **
#
#   Setting Up Map ID Skills (For Specific Actors)
#    - Geomancy_Actor_Map_ID_Skills = { 
#        actor_id => { map_id => [skill_id, ...], ... },
#        ...
#      }
#   Setting Up Terrain ID Skills (For Specific Actors)
#    - Geomancy_Actor_Terrain_Skills = {
#        actor_id => { terrain_id => [skill_id, ...], ...},
#        ...
#      }
#   Setting Up Up Map ID Class Skills (For Specific Class)
#    - Geomancy_Class_Map_ID_Skills = { 
#        class_id => { map_id => [skill_id, ...], ... },
#        ...
#      }
#   Setting Up Terrain ID Skills (For Specific Class)
#    - Geomancy_Class_Terrain_Skills = {
#        class_id => { terrain_id => [skill_id, ...], ...},
#        ...
#      }
#
#   ** Level Skills **
#
#   Setting Up Skills That Use Level
#    - Level_Based_Skills = { skill_id => skill_level, ... }
#==============================================================================

#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Blue, Geomancy & Level Skills', 'SephirothSpawn', 1, '2006-08-24')

#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Blue, Geomancy & Level Skills')

#==============================================================================
# ** BGL_Skills
#==============================================================================

module BGL_Skills
  #--------------------------------------------------------------------------
  # ** Blue Skills
  #
  # * Blue Skills
  #  ~ Blue_Skills = [skill_id, skill_id, ...]
  # * Actors that Learn Blue Magic
  #  ~ Blue_Skill_Actors = [actor_id, ...]
  # * Classes that Learn Blue Magic
  #  ~ Blue_Skill_Classes = [class_id, class_id, ...]
  #--------------------------------------------------------------------------
  Blue_Skills = []
  Blue_Skill_Actors = []
  Blue_Skill_Classes = []
  #--------------------------------------------------------------------------
  # ** Geomancy
  #
  # * Actor Map ID Skills
  #  ~ actor_id => { map_id => [skill_id, ...], ... }
  #
  # * Actor Terrain Skills
  #  ~ actor_id => { terrain_id => [skill_id, ...], ... }
  #
  # * Class Map ID Skills
  #  ~ class_id => { map_id => [skill_id, ...], ... }
  #
  # * Class Terrain Skills
  #  ~ class => { terrain_id => [skill_id, ...], ... }
  #--------------------------------------------------------------------------
  Geomancy_Actor_Map_ID_Skills = {
  }
  Geomancy_Actor_Terrain_Skills = {
  }
  Geomancy_Class_Map_ID_Skills = {
  }
  Geomancy_Class_Terrain_Skills = {
  }
  #--------------------------------------------------------------------------
  # ** Level Based Skills
  #
  # * Level Based Skills
  #  ~ skill_id => level
  #--------------------------------------------------------------------------
  Level_Based_Skills = {
  }
end

#==============================================================================
# ** Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_bglskills_gmbtlr_se skill_effect
  #--------------------------------------------------------------------------
  # * Apply Skill Effects
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # If Skill is Level Based Skills
    if BGL_Skills::Level_Based_Skills.has_key?(skill.id)
      # If Level is isn't divisible
      unless self.level % BGL_Skills::Level_Based_Skills[skill.id] == 0
        # Sets Miss
        self.damage = "Miss"
        return
      end
    end
    # Original Skill Effects
    seph_bglskills_gmbtlr_se(user, skill)
  end
end

#==============================================================================
# ** Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :learn_blue_skills
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_bglskills_gmactr_scu? skill_can_use?
  alias seph_bglskills_gmactr_skills skills
  alias seph_bglskills_gmactr_se skill_effect
  #--------------------------------------------------------------------------
  # * Skill Can Use Test
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    # If Skill Known
    if self.skills.include?(skill_id)
      return super
    end
    # Return Original Skill Can Use Test
    return seph_bglskills_gmactr_scu?(skill_id)
  end
  #--------------------------------------------------------------------------
  # * Skills
  #--------------------------------------------------------------------------
  def skills
    # Get Original Skills
    n = seph_bglskills_gmactr_skills.dup
    # Adds Geomancy Skills
    n << get_geomancy_skills
    # Returns Skills
    return n.flatten.uniq.sort
  end
  #--------------------------------------------------------------------------
  # * Geomancy Skills
  #--------------------------------------------------------------------------
  def get_geomancy_skills
    # Creates Skills Array
    skills = []
    # Checks Actor Based Geomancy Map Skills
    if (gams = BGL_Skills::Geomancy_Actor_Map_ID_Skills).has_key?(@actor_id)
      # If Current Map
      if gams[@actor_id].has_key?($game_map.id)
        # Adds Map Skill(s)
        skills << gams[@actor_id][$game_map.id]
      end
    end
    # Checks Actor Based Terrain Skills
    if (gats = BGL_Skills::Geomancy_Actor_Terrain_Skills).has_key?(@actor_id)
      # If Current Terrain
      if gats[@actor_id].has_key?($game_player.terrain_tag)
        # Adds Terrain Skill(s)
        skills << gats[@actor_id][$game_player.terrain_tag]
      end
    end
    # Checks Class Based Geomancy Map Skills
    if (gcms = BGL_Skills::Geomancy_Class_Map_ID_Skills).has_key?(@class_id)
      # If Current Map
      if gams[@class_id].has_key?($game_map.id)
        # Adds Map Skill(s)
        skills << gams[@class_id][$game_map.id]
      end
    end
    # Checks Actor Based Terrain Skills
    if (gcts = BGL_Skills::Geomancy_Class_Terrain_Skills).has_key?(@class_id)
      # If Current Terrain
      if gats[@class_id].has_key?($game_player.terrain_tag)
        # Adds Terrain Skill(s)
        skills << gats[@class_id][$game_player.terrain_tag]
      end
    end
    # Returns Skills
    return skills.flatten
  end
  #--------------------------------------------------------------------------
  # * Skill Effect
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # If Actor / Class Can Learn Skill or Actor Can Learn Skill
    if BGL_Skills::Blue_Skill_Classes.include?(@class_id) || 
       BGL_Skills::Blue_Skill_Actors.include?(@actor_id) ||
       self.learn_blue_skills
      # If Skill is a Blue Skill
      if BGL_Skills::Blue_Skills.include?(skill.id)
        # If Skill Not Known
        unless self.skills.include?(skill.id)
          # Display Skill Learned
          self.damage = "Learned Skill #{skill.name}"
          # Learn Skill
          learn_skill(skill.id)
        end
      end
    end
    # Original Skill Effect
    seph_bglskills_gmactr_se(user, skill)
  end
end

#==============================================================================
# ** Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :level
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias seph_bglskills_gmeny_init initialize
  def initialize(troop_id, member_index)
    # Original Initialization
    seph_bglskills_gmeny_init(troop_id, member_index)
    # If Dynamic Enemies Not Enabled
    if SDK.state('Dynamic Enemy Stats')
      # Sets Up Random Level
      n = 0
      $game_party.actors.each {|a| n += a.level}
      n /= $game_party.actors.size
      range = (-3..3).to_a
      n = [1, (n + range[rand(range.size)])].max
      @level = n
    end
  end
end

#------------------------------------------------------------------------------
# * End SDK Enable Test
#------------------------------------------------------------------------------
end

Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Clique aqui e saiba como. Obrigado!

Deixe um comentário

Inscreva-se na nossa newsletter!