赞 | 0 |
VIP | 13 |
好人卡 | 7 |
积分 | 7 |
经验 | 32831 |
最后登录 | 2023-12-15 |
在线时间 | 530 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 723
- 在线时间
- 530 小时
- 注册时间
- 2010-6-9
- 帖子
- 840
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 负零 于 2012-3-5 12:47 编辑
求使用方法,似乎插入脚本没有效果。
http://ytomy.sakura.ne.jp/tkool/ ... mp;tech=skill_level- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ スキル熟練度 - KMS_SkillLevel ◆ VX Ace ◆
- #_/ ◇ Last update : 2012/02/12 (TOMY@Kamesoft) ◇
- #_/----------------------------------------------------------------------------
- #_/ スキルに熟練度の概念を追加します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ 設定項目 - BEGIN Setting ★
- #==============================================================================
- module KMS_SkillLevel
- # ◆ 熟練度上限
- EXP_MAX = 999
- # ◆ 敵にも熟練度を適用する
- ENABLE_FOR_ENEMY = false
- # ◆ メニュー画面で使用した場合も熟練度を上げる
- ENABLE_ON_MENU = false
- end
- #==============================================================================
- # ☆ 設定ここまで - END Setting ☆
- #==============================================================================
- $kms_imported = {} if $kms_imported == nil
- $kms_imported["SkillLevel"] = true
- module KMS_SkillLevel
- # デバッグフラグ
- DEBUG = false
- # 熟練度増加量
- # 記述例 : <熟練度増加量 2>
- REGEX_SXP_GAIN = /<(?:熟練度増加量|SXP_GAIN)\s*(\d+)>/i
- # 熟練度補正
- REGEX_REV = /(?:熟練度補正|SXP_REV)\s*/i
- # 行動速度補正
- # 記述例 : <熟練度補正 速度 sxp / 50>
- REGEX_SPEED_REV = /<#{REGEX_REV}(?:速度|SPEED)\s+(.+)>/i
- # 成功率補正
- # 記述例 : <熟練度補正 成功率 sxp / 50>
- REGEX_SUCCESS_REV = /<#{REGEX_REV}(?:成功率|SUCCESS)\s+(.+)>/i
- # 熟練度用制御文字
- # \SXP / \SXP[actor_id,skill_id] / \SXP[skill_id]
- # \S が定義済みだとミスる可能性があるので \_SXP にも対応
- REGEX_TEXT_SXP = /\e_?SXP\[(\d+)\s*,\s*(\d+)]/i
- REGEX_TEXT_SXP_HELP = /\e_?SXP(?:\[(\d+)\])?/i
- end
- # *****************************************************************************
- #==============================================================================
- # □ KMS_Commands
- #==============================================================================
- module KMS_Commands
- module_function
- #--------------------------------------------------------------------------
- # ○ アクターの熟練度の増減
- #--------------------------------------------------------------------------
- def gain_actor_skill_exp(actor_id, skill_id, n)
- return if $game_actors[actor_id].nil?
- $game_actors[actor_id].gain_skill_exp(skill_id, n)
- end
- #--------------------------------------------------------------------------
- # ○ アクターの熟練度をクリア
- #--------------------------------------------------------------------------
- def clear_actor_skill_exp(actor_id)
- return if $game_actors[actor_id].nil?
- $game_actors[actor_id].clear_skill_exp
- end
- end
- #==============================================================================
- # ■ Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- # イベントコマンドから直接コマンドを叩けるようにする
- include KMS_Commands
- end
- #==============================================================================
- # ■ RPG::Skill
- #==============================================================================
- class RPG::Skill < RPG::UsableItem
- #--------------------------------------------------------------------------
- # ○ 熟練度キャッシュ作成
- #--------------------------------------------------------------------------
- def __create_skill_level_cache
- @__skill_exp_gain = 1
- @__speed_rev_by_skill_exp_formula = "0"
- @__success_rev_by_skill_exp_formula = "0"
- note.each_line { |line|
- case line
- when KMS_SkillLevel::REGEX_SXP_GAIN
- @__skill_exp_gain = $1.to_i
- when KMS_SkillLevel::REGEX_SPEED_REV
- @__speed_rev_by_skill_exp_formula = $1
- print "Speed rev[#{id}]: #{$1}\n" if KMS_SkillLevel::DEBUG
- when KMS_SkillLevel::REGEX_SUCCESS_REV
- @__success_rev_by_skill_exp_formula = $1
- print "Success rev[#{id}]: #{$1}\n" if KMS_SkillLevel::DEBUG
- end
- }
- end
- protected :__create_skill_level_cache
- #--------------------------------------------------------------------------
- # ○ 熟練度増加量取得
- #--------------------------------------------------------------------------
- def skill_exp_gain
- __create_skill_level_cache if @__skill_exp_gain.nil?
- return @__skill_exp_gain
- end
- #--------------------------------------------------------------------------
- # ○ 行動速度補正取得
- #--------------------------------------------------------------------------
- def speed_rev_by_skill_exp_formula
- __create_skill_level_cache if @__speed_rev_by_skill_exp_formula.nil?
- return @__speed_rev_by_skill_exp_formula
- end
- #--------------------------------------------------------------------------
- # ○ 成功率補正取得
- #--------------------------------------------------------------------------
- def success_rev_by_skill_exp_formula
- __create_skill_level_cache if @__success_rev_by_skill_exp_formula.nil?
- return @__success_rev_by_skill_exp_formula
- end
- end
- #==============================================================================
- # ■ Game_Action
- #==============================================================================
- class Game_Action
- #--------------------------------------------------------------------------
- # ● 行動速度の計算
- #--------------------------------------------------------------------------
- alias speed_KMS_SkillLevel speed
- def speed
- n = speed_KMS_SkillLevel
- # 速度補正の適用
- n += subject.speed_rev_by_skill_exp(item) if item
- return n
- end
- end
- #==============================================================================
- # ■ Game_BattlerBase
- #==============================================================================
- class Game_BattlerBase
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KMS_SkillLevel initialize
- def initialize
- initialize_KMS_SkillLevel
- @skill_exp = {}
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度の取得
- #--------------------------------------------------------------------------
- def skill_exp(skill_id)
- @skill_exp = {} if @skill_exp.nil?
- @skill_exp[skill_id] = 0 unless @skill_exp.include?(skill_id)
- return @skill_exp[skill_id]
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度の加算
- #--------------------------------------------------------------------------
- def gain_skill_exp(skill_id, n = 1)
- # 基本アクションは加算しない
- return if skill_id == attack_skill_id || skill_id == guard_skill_id
- lv = skill_exp(skill_id)
- @skill_exp[skill_id] = [ [lv + n, 0 ].max, KMS_SkillLevel::EXP_MAX ].min
- if KMS_SkillLevel::DEBUG
- print "#{name} 熟練度 [#{skill_id}] = #{@skill_exp[skill_id]}\n"
- end
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度の初期化
- #--------------------------------------------------------------------------
- def clear_skill_exp
- @skill_exp = {}
- end
- #--------------------------------------------------------------------------
- # ○ 現在のアクションの熟練度を取得
- # skill_id : 対象スキル ID (省略時は現在の行動)
- #--------------------------------------------------------------------------
- def sxp(skill_id = 0)
- if skill_id > 0
- return skill_exp(skill_id)
- else
- return current_skill_exp
- end
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度による行動速度補正を取得
- # item : 対象行動
- #--------------------------------------------------------------------------
- def speed_rev_by_skill_exp(item)
- return 0 unless item.is_a?(RPG::Skill)
- formula = item.speed_rev_by_skill_exp_formula
- formula = formula.gsub(/sxp/i) { "skill_exp(item.id)" }
- return eval(formula)
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度による成功率補正を取得
- # item : 対象行動
- #--------------------------------------------------------------------------
- def success_rev_by_skill_exp(item)
- return 0 unless item.is_a?(RPG::Skill)
- formula = item.success_rev_by_skill_exp_formula
- formula = formula.gsub(/sxp/i) { "skill_exp(item.id)" }
- return eval(formula)
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler < Game_BattlerBase
- #--------------------------------------------------------------------------
- # ○ 現在の行動のスキル熟練度を取得
- #--------------------------------------------------------------------------
- def current_skill_exp
- if current_action.item && current_action.item.is_a?(RPG::Skill)
- return skill_exp(current_action.item.id)
- else
- return 0
- end
- end
- #--------------------------------------------------------------------------
- # ○ スキル熟練度加算処理
- #--------------------------------------------------------------------------
- def gain_skill_exp_effect(item)
- return unless item.is_a?(RPG::Skill)
- if $game_party.in_battle || KMS_SkillLevel::ENABLE_ON_MENU
- gain_skill_exp(item.id, item.skill_exp_gain)
- end
- end
- #--------------------------------------------------------------------------
- # ● スキル/アイテムの使用
- # 行動側に対して呼び出され、使用対象以外に対する効果を適用する。
- #--------------------------------------------------------------------------
- alias use_item_KMS_SkillLevel use_item
- def use_item(item)
- use_item_KMS_SkillLevel(item)
- gain_skill_exp_effect(item)
- end
- #--------------------------------------------------------------------------
- # ● スキル/アイテムの命中率計算
- #--------------------------------------------------------------------------
- alias item_hit_KMS_SkillLevel item_hit
- def item_hit(user, item)
- # 熟練度による成功率補正値を加算
- rate_rev = user.success_rev_by_skill_exp(item) * 0.01
- rate_rev *= user.hit if item.physical?
- return item_hit_KMS_SkillLevel(user, item) + rate_rev
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #==============================================================================
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ○ スキル熟練度の加算
- #--------------------------------------------------------------------------
- def gain_skill_exp(skill_id, n = 1)
- # 何もしない
- end
- end unless KMS_SkillLevel::ENABLE_FOR_ENEMY
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ● 制御文字の事前変換
- #--------------------------------------------------------------------------
- alias convert_escape_characters_KMS_SkillLevel convert_escape_characters
- def convert_escape_characters(text)
- result = convert_escape_characters_KMS_SkillLevel(text).clone
- result.gsub!(KMS_SkillLevel::REGEX_TEXT_SXP) {
- actor = $game_actors[$1.to_i]
- if actor
- actor.skill_exp($2.to_i)
- else
- ""
- end
- }
- return result
- end
- end
- #==============================================================================
- # ■ Window_Help
- #==============================================================================
- class Window_Help < Window_Base
- #--------------------------------------------------------------------------
- # ● アイテム設定
- # item : スキル、アイテム等
- #--------------------------------------------------------------------------
- alias set_item_KMS_SkillLevel set_item
- def set_item(item)
- @current_item = item
- set_item_KMS_SkillLevel(item)
- end
- #--------------------------------------------------------------------------
- # ○ アクターの設定
- #--------------------------------------------------------------------------
- def set_actor(actor)
- @current_actor = actor
- end
- #--------------------------------------------------------------------------
- # ● 制御文字の事前変換
- #--------------------------------------------------------------------------
- unless method_defined?(:convert_escape_characters_KMS_SkillLevel)
- alias convert_escape_characters_KMS_SkillLevel convert_escape_characters
- end
- def convert_escape_characters(text)
- result = convert_escape_characters_KMS_SkillLevel(text).clone
- result.gsub!(KMS_SkillLevel::REGEX_TEXT_SXP_HELP) {
- if @current_actor
- if $1.nil? && @current_item.is_a?(RPG::Skill)
- # 現在のスキル
- @current_actor.skill_exp(@current_item.id)
- else
- # ID 指定
- @current_actor.skill_exp($1.to_i)
- end
- else
- ""
- end
- }
- return result
- end
- end
- #==============================================================================
- # ■ Window_SkillList
- #==============================================================================
- class Window_SkillList < Window_Selectable
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- alias update_help_KMS_SkillLevel update_help
- def update_help
- @help_window.set_actor(@actor)
- update_help_KMS_SkillLevel
- @help_window.set_actor(nil)
- end
- end
- #==============================================================================
- # ■ Scene_Skill
- #==============================================================================
- class Scene_Skill < Scene_ItemBase
- #--------------------------------------------------------------------------
- # ● アイテムの使用
- #--------------------------------------------------------------------------
- alias use_item_KMS_SkillLevel use_item
- def use_item
- use_item_KMS_SkillLevel
- @help_window.set_actor(@actor)
- @help_window.refresh
- @help_window.set_actor(nil)
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● コマンド[スキル]
- #--------------------------------------------------------------------------
- alias command_skill_KMS_SkillLevel command_skill
- def command_skill
- @help_window.clear
- command_skill_KMS_SkillLevel
- end
- end
复制代码 |
|