- #============================================================================= 
- # 技能等级系统 Ver 2.01 
- #----------------------------------------------------------------------------- 
- # By:RyanBern 
- #----------------------------------------------------------------------------- 
- # 主要功能: 
- #     开放了技能成长值,角色在连续使用同一个技能若干次后,该技能会变得更加强大 
- #     值得一提的是,技能的等级和角色的等级没有关系,只和你使用它的频率相关,即 
- #     使角色等级非常高,如果那个技能一直不用,那么技能不会升级。 
- #     只有产生了效果的技能才会增加技能的熟练度(EXP),在这里产生效果是指: 
- #     对敌人打出了不为0的伤害/产生状态变化/对同伴有加血作用/ 
- #     也就是说对着一个满血同伴一直加血的话是不会增加EXP的…… 
- #     技能只要满足升级条件立即升级(也就是说在战斗未完成就可以用升级之后的技能) 
- #     如果在菜单中升级,则下次点击 C 键会立即使用新技能 
- #     技能升级之后原有技能将会消失。 
- #----------------------------------------------------------------------------- 
- # 使用方法: 
- #     在数据库中定义某技能升级后的技能,方法是在对应的技能说明中的任何位置写: 
- #     %sklv[升级后技能ID,升级所需EXP] 
- #     例如:1号技能[治疗]可以升级到2号技能[治疗+],需要10个EXP 
- #     %sklv[2,10] <-注意不要写多余的空格 
- # 更新记录: 
- #     v2.01 --- 修复了菜单不能使用技能的问题;修复了菜单使用技能时升级的问题 
- #============================================================================= 
-   
- module RB 
-   # 使用一次技能之后获得的熟练度(EXP) 
-   BASE_SKILL_EXP = 1 
-   
-   # 升级技能后播放的 SE 
-   SKILL_UP_SE = "Audio/SE/105-Heal01" 
-   
-   # 显示升级窗口对应的开关:打开该序号开关则升级时不会显示升级窗口 
-   NO_SKILL_UP_WINDOW = 11 
- end 
-   
- class RPG::Skill 
-   Regex_Skill = /%sklv\[(\d+),(\d+)\]/i 
-   alias rb_description_20141219 description 
-   def description 
-     text = rb_description_20141219 
-     return text.gsub(Regex_Skill, "") 
-   end 
-   def exp_next 
-     text = rb_description_20141219 
-     Regex_Skill =~ text 
-     return $2.to_i || 0 
-   end 
-   def skill_next 
-     text = rb_description_20141219 
-     Regex_Skill =~ text 
-     return $1.to_i || 0 
-   end 
- end 
-   
- class Game_Temp 
-   attr_accessor :skill_level_up 
- end 
-   
-   
- class Game_Battler 
-   alias rb_skill_effect_20141219 skill_effect 
-   def skill_effect(user, skill) 
-     effective = rb_skill_effect_20141219(user, skill) 
-     if skill.skill_next != 0 && user.is_a?(Game_Actor) 
-       user.gain_skill_exp(skill.id, RB::BASE_SKILL_EXP) if effective 
-     end 
-     return effective 
-   end 
- end 
-   
-   
- class Game_Actor < Game_Battler 
-   alias rb_initialize_20141219 initialize 
-   def initialize(actor_id) 
-     @skills_exp = {} 
-     rb_initialize_20141219(actor_id) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 增加技能经验 
-   #     skill_id : 特技 ID 
-   #     value    : 获取值 
-   #-------------------------------------------------------------------------- 
-   def gain_skill_exp(skill_id, value) 
-     unless skill_learn?(skill_id) 
-       return 
-     end 
-     @skills_exp ||= {} 
-     if @skills_exp[skill_id] == nil 
-       @skills_exp[skill_id] = 0 
-     end 
-     @skills_exp[skill_id] += value 
-     # 满足条件就升级技能 
-     upgrade_skill(skill_id) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取技能经验数值 
-   #     skill_id : 特技 ID 
-   #-------------------------------------------------------------------------- 
-   def skill_exp(skill_id) 
-     return @skills_exp[skill_id] == nil ? 0 : @skills_exp[skill_id] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 遗忘特技 
-   #     skill_id : 特技 ID 
-   #-------------------------------------------------------------------------- 
-   alias rb_forget_skill_20141219 forget_skill 
-   def forget_skill(skill_id) 
-     rb_forget_skill_20141219(skill_id) 
-     @skills_exp ||= {} 
-     @skills_exp.delete(skill_id) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 升级特技 
-   #     skill_id : 特技 ID 
-   #-------------------------------------------------------------------------- 
-   def upgrade_skill(skill_id) 
-     skill_next = $data_skills[skill_id].skill_next 
-     exp_next = $data_skills[skill_id].exp_next 
-     # 技能的下一级别存在的情况下 
-     if $data_skills[skill_id] != nil 
-       # 当前经验高于升级所需经验 
-       if self.skill_exp(skill_id) >= exp_next 
-         # 设置技能升级标志 
-         $game_temp.skill_level_up = true 
-         # 遗忘上一级别的技能 
-         forget_skill(skill_id) 
-         # 显示窗口 
-         unless $game_switches[RB::NO_SKILL_UP_WINDOW] 
-           Audio.se_play(RB::SKILL_UP_SE, 80, 100) if RB::SKILL_UP_SE != "" 
-           show_skill_up_result(skill_id, skill_next) 
-         end 
-         # 学习新特技 
-         learn_skill(skill_next) 
-       end 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 升级显示处理 
-   #-------------------------------------------------------------------------- 
-   def show_skill_up_result(skill_id, skill_next) 
-     skill_learning_window = Window_SkillUpgrade.new(skill_id, skill_next) 
-     # 循环 
-     loop do 
-       # 刷新游戏画面 
-       Graphics.update 
-       # 刷新输入信息 
-       Input.update 
-       # 按下C就关闭窗口 
-       if Input.trigger?(Input::C) 
-         skill_learning_window.visible = false 
-         break 
-       end 
-     end 
-     skill_learning_window.dispose 
-   end 
- end 
-   
- class Window_SkillUpgrade < Window_Base 
-   def initialize(skill_id, new_skill_id) 
-     super(0, 0, 32, 96) 
-     self.contents = Bitmap.new(1, 1) 
-     self.visible = false 
-     self.back_opacity = 160 
-     # 防止被对话框遮住 
-     self.z = 9999 
-     @old_skill = $data_skills[skill_id] 
-     @new_skill = $data_skills[new_skill_id] 
-     refresh 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 刷新 
-   #-------------------------------------------------------------------------- 
-   def refresh 
-     text1 = @old_skill.name + " 升级为:" 
-     text2 = @new_skill.name 
-     w1 = self.contents.text_size(text1).width 
-     w2 = self.contents.text_size(text2).width 
-     self.contents = Bitmap.new([w1, w2].max + 28, 64) 
-     self.width = [w1, w2].max + 28 + 32 
-     self.x = 320 - width / 2 
-     self.y = 240 - height / 2 
-     # 各描写 
-     self.contents.clear 
-     bitmap1 = RPG::Cache.icon(@old_skill.icon_name) 
-     bitmap2 = RPG::Cache.icon(@new_skill.icon_name) 
-     self.contents.blt(4, 4, bitmap1, Rect.new(0,0,24,24)) 
-     self.contents.blt(4, 36, bitmap2, Rect.new(0,0,24,24)) 
-     self.contents.draw_text(28, 0, contents.width - 28, 32, text1) 
-     self.contents.draw_text(28, 32, contents.width - 28, 32, text2) 
-     self.visible = true 
-   end 
- end 
-   
- class Window_Skill < Window_Selectable 
-   def update_help 
-     if self.skill == nil 
-       text = "" 
-     else 
-       text_append = self.skill.skill_next == 0 ? "" \ 
-         : sprintf("Exp:%d/%d", @actor.skill_exp(self.skill.id), self.skill.exp_next) 
-       text = self.skill.description + text_append 
-     end 
-     @help_window.set_text(text) 
-   end 
- end 
-   
-   
- class Scene_Skill 
-   alias rb_update_target_20170530 update_target 
-   def update_target 
-     if $game_temp.skill_level_up 
-       $game_temp.skill_level_up = false 
-       @skill = $data_skills[@skill.skill_next] || @skill 
-       @skill_window.refresh 
-     end 
-     rb_update_target_20170530 
-   end 
- end