Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- #** Quasi Skill Equip v 1.1
- #==============================================================================
- # Allows players to equip skills
- # - Player needs to know the skills to be able to equip them!
- # When skills are equipped, the skills skill types aren't!
- #==============================================================================
- # Instructions:
- # Very simple to use, mostly plug and play.
- #
- # If used with Quasi Skill Type Equip, place this BELOW it.
- #------------------------------------------------------------------------------
- # * Note Tag
- #------------------------------------------------------------------------------
- # <skill_slots: #>
- # Can be placed in actors note box, or weapons/armor. Default is 0
- #
- # If an actor has 2 skill slots, and equips a weapon with 2 more slots. You
- # will be able to equip 4 skills. If you unequip the weapon, the last
- # 2 skills equipped, will be unequipped.
- #------------------------------------------------------------------------------
- # * Log
- #------------------------------------------------------------------------------
- # v 1.1 9/4/14
- # - Fixed a bug that caused game to freeze
- #-----------------------------------------------------------------------------
- module Quasi
- module SkillEquip
- NAMESKILL = "Skill Equip"
- # What to show in the help window.
- HELP = "Skills Equiped" # shows "Skills Equiped: total/max"
- end
- end
- #==============================================================================#
- # By Quasi (http://quasixi.wordpress.com/)
- # - 9/1/14
- #==============================================================================#
- # ** Stop! Do not edit anything below, unless you know what you **
- # ** are doing! **
- #==============================================================================#
- $imported = {} if $imported.nil?
- $imported["Quasi_SkillEquip"] = 1.0
- if $imported["Quasi_PassiveEquip"]
- msgbox "[Quasi Passive Equip] needs update!" if $imported["Quasi_PassiveEquip"] < 2
- end
- if $imported["Quasi_STypeEquip"]
- msgbox "[Quasi Skill TypeEquip] needs update!" if $imported["Quasi_STypeEquip"] < 2
- end
- #==============================================================================
- # ** Game_BattlerBase
- #------------------------------------------------------------------------------
- # This base class handles battlers. It mainly contains methods for calculating
- # parameters. It is used as a super class of the Game_Battler class.
- #==============================================================================
- class Game_BattlerBase
- alias qseinit initialize
- attr_accessor :equipped_skills
- #--------------------------------------------------------------------------
- # * Object Initialization
- # ** ALIAS **
- #--------------------------------------------------------------------------
- def initialize
- qseinit
- @equipped_skills = []
- end
- end
- #==============================================================================
- # ** Game_Actor
- #------------------------------------------------------------------------------
- # This class handles actors. It is used within the Game_Actors class
- # ($game_actors) and is also referenced from the Game_Party class ($game_party).
- #==============================================================================
- class Game_Actor < Game_Battler
- alias qsece change_equip
- #--------------------------------------------------------------------------
- # * Change Equipment
- # slot_id: Equipment slot ID
- # item: Weapon/armor (remove equipment if nil)
- # ** ALIAS **
- #--------------------------------------------------------------------------
- def change_equip(slot_id, item)
- qsece(slot_id, item)
- check_skill_slots
- end
- def skill_slots
- sslots = actor.skill_slots
- @equips.each {|e| next if e.object.nil? ; sslots += e.object.skill_slots}
- sslots
- end
- def check_skill_slots
- if equipped_skills.size > skill_slots
- equipped_skills.slice!(skill_slots..equipped_skills.size)
- end
- end
- end
- #==============================================================================
- # ** Scene_Skill
- #------------------------------------------------------------------------------
- # This class performs skill screen processing. Skills are handled as items for
- # the sake of process sharing.
- #==============================================================================
- class Scene_Skill < Scene_ItemBase
- alias qseccw create_command_window
- alias qseciw create_item_window
- #--------------------------------------------------------------------------
- # * Update Method
- # ~ Don't really like this, but needed to fix visibility issue.
- #--------------------------------------------------------------------------
- def update
- super
- if $imported["Quasi_STypeEquip"] && $imported["Quasi_PassiveEquip"]
- update_with_both
- elsif $imported["Quasi_PassiveEquip"]
- update_with_passive
- elsif $imported["Quasi_STypeEquip"]
- update_with_stype
- else
- update_solo
- end
- end
- def update_solo
- case @command_window.command_name(@command_window.index)
- when Quasi::SkillEquip::NAMESKILL
- @skill_equip_window.show if !@skill_equip_window.visible
- @item_window.hide if @item_window.visible
- else
- @item_window.show if !@item_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- end
- end
- def update_with_passive
- case @command_window.command_name(@command_window.index)
- when Quasi::SkillEquip::NAMESKILL
- @skill_equip_window.show if !@skill_equip_window.visible
- @item_window.hide if @item_window.visible
- @passive_window.hide if @passive_window.visible
- when Quasi::PassiveEquip::NAMEPASSIVE
- @passive_window.show if !@passive_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- @item_window.hide if @item_window.visible
- else
- @item_window.show if !@item_window.visible
- @passive_window.hide if @passive_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- end
- end
- def update_with_stype
- case @command_window.command_name(@command_window.index)
- when Quasi::SkillEquip::NAMESKILL
- @skill_equip_window.show if !@skill_equip_window.visible
- @item_window.hide if @item_window.visible
- @stype_window.hide if @stype_window.visible
- when Quasi::STypeEquip::NAME
- @stype_window.show if !@stype_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- @item_window.hide if @item_window.visible
- else
- @item_window.show if !@item_window.visible
- @stype_window.hide if @stype_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- end
- end
- def update_with_both
- case @command_window.command_name(@command_window.index)
- when Quasi::SkillEquip::NAMESKILL
- @skill_equip_window.show if !@skill_equip_window.visible
- @item_window.hide if @item_window.visible
- @stype_window.hide if @stype_window.visible
- @passive_window.hide if @passive_window.visible
- when Quasi::STypeEquip::NAME
- @stype_window.show if !@stype_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- @item_window.hide if @item_window.visible
- @passive_window.hide if @passive_window.visible
- when Quasi::PassiveEquip::NAMEPASSIVE
- @passive_window.show if !@passive_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- @stype_window.hide if @stype_window.visible
- @item_window.hide if @item_window.visible
- else
- @item_window.show if !@item_window.visible
- @passive_window.hide if @passive_window.visible
- @stype_window.hide if @stype_window.visible
- @skill_equip_window.hide if @skill_equip_window.visible
- end
- return
- end
- #--------------------------------------------------------------------------
- # * Create Command Window
- # ** ALIAS **
- #--------------------------------------------------------------------------
- def create_command_window
- qseccw
- @command_window.set_handler(:sequip, method(:command_sequip))
- end
- #--------------------------------------------------------------------------
- # * Create Skill type Window
- # ** ALIAS **
- #--------------------------------------------------------------------------
- def create_item_window
- qseciw
- create_skill_equip_window
- end
- #--------------------------------------------------------------------------
- # * Create Skill Equip Window
- # ** NEW **
- #--------------------------------------------------------------------------
- def create_skill_equip_window
- wx = @item_window.x
- wy = @item_window.y
- ww = @item_window.width
- wh = @item_window.height
- @skill_equip_window = Window_SkillEquip.new(wx, wy, ww, wh)
- @skill_equip_window.actor = @actor
- @skill_equip_window.viewport = @viewport
- @skill_equip_window.help_window = @help_window
- @skill_equip_window.set_handler(:ok, method(:on_sequip_ok))
- @skill_equip_window.set_handler(:cancel, method(:on_sequip_cancel))
- end
- #--------------------------------------------------------------------------
- # * Passive Command
- # ** NEW **
- #--------------------------------------------------------------------------
- def command_sequip
- @skill_equip_window.activate
- @skill_equip_window.select(0)
- end
- #--------------------------------------------------------------------------
- # * Passive [OK]
- # ** NEW **
- #--------------------------------------------------------------------------
- def on_sequip_ok
- if @skill_equip_window.item
- if @actor.equipped_skills.include?(@skill_equip_window.item.id)
- Sound.play_ok
- @actor.equipped_skills.delete(@skill_equip_window.item.id)
- else
- if @actor.equipped_skills.size >= @actor.skill_slots
- Sound.play_buzzer
- else
- Sound.play_ok
- @actor.equipped_skills.push(@skill_equip_window.item.id)
- end
- end
- end
- @status_window.refresh
- @skill_equip_window.refresh
- @skill_equip_window.activate
- end
- #--------------------------------------------------------------------------
- # * Passive [Cancel]
- # ** NEW **
- #--------------------------------------------------------------------------
- def on_sequip_cancel
- @skill_equip_window.unselect
- @command_window.activate
- end
- end
- #==============================================================================
- # ** Window_SkillCommand
- #------------------------------------------------------------------------------
- # This window is for selecting commands (special attacks, magic, etc.) on the
- # skill screen.
- #==============================================================================
- class Window_SkillCommand < Window_Command
- alias qesmcl make_command_list
- #--------------------------------------------------------------------------
- # * Create Command List
- # ** REWRITE **
- #--------------------------------------------------------------------------
- def make_command_list
- add_command(Quasi::SkillEquip::NAMESKILL, :sequip, true)
- qesmcl
- end
- end
- #==============================================================================
- # ** Window_SkillEquip (NEW)
- #------------------------------------------------------------------------------
- # This window is for displaying a list of skills the player can equip.
- #==============================================================================
- class Window_SkillEquip < Window_Selectable
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height)
- super
- @actor = nil
- @data = []
- end
- #--------------------------------------------------------------------------
- # * Set Actor
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- self.oy = 0
- end
- #--------------------------------------------------------------------------
- # * Get Digit Count
- #--------------------------------------------------------------------------
- def col_max
- return 2
- end
- #--------------------------------------------------------------------------
- # * Get Number of Items
- #--------------------------------------------------------------------------
- def item_max
- @data ? @data.size : 1
- end
- #--------------------------------------------------------------------------
- # * Get Skill
- #--------------------------------------------------------------------------
- def item
- @data && index >= 0 ? @data[index] : nil
- end
- #--------------------------------------------------------------------------
- # * Processing When OK Button Is Pressed
- #--------------------------------------------------------------------------
- def process_ok
- Input.update
- deactivate
- call_ok_handler
- end
- #--------------------------------------------------------------------------
- # * Restore Previous Selection Position
- #--------------------------------------------------------------------------
- def select_last
- end
- #--------------------------------------------------------------------------
- # * Create Skill List
- #--------------------------------------------------------------------------
- def make_item_list
- return if !@actor
- @data = []
- @actor.skills.each do |skill|
- if $imported["Quasi_Passive"] && $imported["Quasi_Fixed_Passive"]
- next if skill.passive || skill.quasi_passive
- elsif $imported["Quasi_Passive"]
- next if skill.passive
- elsif $imported["Quasi_Fixed_Passive"]
- next if skill.quasi_passive
- end
- @data.push(skill)
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Item
- #--------------------------------------------------------------------------
- def draw_item(index)
- skill = @data[index]
- if skill
- rect = item_rect(index)
- rect.width -= 4
- enable = @actor.equipped_skills.include?(skill.id)
- draw_item_name(skill, rect.x, rect.y, enable)
- end
- end
- #--------------------------------------------------------------------------
- # * Update Help Text
- #--------------------------------------------------------------------------
- def update_help
- text = item ? item.description : ""
- pl = @actor.equipped_skills.size
- pt = @actor.skill_slots
- text += "\n#{Quasi::SkillEquip::HELP}: #{pl}/#{pt}"
- @help_window.set_text(text)
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- make_item_list
- create_contents
- draw_all_items
- end
- end
- #==============================================================================
- # ** Window_SkillList
- #------------------------------------------------------------------------------
- # This window is for displaying a list of available skills on the skill window.
- #==============================================================================
- class Window_SkillList < Window_Selectable
- #--------------------------------------------------------------------------
- # * Include in Skill List?
- # ** OVERWRITE **
- # Hides skills unless they are equipped
- #--------------------------------------------------------------------------
- def include?(item)
- item && item.stype_id == @stype_id && @actor.equipped_skills.include?(item.id)
- end
- end
- #==============================================================================
- # ** RPG::BaseItem
- #==============================================================================
- class RPG::BaseItem
- def skill_slots
- if @skill_slots.nil?
- if @note =~ /<(?:skill_slots):(.*)>/i
- @skill_slots = $1.to_i
- else
- @skill_slots = 0
- end
- end
- @skill_slots
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement