Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

'Skill Requiring Weap/arm/helm/shield/access' script

I'm looking for a script that prohibits the character from using certain skills unless a certain item is equipped.

(Ex. Heal requires healing charm to be equipped. Flame Slash requires fire sword to be equipped, etc.)

Umm, don't think I can be any more descriptive than that. :D Help would be greatly appreciated!
 
Funny, I thought you (Sephiroth Spawn) already made one. Both you and Blizzard made your own 'Equipment Skills' scripts. Skills 'show up' when certain gear is equipped, and 'forgotten' when removed.

Click on the [Forum Script Listings] button to review what's posted in the 'Scripts Forum'. For the two mentioned, go to the 'Custom Battle Add-On' section.
 
Yes, the equipment skills could work, but I was thinking more of skill requirements. Good thing I already did it, but forgot I did it. (I can't even remember the 60+ released script I have now. lol)

Code:
#==============================================================================
# ** 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

You can either use the Equipment Skills system, which will give you skills when the armor is equipped, or this, where you can learn the skills, but not use them also the conditions are met.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top