#============================================================================== # スキルポイントでスキル習得 ver1.02 #------------------------------------------------------------------------------ #[特徴] # 「経験値消費でスキル習得」を経験値ではなくスキルポイントで # スキルを習得するようにします。 # ※ 「経験値消費でスキル習得」のスクリプトも必要です。 # #[スキル設定方法] # スキルのメモ欄に <必要経験値:数値> ではなく <必要SP:数値> と # 書いても良いようにしました。 # 必要ポイントを個別に設定したい場合は <必要SP1:数値> のような書き方になります。 # ※ 「必要経験値」ではなんとなくおかしい気がしたので。 # 無論、「必要経験値」という書き方でも動作します。 # #[スキルポイントの取得方法] # 設定項目にて、レベルアップ時に取得するように設定可能。 # また、エネミーのメモ欄に <取得SP:数値> と書くことで、 # 戦闘勝利時に取得することも可能。 # # イベントコマンドのスクリプトで、 # gain_skill_point(アクターID, 取得スキルポイント) # と書くことで、取得することも可能。 # #[スクリプトの並び順] # 経験値消費でスキル習得(必須) # スキルポイントでスキル習得(本スクリプト) # 経験値消費でスキル習得 + スキルレベル(導入している場合) # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.02 スキルレベルの更新につき、更新箇所あり # ver1.01 スキル習得時、スキルポイントを消費しないバグを修正 # 再定義していた箇所をエイリアスにしました(競合回避) # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module LearnSkill # スキルポイントの短縮名 NAME_SP = "SP" # 初期スキルポイント INIT_SP = 3 # レベルアップ時に増えるスキルポイント GAIN_SP = 1 # 戦闘でスキルポイントを取得した際の文章 ObtainSp = "スキルポイントを %s 手に入れた!" # 必要スキルポイントの描画方法 NEED_EXP = "%d sp" end end #============================================================================== # ここまで #============================================================================== $kzr_imported = {} if $kzr_imported == nil $kzr_imported["LearnSkillSp"] = true #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler include Kazari::LearnSkill #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :skill_point #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias kzr_learn_skill_by_sp_setup setup def setup(actor_id) kzr_learn_skill_by_sp_setup(actor_id) @skill_point = INIT_SP end #-------------------------------------------------------------------------- # ● スキルの習得可能判定 #-------------------------------------------------------------------------- def skill_can_learn?(skill) return false if skill == nil return false if skill_learn?(skill) return false unless need_skill?(skill) return @skill_point >= need_exp(skill) end #-------------------------------------------------------------------------- # ● スキルの習得(経験値消費) #-------------------------------------------------------------------------- def learning_skill(skill) if $kzr_imported["LearnSkillPlusSkillLevel"] @skill_level[skill.id] += 1 learn_skill(skill.id) if @skill_level[skill.id] == 1 else learn_skill(skill.id) end @skill_point -= need_exp(skill) end #-------------------------------------------------------------------------- # ● レベルアップ #-------------------------------------------------------------------------- alias kzr_learn_skill_by_sp_level_up level_up def level_up kzr_learn_skill_by_sp_level_up @skill_point += GAIN_SP end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● スキルポイントの取得 #-------------------------------------------------------------------------- def sp enemy.sp end end #============================================================================== # ■ Game_Troop #============================================================================== class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # ● スキルポイントの合計計算 #-------------------------------------------------------------------------- def sp_total dead_members.inject(0) {|r, enemy| r += enemy.sp } end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● スキルポイントを取得する #-------------------------------------------------------------------------- def gain_skill_point(actor_id, skill_point) $game_actors[actor_id].skill_point += skill_point end end #============================================================================== # ■ BattleManager #============================================================================== class << BattleManager #-------------------------------------------------------------------------- # ● 獲得した経験値の表示 #-------------------------------------------------------------------------- alias kzr_display_exp display_exp def display_exp kzr_display_exp gain_sp end #-------------------------------------------------------------------------- # ● スキルポイントの取得と表示 #-------------------------------------------------------------------------- def gain_sp $game_party.all_members.each do |actor| actor.skill_point += $game_troop.sp_total end if $game_troop.sp_total > 0 text = sprintf(Kazari::LearnSkill::ObtainSp, $game_troop.sp_total) $game_message.add('\.' + text) end end end #============================================================================== # ■ Window_SkillStatusExp #============================================================================== class Window_SkillStatusExp < Window_Base include Kazari::LearnSkill #-------------------------------------------------------------------------- # ● 経験値情報の描画 #-------------------------------------------------------------------------- def draw_actor_exp(actor, x, y) change_color(system_color) self.contents.draw_text(x, y, 36, line_height, NAME_SP) change_color(normal_color) self.contents.draw_text(x, y, 124, line_height, actor.skill_point, 2) end end module RPG class Skill def need_exp(actor_id) @parsonal_need ||= {} return @parsonal_need[actor_id] if @parsonal_need[actor_id] != nil return @need if @need != nil @need = 0 note.each_line { |line| case line when /<必要経験値(\d+):(\d+)>/i if $1.to_i == actor_id @parsonal_need[actor_id] = $2.to_i return @parsonal_need[actor_id] end when /<必要SP(\d+):(\d+)>/i if $1.to_i == actor_id @parsonal_need[actor_id] = $2.to_i return @parsonal_need[actor_id] end when /<必要経験値:(\d+)>/i @need = $1.to_i when /<必要SP:(\d+)>/i @need = $1.to_i end } return @need end end class Enemy < BaseItem def sp return @sp if @sp != nil @sp = 0 note.each_line { |line| case line when /<取得SP:(\d+)>/i ; @sp = $1.to_i end } @sp end end end