So I have the Draw Skill script and I noticed one feature was that they do not remove the skill when the charges reach 0 instead you simply use the skill at its MP cost so essentially you have learned it.
I want it removed if the charges = 0.
Click my buttons
CODE
#=============================================================================== # # Shanghai Simple Script - Draw Skills # Last Date Updated: 2010.06.15 # Level: Normal # # Final Fantasy 8 had a unique and interesting mechanic called Draw. It would # take skills from the enemy unit and actors can then use it. They had a count # to how many times that skill can be used until it ran out. This script allows # the possibility to do the same thing and also improves upon it. # # Changes from actual Final Fantasy 8 Version # - Some skills have restrictions on which classes can draw skills from it. # - Drawing a skill from an enemy will teach the actor that skill. # - Drawing a skill will give a set amount of charges. # - Skills won't disappear when all of the charges are used up. # - Skills will cost their MP amount after all of the charges are used up. #=============================================================================== # Instructions # ----------------------------------------------------------------------------- # To install this script, open up your script editor and copy/paste this script # to an open slot below ▼ Materials but above ▼ Main. Remember to save. # # <draw skill> # <draw skill: x> # These tags will turn the current skill into a draw skill. Draw skills will # take skills from enemies. If the second tag is used, then x charges will be # drawn from the enemy. If the second tag isn't used, then 10 charges are drawn. # # <draw class: x> # <draw class: x, x, x> # These tags will make it so that the current skill can only be drawn by class x # and nothing else. If these tags aren't present, the skill can be drawn by all # classes. # # <cannot draw> # This tag will make the skill undrawable. Used for boss skills that you don't # want the player to learn. #===============================================================================
$imported = {} if $imported == nil $imported["DrawSkills"] = true
module SSS # This is the maximum amount of charges you can draw for your skills. MAXIMUM_DRAW_CHARGES = 255 # This is how the text appears when charges are drawn. DRAW_CHARGES_MSG = "%s has drawn %d×%s!" DRAW_CHARGES_TEXT = "×%d" DRAW_CHARGES_SIZE = 16 end
class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # # Draw Skill #-------------------------------------------------------------------------- def draw_skill return @draw_skill if @draw_skill != nil @draw_skill = 0 self.note.split(/[\r\n]+/).each { |line| case line when /<(?:DRAW_SKILL|draw skill)>/i @draw_skill = 10 when /<(?:DRAW_SKILL|draw skill):[ ](\d+)>/i @draw_skill = $1.to_i end } return @draw_skill end #-------------------------------------------------------------------------- # # Draw Classes #-------------------------------------------------------------------------- def draw_classes return @draw_classes if @draw_classes != nil @draw_classes = [] self.note.split(/[\r\n]+/).each { |line| case line when /<(?:DRAW_CLASS|draw class):[ ](\d+(?:\s*,\s*\d+)*)>/i $1.scan(/\d+/).each { |num| @draw_classes.push(num.to_i) if num.to_i > 0 } end } if @draw_classes.empty? for i in 1..$data_classes.size do @draw_classes.push(i) end end return @draw_classes end #-------------------------------------------------------------------------- # # Cannot Draw #-------------------------------------------------------------------------- def cannot_draw return @cannot_draw if @cannot_draw != nil @cannot_draw = false self.note.split(/[\r\n]+/).each { |line| case line when /<(?:CANNOT_DRAW|cannot draw)>/i @cannot_draw = true end } return @cannot_draw end end
class Game_Battler #-------------------------------------------------------------------------- # * Perform Skill Cost #-------------------------------------------------------------------------- if $imported["BattleEngineMelody"] alias perform_skill_cost_sss_draw_skills perform_skill_cost unless $@ def perform_skill_cost(skill) return if skill == nil or !skill.is_a?(RPG::Skill) if actor? and draw_skill_charges(skill) > 0 use_draw_charge(skill) else perform_skill_cost_sss_draw_skills(skill) end end #-------------------------------------------------------------------------- # * Custom Skill Costs #-------------------------------------------------------------------------- alias custom_skill_costs_sss_draw_skills custom_skill_costs unless $@ def custom_skill_costs(skill, type) if actor? and draw_skill_charges(skill) > 0 charges = draw_skill_charges(skill) case type when :perform; return when :calc_cost; return charges when :text_cost; return sprintf(SSS::DRAW_CHARGES_TEXT, charges) when :can_use; return true when :use_icon; return 0 when :suffix; return "%s" when :font_size; return SSS::DRAW_CHARGES_SIZE when :colour; return 0 end else return custom_skill_costs_sss_draw_skills(skill, type) end end else # Imported Battle Engine Melody #-------------------------------------------------------------------------- # * Calculation of MP Consumed for Skills #-------------------------------------------------------------------------- alias calc_mp_cost_sss_draw_skills calc_mp_cost unless $@ def calc_mp_cost(skill) if actor? and draw_skill_charges(skill) > 0 return 0 else return calc_mp_cost_sss_draw_skills(skill) end end #-------------------------------------------------------------------------- # * Determine Usable Skills #-------------------------------------------------------------------------- alias skill_can_use_sss_draw_skills skill_can_use? unless $@ def skill_can_use?(skill) if actor? and draw_skill_charges(skill) > 0 return false unless skill.is_a?(RPG::Skill) return false unless movable? return false if silent? and skill.spi_f > 0 if $game_temp.in_battle return skill.battle_ok? else return skill.menu_ok? end else return skill_can_use_sss_draw_skills(skill) end end end end
class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # * Total Skills #-------------------------------------------------------------------------- unless method_defined?(:total_skills) def total_skills result = [] for action in enemy.actions next unless action.kind == 1 skill = $data_skills[action.skill_id] result.push(skill) unless result.include?(skill) end result.sort! { |a,b| a.id <=> b.id } return result.uniq end end end
class Window_Draw_Skill < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(actor, targets, help) yy = help.y + help.height super(0, yy, Graphics.width, Graphics.height-yy-128) @actor = actor @drawing_skill = @actor.action.skill @targets = targets @column_max = 2 self.index = 0 refresh self.help_window = help end #-------------------------------------------------------------------------- # * Get Skill #-------------------------------------------------------------------------- def skill return @data[self.index] end #-------------------------------------------------------------------------- # * Total Skills #-------------------------------------------------------------------------- def total_skills return @data.size end #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def refresh @data = [] for target in @targets next if target.actor? for skill in target.total_skills @data.push(skill) if include?(skill) end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # * Include Skill? #-------------------------------------------------------------------------- def include?(skill) return false if skill.cannot_draw return false if @data.include?(skill) return false unless skill.draw_classes.include?(@actor.class_id) return true end #-------------------------------------------------------------------------- # * Update Help Text #-------------------------------------------------------------------------- def update_help @help_window.set_text(skill == nil ? "" : skill.description) end #-------------------------------------------------------------------------- # * Draw Item # index : item number #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 self.contents.font.size = Font.default_size draw_item_name(skill, rect.x, rect.y, true) charges = @drawing_skill.draw_skill text = sprintf(SSS::DRAW_CHARGES_TEXT, charges) self.contents.font.size = SSS::DRAW_CHARGES_SIZE self.contents.draw_text(rect, text, 2) end end end
#============================================================================== # ** Scene_Skill #============================================================================== unless $imported["BattleEngineMelody"] class Scene_Skill < Scene_Base #-------------------------------------------------------------------------- # * Use Skill (apply effects to non-ally targets) #-------------------------------------------------------------------------- alias use_skill_nontarget_sss_draw_skills use_skill_nontarget unless $@ def use_skill_nontarget @actor.use_draw_charge(@skill) if @actor.draw_skill_charges(@skill) > 0 use_skill_nontarget_sss_draw_skills end end end #============================================================================== # ** Scene_Battle #==============================================================================
class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # * Execute Battle Action: Skill #-------------------------------------------------------------------------- alias execute_action_skill_sss_draw_skill execute_action_skill unless $@ def execute_action_skill skill = @active_battler.action.skill if $imported["BattleEngineMelody"] if @active_battler.actor? and skill.draw_skill > 0 execute_action_draw_skill(skill) else execute_action_skill_sss_draw_skill end else targets = @active_battler.action.make_targets execute_action_skill_sss_draw_skill if @active_battler.actor? and @active_battler.draw_skill_charges(skill) > 0 @active_battler.use_draw_charge(skill) end if @active_battler.actor? and skill.draw_skill > 0 perform_draw_skill(skill, targets) end end end #-------------------------------------------------------------------------- # * Execute Battle Action: Draw Skill #-------------------------------------------------------------------------- def execute_action_draw_skill(skill) @scene_skill = skill targets = @active_battler.action.make_targets targets = sort_targets(targets, skill) #--- Setup --- action_list = skill.setup_action_list perform_action_list(action_list, targets) unless @chain_action lunatic_obj_effects(:before, skill) @active_battler.perform_skill_cost(skill) unless @ignore_cost @active_battler.action.friends_unit.update_ptb status_window_refresh #--- Whole --- action_list = skill.whole_action_list perform_action_list(action_list, targets) #--- Target --- action_list = skill.target_action_list for target in targets next if target.dead? and !skill.for_dead_friend? perform_action_list(action_list, [target]) end #--- Follow --- action_list = skill.follow_action_list perform_action_list(action_list, targets) lunatic_obj_effects(:after, skill) #--- Finish --- perform_draw_skill(skill, targets) refresh_ptb_windows unless @ptb_updated action_list = skill.finish_action_list perform_action_list(action_list, targets) unless @chain_action perform_earn_jp(:skill) if $imported["SkillOverhaul"] readjust_instant_properties if skill.instant end #-------------------------------------------------------------------------- # * Perform Draw Skill #-------------------------------------------------------------------------- def perform_draw_skill(skill, targets) Graphics.freeze @help_window = Window_Help.new @draw_window = Window_Draw_Skill.new(@active_battler, targets, @help_window) if $imported["BattleEngineMelody"] @help_window.viewport = @spriteset.viewportC @draw_window.viewport = @spriteset.viewportC end if @draw_window.total_skills == 0 @help_window.dispose @help_window = nil @draw_window.dispose @draw_window = nil Graphics.transition(0) return end Graphics.transition(10) loop do update_basic @draw_window.update if Input.trigger?(Input::C) Sound.play_decision draw_skill = @draw_window.skill @active_battler.acquire_draw_skill(draw_skill, skill.draw_skill) name = @active_battler.name charges = skill.draw_skill skill_name = draw_skill.name text = sprintf(SSS::DRAW_CHARGES_MSG, name, charges, skill_name) @message_window.add_instant_text(text) break elsif Input.trigger?(Input::B) Sound.play_cancel break end end Graphics.freeze @help_window.dispose @help_window = nil @draw_window.dispose @draw_window = nil Graphics.transition(10) end end
#=============================================================================== # # END OF FILE # #===============================================================================
__________________________
Games I am working on | Each image is a link to the game