赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 592 |
最后登录 | 2017-6-25 |
在线时间 | 26 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 26 小时
- 注册时间
- 2013-6-19
- 帖子
- 16
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 亿万星辰 于 2013-6-22 21:04 编辑
- #==============================================================================
- #
- # ▼ Yanfly Engine Ace - Learn Skill Engine v1.00
- # -- Last Updated: 2012.01.08
- # -- Level: Normal, Hard
- # -- Requires: n/a
- #
- #==============================================================================
- $imported = {} if $imported.nil?
- $imported["YEA-LearnSkillEngine"] = true
- #==============================================================================
- # ▼ Updates
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # 2012.01.08 - Started Script and Finished.
- #
- #==============================================================================
- # ▼ Introduction
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # For those who want an alternative for actors to learn skills outside of
- # leveling, this script allows actors to learn skills through a learn skill
- # menu. The actor can use acquired JP, EXP, or Gold to learn skills. Skills can
- # also be hidden until certain requirements are met.
- #
- #==============================================================================
- # ▼ 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.
- #
- # -----------------------------------------------------------------------------
- # Class Notetags - These notetags go in the class notebox in the database.
- # -----------------------------------------------------------------------------
- # <learn skills: x>
- # <learn skills: x, x>
- # Sets the class to be able to learn skills x through the Learn Skills menu.
- # Insert multiple of these tags to increase the number of skills learned.
- #
- # -----------------------------------------------------------------------------
- # Skill Notetags - These notetags go in the skill notebox in the database.
- # -----------------------------------------------------------------------------
- # <learn cost: x jp>
- # <learn cost: x exp>
- # <learn cost: x gold>
- # Sets the learn for cost the skill to require x amounts of JP, x amounts of
- # exp, or x amounts of gold. Only one type of cost can be used at a time. For
- # JP costs, the Yanfly Engine Ace - JP Manager script must be installed.
- #
- # <learn require level: x>
- # Sets the skill to require the actor's current level to be x before the skill
- # will show up in the skill learning window.
- #
- # <learn require skill: x>
- # <learn require skill: x, x>
- # Sets the skill to require learning skill x (through any means) before the
- # skill becomes visible in the skill learning window. Insert multiples of these
- # tags to require more skills to be learned in order for the skill to show.
- #
- # <learn require switch: x>
- # <learn require switch: x, x>
- # Sets the skill to require switch x to be ON in order for it to show in the
- # skill learning window. Insert multiple switches to to increase the number of
- # switches needed to be ON before the skill is shown.
- #
- # <learn require eval>
- # string
- # string
- # </learn require eval>
- # For the more advanced users, replace string with lines of code to check for
- # whether or not the skill will be shown in skill learning window. If multiple
- # lines are used, they are all considered part of the same line.
- #
- #==============================================================================
- # ▼ Compatibility
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
- # it will run with RPG Maker VX without adjusting.
- #
- # This script is compatible with Yanfly Engine Ace - JP Manager v1.00+. The
- # placement of this script relative to the JP Manager script doesn't matter.
- #
- #==============================================================================
- module YEA
- module LEARN_SKILL
-
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - General Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # Adjust the general settings here for your game. These adjust how the
- # command name appears, a switch to show the Learn Command
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- COMMAND_NAME = "学习技能" # Name used for Learn Skill command.
-
- # This switch will hide the "Learn" command from view if the switch is OFF.
- # The "Learn" command will be shown if the switch is ON. Set this switch to
- # 0 to not use this effect and to always have the Learn command be shown.
- SHOW_SWITCH = 0
-
- # This adjusts the order the Skill Types appear in for the command window.
- # Any Skill Types unlisted will not be shown.
- STYPE_ORDER = [41..999, 1..40]
-
- # For those who installed Yanfly Engine - Skill Restrictions, you can
- # choose to display warmups or cooldowns inside of the menu here.
- DRAW_WARMUP = true # Draw warmups for skills?
- DRAW_COOLDOWN = true # Draw cooldowns for skills?
-
- #-------------------------------------------------------------------------
- # - Default Cost -
- #-------------------------------------------------------------------------
- # This sets the default costs for all skills. If the JP script isn't
- # installed, the type will become :exp instead.
- #
- # Cost Type Description
- # :jp - Requires YEA - JP Manager.
- # :exp - Makes skill cost EXP.
- # :gold - Makes skill cost gold.
- #-------------------------------------------------------------------------
- DEFAULT_COST = 100 # Sets the default cost of a skill.
- DEFAULT_TYPE = :jp # Sets the default cost type.
-
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - Learn Window Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # These settings adjust the Learn Window's visual appearance. Adjust the
- # way empty text appears, EXP cost suffixes appear, Learned text appears,
- # font sizes, and cost colours here.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- EMPTY_TEXT = "-" # Text if no restricts used for the skill.
- EXP_TEXT = "EXP" # Text used for EXP costs.
- LEARNED_TEXT = "领悟" # Text to indicate skill has been learned.
- LEARNED_SIZE = 20 # Font size used for learned skill text.
- COLOUR_JP = 24 # Text colour used for JP Cost.
- COLOUR_EXP = 5 # Text colour used for EXP Cost.
- COLOUR_GOLD = 21 # Text colour used for Gold Cost.
- COST_SIZE = 20 # Font size used for skill costs.
-
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - Cost Window Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # When a skill is selected to be learned, the cost window appears. Adjust
- # the settings here to choose how your game's cost window looks. Change the
- # maximum number of rows, the gold icon used for gold costs, the gold text,
- # the learn skill text, the cancel text, and the cancel icon here.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- MAXIMUM_ROWS = 8 # Maximum number of rows displayed.
- GOLD_ICON = 361 # Icon used for gold costs.
- GOLD_TEXT = "金币" # Text used for gold costs.
- LEARN_SKILL_TEXT = "学习 %s?" # Text used to learn skill.
- LEARN_CANCEL_TEXT = "放弃" # Text used for do not learn.
- CANCEL_ICON = 187 # Icon used for cancel.
-
- end # LEARN_SKILL
- end # YEA
- #==============================================================================
- # ▼ Editting anything past this point may potentially result in causing
- # computer damage, incontinence, explosion of user's head, coma, death, and/or
- # halitosis so edit at your own risk.
- #==============================================================================
- module YEA
- module LEARN_SKILL
- module_function
- #--------------------------------------------------------------------------
- # convert_integer_array
- #--------------------------------------------------------------------------
- def convert_integer_array(array)
- result = []
- array.each { |i|
- case i
- when Range; result |= i.to_a
- when Integer; result |= [i]
- end }
- return result
- end
- #--------------------------------------------------------------------------
- # converted_contants
- #--------------------------------------------------------------------------
- STYPE_ORDER = convert_integer_array(STYPE_ORDER)
- end # LEARN_SKILL
- module REGEXP
- module CLASS
-
- LEARN_SKILLS = /<(?:LEARN_SKILLS|learn skills):[ ](\d+(?:\s*,\s*\d+)*)>/i
-
- end # CLASS
- module SKILL
-
- LEARN_COST = /<(?:LEARN_COST|learn cost):[ ](.*)>/i
- LEARN_REQUIRE_LEVEL =
- /<(?:LEARN_REQUIRE_LEVEL|learn require level):[ ](\d+)>/i
- LEARN_REQUIRE_SKILL =
- /<(?:LEARN_REQUIRE_SKILL|learn require skill):[ ](\d+(?:\s*,\s*\d+)*)>/i
- LEARN_REQUIRE_SWITCH =
- /<(?:LEARN_REQUIRE_SWITCH|learn require switch):[ ](\d+(?:\s*,\s*\d+)*)>/i
- LEARN_REQUIRE_EVAL_ON = /<(?:LEARN_REQUIRE_EVAL|learn require eval)>/i
- LEARN_REQUIRE_EVAL_OFF = /<\/(?:LEARN_REQUIRE_EVAL|learn require eval)>/i
-
- end # SKILL
- end # REGEXP
- end # YEA
- #==============================================================================
- # ■ Numeric
- #==============================================================================
- class Numeric
-
- #--------------------------------------------------------------------------
- # new method: group_digits
- #--------------------------------------------------------------------------
- unless $imported["YEA-CoreEngine"]
- def group; return self.to_s; end
- end # $imported["YEA-CoreEngine"]
-
- end # Numeric
- #==============================================================================
- # ■ Icon
- #==============================================================================
- module Icon
-
- #--------------------------------------------------------------------------
- # self.cancel
- #--------------------------------------------------------------------------
- def self.cancel
- return YEA::LEARN_SKILL::CANCEL_ICON
- end
-
- #--------------------------------------------------------------------------
- # self.learn_skill_gold
- #--------------------------------------------------------------------------
- def self.learn_skill_gold
- return YEA::LEARN_SKILL::GOLD_ICON
- end
-
- end # Icon
- #==============================================================================
- # ■ Switch
- #==============================================================================
- module Switch
-
- #--------------------------------------------------------------------------
- # self.show_learn_skill
- #--------------------------------------------------------------------------
- def self.show_learn_skill
- return true if YEA::LEARN_SKILL::SHOW_SWITCH <= 0
- return $game_switches[YEA::LEARN_SKILL::SHOW_SWITCH]
- end
-
- end # Switch
- #==============================================================================
- # ■ DataManager
- #==============================================================================
- module DataManager
-
- #--------------------------------------------------------------------------
- # alias method: load_database
- #--------------------------------------------------------------------------
- class <<self; alias load_database_lse load_database; end
- def self.load_database
- load_database_lse
- load_notetags_lse
- end
-
- #--------------------------------------------------------------------------
- # new method: load_notetags_lse
- #--------------------------------------------------------------------------
- def self.load_notetags_lse
- groups = [$data_classes, $data_skills]
- for group in groups
- for obj in group
- next if obj.nil?
- obj.load_notetags_lse
- end
- end
- end
-
- end # DataManager
- #==============================================================================
- # ■ RPG::Class
- #==============================================================================
- class RPG::Class < RPG::BaseItem
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :learn_skills
-
- #--------------------------------------------------------------------------
- # common cache: load_notetags_lse
- #--------------------------------------------------------------------------
- def load_notetags_lse
- @learn_skills = []
- #---
- self.note.split(/[\r\n]+/).each { |line|
- case line
- #---
- when YEA::REGEXP::CLASS::LEARN_SKILLS
- $1.scan(/\d+/).each { |num|
- @learn_skills.push(num.to_i) if num.to_i > 0 }
- end
- } # self.note.split
- #---
- end
-
- end # RPG::Class
- #==============================================================================
- # ■ RPG::Skill
- #==============================================================================
- class RPG::Skill < RPG::UsableItem
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :learn_cost
- attr_accessor :learn_require_level
- attr_accessor :learn_require_skill
- attr_accessor :learn_require_switch
- attr_accessor :learn_require_eval
-
- #--------------------------------------------------------------------------
- # common cache: load_notetags_lse
- #--------------------------------------------------------------------------
- def load_notetags_lse
- @learn_cost = [YEA::LEARN_SKILL::DEFAULT_COST]
- @learn_cost.push(YEA::LEARN_SKILL::DEFAULT_TYPE)
- @learn_require_level = 0
- @learn_require_skill = []
- @learn_require_switch = []
- @learn_require_eval_on = false
- #---
- self.note.split(/[\r\n]+/).each { |line|
- case line
- #---
- when YEA::REGEXP::SKILL::LEARN_COST
- case $1.upcase
- when /(\d+)[ ]JP/i
- next unless $imported["YEA-JPManager"]
- @learn_cost = [$1.to_i, :jp]
- when /(\d+)[ ]EXP/i
- @learn_cost = [$1.to_i, :exp]
- when /(\d+)[ ]GOLD/i
- @learn_cost = [$1.to_i, :gold]
- end
- #---
- when YEA::REGEXP::SKILL::LEARN_REQUIRE_LEVEL
- @learn_require_level = $1.to_i
- when YEA::REGEXP::SKILL::LEARN_REQUIRE_SKILL
- $1.scan(/\d+/).each { |num|
- @learn_require_skill.push(num.to_i) if num.to_i > 0 }
- when YEA::REGEXP::SKILL::LEARN_REQUIRE_SWITCH
- $1.scan(/\d+/).each { |num|
- @learn_require_switch.push(num.to_i) if num.to_i > 0 }
- #---
- when YEA::REGEXP::SKILL::LEARN_REQUIRE_EVAL_ON
- @learn_require_eval_on = true
- when YEA::REGEXP::SKILL::LEARN_REQUIRE_EVAL_OFF
- @learn_require_eval_on = false
- else
- next unless @learn_require_eval_on
- @learn_require_eval = "" if @learn_require_eval.nil?
- @learn_require_eval += line.to_s
- #---
- end
- } # self.note.split
- #---
- if !$imported["YEA-JPManager"] && @learn_cost[1] == :jp
- @learn_cost[1] = :exp
- end
- end
-
- end # RPG::Skill
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
-
- #--------------------------------------------------------------------------
- # alias method: skills
- #--------------------------------------------------------------------------
- alias game_actor_skills_lse skills
- def skills
- btest_add_learn_skills
- game_actor_skills_lse
- end
-
- #--------------------------------------------------------------------------
- # new method: btest_add_learn_skills
- #--------------------------------------------------------------------------
- def btest_add_learn_skills
- return unless $BTEST
- for skill_id in self.class.learn_skills; learn_skill(skill_id); end
- end
-
- #--------------------------------------------------------------------------
- # new method: exp_class
- #--------------------------------------------------------------------------
- def exp_class(class_id)
- @exp[class_id] = 0 if @exp[class_id].nil?
- return @exp[class_id]
- end
-
- #--------------------------------------------------------------------------
- # lose_exp_class
- #--------------------------------------------------------------------------
- def lose_exp_class(value, class_id)
- exp = exp_class(class_id) - value
- change_exp_class(exp, class_id)
- end
-
- #--------------------------------------------------------------------------
- # change_exp_class
- #--------------------------------------------------------------------------
- def change_exp_class(exp, class_id)
- return change_exp(exp, false) if class_id == @class_id
- @exp[class_id] = [exp, 0].max
- end
-
- end # Game_Actor
- #==============================================================================
- # ■ Window_SkillCommand
- #==============================================================================
- class Window_SkillCommand < Window_Command
-
- #--------------------------------------------------------------------------
- # alias method: make_command_list
- #--------------------------------------------------------------------------
- alias window_skillcommand_make_command_list_lse make_command_list
- def make_command_list
- window_skillcommand_make_command_list_lse
- return if @actor.nil?
- add_learn_skill_command unless $imported["YEA-SkillMenu"]
- end
-
- #--------------------------------------------------------------------------
- # new method: add_learn_skill_command
- #--------------------------------------------------------------------------
- def add_learn_skill_command
- return unless Switch.show_learn_skill
- name = YEA::LEARN_SKILL::COMMAND_NAME
- add_command(name, :learn_skill, true, @actor.added_skill_types[0])
- end
-
- end # Window_SkillCommand
- #==============================================================================
- # ■ Window_LearnSkillCommand
- #==============================================================================
- class Window_LearnSkillCommand < Window_Command
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_reader :skill_window
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(dx, dy)
- super(dx, dy)
- [url=home.php?mod=space&uid=95897]@actor[/url] = nil
- end
-
- #--------------------------------------------------------------------------
- # window_width
- #--------------------------------------------------------------------------
- def window_width; return 160; end
-
- #--------------------------------------------------------------------------
- # visible_line_number
- #--------------------------------------------------------------------------
- def visible_line_number; return 4; end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- select(item_max - 1) if index >= item_max
- end
-
- #--------------------------------------------------------------------------
- # make_command_list
- #--------------------------------------------------------------------------
- def make_command_list
- return if @actor.nil?
- make_unlocked_class_skill_types
- correct_unlocked_class_learned_skills
- for stype_id in YEA::LEARN_SKILL::STYPE_ORDER
- next unless include?(stype_id)
- name = $data_system.skill_types[stype_id]
- add_command(name, :skill, true, stype_id)
- end
- end
-
- #--------------------------------------------------------------------------
- # make_unlocked_class_skill_types
- #--------------------------------------------------------------------------
- def make_unlocked_class_skill_types
- return unless $imported["YEA-ClassSystem"]
- @unlocked_types = []
- unlocked_classes = @actor.unlocked_classes.clone
- unlocked_classes |= YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS
- for class_id in unlocked_classes
- next if $data_classes[class_id].nil?
- for feature in $data_classes[class_id].features
- next unless feature.code == 41
- @unlocked_types.push(feature.data_id)
- end
- end
- end
-
- #--------------------------------------------------------------------------
- # correct_unlocked_class_learned_skills
- #--------------------------------------------------------------------------
- def correct_unlocked_class_learned_skills
- return unless $imported["YEA-ClassSystem"]
- unlocked_classes = @actor.unlocked_classes.clone
- unlocked_classes |= YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS
- for class_id in unlocked_classes
- @actor.learn_class_skills(class_id)
- end
- end
-
- #--------------------------------------------------------------------------
- # include?
- #--------------------------------------------------------------------------
- def include?(stype_id)
- return true if @actor.added_skill_types.include?(stype_id)
- if $imported["YEA-ClassSystem"]
- return true if @unlocked_types.include?(stype_id)
- end
- return false
- end
-
- #--------------------------------------------------------------------------
- # update
- #--------------------------------------------------------------------------
- def update
- super
- @skill_window.stype_id = current_ext if @skill_window
- end
-
- #--------------------------------------------------------------------------
- # skill_window=
- #--------------------------------------------------------------------------
- def skill_window=(skill_window)
- @skill_window = skill_window
- update
- end
-
- end # Window_LearnSkillCommand
- #==============================================================================
- # ■ Window_LearnSkillList
- #==============================================================================
- class Window_LearnSkillList < Window_SkillList
-
- #--------------------------------------------------------------------------
- # col_max
- #--------------------------------------------------------------------------
- def col_max; return 1; end
-
- #--------------------------------------------------------------------------
- # select_last
- #--------------------------------------------------------------------------
- def select_last; select(0); end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- super(actor)
- make_learn_skills_list
- end
-
- #--------------------------------------------------------------------------
- # make_learn_skills_list
- #--------------------------------------------------------------------------
- def make_learn_skills_list
- @learn_skills = []
- @skill_classes = {}
- return if @actor.nil?
- for skill_id in @actor.class.learn_skills
- next if $data_skills[skill_id].nil?
- next if @learn_skills.include?($data_skills[skill_id])
- skill = $data_skills[skill_id]
- @learn_skills.push(skill)
- @skill_classes[skill] = [] if @skill_classes[skill].nil?
- @skill_classes[skill].push(@actor.class.id)
- end
- make_unlocked_class_skills
- end
-
- #--------------------------------------------------------------------------
- # make_unlocked_class_skills
- #--------------------------------------------------------------------------
- def make_unlocked_class_skills
- return unless $imported["YEA-ClassSystem"]
- @unlocked_types = []
- unlocked_classes = @actor.unlocked_classes.clone
- unlocked_classes |= YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS
- for class_id in unlocked_classes
- next if $data_classes[class_id].nil?
- for skill_id in $data_classes[class_id].learn_skills
- next if $data_skills[skill_id].nil?
- skill = $data_skills[skill_id]
- @learn_skills.push(skill) unless @learn_skills.include?(skill)
- @skill_classes[skill] = [] if @skill_classes[skill].nil?
- @skill_classes[skill] |= [class_id]
- end
- end
- end
-
- #--------------------------------------------------------------------------
- # skill_classes
- #--------------------------------------------------------------------------
- def skill_classes(skill)
- return @skill_classes[skill]
- end
-
- #--------------------------------------------------------------------------
- # make_item_list
- #--------------------------------------------------------------------------
- def make_item_list
- return if @learn_skills.nil?
- @data = @learn_skills.select {|skill| include?(skill) }
- end
-
- #--------------------------------------------------------------------------
- # include?
- #--------------------------------------------------------------------------
- def include?(item)
- return false if item.nil?
- return false unless meet_requirements?(item)
- return item.stype_id == @stype_id
- end
-
- #--------------------------------------------------------------------------
- # meet_requirements?
- #--------------------------------------------------------------------------
- def meet_requirements?(item)
- return false if @actor.nil?
- return false unless meet_level_requirements?(item)
- return false unless meet_skill_requirements?(item)
- return false unless meet_switch_requirements?(item)
- return false unless meet_eval_requirements?(item)
- return true
- end
-
- #--------------------------------------------------------------------------
- # meet_level_requirements?
- #--------------------------------------------------------------------------
- def meet_level_requirements?(item)
- return @actor.level >= item.learn_require_level
- end
-
- #--------------------------------------------------------------------------
- # meet_skill_requirements?
- #--------------------------------------------------------------------------
- def meet_skill_requirements?(item)
- for skill_id in item.learn_require_skill
- next if $data_skills[skill_id].nil?
- return false unless @actor.skill_learn?($data_skills[skill_id])
- end
- return true
- end
-
- #--------------------------------------------------------------------------
- # meet_switch_requirements?
- #--------------------------------------------------------------------------
- def meet_switch_requirements?(item)
- for switch_id in item.learn_require_switch
- return false unless $game_switches[switch_id]
- end
- return true
- end
-
- #--------------------------------------------------------------------------
- # meet_eval_requirements?
- #--------------------------------------------------------------------------
- def meet_eval_requirements?(item)
- return true if item.learn_require_eval.nil?
- return eval(item.learn_require_eval)
- end
-
- #--------------------------------------------------------------------------
- # enable?
- #--------------------------------------------------------------------------
- def enable?(skill)
- return false if skill.nil?
- return false unless enabled_jp?(skill)
- return false unless enabled_exp?(skill)
- return false unless enabled_gold?(skill)
- return [email protected]_learn?(skill)
- end
-
- #--------------------------------------------------------------------------
- # enabled_jp?
- #--------------------------------------------------------------------------
- def enabled_jp?(skill)
- return true if skill.learn_cost[1] != :jp
- cost = skill.learn_cost[0]
- for class_id in @skill_classes[skill]
- return true if @actor.jp(class_id) >= cost
- end
- return false
- end
-
- #--------------------------------------------------------------------------
- # enabled_exp?
- #--------------------------------------------------------------------------
- def enabled_exp?(skill)
- return true if skill.learn_cost[1] != :exp
- cost = skill.learn_cost[0]
- for class_id in @skill_classes[skill]
- return true if @actor.exp_class(class_id) >= cost
- end
- return false
- end
-
- #--------------------------------------------------------------------------
- # enabled_gold?
- #--------------------------------------------------------------------------
- def enabled_gold?(skill)
- return true if skill.learn_cost[1] != :gold
- cost = skill.learn_cost[0]
- return $game_party.gold >= cost
- end
-
- #--------------------------------------------------------------------------
- # draw_item
- #--------------------------------------------------------------------------
- def draw_item(index)
- skill = @data[index]
- return if skill.nil?
- rect = item_rect(index)
- rect.width = (contents.width - spacing) / 2 - 4
- draw_item_name(skill, rect.x, rect.y, enable?(skill), rect.width - 24)
- draw_skill_cost(rect, skill)
- draw_restriction_info(skill, index)
- draw_learn_cost(skill, index)
- end
-
- #--------------------------------------------------------------------------
- # skill_restriction?
- #--------------------------------------------------------------------------
- def skill_restriction?(index)
- return false
- end
-
- #--------------------------------------------------------------------------
- # draw_restriction_info
- #--------------------------------------------------------------------------
- def draw_restriction_info(skill, index)
- return unless $imported["YEA-SkillRestrictions"]
- rect = item_rect(index)
- rect.x = contents.width / 2
- rect.width /= 2
- rect.width /= 3
- rect.width -= 8
- draw_skill_warmup(skill, rect)
- rect.x += rect.width + 4
- draw_skill_cooldown(skill, rect)
- end
-
- #--------------------------------------------------------------------------
- # draw_skill_warmup
- #--------------------------------------------------------------------------
- def draw_skill_warmup(skill, rect)
- return unless YEA::LEARN_SKILL::DRAW_WARMUP
- enabled = enable?(skill)
- enabled = false if skill.warmup <= 0
- change_color(warmup_colour, enabled)
- icon = Icon.warmup
- if icon > 0
- draw_icon(icon, rect.x + rect.width-24, rect.y, enable?(skill))
- rect.width -= 24
- end
- contents.font.size = YEA::SKILL_RESTRICT::WARMUP_SIZE
- value = skill.warmup > 0 ? skill.warmup.group : empty_text
- text = sprintf(YEA::SKILL_RESTRICT::WARMUP_SUFFIX, value)
- draw_text(rect, text, 2)
- reset_font_settings
- end
-
- #--------------------------------------------------------------------------
- # draw_skill_cooldown
- #--------------------------------------------------------------------------
- def draw_skill_cooldown(skill, rect)
- return unless YEA::LEARN_SKILL::DRAW_COOLDOWN
- enabled = enable?(skill)
- enabled = false if skill.cooldown <= 0
- change_color(cooldown_colour, enabled)
- icon = Icon.cooldown
- if icon > 0
- draw_icon(icon, rect.x + rect.width-24, rect.y, enable?(skill))
- rect.width -= 24
- end
- contents.font.size = YEA::SKILL_RESTRICT::COOLDOWN_SIZE
- value = skill.cooldown > 0 ? skill.cooldown.group : empty_text
- text = sprintf(YEA::SKILL_RESTRICT::COOLDOWN_SUFFIX, value)
- draw_text(rect, text, 2)
- reset_font_settings
- end
-
- #--------------------------------------------------------------------------
- # empty_text
- #--------------------------------------------------------------------------
- def empty_text
- return YEA::LEARN_SKILL::EMPTY_TEXT
- end
-
- #--------------------------------------------------------------------------
- # draw_learn_cost
- #--------------------------------------------------------------------------
- def draw_learn_cost(skill, index)
- rect = item_rect(index)
- rect.width -= 4
- if @actor.skill_learn?(skill)
- draw_learned_skill(rect)
- else
- draw_learn_skill_cost(skill, rect)
- end
- reset_font_settings
- end
-
- #--------------------------------------------------------------------------
- # draw_learned_skill
- #--------------------------------------------------------------------------
- def draw_learned_skill(rect)
- contents.font.size = YEA::LEARN_SKILL::LEARNED_SIZE
- change_color(normal_color)
- draw_text(rect, YEA::LEARN_SKILL::LEARNED_TEXT, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_learn_skill_cost
- #--------------------------------------------------------------------------
- def draw_learn_skill_cost(skill, rect)
- case skill.learn_cost[1]
- when :jp
- return unless $imported["YEA-JPManager"]
- draw_jp_cost(skill, rect)
- when :exp
- draw_exp_cost(skill, rect)
- when :gold
- draw_gold_cost(skill, rect)
- else; return
- end
- end
-
- #--------------------------------------------------------------------------
- # draw_jp_cost
- #--------------------------------------------------------------------------
- def draw_jp_cost(skill, rect)
- enabled = enabled_jp?(skill)
- if Icon.jp > 0
- draw_icon(Icon.jp, rect.x + rect.width - 24, rect.y, enabled)
- rect.width -= 24
- end
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::jp, 2)
- rect.width -= text_size(Vocab::jp).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_JP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_exp_cost
- #--------------------------------------------------------------------------
- def draw_exp_cost(skill, rect)
- enabled = enabled_exp?(skill)
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, YEA::LEARN_SKILL::EXP_TEXT, 2)
- rect.width -= text_size(YEA::LEARN_SKILL::EXP_TEXT).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_EXP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_gold_cost
- #--------------------------------------------------------------------------
- def draw_gold_cost(skill, rect)
- enabled = enabled_jp?(skill)
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::currency_unit, 2)
- rect.width -= text_size(Vocab::currency_unit).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_GOLD), enabled)
- draw_text(rect, text, 2)
- end
-
- end # Window_LearnSkillList
- #==============================================================================
- # ■ Window_LearnSkillCostBack
- #==============================================================================
- class Window_LearnSkillCostBack < Window_Base
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(item_window)
- dw = Graphics.width * 3 / 4
- dx = (Graphics.width - dw) / 2
- super(dx, 0, dw, fitting_height(2))
- self.openness = 0
- self.back_opacity = 255
- @front_window = nil
- @item_window = item_window
- [url=home.php?mod=space&uid=260100]@skill[/url] = nil
- end
-
- #--------------------------------------------------------------------------
- # reveal
- #--------------------------------------------------------------------------
- def reveal(skill, skill_classes)
- @skill = skill
- return if @skill.nil?
- case @skill.learn_cost[1]
- when :gold
- self.height = fitting_height(3)
- else
- maximum = [skill_classes.size, YEA::LEARN_SKILL::MAXIMUM_ROWS].min
- self.height = fitting_height(maximum + 2)
- end
- create_contents
- self.y = (Graphics.height - self.height) / 2
- refresh
- open
- end
-
- #--------------------------------------------------------------------------
- # refresh
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- reset_font_settings
- draw_learn_skill_text
- rect = Rect.new(0, 0, contents.width - 4, line_height)
- draw_learn_skill_cost(@skill, rect)
- end
-
- #--------------------------------------------------------------------------
- # draw_learn_skill_text
- #--------------------------------------------------------------------------
- def draw_learn_skill_text
- name = sprintf("\eI[%d]%s", @skill.icon_index, @skill.name)
- fmt = YEA::LEARN_SKILL::LEARN_SKILL_TEXT
- text = sprintf(fmt, name)
- draw_text_ex(4, 0, text)
- end
-
- #--------------------------------------------------------------------------
- # draw_learn_skill_cost
- #--------------------------------------------------------------------------
- def draw_learn_skill_cost(skill, rect)
- case skill.learn_cost[1]
- when :jp
- return unless $imported["YEA-JPManager"]
- draw_jp_cost(skill, rect)
- when :exp
- draw_exp_cost(skill, rect)
- when :gold
- draw_gold_cost(skill, rect)
- else; return
- end
- end
-
- #--------------------------------------------------------------------------
- # draw_jp_cost
- #--------------------------------------------------------------------------
- def draw_jp_cost(skill, rect)
- enabled = true
- if Icon.jp > 0
- draw_icon(Icon.jp, rect.x + rect.width - 24, rect.y, enabled)
- rect.width -= 24
- end
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::jp, 2)
- rect.width -= text_size(Vocab::jp).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_JP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_exp_cost
- #--------------------------------------------------------------------------
- def draw_exp_cost(skill, rect)
- enabled = true
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, YEA::LEARN_SKILL::EXP_TEXT, 2)
- rect.width -= text_size(YEA::LEARN_SKILL::EXP_TEXT).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_EXP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_gold_cost
- #--------------------------------------------------------------------------
- def draw_gold_cost(skill, rect)
- enabled = true
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::currency_unit, 2)
- rect.width -= text_size(Vocab::currency_unit).width
- cost = skill.learn_cost[0]
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_GOLD), enabled)
- draw_text(rect, text, 2)
- end
-
- end # Window_LearnSkillCostBack
- #==============================================================================
- # ■ Window_LearnSkillCostFront
- #==============================================================================
- class Window_LearnSkillCostFront < Window_Command
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(item_window, cost_window)
- super((Graphics.width - window_width) / 2, 0)
- self.openness = 0
- self.opacity = 0
- @item_window = item_window
- @cost_window = cost_window
- @skill = nil
- @actor = nil
- deactivate
- end
-
- #--------------------------------------------------------------------------
- # window_width
- #--------------------------------------------------------------------------
- def window_width; return Graphics.width * 3 / 4; end
-
- #--------------------------------------------------------------------------
- # skill_class
- #--------------------------------------------------------------------------
- def skill_class
- return @skill_classes.nil? ? nil : @skill_classes[index]
- end
-
- #--------------------------------------------------------------------------
- # reveal
- #--------------------------------------------------------------------------
- def reveal(skill, skill_classes, actor)
- @skill = skill
- @skill_classes = skill_classes.clone
- @actor = actor
- return if @skill.nil?
- case @skill.learn_cost[1]
- when :gold
- self.height = fitting_height(2)
- else
- maximum = [skill_classes.size, YEA::LEARN_SKILL::MAXIMUM_ROWS].min
- self.height = fitting_height(maximum + 1)
- end
- create_contents
- self.y = @cost_window.y + line_height
- refresh
- select(0)
- open
- activate
- end
-
- #--------------------------------------------------------------------------
- # make_command_list
- #--------------------------------------------------------------------------
- def make_command_list
- return if @skill_classes.nil?
- if @skill.learn_cost[1] == :gold
- add_command("GOLD", :gold, true)
- add_command(YEA::LEARN_SKILL::LEARN_CANCEL_TEXT, :cancel, true)
- return
- end
- for class_id in @skill_classes
- name = $data_classes[class_id].name
- add_command(name, :class, enabled?(class_id), class_id)
- end
- add_command(YEA::LEARN_SKILL::LEARN_CANCEL_TEXT, :cancel, true)
- end
-
- #--------------------------------------------------------------------------
- # enabled?
- #--------------------------------------------------------------------------
- def enabled?(class_id)
- cost = @skill.learn_cost[0]
- case @skill.learn_cost[1]
- when :jp
- return @actor.jp(class_id) >= cost
- when :exp
- return @actor.exp_class(class_id) >= cost
- end
- return true
- end
-
- #--------------------------------------------------------------------------
- # draw_item
- #--------------------------------------------------------------------------
- def draw_item(index)
- reset_font_settings
- rect = item_rect(index)
- rect.x += 24
- rect.width -= 28
- return draw_cancel_text(index, rect) if @list[index][:symbol] == :cancel
- draw_class_name(index, rect) if @skill.learn_cost[1] != :gold
- draw_party_gold(rect) if @skill.learn_cost[1] == :gold
- draw_learn_skill_cost(@skill, rect, index)
- end
-
- #--------------------------------------------------------------------------
- # draw_cancel_text
- #--------------------------------------------------------------------------
- def draw_cancel_text(index, rect)
- draw_icon(Icon.cancel, rect.x, rect.y)
- text = command_name(index)
- draw_text(rect.x+24, rect.y, rect.width-24, line_height, text)
- end
-
- #--------------------------------------------------------------------------
- # draw_class_name
- #--------------------------------------------------------------------------
- def draw_class_name(index, rect)
- class_id = @list[index][:ext]
- return if $data_classes[class_id].nil?
- enabled = enabled?(class_id)
- if $imported["YEA-ClassSystem"]
- draw_icon($data_classes[class_id].icon_index, rect.x, rect.y, enabled)
- end
- rect.x += 24
- rect.width -= 24
- change_color(normal_color, enabled)
- draw_text(rect, $data_classes[class_id].name)
- end
-
- #--------------------------------------------------------------------------
- # draw_class_name
- #--------------------------------------------------------------------------
- def draw_party_gold(rect)
- enabled = true
- draw_icon(Icon.learn_skill_gold, rect.x, rect.y)
- rect.x += 24
- rect.width -= 24
- change_color(normal_color, enabled)
- draw_text(rect, YEA::LEARN_SKILL::GOLD_TEXT)
- end
-
- #--------------------------------------------------------------------------
- # draw_learn_skill_cost
- #--------------------------------------------------------------------------
- def draw_learn_skill_cost(skill, rect, index)
- case skill.learn_cost[1]
- when :jp
- return unless $imported["YEA-JPManager"]
- draw_jp_cost(skill, rect, index)
- when :exp
- draw_exp_cost(skill, rect, index)
- when :gold
- draw_gold_cost(skill, rect)
- else; return
- end
- end
-
- #--------------------------------------------------------------------------
- # draw_jp_cost
- #--------------------------------------------------------------------------
- def draw_jp_cost(skill, rect, index)
- enabled = enabled?(@list[index][:ext])
- if Icon.jp > 0
- draw_icon(Icon.jp, rect.x + rect.width - 24, rect.y, enabled)
- rect.width -= 24
- end
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::jp, 2)
- rect.width -= text_size(Vocab::jp).width
- cost = @actor.jp(@list[index][:ext])
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_JP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_exp_cost
- #--------------------------------------------------------------------------
- def draw_exp_cost(skill, rect, index)
- enabled = enabled?(@list[index][:ext])
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, YEA::LEARN_SKILL::EXP_TEXT, 2)
- rect.width -= text_size(YEA::LEARN_SKILL::EXP_TEXT).width
- cost = @actor.exp_class(@list[index][:ext])
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_EXP), enabled)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # draw_gold_cost
- #--------------------------------------------------------------------------
- def draw_gold_cost(skill, rect)
- enabled = $game_party.gold >= skill.learn_cost[0]
- contents.font.size = YEA::LEARN_SKILL::COST_SIZE
- change_color(system_color, enabled)
- draw_text(rect, Vocab::currency_unit, 2)
- rect.width -= text_size(Vocab::currency_unit).width
- cost = $game_party.gold
- text = cost.group
- change_color(text_color(YEA::LEARN_SKILL::COLOUR_GOLD), enabled)
- draw_text(rect, text, 2)
- end
-
- end # Window_LearnSkillCostFront
- #==============================================================================
- # ■ Scene_Skill
- #==============================================================================
- class Scene_Skill < Scene_ItemBase
-
- #--------------------------------------------------------------------------
- # alias method: create_command_window
- #--------------------------------------------------------------------------
- alias scene_skill_create_command_window_lse create_command_window
- def create_command_window
- scene_skill_create_command_window_lse
- @command_window.set_handler(:learn_skill, method(:command_learn_skill))
- end
-
- #--------------------------------------------------------------------------
- # new method: command_learn_skill
- #--------------------------------------------------------------------------
- def command_learn_skill
- SceneManager.call(Scene_LearnSkill)
- end
-
- end # Scene_Skill
- #==============================================================================
- # ■ Scene_LearnSkill
- #==============================================================================
- class Scene_LearnSkill < Scene_Skill
-
- #--------------------------------------------------------------------------
- # start
- #--------------------------------------------------------------------------
- def start
- super
- create_cost_windows
- end
-
- #--------------------------------------------------------------------------
- # create_command_window
- #--------------------------------------------------------------------------
- def create_command_window
- wy = @help_window.height
- @command_window = Window_LearnSkillCommand.new(0, wy)
- @command_window.viewport = @viewport
- @command_window.help_window = @help_window
- @command_window.actor = @actor
- @command_window.set_handler(:skill, method(:command_skill))
- @command_window.set_handler(:cancel, method(:return_scene))
- @command_window.set_handler(:pagedown, method(:next_actor))
- @command_window.set_handler(:pageup, method(:prev_actor))
- end
-
- #--------------------------------------------------------------------------
- # create_item_window
- #--------------------------------------------------------------------------
- def create_item_window
- wx = 0
- wy = @status_window.y + @status_window.height
- ww = Graphics.width
- wh = Graphics.height - wy
- @item_window = Window_LearnSkillList.new(wx, wy, ww, wh)
- @item_window.actor = @actor
- @item_window.viewport = @viewport
- @item_window.help_window = @help_window
- @item_window.set_handler(:ok, method(:on_item_ok))
- @item_window.set_handler(:cancel, method(:on_item_cancel))
- @command_window.skill_window = @item_window
- end
-
- #--------------------------------------------------------------------------
- # create_cost_windows
- #--------------------------------------------------------------------------
- def create_cost_windows
- @cost_window = Window_LearnSkillCostBack.new(@item_window)
- @cost_front = Window_LearnSkillCostFront.new(@item_window, @cost_window)
- @cost_window.viewport = @viewport
- @cost_front.viewport = @viewport
- @cost_front.set_handler(:ok, method(:on_cost_ok))
- @cost_front.set_handler(:cancel, method(:on_cost_cancel))
- end
-
- #--------------------------------------------------------------------------
- # on_item_ok
- #--------------------------------------------------------------------------
- def on_item_ok
- skill = @item_window.item
- @cost_window.reveal(skill, @item_window.skill_classes(skill))
- @cost_front.reveal(skill, @item_window.skill_classes(skill), @actor)
- end
-
- #--------------------------------------------------------------------------
- # on_cost_ok
- #--------------------------------------------------------------------------
- def on_cost_ok
- Sound.play_use_skill
- skill = @item_window.item
- @actor.learn_skill(skill.id)
- cost = skill.learn_cost[0]
- case skill.learn_cost[1]
- when :jp
- @actor.lose_jp(cost, @cost_front.skill_class)
- when :exp
- @actor.lose_exp_class(cost, @cost_front.skill_class)
- when :gold
- $game_party.lose_gold(cost)
- end
- on_cost_cancel
- refresh_windows
- end
-
- #--------------------------------------------------------------------------
- # on_cost_cancel
- #--------------------------------------------------------------------------
- def on_cost_cancel
- @cost_front.close
- @cost_window.close
- @item_window.activate
- end
-
- #--------------------------------------------------------------------------
- # refresh_windows
- #--------------------------------------------------------------------------
- def refresh_windows
- @item_window.refresh
- @status_window.refresh
- end
-
- end # Scene_LearnSkill
- #==============================================================================
- #
- # ▼ End of File
- #
- #==============================================================================
复制代码 |
|