#==============================================================================
# ** Skill Requirements
#------------------------------------------------------------------------------
# SephirothSpawn
# 2006-07-07
# Version 1
#------------------------------------------------------------------------------
# * Customization
#
# ~ Default Requirements
# - Default_ClassReqs = { skill_id => class_id, ... }
# - Default_WeaponReqs = { skill_id => weapon_id, ... }
# - Default_ArmorReqs = { skill_id => [armor_id, ...], ... }
# - Default_StatReqs = { skill_id => {stat_name => value, ... }, ... }
# - Default_StateReqs = { skill_id => [state_id, ...], ... }
#
# ~ Actor Specific Requirements
# - Class_Reqs = { actor_id => { skill_id => class_id, ... }
# - Weapon_Reqs = { actor_id => { skill_id => weapon_id, ... }
# - Armor_Reqs = { actor_id => { skill_id => [armor_id, ...], ... }
# - Stat_Reqs = { actor_id => { skill_id => {stat_name => value, . }, . }
# - State_Reqs = { actor_id => { skill_id => [state_id, ...], ... }
#------------------------------------------------------------------------------
# * Syntax Test
#
# ~ Requirements Check
# - <actor>.seph_skillreqs_classcheck(skill_id)
# - <actor>.seph_skillreqs_weaponcheck(skill_id)
# - <actor>.seph_skillreqs_armorcheck(skill_id)
# - <actor>.seph_skillreqs_statcheck(skill_id)
# - <actor>.seph_skillreqs_statecheck(skill_id)
#==============================================================================
#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Skill Requirements', 'SephirothSpawn', 1, '2006-07-07')
#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Skill Requirements') == true
#==============================================================================
# ** Skill_Requirements
#==============================================================================
module Skill_Requirements
#--------------------------------------------------------------------------
# * Default Requirements
# ~ All Of the Following Are Default Requirements, unless redifined or
# canceled by actor specific Requirements
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# * Class Requirements
# ~ skill_id => class_id, ...
#--------------------------------------------------------------------------
Default_ClassReqs = {
}
#--------------------------------------------------------------------------
# * Weapon Requirements
# ~ skill_id => weapon_id, ...
#--------------------------------------------------------------------------
Default_WeaponReqs = {
}
#--------------------------------------------------------------------------
# * Armor Requirements
# ~ skill_id => [armor_id, ...], ...
#--------------------------------------------------------------------------
Default_ArmorReqs = {
}
#--------------------------------------------------------------------------
# * Stat Requirements
# ~ skill_id => {stat_name => value, ... }, ...
#
# ~ stat_names : 'hp', 'sp', 'str', 'dex', 'agi', 'int', 'hit', 'eva'
#--------------------------------------------------------------------------
Default_StatReqs = {
}
#--------------------------------------------------------------------------
# * State Requirements
# ~ skill_id => [state_id, ...], ...
#--------------------------------------------------------------------------
Default_StateReqs = {
}
#--------------------------------------------------------------------------
# * Actor Specific Requirements
# ~ All Of the Following Are Actor Defined Requirements. They are specific
# to the actor based off the actor id. You may also clear the defaults
# * Default Override:
# ~ actor_id => nil
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# * Class Requirements
# ~ actor_id => { skill_id => class_id, ... }, ...
#--------------------------------------------------------------------------
Class_Reqs = {
}
#--------------------------------------------------------------------------
# * Weapon Requirements
# ~ actor_id => { skill_id => weapon_id, ... }, ...
#--------------------------------------------------------------------------
Weapon_Reqs = {
}
#--------------------------------------------------------------------------
# * Armor Requirements
# ~ actor_id => { skill_id => [armor_id, ...], ... }, ...
#--------------------------------------------------------------------------
Armor_Reqs = {
}
#--------------------------------------------------------------------------
# * Stat Requirements
# ~ actor_id => { skill_id => {stat_name => value, ... }, ... }, ...
#
# ~ stat_names : 'hp', 'sp', 'str', 'dex', 'agi', 'int', 'hit', 'eva'
#--------------------------------------------------------------------------
Stat_Reqs = {
}
#--------------------------------------------------------------------------
# * State Requirements
# ~ actor_id => { skill_id => [state_id, ...], ... }, ...
#--------------------------------------------------------------------------
State_Reqs = {
}
end
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_skillreqs_gmactor_scu? skill_can_use?
#--------------------------------------------------------------------------
# * Determine if Skill can be Used
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
# Check Class Req
return false unless seph_skillreqs_classcheck(skill_id)
# Check Weapon Req
return false unless seph_skillreqs_weaponcheck(skill_id)
# Check Armor Req
return false unless seph_skillreqs_armorcheck(skill_id)
# Check Stat Req
return false unless seph_skillreqs_statcheck(skill_id)
# Check State Req
return false unless seph_skillreqs_statecheck(skill_id)
# Orignal Skill Can Use Test
seph_skillreqs_gmactor_scu?(skill_id)
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used : Class Check
#--------------------------------------------------------------------------
def seph_skillreqs_classcheck(skill_id)
# Gets Requirements
reqs = Skill_Requirements
# If Actor Specific
if reqs::Class_Reqs.has_key?(@actor_id)
# If Not Nil
unless reqs::Class_Reqs[@actor_id][skill_id].nil?
# If Class Requirement Not Met
unless @class_id == reqs::Class_Reqs[@actor_id][skill_id]
return false
end
end
# Checks For Default
elsif reqs::Default_ClassReqs.has_key?(skill_id)
# If Class Requirement Not Met
unless @class_id == reqs::Default_ClassReqs[skill_id]
return false
end
end
# Return Can Use
return true
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used : Weapon Check
#--------------------------------------------------------------------------
def seph_skillreqs_weaponcheck(skill_id)
# Gets Requirements
reqs = Skill_Requirements
# If Actor Specific
if reqs::Weapon_Reqs.has_key?(@actor_id)
# If Not Nil
unless reqs::Weapon_Reqs[@actor_id][skill_id].nil?
# If Weapon Requirement Not Met
unless @weapon_id == reqs::Weapon_Reqs[@actor_id][skill_id]
return false
end
end
# Checks For Default
elsif reqs::Default_WeaponReqs.has_key?(skill_id)
# If Weapon Requirement Not Met
unless @weapon_id == reqs::Default_WeaponReqs[skill_id]
return false
end
end
# Return Can Use
return true
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used : Armor Check
#--------------------------------------------------------------------------
def seph_skillreqs_armorcheck(skill_id)
# Gets Requirements
reqs = Skill_Requirements
# Collects Armors
armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
# If Actor Specific
if reqs::Armor_Reqs.has_key?(@actor_id)
# If Not Nil
unless reqs::Armor_Reqs[@actor_id][skill_id].nil?
# Checks All Armor Reqs
reqs::Armor_Reqs[@actor_id][skill_id].each do |armor_id|
return false unless armors.include?(armor_id)
end
end
# Checks For Default
elsif reqs::Default_ArmorReqs.has_key?(skill_id)
# Checks All Armor Reqs
reqs::Default_ArmorReqs[skill_id].each do |armor_id|
return false unless armors.include?(armor_id)
end
end
# Return Can Use
return true
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used : Stat Check
#--------------------------------------------------------------------------
def seph_skillreqs_statcheck(skill_id)
# Gets Requirements
reqs = Skill_Requirements
# If Actor Specific
if reqs::Stat_Reqs.has_key?(@actor_id)
# If Not Nil
unless reqs::Stat_Reqs[@actor_id][skill_id].nil?
# Pass Through Each Stat Req
reqs::Stat_Reqs[@actor_id][skill_id].each do |stat_name, n|
# Branch Point By Stat Name
case stat_name.uppercase
when 'HP' ; return false if self.hp < n
when 'SP' ; return false if self.sp < n
when 'STR' ; return false if self.str < n
when 'DEX' ; return false if self.dex < n
when 'AGI' ; return false if self.agi < n
when 'INT' ; return false if self.int < n
when 'HIT' ; return false if self.hit < n
when 'EVA' ; return false if self.eva < n
end
end
end
# Checks For Default
elsif reqs::Default_StatReqs.has_key?(skill_id)
# Pass Through Each Stat Req
reqs::Default_StatReqs[skill_id].each do |stat_name, n|
# Branch Point By Stat Name
case stat_name.uppercase
when 'HP' ; return false if self.hp < n
when 'SP' ; return false if self.sp < n
when 'STR' ; return false if self.str < n
when 'DEX' ; return false if self.dex < n
when 'AGI' ; return false if self.agi < n
when 'INT' ; return false if self.int < n
when 'HIT' ; return false if self.hit < n
when 'EVA' ; return false if self.eva < n
end
end
end
# Return Can Use
return true
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used : State Check
#--------------------------------------------------------------------------
def seph_skillreqs_statecheck(skill_id)
# Gets Requirements
reqs = Skill_Requirements
# If Actor Specific
if reqs::State_Reqs.has_key?(@actor_id)
# If Not Nil
unless reqs::State_Reqs[@actor_id][skill_id].nil?
# Check all State Reqs
for state_id in reqs::State_Reqs[@actor_id][skill_id]
return false unless self.states.include?(state_id)
end
end
# Checks For Default
elsif reqs::Default_StateReqs.has_key?(skill_id)
# Check all State Reqs
for state_id in reqs::Default_StateReqs[skill_id]
return false unless self.states.include?(state_id)
end
end
# Return Can Use
return true
end
end
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end