#==============================================================================
# ** Equipment Skills
#------------------------------------------------------------------------------
# SephirothSpawn
# 2006-04-13
# Version 2.01
#------------------------------------------------------------------------------
# * Instructions
#
# ~ Skill Learning Types (Choose 1, or neither for cannot learn)
# - Learn_By_Level = true (On) or false (Off)
# - Learn_By_AP = true (On) or false (Off)
#
# ~ Disabling Moves Until Learned
# - Disable_Until_Learned = true (On) or false (Off)
# - Only Required For Learn By AP
#
# ~ Learn One Skill At A Time
# - Learn_One_Skill = true (On) or false (Off)
#
# ~ Victory Window Options
# - Show Victory Window
# Show_Victory_Skills = true (On) or false (Off)
# - Show Only Newly Mastered Skills
# Show_Only_Mastered = true (On) or false (Off)
#
# ~ Enemy AP Values
# - Default_Enemy_AP = Default Enemy AP
# - Enemy_AP_Values = { enemy_id => ap given, ... }
#
# ~ Weapon Skills & Armor Skills
# - Weapon_Skills or Armor_Skills
# - = { equipment_id => { skill_id => Ap or Level Required, ... }, ... }
#------------------------------------------------------------------------------
# ~ One Skill At a Time Feature Requires
# Near Fantastica's Keyboard Input Module
#==============================================================================
#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Equipment Skills', 'SephirothSpawn', 1, '2006-03-12')
#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Equipment Skills') == true
#==============================================================================
# ** Equipment_Skills
#==============================================================================
module Equipment_Skills
#--------------------------------------------------------------------------
# * Learning Types
# (If Both are false, you cannot learn skills)
#--------------------------------------------------------------------------
Learn_By_Level = false
Learn_By_AP = true
#--------------------------------------------------------------------------
# * Disable Until Learned
#--------------------------------------------------------------------------
Disable_Until_Learned = false
#--------------------------------------------------------------------------
# * Only Learn One Skill at a time
# (Must assign the current skill each time)
#--------------------------------------------------------------------------
Learn_One_Skill = false
#--------------------------------------------------------------------------
# * Show Victory Skills Window after Battle
# * Show Only Newly Learned Skills
#--------------------------------------------------------------------------
Show_Victory_Skills = false
Show_Only_Mastered = true
#--------------------------------------------------------------------------
# * Default AP Given By Enemy
#--------------------------------------------------------------------------
Default_Enemy_AP = 1
#--------------------------------------------------------------------------
# * Assigned AP for enemies
# ~ enemy_id => ap
#--------------------------------------------------------------------------
Enemy_AP_Values = {
1 => 3
}
#--------------------------------------------------------------------------
# * Weapon Skills
# ~ weapon_id => { skill_id, required_ap }
#--------------------------------------------------------------------------
Weapon_Skills = {
1 => { 57 => 25, 58 => 50, 59 => 100, 60 => 200 },
5 => { 61 => 25, 62 => 50, 63 => 100, 64 => 200 },
25 => { 73 => 25, 74 => 50, 75 => 100, 76 => 200 },
29 => { 77 => 25, 78 => 50, 79 => 100, 80 => 200 }
}
#--------------------------------------------------------------------------
# * Armor Skills
# ~ armor_id => { skill_id, required_ap }
#--------------------------------------------------------------------------
Armor_Skills = {
1 => { 1 => 30, 4 => 40 },
5 => { 55 => 50 },
9 => { 33 => 25, 35 => 60 },
13 => { 56 => 60 },
17 => { 56 => 50 },
21 => { 37 => 25, 39 => 60 },
25 => { 53 => 35 },
26 => { 54 => 50 },
29 => { 7 => 25, 8 => 50, 9 => 100 },
30 => { 10 => 25, 11 => 50, 12 => 100 }
}
end
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :skill_ap_totals
attr_accessor :weapon_skill_target
attr_accessor :armor1_skill_target
attr_accessor :armor2_skill_target
attr_accessor :armor3_skill_target
attr_accessor :armor4_skill_target
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_weaponskills_gameactor_setup setup
alias seph_weaponskills_gameactor_equip equip
alias seph_weaponskills_gameactor_skills skills
alias seph_weaponskills_gameactor_scu skill_can_use?
#--------------------------------------------------------------------------
# * Setup
# actor_id : actor ID
#--------------------------------------------------------------------------
def setup(actor_id)
# Creates Equipment AP
@skill_ap_totals = {}
# Mastered Skills
@mastered_skills = []
# Sets Equipment Skill Targets to Nil
@weapon_skill_target = nil
@armor1_skill_target = nil
@armor2_skill_target = nil
@armor3_skill_target = nil
@armor4_skill_target = nil
# Adds In Weapon Skills and AP Amounts
weapon_skills = Equipment_Skills::Weapon_Skills
armor_skills = Equipment_Skills::Armor_Skills
equipment = weapon_skills.values + armor_skills.values
for skill_data in equipment
for skill_id in skill_data.keys
unless @skill_ap_totals.has_key?(skill_id)
@skill_ap_totals[skill_id] = 0
end
end
end
# Original Initialization
seph_weaponskills_gameactor_setup(actor_id)
end
#--------------------------------------------------------------------------
# * Change Equipment
# equip_type : type of equipment
# id : weapon or armor ID (If 0, remove equipment)
#--------------------------------------------------------------------------
def equip(equip_type, id)
# Original Equip Method
seph_weaponskills_gameactor_equip(equip_type, id)
# Clears Skill Targets
case equip_type
when 0 # Weapon
if id == 0 or $game_party.weapon_number(id) > 0
@weapon_skill_target = nil
end
when 1 # Shield
if id == 0 or $game_party.armor_number(id) > 0
@armor1_skill_target = nil
end
when 2 # Head
if id == 0 or $game_party.armor_number(id) > 0
@armor2_skill_target = nil
end
when 3 # Body
if id == 0 or $game_party.armor_number(id) > 0
@armor3_skill_target = nil
end
when 4 # Accessory
if id == 0 or $game_party.armor_number(id) > 0
@armor4_skill_target = nil
end
end
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used
# skill_id : skill ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
if self.skills.include?(skill_id)
return super
end
# Original Skill Can use Method
seph_weaponskills_gameactor_scu(skill_id)
end
#--------------------------------------------------------------------------
# * Skills
#--------------------------------------------------------------------------
def skills
# Gets Previous Skills
s = seph_weaponskills_gameactor_skills.dup
# Adds in Equipped Skills
s << get_current_equipped_skills
# Adds in Mastered Skills
s << get_mastered_skills
# Returns New Skills
return s.flatten.sort.uniq.dup
end
#--------------------------------------------------------------------------
# * Get Current Equipped Skills
#--------------------------------------------------------------------------
def get_current_equipped_skills
# Returns Empty if Cannot Learn Until Mastered
return [] if Equipment_Skills::Disable_Until_Learned
# Creates Skills Array
skills = []
# Gets Weapon & Armor Skills Contants
weapon_skills = Equipment_Skills::Weapon_Skills
armor_skills = Equipment_Skills::Armor_Skills
# Checks For Equipped Weapon
unless @weapon_id == 0
# If Weapon Has Skill
if weapon_skills.has_key?(@weapon_id)
# Adds Weapon Skills
weapon_skills[@weapon_id].each do | skill_id, value |
if Equipment_Skills::Learn_By_Level
unless skills.include?(skill_id)
skills << skill_id if @level >= value
end
else
skills << skill_id unless skills.include?(skill_id)
end
end
end
end
# Checks For Equipped Armor
for i in 1..4
unless (eval "@armor#{i}_id") == 0
# If Armor Has Skill
if armor_skills.has_key?(eval "@armor#{i}_id")
armor_skills[(eval "@armor#{i}_id")].each do | skill_id, value |
if Equipment_Skills::Learn_By_Level
unless skills.include?(skill_id)
skills << skill_id if @level >= value
end
else
skills << skill_id unless skills.include?(skill_id)
end
end
end
end
end
# Sends Skills Array
return skills
end
#--------------------------------------------------------------------------
# * Get Mastered Skills
#--------------------------------------------------------------------------
def get_mastered_skills
# Returns Empty if Cannot Learn Skills
return [] unless Equipment_Skills::Learn_By_AP
# Starts Skills Array
skills = []
# Gets Weapon & Armor Skills Contants
weapon_skills = Equipment_Skills::Weapon_Skills
armor_skills = Equipment_Skills::Armor_Skills
# Checks for Mastered AP
for skill_data in weapon_skills.values + armor_skills.values
# Checks Skill Data
skill_data.each do | skill_id, master |
# Unless 0
unless master == 0
# If AP Total is Reached
if @skill_ap_totals[skill_id] == master
# Adds Skills
skills << skill_id unless skills.include?(skill_id)
end
end
end
end
# Sends Skills Array
return skills
end
#--------------------------------------------------------------------------
# * Earn AP
#--------------------------------------------------------------------------
def earn_ap(amount = 0)
# Exits if Cannot Learn Skills or Learns By Level
return unless Equipment_Skills::Learn_By_AP
# Gets Weapon & Armor Skills Contants
weapon_skills = Equipment_Skills::Weapon_Skills
armor_skills = Equipment_Skills::Armor_Skills
# Earns Weapon AP
unless @weapon_id == 0
# If Weapon Has Skills
if weapon_skills.has_key?(@weapon_id)
# If One at a time
if Equipment_Skills::Learn_One_Skill
# If Skill has been Set
unless @weapon_skill_target.nil?
# Gets Current And Max
current = @skill_ap_totals[@weapon_skill_target]
max = weapon_skills[@weapon_id][@weapon_skill_target]
# Increases AP
@skill_ap_totals[@weapon_skill_target] = [current + amount, max].min
end
# If Learn All
else
weapon_skills[@weapon_id].each do | skill_id, max |
# Gets Current AP
current = @skill_ap_totals[skill_id]
# Increases AP
@skill_ap_totals[skill_id] = [current + amount, max].min
end
end
end
end
# Earns Armor AP
for i in 1..4
# If Armor Equipped
unless (eval "@armor#{i}_id") == 0
# If Armor Has Skills
if armor_skills.has_key?(eval "@armor#{i}_id")
# If One at a time
if Equipment_Skills::Learn_One_Skill
# If Skill has been Set
unless (eval "@armor#{i}_skill_target.nil?")
# Gets Current And Max
current = @skill_ap_totals[(eval "@armor#{i}_skill_target")]
max = armor_skills[(eval "@armor#{i}_id")][(eval "@armor#{i}_skill_target")]
# Increases AP
@skill_ap_totals[(eval "@armor#{i}_skill_target")] = [current + amount, max].min
end
# If Learn All
else
armor_skills[(eval "@armor#{i}_id")].each do | skill_id, max |
# Gets Current AP
current = @skill_ap_totals[skill_id]
# Increases AP
@skill_ap_totals[skill_id] = [current + amount, max].min
end
end
end
end
end
end
#--------------------------------------------------------------------------
# * Get Newly Mastered Skills
#--------------------------------------------------------------------------
def get_learning_skills
# Unless Learn By AP
return [] unless Equipment_Skills::Learn_By_AP
skills = []
# Gets Weapon & Armor Skills Contants
weapon_skills = Equipment_Skills::Weapon_Skills
armor_skills = Equipment_Skills::Armor_Skills
unless @weapon_id == 0
if weapon_skills.has_key?(@weapon_id)
weapon_skills[@weapon_id].each do |skill_id, max|
unless max == 0
skills << skill_id unless skills.include?(skill_id)
end
end
end
end
for i in 1..4
unless (eval "@armor#{i}_id") == 0
if armor_skills.has_key?(eval "@armor#{i}_id")
armor_skills[(eval "@armor#{i}_id")].each do |skill_id, max|
unless max == 0
skills << skill_id unless skills.include?(skill_id)
end
end
end
end
end
return skills.uniq.sort
end
#--------------------------------------------------------------------------
# * Get Newly Mastered Skills
#--------------------------------------------------------------------------
def get_newly_mastered_skills
# Unless Learn By AP
return [] unless Equipment_Skills::Learn_By_AP
mastered = []
for skill_id in get_mastered_skills.dup.uniq.sort
unless @mastered_skills.include?(skill_id)
mastered << skill_id
@mastered_skills << skill_id
end
end
return mastered.sort
end
end
#==============================================================================
# ** Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# Draw Bar
#--------------------------------------------------------------------------
def draw_bar(x, y, min, max, width = 152, height = 6,
bar_color = Color.new(150, 0, 0), end_color = Color.new(255, 255, 60))
# Draw Background
self.contents.fill_rect(x, y, width, height, Color.new(50, 50, 50, 255))
# Draws Bar
for i in 1..( (min.to_f / max.to_f) * width - 3)
r = bar_color.red * (width - i) / width + end_color.red * i / width
g = bar_color.green * (width - i) / width + end_color.green * i / width
b = bar_color.blue * (width - i) / width + end_color.blue * i / width
a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
self.contents.fill_rect(x + 1 + i, y + 1, 1, height - 2,
Color.new(r, g, b, a))
end
end
end
#==============================================================================
# ** Window_Skill
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_weaponskills_windskill_drawitem draw_item
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
# If Learn By AP
unless Equipment_Skills::Learn_By_AP
# Original Draw Item Method
seph_weaponskills_windskill_drawitem(index)
return
end
# If Equipment Skill
skill = @data[index]
# Unless In Battle
unless $game_temp.in_battle
# If Skill is a Equipment Skill
if @actor.skill_ap_totals.has_key?(skill.id)
# Gets AP
ap = @actor.skill_ap_totals[skill.id]
# Alters Font Properties
self.contents.font.size = 16
self.contents.font.bold = true
# Original Draw Item Method
seph_weaponskills_windskill_drawitem(index)
# Location Coordinate
x, y = 4 + index % 2 * (288 + 32), index / 2 * 32
# Default Max
max = 0
# Searches for Max
for weapon in Equipment_Skills::Weapon_Skills.keys
Equipment_Skills::Weapon_Skills[weapon].each do | skill_id, m |
max = m if skill.id == skill_id
end
end
for armor in Equipment_Skills::Armor_Skills.keys
Equipment_Skills::Armor_Skills[armor].each do | skill_id, m |
max = m if skill.id == skill_id
end
end
# Draws Status Bar
draw_bar(x + 132, y + 10, ap, max, 96, 14)
# Draws Progress
text = ap == max ? 'Mastered' : "#{ap} / #{max}"
temp_font = contents.font.dup
self.contents.font.color = Color.new(0, 0, 0)
self.contents.draw_text(x + 133, y + 1, 92, 32, text, 2)
self.contents.font = temp_font
self.contents.draw_text(x + 132, y, 92, 32, text, 2)
end
return
end
# Alters Font Properties
self.contents.font.size = 22
self.contents.font.bold = false
# Original Draw Item Method
seph_weaponskills_windskill_drawitem(index)
end
end
#==============================================================================
# ** Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Refresh Skill Status
#--------------------------------------------------------------------------
def refresh_skills_status
# Unless Can Learn By AP
unless Equipment_Skills::Learn_By_AP
refresh
return
end
# Actors Skills
@actors_skills = []
# Alters Windows Contents
if Equipment_Skills::Show_Only_Mastered
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
@actors_skills << actor.get_newly_mastered_skills
end
else
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
@actors_skills << actor.get_learning_skills
end
end
max = 128
for i in 0..3
max = [max, @actors_skills[i].size * 32 + 32].max
end
self.contents = Bitmap.new(width - 32, max)
# Draws Skill Stuff
for i in 0...$game_party.actors.size
# Gets Actor
actor = $game_party.actors[i]
actor_x = i * 160 + 4
# Sets Font
self.contents.font.size = 22
self.contents.font.bold = false
# If No Skills
if @actors_skills[i].size == 0
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
next
end
# Draws Heading
self.contents.draw_text(actor_x, 0, 120, 32, 'Skill Progress', 1)
# Fixes Font
self.contents.font.size = 14
self.contents.font.bold = true
# Draws Skills
for j in 0...@actors_skills[i].size
y = j * 32 + 32
# Gets AP Amouts
ap = actor.skill_ap_totals[@actors_skills[i][j]]
max = get_max_ap(@actors_skills[i][j])
# Draws Progress
draw_skill_progress(@actors_skills[i][j], ap, max, actor_x, y, 120)
end
end
end
#--------------------------------------------------------------------------
# * Get Max AP Points
#--------------------------------------------------------------------------
def get_max_ap(skill_id)
for weapon_id in Equipment_Skills::Weapon_Skills.keys
Equipment_Skills::Weapon_Skills[weapon_id].each do |s_id, value|
if s_id == skill_id
return value
end
end
end
for armor_id in Equipment_Skills::Armor_Skills.keys
Equipment_Skills::Armor_Skills[armor_id].each do |s_id, value|
if s_id == skill_id
return value
end
end
end
return 0
end
#--------------------------------------------------------------------------
# * Draw Skill Progress
#--------------------------------------------------------------------------
def draw_skill_progress(skill_id, min, max, x, y, width)
# Gets Skill
skill = $data_skills[skill_id]
# Gets Icon
bitmap = RPG::Cache.icon(skill.icon_name)
# Draws Icon
self.contents.blt(x + 4, y + 4, bitmap, Rect.new(0, 0, 24, 24))
# Draws Skill Name
self.contents.draw_text(x + 32, y, width - 32, 16, skill.name)
# Draws Status Bar
draw_bar(x + width - 64, y + 16, min, max, 64, 14)
# Draws Progress
text = min == max ? 'Mastered' : "#{min} / #{max}"
self.contents.font.color = Color.new(0, 0, 0)
self.contents.draw_text(x + width - 63, y + 16, 60, 14, text, 2)
self.contents.font.color = normal_color
self.contents.draw_text(x + width - 64, y + 16, 60, 14, text, 2)
end
end
#==============================================================================
# ** Window_BattleResult_AP
#==============================================================================
class Window_BattleResult_AP < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(y)
super(160, y, 320, $game_troop.enemies.size * 24 + 56)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
self.visible = false
self.z = 9999
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# Gets Troop ID
troop_id = $game_temp.battle_troop_id
# Gets Enemy Ap Value
enemy_ap_values = Equipment_Skills::Enemy_AP_Values
# Gets AP Earned
ap = 0
for enemy in $data_troops[troop_id].members
enemy = $data_enemies[enemy.enemy_id]
ap += (enemy_ap_values.has_key?(enemy.id) ?
enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP)
end
# Draws Heading
self.contents.font.color = system_color
self.contents.draw_text(16, 0, contents.width - 32, 24, 'AP Aquired:')
self.contents.draw_text(16, 0, contents.width - 32, 24, ap.to_s, 2)
# Draws Enemies Names, and AP Given
self.contents.font.color = normal_color
enemies = $data_troops[troop_id].members
for i in 0...enemies.size
enemy = $data_enemies[enemies[i].enemy_id]
self.contents.draw_text(4, i * 24 + 24, 280, 24, enemy.name)
ap = enemy_ap_values.has_key?(enemy.id) ?
enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP
self.contents.draw_text(4, i * 24 + 24, contents.width - 8, 24,
ap.to_s, 2)
end
end
end
#==============================================================================
# ** Window_EquipmentSkills
#==============================================================================
class Window_EquipmentSkills < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :item_max
attr_reader :skills
attr_accessor :target_index
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 64, 272, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.z = 9999
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(actor_id, equipment)
# Gets Actor
@actor = $game_party.actors[actor_id]
# Sets Up Skills & Target index
@skills = []
@target_index = nil
@item_max = 0
# Clears & Sets Up Contents
self.contents.clear
self.contents.font.color = system_color
self.contents.font.size = 22
self.contents.font.bold = false
# If No Equipment
if equipment.nil?
self.contents.draw_text(0, 0, 240, 32, 'Nothing Equipped', 1)
return
end
# If Equipment is a item
if equipment.is_a?(RPG::Item)
self.contents.draw_text(0, 0, 240, 32, 'No Skills for Items', 1)
return
end
# Draws Equipment
bitmap = RPG::Cache.icon(equipment.icon_name)
self.contents.blt(4, 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.draw_text(32, 0, 208, 32, equipment.name, 1)
# Gets Equipment Skills
if equipment.is_a?(RPG::Weapon)
equipment_skills = Equipment_Skills::Weapon_Skills.has_key?(equipment.id) ?
Equipment_Skills::Weapon_Skills[equipment.id] : []
elsif equipment.is_a?(RPG::Armor)
equipment_skills = Equipment_Skills::Armor_Skills.has_key?(equipment.id) ?
Equipment_Skills::Armor_Skills[equipment.id] : []
end
# Draws Skills
self.contents.font.color = normal_color
self.contents.font.size = 14
self.contents.font.bold = true
if equipment_skills.size == 0
self.contents.draw_text(0, 32, 240, 32, 'None', 1)
return
else
equipment_skills.each {| skill_id, max | @skills << [skill_id, max]}
@skills.sort! {|a, b| a[0] <=> b[0]}
for i in 0...@skills.size
# Gets AP Total
actor = $game_party.actors[actor_id]
skill_id = @skills[i][0]
ap = actor_id == - 1 ? 0 :actor.skill_ap_totals[skill_id]
max = @skills[i][1]
draw_skill_progress(skill_id, ap, max, 0, 40 + i * 24, 236)
end
end
@item_max = @skills.size
# If One Target
if Equipment_Skills::Learn_One_Skill
case equipment
when RPG::Weapon
skill_target = @actor.weapon_skill_target
when RPG::Armor
case equipment.kind
when 0
skill_target = @actor.armor1_skill_target
when 1
skill_target = @actor.armor2_skill_target
when 2
skill_target = @actor.armor3_skill_target
when 3
skill_target = @actor.armor4_skill_target
end
end
for i in 0...@skills.size
if @skills[i][0] == skill_target
@target_index = i + 1
end
end
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if Equipment_Skills::Learn_One_Skill
update_cursor_rect
end
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
if @target_index.nil?
self.cursor_rect.empty
else
self.cursor_rect.set(0, 40 + (@target_index - 1) * 24, 240, 24)
end
end
#--------------------------------------------------------------------------
# * Draw Skill Progress
#--------------------------------------------------------------------------
def draw_skill_progress(skill_id, min, max, x, y, width)
# Gets Skill
skill = $data_skills[skill_id]
# Gets Icon
bitmap = RPG::Cache.icon(skill.icon_name)
# Draws Icon
self.contents.blt(x + 4, y, bitmap, Rect.new(0, 0, 24, 24))
# Draws Skill Name
self.contents.draw_text(x + 32, y, 240 - x - 32, 24, skill.name)
# Draws Status Bar
draw_bar(x + width - 96, y + 2, min, max, 96, 20)
# Draws Progress
text = min == max ? 'Mastered' : "#{min} / #{max}"
self.contents.font.color = Color.new(0, 0, 0, 255)
self.contents.draw_text(x + width - 99, y + 1, 96, 24, text, 2)
self.contents.font.color = normal_color
self.contents.draw_text(x + width - 100, y, 96, 24, text, 2)
end
end
#==============================================================================
# ** Scene_Equip
#==============================================================================
class Scene_Equip
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_weaponskills_sceneequip_main main
alias seph_weaponskills_sceneequip_update update
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Equipment Skill Status Window
@equipment_skill_status = Window_EquipmentSkills.new
# Stores Indexes
@r_index, @i_index = @equip_index, 0
# Original Main Method
seph_weaponskills_sceneequip_main
# Disposes Skill Status Window
@equipment_skill_status.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update Keyboard Input Module
Keyboard.update
# Updates Equipment Skills Window
@equipment_skill_status.update
# If A Button is Pressed
if Input.trigger?(Input::A)
# Play Cursor SE
$game_system.se_play($data_system.cursor_se)
# If Window is off
unless @equipment_skill_status.visible
# Turn On Window
@equipment_skill_status.visible = true
# Refresh Window
refresh_equipment_skills
else
# Turns Off Window
@equipment_skill_status.visible = false
end
end
# If Window On
if @equipment_skill_status.visible
# If Right Window Active
if @right_window.active
# If Index is different
unless @right_window.index == @r_index
@r_index = @right_window.index
# Refresh Weappn Skills
refresh_equipment_skills
end
elsif @item_window.active
# If Index is different
unless @item_window.index == @i_index
@i_index = @item_window.index
# Refresh Equipment Skills
refresh_equipment_skills
end
end
end
# Original Update Method
seph_weaponskills_sceneequip_update
# One Skill Assignment
if Equipment_Skills::Learn_One_Skill
if @equipment_skill_status.visible
max = @equipment_skill_status.item_max
return if max == 0
@help_window.set_text("Press 1 - #{max} to Assign Skill Target")
# If Key is Pressed
for i in 1..max
if Keyboard.trigger?(Keyboard::Numberkeys[i])
@equipment_skill_status.target_index = i
skill_id = @equipment_skill_status.skills[i - 1][0]
case @right_window.item
when RPG::Weapon
@actor.weapon_skill_target = skill_id
when RPG::Armor
case @right_window.item.kind
when 0
@actor.armor1_skill_target = skill_id
when 1
@actor.armor2_skill_target = skill_id
when 2
@actor.armor3_skill_target = skill_id
when 3
@actor.armor4_skill_target = skill_id
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# * Refresh : Weappn Skills Window
#--------------------------------------------------------------------------
def refresh_equipment_skills
# Refresh Window
if @right_window.active
@equipment_skill_status.refresh(@actor_index, @right_window.item)
elsif @item_window.active
@equipment_skill_status.refresh(@actor_index, @item_window.item)
end
end
end
#==============================================================================
# ** Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_weaponskills_scenebattle_main main
alias seph_weaponskills_scenebattle_sp5 start_phase5
alias seph_weaponskills_scenebattle_up5 update_phase5
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Original Main Method
seph_weaponskills_scenebattle_main
# Disposes AP Aquired Window
@ap_result_window.dispose unless @ap_result_window.nil?
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
#--------------------------------------------------------------------------
def start_phase5
# Orignal Start Phase 5 Method
seph_weaponskills_scenebattle_sp5
# If Learn By AP
if Equipment_Skills::Learn_By_AP
# Gets Enemy AP Values
enemy_ap_values = Equipment_Skills::Enemy_AP_Values
# Gets AP Total
ap = 0
for enemy in $data_troops[@troop_id].members
enemy = $data_enemies[enemy.enemy_id]
ap += (enemy_ap_values.has_key?(enemy.id) ?
enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP)
end
# Earns AP
for actor in $game_party.actors
actor.earn_ap(ap)
end
end
# If Show Results Window
if Equipment_Skills::Show_Victory_Skills
# Creates Aquired Ap Window
@ap_result_window = Window_BattleResult_AP.new(160 + @result_window.height / 2)
end
end
#--------------------------------------------------------------------------
# * Frame Update (after battle phase)
#--------------------------------------------------------------------------
def update_phase5
# Orignal Update Phase 5 Method
seph_weaponskills_scenebattle_up5
# Return
return unless Equipment_Skills::Show_Victory_Skills
# Show AP Result Window
unless @ap_result_window.nil?
@ap_result_window.visible = @result_window.visible
end
if @phase5_wait_count == 0
@phase5_wait_count -= 1
@status_window.refresh_skills_status
end
if @status_window.contents.height > 128
if Input.press?(Input::UP)
if @status_window.oy > 0
@status_window.oy -= 8
end
elsif Input.press?(Input::DOWN)
if @status_window.oy < @status_window.contents.height - 128
@status_window.oy += 8
end
end
end
end
end
#==============================================================================
# ** Scene_Shop
#==============================================================================
class Scene_Shop
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_weaponskills_sceneshop_main main
alias seph_weaponskills_sceneshop_update update
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Weapon Skill Status Window
@equipment_skill_status = Window_EquipmentSkills.new
@equipment_skill_status.x = 368
@equipment_skill_status.y = 288
# Stores Index
@b_index, @s_index = 0, 0
# Original Main Method
seph_weaponskills_sceneshop_main
# Disposes Skill Status Window
@equipment_skill_status.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# If buy window is active: call update_buy
if @buy_window.active || @sell_window.active
# Update Weapon Skills
update_seph_equipment_skills
else
if @equipment_skill_status.visible
@equipment_skill_status.visible = false
end
end
# Orignal Update Method
seph_weaponskills_sceneshop_update
end
#--------------------------------------------------------------------------
# * Frame Update : Equipment Skills
#--------------------------------------------------------------------------
def update_seph_equipment_skills
# If A Button is Pressed
if Input.trigger?(Input::A)
# Play Cursor SE
$game_system.se_play($data_system.cursor_se)
# If Window is off
unless @equipment_skill_status.visible
# Turn On Window
@equipment_skill_status.visible = true
# Refresh Equipment Skills
refresh_equipment_skills
else
# Turns Off Window
@equipment_skill_status.visible = false
end
end
# If Equipment Skills On
if @equipment_skill_status.visible
# If Right Window Active
if @buy_window.active
# If Index is different
unless @buy_window.index == @b_index
@b_index = @buy_window.index
# Refresh Equipment Skills
refresh_equipment_skills
end
elsif @sell_window.active
# If Index is different
unless @sell_window.index == @s_index
@s_index = @sell_window.index
# Refresh Equipment Skills
refresh_equipment_skills
end
end
end
end
#--------------------------------------------------------------------------
# * Refresh : Equipment Skills Window
#--------------------------------------------------------------------------
def refresh_equipment_skills
# Refresh Window
if @buy_window.active
@equipment_skill_status.refresh(-1, @buy_window.item)
elsif @sell_window.active
@equipment_skill_status.refresh(-1, @sell_window.item)
end
end
end
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end
SephirothSpawn;264362 said:Yep
...
...
...
Equipment Skills By SephirothSpawn
(Demo link not working, so try this:
Code:#============================================================================== # ** Equipment Skills #------------------------------------------------------------------------------ # SephirothSpawn # 2006-04-13 # Version 2.01 #------------------------------------------------------------------------------ # * Instructions # # ~ Skill Learning Types (Choose 1, or neither for cannot learn) # - Learn_By_Level = true (On) or false (Off) # - Learn_By_AP = true (On) or false (Off) # # ~ Disabling Moves Until Learned # - Disable_Until_Learned = true (On) or false (Off) # - Only Required For Learn By AP # # ~ Learn One Skill At A Time # - Learn_One_Skill = true (On) or false (Off) # # ~ Victory Window Options # - Show Victory Window # Show_Victory_Skills = true (On) or false (Off) # - Show Only Newly Mastered Skills # Show_Only_Mastered = true (On) or false (Off) # # ~ Enemy AP Values # - Default_Enemy_AP = Default Enemy AP # - Enemy_AP_Values = { enemy_id => ap given, ... } # # ~ Weapon Skills & Armor Skills # - Weapon_Skills or Armor_Skills # - = { equipment_id => { skill_id => Ap or Level Required, ... }, ... } #------------------------------------------------------------------------------ # ~ One Skill At a Time Feature Requires # Near Fantastica's Keyboard Input Module #============================================================================== #------------------------------------------------------------------------------ # * SDK Log Script #------------------------------------------------------------------------------ SDK.log('Equipment Skills', 'SephirothSpawn', 1, '2006-03-12') #------------------------------------------------------------------------------ # * Begin SDK Enable Test #------------------------------------------------------------------------------ if SDK.state('Equipment Skills') == true #============================================================================== # ** Equipment_Skills #============================================================================== module Equipment_Skills #-------------------------------------------------------------------------- # * Learning Types # (If Both are false, you cannot learn skills) #-------------------------------------------------------------------------- Learn_By_Level = false Learn_By_AP = true #-------------------------------------------------------------------------- # * Disable Until Learned #-------------------------------------------------------------------------- Disable_Until_Learned = false #-------------------------------------------------------------------------- # * Only Learn One Skill at a time # (Must assign the current skill each time) #-------------------------------------------------------------------------- Learn_One_Skill = false #-------------------------------------------------------------------------- # * Show Victory Skills Window after Battle # * Show Only Newly Learned Skills #-------------------------------------------------------------------------- Show_Victory_Skills = false Show_Only_Mastered = true #-------------------------------------------------------------------------- # * Default AP Given By Enemy #-------------------------------------------------------------------------- Default_Enemy_AP = 1 #-------------------------------------------------------------------------- # * Assigned AP for enemies # ~ enemy_id => ap #-------------------------------------------------------------------------- Enemy_AP_Values = { 1 => 3 } #-------------------------------------------------------------------------- # * Weapon Skills # ~ weapon_id => { skill_id, required_ap } #-------------------------------------------------------------------------- Weapon_Skills = { 1 => { 57 => 25, 58 => 50, 59 => 100, 60 => 200 }, 5 => { 61 => 25, 62 => 50, 63 => 100, 64 => 200 }, 25 => { 73 => 25, 74 => 50, 75 => 100, 76 => 200 }, 29 => { 77 => 25, 78 => 50, 79 => 100, 80 => 200 } } #-------------------------------------------------------------------------- # * Armor Skills # ~ armor_id => { skill_id, required_ap } #-------------------------------------------------------------------------- Armor_Skills = { 1 => { 1 => 30, 4 => 40 }, 5 => { 55 => 50 }, 9 => { 33 => 25, 35 => 60 }, 13 => { 56 => 60 }, 17 => { 56 => 50 }, 21 => { 37 => 25, 39 => 60 }, 25 => { 53 => 35 }, 26 => { 54 => 50 }, 29 => { 7 => 25, 8 => 50, 9 => 100 }, 30 => { 10 => 25, 11 => 50, 12 => 100 } } end #============================================================================== # ** Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :skill_ap_totals attr_accessor :weapon_skill_target attr_accessor :armor1_skill_target attr_accessor :armor2_skill_target attr_accessor :armor3_skill_target attr_accessor :armor4_skill_target #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_weaponskills_gameactor_setup setup alias seph_weaponskills_gameactor_equip equip alias seph_weaponskills_gameactor_skills skills alias seph_weaponskills_gameactor_scu skill_can_use? #-------------------------------------------------------------------------- # * Setup # actor_id : actor ID #-------------------------------------------------------------------------- def setup(actor_id) # Creates Equipment AP @skill_ap_totals = {} # Mastered Skills @mastered_skills = [] # Sets Equipment Skill Targets to Nil @weapon_skill_target = nil @armor1_skill_target = nil @armor2_skill_target = nil @armor3_skill_target = nil @armor4_skill_target = nil # Adds In Weapon Skills and AP Amounts weapon_skills = Equipment_Skills::Weapon_Skills armor_skills = Equipment_Skills::Armor_Skills equipment = weapon_skills.values + armor_skills.values for skill_data in equipment for skill_id in skill_data.keys unless @skill_ap_totals.has_key?(skill_id) @skill_ap_totals[skill_id] = 0 end end end # Original Initialization seph_weaponskills_gameactor_setup(actor_id) end #-------------------------------------------------------------------------- # * Change Equipment # equip_type : type of equipment # id : weapon or armor ID (If 0, remove equipment) #-------------------------------------------------------------------------- def equip(equip_type, id) # Original Equip Method seph_weaponskills_gameactor_equip(equip_type, id) # Clears Skill Targets case equip_type when 0 # Weapon if id == 0 or $game_party.weapon_number(id) > 0 @weapon_skill_target = nil end when 1 # Shield if id == 0 or $game_party.armor_number(id) > 0 @armor1_skill_target = nil end when 2 # Head if id == 0 or $game_party.armor_number(id) > 0 @armor2_skill_target = nil end when 3 # Body if id == 0 or $game_party.armor_number(id) > 0 @armor3_skill_target = nil end when 4 # Accessory if id == 0 or $game_party.armor_number(id) > 0 @armor4_skill_target = nil end end end #-------------------------------------------------------------------------- # * Determine if Skill can be Used # skill_id : skill ID #-------------------------------------------------------------------------- def skill_can_use?(skill_id) if self.skills.include?(skill_id) return super end # Original Skill Can use Method seph_weaponskills_gameactor_scu(skill_id) end #-------------------------------------------------------------------------- # * Skills #-------------------------------------------------------------------------- def skills # Gets Previous Skills s = seph_weaponskills_gameactor_skills.dup # Adds in Equipped Skills s << get_current_equipped_skills # Adds in Mastered Skills s << get_mastered_skills # Returns New Skills return s.flatten.sort.uniq.dup end #-------------------------------------------------------------------------- # * Get Current Equipped Skills #-------------------------------------------------------------------------- def get_current_equipped_skills # Returns Empty if Cannot Learn Until Mastered return [] if Equipment_Skills::Disable_Until_Learned # Creates Skills Array skills = [] # Gets Weapon & Armor Skills Contants weapon_skills = Equipment_Skills::Weapon_Skills armor_skills = Equipment_Skills::Armor_Skills # Checks For Equipped Weapon unless @weapon_id == 0 # If Weapon Has Skill if weapon_skills.has_key?(@weapon_id) # Adds Weapon Skills weapon_skills[@weapon_id].each do | skill_id, value | if Equipment_Skills::Learn_By_Level unless skills.include?(skill_id) skills << skill_id if @level >= value end else skills << skill_id unless skills.include?(skill_id) end end end end # Checks For Equipped Armor for i in 1..4 unless (eval "@armor#{i}_id") == 0 # If Armor Has Skill if armor_skills.has_key?(eval "@armor#{i}_id") armor_skills[(eval "@armor#{i}_id")].each do | skill_id, value | if Equipment_Skills::Learn_By_Level unless skills.include?(skill_id) skills << skill_id if @level >= value end else skills << skill_id unless skills.include?(skill_id) end end end end end # Sends Skills Array return skills end #-------------------------------------------------------------------------- # * Get Mastered Skills #-------------------------------------------------------------------------- def get_mastered_skills # Returns Empty if Cannot Learn Skills return [] unless Equipment_Skills::Learn_By_AP # Starts Skills Array skills = [] # Gets Weapon & Armor Skills Contants weapon_skills = Equipment_Skills::Weapon_Skills armor_skills = Equipment_Skills::Armor_Skills # Checks for Mastered AP for skill_data in weapon_skills.values + armor_skills.values # Checks Skill Data skill_data.each do | skill_id, master | # Unless 0 unless master == 0 # If AP Total is Reached if @skill_ap_totals[skill_id] == master # Adds Skills skills << skill_id unless skills.include?(skill_id) end end end end # Sends Skills Array return skills end #-------------------------------------------------------------------------- # * Earn AP #-------------------------------------------------------------------------- def earn_ap(amount = 0) # Exits if Cannot Learn Skills or Learns By Level return unless Equipment_Skills::Learn_By_AP # Gets Weapon & Armor Skills Contants weapon_skills = Equipment_Skills::Weapon_Skills armor_skills = Equipment_Skills::Armor_Skills # Earns Weapon AP unless @weapon_id == 0 # If Weapon Has Skills if weapon_skills.has_key?(@weapon_id) # If One at a time if Equipment_Skills::Learn_One_Skill # If Skill has been Set unless @weapon_skill_target.nil? # Gets Current And Max current = @skill_ap_totals[@weapon_skill_target] max = weapon_skills[@weapon_id][@weapon_skill_target] # Increases AP @skill_ap_totals[@weapon_skill_target] = [current + amount, max].min end # If Learn All else weapon_skills[@weapon_id].each do | skill_id, max | # Gets Current AP current = @skill_ap_totals[skill_id] # Increases AP @skill_ap_totals[skill_id] = [current + amount, max].min end end end end # Earns Armor AP for i in 1..4 # If Armor Equipped unless (eval "@armor#{i}_id") == 0 # If Armor Has Skills if armor_skills.has_key?(eval "@armor#{i}_id") # If One at a time if Equipment_Skills::Learn_One_Skill # If Skill has been Set unless (eval "@armor#{i}_skill_target.nil?") # Gets Current And Max current = @skill_ap_totals[(eval "@armor#{i}_skill_target")] max = armor_skills[(eval "@armor#{i}_id")][(eval "@armor#{i}_skill_target")] # Increases AP @skill_ap_totals[(eval "@armor#{i}_skill_target")] = [current + amount, max].min end # If Learn All else armor_skills[(eval "@armor#{i}_id")].each do | skill_id, max | # Gets Current AP current = @skill_ap_totals[skill_id] # Increases AP @skill_ap_totals[skill_id] = [current + amount, max].min end end end end end end #-------------------------------------------------------------------------- # * Get Newly Mastered Skills #-------------------------------------------------------------------------- def get_learning_skills # Unless Learn By AP return [] unless Equipment_Skills::Learn_By_AP skills = [] # Gets Weapon & Armor Skills Contants weapon_skills = Equipment_Skills::Weapon_Skills armor_skills = Equipment_Skills::Armor_Skills unless @weapon_id == 0 if weapon_skills.has_key?(@weapon_id) weapon_skills[@weapon_id].each do |skill_id, max| unless max == 0 skills << skill_id unless skills.include?(skill_id) end end end end for i in 1..4 unless (eval "@armor#{i}_id") == 0 if armor_skills.has_key?(eval "@armor#{i}_id") armor_skills[(eval "@armor#{i}_id")].each do |skill_id, max| unless max == 0 skills << skill_id unless skills.include?(skill_id) end end end end end return skills.uniq.sort end #-------------------------------------------------------------------------- # * Get Newly Mastered Skills #-------------------------------------------------------------------------- def get_newly_mastered_skills # Unless Learn By AP return [] unless Equipment_Skills::Learn_By_AP mastered = [] for skill_id in get_mastered_skills.dup.uniq.sort unless @mastered_skills.include?(skill_id) mastered << skill_id @mastered_skills << skill_id end end return mastered.sort end end #============================================================================== # ** Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # Draw Bar #-------------------------------------------------------------------------- def draw_bar(x, y, min, max, width = 152, height = 6, bar_color = Color.new(150, 0, 0), end_color = Color.new(255, 255, 60)) # Draw Background self.contents.fill_rect(x, y, width, height, Color.new(50, 50, 50, 255)) # Draws Bar for i in 1..( (min.to_f / max.to_f) * width - 3) r = bar_color.red * (width - i) / width + end_color.red * i / width g = bar_color.green * (width - i) / width + end_color.green * i / width b = bar_color.blue * (width - i) / width + end_color.blue * i / width a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width self.contents.fill_rect(x + 1 + i, y + 1, 1, height - 2, Color.new(r, g, b, a)) end end end #============================================================================== # ** Window_Skill #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_weaponskills_windskill_drawitem draw_item #-------------------------------------------------------------------------- # * Draw Item # index : item number #-------------------------------------------------------------------------- def draw_item(index) # If Learn By AP unless Equipment_Skills::Learn_By_AP # Original Draw Item Method seph_weaponskills_windskill_drawitem(index) return end # If Equipment Skill skill = @data[index] # Unless In Battle unless $game_temp.in_battle # If Skill is a Equipment Skill if @actor.skill_ap_totals.has_key?(skill.id) # Gets AP ap = @actor.skill_ap_totals[skill.id] # Alters Font Properties self.contents.font.size = 16 self.contents.font.bold = true # Original Draw Item Method seph_weaponskills_windskill_drawitem(index) # Location Coordinate x, y = 4 + index % 2 * (288 + 32), index / 2 * 32 # Default Max max = 0 # Searches for Max for weapon in Equipment_Skills::Weapon_Skills.keys Equipment_Skills::Weapon_Skills[weapon].each do | skill_id, m | max = m if skill.id == skill_id end end for armor in Equipment_Skills::Armor_Skills.keys Equipment_Skills::Armor_Skills[armor].each do | skill_id, m | max = m if skill.id == skill_id end end # Draws Status Bar draw_bar(x + 132, y + 10, ap, max, 96, 14) # Draws Progress text = ap == max ? 'Mastered' : "#{ap} / #{max}" temp_font = contents.font.dup self.contents.font.color = Color.new(0, 0, 0) self.contents.draw_text(x + 133, y + 1, 92, 32, text, 2) self.contents.font = temp_font self.contents.draw_text(x + 132, y, 92, 32, text, 2) end return end # Alters Font Properties self.contents.font.size = 22 self.contents.font.bold = false # Original Draw Item Method seph_weaponskills_windskill_drawitem(index) end end #============================================================================== # ** Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # * Refresh Skill Status #-------------------------------------------------------------------------- def refresh_skills_status # Unless Can Learn By AP unless Equipment_Skills::Learn_By_AP refresh return end # Actors Skills @actors_skills = [] # Alters Windows Contents if Equipment_Skills::Show_Only_Mastered for i in 0...$game_party.actors.size actor = $game_party.actors[i] @actors_skills << actor.get_newly_mastered_skills end else for i in 0...$game_party.actors.size actor = $game_party.actors[i] @actors_skills << actor.get_learning_skills end end max = 128 for i in 0..3 max = [max, @actors_skills[i].size * 32 + 32].max end self.contents = Bitmap.new(width - 32, max) # Draws Skill Stuff for i in 0...$game_party.actors.size # Gets Actor actor = $game_party.actors[i] actor_x = i * 160 + 4 # Sets Font self.contents.font.size = 22 self.contents.font.bold = false # If No Skills if @actors_skills[i].size == 0 draw_actor_name(actor, actor_x, 0) draw_actor_hp(actor, actor_x, 32, 120) draw_actor_sp(actor, actor_x, 64, 120) if @level_up_flags[i] self.contents.font.color = normal_color self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!") else draw_actor_state(actor, actor_x, 96) end next end # Draws Heading self.contents.draw_text(actor_x, 0, 120, 32, 'Skill Progress', 1) # Fixes Font self.contents.font.size = 14 self.contents.font.bold = true # Draws Skills for j in 0...@actors_skills[i].size y = j * 32 + 32 # Gets AP Amouts ap = actor.skill_ap_totals[@actors_skills[i][j]] max = get_max_ap(@actors_skills[i][j]) # Draws Progress draw_skill_progress(@actors_skills[i][j], ap, max, actor_x, y, 120) end end end #-------------------------------------------------------------------------- # * Get Max AP Points #-------------------------------------------------------------------------- def get_max_ap(skill_id) for weapon_id in Equipment_Skills::Weapon_Skills.keys Equipment_Skills::Weapon_Skills[weapon_id].each do |s_id, value| if s_id == skill_id return value end end end for armor_id in Equipment_Skills::Armor_Skills.keys Equipment_Skills::Armor_Skills[armor_id].each do |s_id, value| if s_id == skill_id return value end end end return 0 end #-------------------------------------------------------------------------- # * Draw Skill Progress #-------------------------------------------------------------------------- def draw_skill_progress(skill_id, min, max, x, y, width) # Gets Skill skill = $data_skills[skill_id] # Gets Icon bitmap = RPG::Cache.icon(skill.icon_name) # Draws Icon self.contents.blt(x + 4, y + 4, bitmap, Rect.new(0, 0, 24, 24)) # Draws Skill Name self.contents.draw_text(x + 32, y, width - 32, 16, skill.name) # Draws Status Bar draw_bar(x + width - 64, y + 16, min, max, 64, 14) # Draws Progress text = min == max ? 'Mastered' : "#{min} / #{max}" self.contents.font.color = Color.new(0, 0, 0) self.contents.draw_text(x + width - 63, y + 16, 60, 14, text, 2) self.contents.font.color = normal_color self.contents.draw_text(x + width - 64, y + 16, 60, 14, text, 2) end end #============================================================================== # ** Window_BattleResult_AP #============================================================================== class Window_BattleResult_AP < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(y) super(160, y, 320, $game_troop.enemies.size * 24 + 56) self.contents = Bitmap.new(width - 32, height - 32) self.back_opacity = 160 self.visible = false self.z = 9999 refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear # Gets Troop ID troop_id = $game_temp.battle_troop_id # Gets Enemy Ap Value enemy_ap_values = Equipment_Skills::Enemy_AP_Values # Gets AP Earned ap = 0 for enemy in $data_troops[troop_id].members enemy = $data_enemies[enemy.enemy_id] ap += (enemy_ap_values.has_key?(enemy.id) ? enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP) end # Draws Heading self.contents.font.color = system_color self.contents.draw_text(16, 0, contents.width - 32, 24, 'AP Aquired:') self.contents.draw_text(16, 0, contents.width - 32, 24, ap.to_s, 2) # Draws Enemies Names, and AP Given self.contents.font.color = normal_color enemies = $data_troops[troop_id].members for i in 0...enemies.size enemy = $data_enemies[enemies[i].enemy_id] self.contents.draw_text(4, i * 24 + 24, 280, 24, enemy.name) ap = enemy_ap_values.has_key?(enemy.id) ? enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP self.contents.draw_text(4, i * 24 + 24, contents.width - 8, 24, ap.to_s, 2) end end end #============================================================================== # ** Window_EquipmentSkills #============================================================================== class Window_EquipmentSkills < Window_Base #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :item_max attr_reader :skills attr_accessor :target_index #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 64, 272, 192) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false self.z = 9999 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh(actor_id, equipment) # Gets Actor @actor = $game_party.actors[actor_id] # Sets Up Skills & Target index @skills = [] @target_index = nil @item_max = 0 # Clears & Sets Up Contents self.contents.clear self.contents.font.color = system_color self.contents.font.size = 22 self.contents.font.bold = false # If No Equipment if equipment.nil? self.contents.draw_text(0, 0, 240, 32, 'Nothing Equipped', 1) return end # If Equipment is a item if equipment.is_a?(RPG::Item) self.contents.draw_text(0, 0, 240, 32, 'No Skills for Items', 1) return end # Draws Equipment bitmap = RPG::Cache.icon(equipment.icon_name) self.contents.blt(4, 4, bitmap, Rect.new(0, 0, 24, 24)) self.contents.draw_text(32, 0, 208, 32, equipment.name, 1) # Gets Equipment Skills if equipment.is_a?(RPG::Weapon) equipment_skills = Equipment_Skills::Weapon_Skills.has_key?(equipment.id) ? Equipment_Skills::Weapon_Skills[equipment.id] : [] elsif equipment.is_a?(RPG::Armor) equipment_skills = Equipment_Skills::Armor_Skills.has_key?(equipment.id) ? Equipment_Skills::Armor_Skills[equipment.id] : [] end # Draws Skills self.contents.font.color = normal_color self.contents.font.size = 14 self.contents.font.bold = true if equipment_skills.size == 0 self.contents.draw_text(0, 32, 240, 32, 'None', 1) return else equipment_skills.each {| skill_id, max | @skills << [skill_id, max]} @skills.sort! {|a, b| a[0] <=> b[0]} for i in 0...@skills.size # Gets AP Total actor = $game_party.actors[actor_id] skill_id = @skills[i][0] ap = actor_id == - 1 ? 0 :actor.skill_ap_totals[skill_id] max = @skills[i][1] draw_skill_progress(skill_id, ap, max, 0, 40 + i * 24, 236) end end @item_max = @skills.size # If One Target if Equipment_Skills::Learn_One_Skill case equipment when RPG::Weapon skill_target = @actor.weapon_skill_target when RPG::Armor case equipment.kind when 0 skill_target = @actor.armor1_skill_target when 1 skill_target = @actor.armor2_skill_target when 2 skill_target = @actor.armor3_skill_target when 3 skill_target = @actor.armor4_skill_target end end for i in 0...@skills.size if @skills[i][0] == skill_target @target_index = i + 1 end end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super if Equipment_Skills::Learn_One_Skill update_cursor_rect end end #-------------------------------------------------------------------------- # * Cursor Rectangle Update #-------------------------------------------------------------------------- def update_cursor_rect if @target_index.nil? self.cursor_rect.empty else self.cursor_rect.set(0, 40 + (@target_index - 1) * 24, 240, 24) end end #-------------------------------------------------------------------------- # * Draw Skill Progress #-------------------------------------------------------------------------- def draw_skill_progress(skill_id, min, max, x, y, width) # Gets Skill skill = $data_skills[skill_id] # Gets Icon bitmap = RPG::Cache.icon(skill.icon_name) # Draws Icon self.contents.blt(x + 4, y, bitmap, Rect.new(0, 0, 24, 24)) # Draws Skill Name self.contents.draw_text(x + 32, y, 240 - x - 32, 24, skill.name) # Draws Status Bar draw_bar(x + width - 96, y + 2, min, max, 96, 20) # Draws Progress text = min == max ? 'Mastered' : "#{min} / #{max}" self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(x + width - 99, y + 1, 96, 24, text, 2) self.contents.font.color = normal_color self.contents.draw_text(x + width - 100, y, 96, 24, text, 2) end end #============================================================================== # ** Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_weaponskills_sceneequip_main main alias seph_weaponskills_sceneequip_update update #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Equipment Skill Status Window @equipment_skill_status = Window_EquipmentSkills.new # Stores Indexes @r_index, @i_index = @equip_index, 0 # Original Main Method seph_weaponskills_sceneequip_main # Disposes Skill Status Window @equipment_skill_status.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update Keyboard Input Module Keyboard.update # Updates Equipment Skills Window @equipment_skill_status.update # If A Button is Pressed if Input.trigger?(Input::A) # Play Cursor SE $game_system.se_play($data_system.cursor_se) # If Window is off unless @equipment_skill_status.visible # Turn On Window @equipment_skill_status.visible = true # Refresh Window refresh_equipment_skills else # Turns Off Window @equipment_skill_status.visible = false end end # If Window On if @equipment_skill_status.visible # If Right Window Active if @right_window.active # If Index is different unless @right_window.index == @r_index @r_index = @right_window.index # Refresh Weappn Skills refresh_equipment_skills end elsif @item_window.active # If Index is different unless @item_window.index == @i_index @i_index = @item_window.index # Refresh Equipment Skills refresh_equipment_skills end end end # Original Update Method seph_weaponskills_sceneequip_update # One Skill Assignment if Equipment_Skills::Learn_One_Skill if @equipment_skill_status.visible max = @equipment_skill_status.item_max return if max == 0 @help_window.set_text("Press 1 - #{max} to Assign Skill Target") # If Key is Pressed for i in 1..max if Keyboard.trigger?(Keyboard::Numberkeys[i]) @equipment_skill_status.target_index = i skill_id = @equipment_skill_status.skills[i - 1][0] case @right_window.item when RPG::Weapon @actor.weapon_skill_target = skill_id when RPG::Armor case @right_window.item.kind when 0 @actor.armor1_skill_target = skill_id when 1 @actor.armor2_skill_target = skill_id when 2 @actor.armor3_skill_target = skill_id when 3 @actor.armor4_skill_target = skill_id end end end end end end end #-------------------------------------------------------------------------- # * Refresh : Weappn Skills Window #-------------------------------------------------------------------------- def refresh_equipment_skills # Refresh Window if @right_window.active @equipment_skill_status.refresh(@actor_index, @right_window.item) elsif @item_window.active @equipment_skill_status.refresh(@actor_index, @item_window.item) end end end #============================================================================== # ** Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_weaponskills_scenebattle_main main alias seph_weaponskills_scenebattle_sp5 start_phase5 alias seph_weaponskills_scenebattle_up5 update_phase5 #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Original Main Method seph_weaponskills_scenebattle_main # Disposes AP Aquired Window @ap_result_window.dispose unless @ap_result_window.nil? end #-------------------------------------------------------------------------- # * Start After Battle Phase #-------------------------------------------------------------------------- def start_phase5 # Orignal Start Phase 5 Method seph_weaponskills_scenebattle_sp5 # If Learn By AP if Equipment_Skills::Learn_By_AP # Gets Enemy AP Values enemy_ap_values = Equipment_Skills::Enemy_AP_Values # Gets AP Total ap = 0 for enemy in $data_troops[@troop_id].members enemy = $data_enemies[enemy.enemy_id] ap += (enemy_ap_values.has_key?(enemy.id) ? enemy_ap_values[enemy.id] : Equipment_Skills::Default_Enemy_AP) end # Earns AP for actor in $game_party.actors actor.earn_ap(ap) end end # If Show Results Window if Equipment_Skills::Show_Victory_Skills # Creates Aquired Ap Window @ap_result_window = Window_BattleResult_AP.new(160 + @result_window.height / 2) end end #-------------------------------------------------------------------------- # * Frame Update (after battle phase) #-------------------------------------------------------------------------- def update_phase5 # Orignal Update Phase 5 Method seph_weaponskills_scenebattle_up5 # Return return unless Equipment_Skills::Show_Victory_Skills # Show AP Result Window unless @ap_result_window.nil? @ap_result_window.visible = @result_window.visible end if @phase5_wait_count == 0 @phase5_wait_count -= 1 @status_window.refresh_skills_status end if @status_window.contents.height > 128 if Input.press?(Input::UP) if @status_window.oy > 0 @status_window.oy -= 8 end elsif Input.press?(Input::DOWN) if @status_window.oy < @status_window.contents.height - 128 @status_window.oy += 8 end end end end end #============================================================================== # ** Scene_Shop #============================================================================== class Scene_Shop #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_weaponskills_sceneshop_main main alias seph_weaponskills_sceneshop_update update #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Weapon Skill Status Window @equipment_skill_status = Window_EquipmentSkills.new @equipment_skill_status.x = 368 @equipment_skill_status.y = 288 # Stores Index @b_index, @s_index = 0, 0 # Original Main Method seph_weaponskills_sceneshop_main # Disposes Skill Status Window @equipment_skill_status.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # If buy window is active: call update_buy if @buy_window.active || @sell_window.active # Update Weapon Skills update_seph_equipment_skills else if @equipment_skill_status.visible @equipment_skill_status.visible = false end end # Orignal Update Method seph_weaponskills_sceneshop_update end #-------------------------------------------------------------------------- # * Frame Update : Equipment Skills #-------------------------------------------------------------------------- def update_seph_equipment_skills # If A Button is Pressed if Input.trigger?(Input::A) # Play Cursor SE $game_system.se_play($data_system.cursor_se) # If Window is off unless @equipment_skill_status.visible # Turn On Window @equipment_skill_status.visible = true # Refresh Equipment Skills refresh_equipment_skills else # Turns Off Window @equipment_skill_status.visible = false end end # If Equipment Skills On if @equipment_skill_status.visible # If Right Window Active if @buy_window.active # If Index is different unless @buy_window.index == @b_index @b_index = @buy_window.index # Refresh Equipment Skills refresh_equipment_skills end elsif @sell_window.active # If Index is different unless @sell_window.index == @s_index @s_index = @sell_window.index # Refresh Equipment Skills refresh_equipment_skills end end end end #-------------------------------------------------------------------------- # * Refresh : Equipment Skills Window #-------------------------------------------------------------------------- def refresh_equipment_skills # Refresh Window if @buy_window.active @equipment_skill_status.refresh(-1, @buy_window.item) elsif @sell_window.active @equipment_skill_status.refresh(-1, @sell_window.item) end end end #-------------------------------------------------------------------------- # * End SDK Enable Test #-------------------------------------------------------------------------- end
# ~ Skill Learning Types (Choose 1, or neither for cannot learn)
# - Learn_By_Level = true (On) or false (Off)
# - Learn_By_AP = true (On) or false (Off)
# ~ Disabling Moves Until Learned
# - Disable_Until_Learned = true (On) or false (Off)
# - Only Required For Learn By AP
# ~ Learn One Skill At A Time
# - Learn_One_Skill = true (On) or false (Off)
# ~ Victory Window Options
# - Show Victory Window
# Show_Victory_Skills = true (On) or false (Off)
# - Show Only Newly Mastered Skills
# Show_Only_Mastered = true (On) or false (Off)
undefined method 'size' for nil:NilClass on line: max = [max, @actors_skills[i].size * 32 + 32].max
# ~ Enemy AP Values
# - Default_Enemy_AP = Default Enemy AP
# - Enemy_AP_Values = { enemy_id => ap given, ... }
# ~ Weapon Skills & Armor Skills
# - Weapon_Skills or Armor_Skills
# - = { equipment_id => { skill_id => Ap or Level Required, ... }, ... }