adiktuzmiko icon

Skill Levels v1.05

adiktuzmiko | PRO | 02/27/14 01:21:41 AM UTC | 0 ⭐ | 1169 👁️ | Never ⏰ | []
Ruby |

7.25 KB

|

None

|

0 👍

/

0 👎

=begin
======================================================
  
  Skill Levels v1.05
  by Adiktuzmiko                   
  
  Date Created: 02/27/2014
  Date Last Updated: 04/12/2014
  Requires: N/A
  Difficulty: Easy
  
======================================================
 Overview
======================================================
 
 This script allows you to have skill levels. Initial
 and maximum skill level values can be defined per
 actor. Escape code sequences for
 text boxes that support escape codes are given for
 showing skill level,max and exp.
 
 Do note that this script does not provide a default,
 automatic way to increase exp and/or levels. Those
 will be provided as Add-Ons. Script calls to do those
 are built-in
 
 Also, how levels modify your abilities are up to you.
 For simple things like increased damage, you can use
 the damage formula for that. 
 
======================================================
 Usage
====================================================== 
 
 Put this script into your scripts editor, probably
 below any other script that might modify Game_Actor
 and/or Game_Enemy and Game_Battler. Next thing to do
 is to tag your actors.
 
 Remember that these settings are per actor
 
 <SKILL LEVEL: ID,VALUE> = Sets initial level of 
 skill denoted by ID to VALUE
 
 <SKILL MAX: ID,VALUE> = Sets the maximum level of
 skill denoted by ID to VALUE
 
 <SKILL EXTENSION: ID>VALUE<END SKILL EXTENSION> = Allows you to run ruby lines
 when the skill denoted by ID levels. VALUE accepts multilines
 
 <SKILL EXTENSION_A>VALUE<END SKILL EXTENSION_A> = Allows you to run ruby lines
 when any skill levels. VALUE accepts multilines
 
 #This is for the skill  
   
 <SKILL PATH>FORMULA<END SKILL PATH> = The formula used to determine
 how much EXP is needed per level. Supports multiple
 lines.  
   
 Script calls:
 
 To modify the skill level for an actor
 $game_actors[id].mod_skill_level(id,type,value)
 
 To modify the skill max level for an actor
 $game_actors[id].mod_skill_max(id,type,value)
 
 To modify the skill exp for an actor
 $game_actors[id].mod_skill_exp(id,type,value)
   
   type => 'add' for adding 
           'mul' for multiplying
   value => value to add or multiply
   
 To obtain the skill level,max and exp for an Actor
 
 $game_actors[id].skill_level(skill_id)
 $game_actors[id].skill_max(skill_id)
 $game_actors[id].skill_exp(skill_id)
 
 You can also use those methods on battler objects,
 so like if you want a skill to deal damage depending
 on level, you can do this in the damage formula:
 
 10*a.skill_level(skill_id)
 
 Escape Character Codes:
 
 \SL[actor_id,skill_id] = Shows skill level for that actor
 \SM[actor_id,skill_id] = Shows skill max for that actor
 \SE[actor_id,skill_id] = Shows skill exp for that actor
 
======================================================
 Compatibility
======================================================
 
 Aliases Game_Actor/Enemy's initialize, and 
 Window Base's convert_escape_characters
 
======================================================
 Terms and Conditions
======================================================
 
 View it here: http://lescripts.wordpress.com/terms-and-conditions/
 
======================================================
=end
 
#======================================================
#  Do not edit below this line
#======================================================
 
module ADIK
  module SKILL_LEVEL
    TAG = /<SKILL LEVEL: (\d+),(\d+)>/i
    TAG_MAX = /<SKILL MAX: (\d+),(\d+)>/i
      EXT = /<SKILL EXTENSION: (\d+)>/i
    EXT_END = /<END SKILL EXTENSION>/i
      EXT_A = /<SKILL EXTENSION_A>(.*)<END SKILL EXTENSION_A>/im
    FORMULA = /<SKILL PATH>(.*)<END SKILL PATH>/im
  end
end
 
class Game_Battler
  
  attr_accessor :skill_levels
  attr_accessor :skill_exps
  
  #alias initialize_skill_levels_adik initialize
  #def initialize
    #initialize_skill_levels_adik
    
  #end
  
  def load_skill_level_notetag
    @skill_levels = [1]*$data_skills.size
    @skill_exps = [0]*$data_skills.size
    @skill_max = [1]*$data_skills.size
      @skill_ext = [""]*$data_skills.size
    extension = false
    id = 0
    x = self.actor? ? self.actor : self.enemy  
    x.note.split(/[\r\n]+/).each { |line|
      case line
      when ADIK::SKILL_LEVEL::TAG
        @skill_levels[$1.to_i] = $2.to_i
      when ADIK::SKILL_LEVEL::TAG_MAX
        @skill_max[$1.to_i] = $2.to_i
      when ADIK::SKILL_LEVEL::EXT
        extension = true
        id = $1.to_i
        next
      when ADIK::SKILL_LEVEL::EXT_END
        extension = false
        id = 0
        next
      end
      if extension
        @skill_ext[id] += line.to_s
      end
    }
  end
  
  def skill_level(id)
    if @skill_levels[id] > @skill_max[id]
      @skill_levels[id] = @skill_max[id]
    end
    return @skill_levels[id]
  end
  
  def skill_max(id)
    return @skill_max[id]
  end
  
  def skill_exp(id)
    return @skill_exps[id]
  end
  
  def mod_skill_level(id,type,value)
    case type
    when 'add'
      @skill_levels[id] += value
    when 'mul'
      @skill_levels[id] *= value
    end
    refresh_skill_adik_level
  end
  
  def mod_skill_max(id,type,value)
    case type
    when 'add'
      @skill_max[id] += value
    when 'mul'
      @skill_max[id] *= value
    end
    refresh_skill_adik_level
  end
  
  def mod_skill_exp(id,type,value)
    case type
    when 'add'
      @skill_exps[id] += value
    when 'mul'
      @skill_exps[id] *= value
    end
    refresh_skill_level(id)
    refresh_skill_adik_level(id)
  end 
  
  def refresh_skill_adik_level(id)
    if @skill_levels[id] > @skill_max[id]
      @skill_levels[id] = @skill_max[id]
    end
    skill_level_extension(id)
  end
  
  def skill_level_extension(id)
    eval(@skill_ext[id])
    x = self.actor? ? self.actor : self.enemy
    if x.note =~ ADIK::SKILL_LEVEL::EXT_A
      eval($1.to_s)
    else
      return
    end 
  end
  
  def refresh_skill_level(id)
    if $data_skills[id].note =~ ADIK::SKILL_LEVEL::FORMULA
      formula = $1.to_s
    else
      return
    end
    while true
      lvl = @skill_levels[id]
        if lvl >= @skill_max[id]
          break
        end
      req = eval(formula)
      if @skill_exps[id] >= req
        @skill_levels[id] += 1
        @skill_exps[id] -= req
      else
        break
      end
    end 
  end
  
end
 
class Game_Actor
  alias initialize_skill_levels_adikx initialize
  def initialize(actor_id)
    initialize_skill_levels_adikx(actor_id)
    load_skill_level_notetag
  end
end
 
class Game_Enemy
  alias initialize_skill_levels_adikx initialize
  def initialize(index,enemy_id)
    initialize_skill_levels_adikx(index,enemy_id)
    load_skill_level_notetag
  end
end
 
class Window_Base
  alias escape_character_skill_levels convert_escape_characters
  def convert_escape_characters(text)
    result = escape_character_skill_levels(text)
    result.gsub!(/\eSL\[(\d+)\,(\d+)\]/i) { $game_actors[$1.to_i].skill_level($2.to_i) }
    result.gsub!(/\eSM\[(\d+)\,(\d+)\]/i) { $game_actors[$1.to_i].skill_max($2.to_i) }
    result.gsub!(/\eSE\[(\d+)\,(\d+)\]/i) { $game_actors[$1.to_i].skill_exp($2.to_i) }
    result
  end
end

Comments