赞 | 1 |
VIP | 20 |
好人卡 | 8 |
积分 | 3 |
经验 | 6181 |
最后登录 | 2022-8-5 |
在线时间 | 271 小时 |
Lv2.观梦者 神隐的主犯
- 梦石
- 0
- 星屑
- 289
- 在线时间
- 271 小时
- 注册时间
- 2008-2-22
- 帖子
- 7691
|
嘛,为什么你们要的东西我都有呢?
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ パッシブスキル - KGC_PassiveSkill ◆ VX ◆
- #_/ ◇ Last update : 2008/02/10 ◇
- #_/----------------------------------------------------------------------------
- #_/ 習得するだけで能力値上昇効果を発揮するスキルを作成します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- $imported = {} if $imported == nil
- $imported["PassiveSkill"] = true
- module KGC
- module PassiveSkill
- # パッシブスキル用パラメータリスト
- PARAMS = {
- :maxhp => "MAXHP|最大HP",
- :maxmp => "MAXMP|最大MP",
- :atk => "ATK|攻撃力",
- :def => "DEF|防御力",
- :spi => "SPI|精神力",
- :agi => "AGI|敏捷性",
- :hit => "HIT|命中率",
- :eva => "EVA|回避率",
- :cri => "CRI|クリティカル率",
- :odds => "ODDS|狙われやすさ",
- }
- # パッシブスキル用属性・ステートリスト
- ARRAYS = {
- :attack_element => "ATTACK_ELEMENT|攻撃属性",
- :plus_state => "PLUS_STATE|付加ステート",
- :invalid_state => "INVALID_STATE|無効化ステート",
- }
- # 正規表現
- module Regexp
- # スキル
- module Skill
- # パッシブスキル開始
- BEGIN_PASSIVE = /<(?:PASSIVE_SKILL|パッシブスキル)>/i
- # パッシブスキル終了
- END_PASSIVE = /<\/(?:PASSIVE_SKILL|パッシブスキル)>/i
- # パラメータ修正
- # MAXHP +20 など
- PASSIVE_PARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)([%%])?/
- # 属性・ステートリスト
- # 攻撃属性 1,2,3 など
- PASSIVE_ARRAYS = /^\s*([^:\+\-\d\s]+)\s*(\d+(?:\s*,\s*\d+)*)/
- end
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ KGC::Commands
- #==============================================================================
- module KGC::Commands
- module_function
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの修正値を再設定
- #--------------------------------------------------------------------------
- def restore_passive_rev
- (1...$data_actors.size).each { |i|
- actor = $game_actors[i]
- actor.restore_passive_rev
- }
- end
- end
- class Game_Interpreter
- include KGC::Commands
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::Skill
- #==============================================================================
- class RPG::Skill < RPG::UsableItem
- #--------------------------------------------------------------------------
- # ○ パッシブスキルのキャッシュを生成
- #--------------------------------------------------------------------------
- def create_passive_skill_cache
- @__passive = false
- @__passive_params = {}
- @__passive_params_rate = {}
- @__passive_arrays = {}
- passive_flag = false
- self.note.split(/[\r\n]+/).each { |line|
- case line
- when KGC::PassiveSkill::Regexp::Skill::BEGIN_PASSIVE
- # パッシブスキル定義開始
- passive_flag = true
- @__passive = true
- when KGC::PassiveSkill::Regexp::Skill::END_PASSIVE
- # パッシブスキル定義終了
- passive_flag = false
- when KGC::PassiveSkill::Regexp::Skill::PASSIVE_PARAMS
- # 能力値修正
- if passive_flag
- apply_passive_params($1, $2.to_i, $3 != nil)
- end
- when KGC::PassiveSkill::Regexp::Skill::PASSIVE_ARRAYS
- # 属性・ステート
- if passive_flag
- apply_passive_arrays($1, $2.scan(/\d+/))
- end
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの能力値修正を適用
- # param : 対象パラメータ
- # value : 修正値
- # rate : true なら % 指定
- #--------------------------------------------------------------------------
- def apply_passive_params(param, value, rate)
- KGC::PassiveSkill::PARAMS.each { |k, v|
- if param =~ /(?:#{v})/i
- if rate
- @__passive_params_rate[k] = 0 if @__passive_params_rate[k] == nil
- @__passive_params_rate[k] += value
- else
- @__passive_params[k] = 0 if @__passive_params[k] == nil
- @__passive_params[k] += value
- end
- break
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの追加属性・ステートを適用
- # param : 対象パラメータ
- # list : 属性・ステート一覧
- #--------------------------------------------------------------------------
- def apply_passive_arrays(param, list)
- KGC::PassiveSkill::ARRAYS.each { |k, v|
- if param =~ /(?:#{v})/i
- values = []
- list.each { |num| values << num.to_i }
- @__passive_arrays[k] = [] if @__passive_arrays[k] == nil
- @__passive_arrays[k] |= values
- break
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルであるか
- #--------------------------------------------------------------------------
- def passive
- create_passive_skill_cache if @__passive == nil
- return @__passive
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの能力値修正 (即値)
- #--------------------------------------------------------------------------
- def passive_params
- create_passive_skill_cache if @__passive_params == nil
- return @__passive_params
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの能力値修正 (割合)
- #--------------------------------------------------------------------------
- def passive_params_rate
- create_passive_skill_cache if @__passive_params_rate == nil
- return @__passive_params_rate
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの属性・ステートリスト
- #--------------------------------------------------------------------------
- def passive_arrays
- create_passive_skill_cache if @__passive_arrays == nil
- return @__passive_arrays
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● セットアップ
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias setup_KGC_PassiveSkill setup
- def setup(actor_id)
- setup_KGC_PassiveSkill(actor_id)
- restore_passive_rev
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルの修正値を再設定
- #--------------------------------------------------------------------------
- def restore_passive_rev
- # 初期化
- @passive_params = {}
- @passive_params_rate = {}
- @passive_arrays = {}
- KGC::PassiveSkill::PARAMS.each_key { |k|
- @passive_params[k] = 0
- @passive_params_rate[k] = 100
- }
- KGC::PassiveSkill::ARRAYS.each_key { |k| @passive_arrays[k] = [] }
- # ≪スキルCP制≫ の併用を考慮し、戦闘中フラグを一時的にオン
- last_in_battle = $game_temp.in_battle
- $game_temp.in_battle = true
- # 修正値を取得
- self.skills.each { |skill|
- next unless skill.passive
- skill.passive_params.each { |k, v| @passive_params[k] += v }
- skill.passive_params_rate.each { |k, v| @passive_params_rate[k] += v }
- skill.passive_arrays.each { |k, v| @passive_arrays[k] |= v }
- }
- $game_temp.in_battle = last_in_battle
- # HP/MP を修正
- self.hp = self.hp
- self.mp = self.mp
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルによるパラメータ修正値 (即値)
- #--------------------------------------------------------------------------
- def passive_params
- restore_passive_rev if @passive_params == nil
- return @passive_params
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルによるパラメータ修正値 (割合)
- #--------------------------------------------------------------------------
- def passive_params_rate
- restore_passive_rev if @passive_params_rate == nil
- return @passive_params_rate
- end
- #--------------------------------------------------------------------------
- # ○ パッシブスキルによる追加属性・ステート
- #--------------------------------------------------------------------------
- def passive_arrays
- restore_passive_rev if @passive_arrays == nil
- return @passive_arrays
- end
- #--------------------------------------------------------------------------
- # ● 装備の変更 (オブジェクトで指定)
- # equip_type : 装備部位 (0..4)
- # item : 武器 or 防具 (nil なら装備解除)
- # test : テストフラグ (戦闘テスト、または装備画面での一時装備)
- #--------------------------------------------------------------------------
- alias change_equip_KGC_PassiveSkill change_equip
- def change_equip(equip_type, item, test = false)
- change_equip_KGC_PassiveSkill(equip_type, item, test)
- restore_passive_rev unless test
- end
- #--------------------------------------------------------------------------
- # ● 装備の破棄
- # item : 破棄する武器 or 防具
- # 武器/防具の増減で「装備品も含める」のとき使用する。
- #--------------------------------------------------------------------------
- alias discard_equip_KGC_PassiveSkill discard_equip
- def discard_equip(item)
- discard_equip_KGC_PassiveSkill(item)
- restore_passive_rev
- end
- #--------------------------------------------------------------------------
- # ● ステート無効化判定
- # state_id : ステート ID
- #--------------------------------------------------------------------------
- alias state_resist_KGC_PassiveSkill? state_resist?
- def state_resist?(state_id)
- return true if passive_arrays[:invalid_state].include?(state_id)
- return state_resist_KGC_PassiveSkill?(state_id)
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃の属性取得
- #--------------------------------------------------------------------------
- alias element_set_KGC_PassiveSkill element_set
- def element_set
- return (element_set_KGC_PassiveSkill | passive_arrays[:attack_element])
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃の追加効果 (ステート変化) 取得
- #--------------------------------------------------------------------------
- alias plus_state_set_KGC_PassiveSkill plus_state_set
- def plus_state_set
- return (plus_state_set_KGC_PassiveSkill | passive_arrays[:plus_state])
- end
- #--------------------------------------------------------------------------
- # ● 基本 MaxHP の取得
- #--------------------------------------------------------------------------
- alias base_maxhp_KGC_PassiveSkill base_maxhp
- def base_maxhp
- n = base_maxhp_KGC_PassiveSkill + passive_params[:maxhp]
- n = n * passive_params_rate[:maxhp] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本 MaxMP の取得
- #--------------------------------------------------------------------------
- alias base_maxmp_KGC_PassiveSkill base_maxmp
- def base_maxmp
- n = base_maxmp_KGC_PassiveSkill + passive_params[:maxmp]
- n = n * passive_params_rate[:maxmp] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本攻撃力の取得
- #--------------------------------------------------------------------------
- alias base_atk_KGC_PassiveSkill base_atk
- def base_atk
- n = base_atk_KGC_PassiveSkill + passive_params[:atk]
- n = n * passive_params_rate[:atk] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本防御力の取得
- #--------------------------------------------------------------------------
- alias base_def_KGC_PassiveSkill base_def
- def base_def
- n = base_def_KGC_PassiveSkill + passive_params[:def]
- n = n * passive_params_rate[:def] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本精神力の取得
- #--------------------------------------------------------------------------
- alias base_spi_KGC_PassiveSkill base_spi
- def base_spi
- n = base_spi_KGC_PassiveSkill + passive_params[:spi]
- n = n * passive_params_rate[:spi] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本敏捷性の取得
- #--------------------------------------------------------------------------
- alias base_agi_KGC_PassiveSkill base_agi
- def base_agi
- n = base_agi_KGC_PassiveSkill + passive_params[:agi]
- n = n * passive_params_rate[:agi] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 命中率の取得
- #--------------------------------------------------------------------------
- alias hit_KGC_PassiveSkill hit
- def hit
- n = hit_KGC_PassiveSkill + passive_params[:hit]
- n = n * passive_params_rate[:hit] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 回避率の取得
- #--------------------------------------------------------------------------
- alias eva_KGC_PassiveSkill eva
- def eva
- n = eva_KGC_PassiveSkill + passive_params[:eva]
- n = n * passive_params_rate[:eva] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● クリティカル率の取得
- #--------------------------------------------------------------------------
- alias cri_KGC_PassiveSkill cri
- def cri
- n = cri_KGC_PassiveSkill + passive_params[:cri]
- n = n * passive_params_rate[:cri] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● 狙われやすさの取得
- #--------------------------------------------------------------------------
- alias odds_KGC_PassiveSkill odds
- def odds
- n = odds_KGC_PassiveSkill + passive_params[:odds]
- n = n * passive_params_rate[:odds] / 100
- return n
- end
- #--------------------------------------------------------------------------
- # ● スキルを覚える
- # skill_id : スキル ID
- #--------------------------------------------------------------------------
- alias learn_skill_KGC_PassiveSkill learn_skill
- def learn_skill(skill_id)
- learn_skill_KGC_PassiveSkill(skill_id)
- restore_passive_rev
- end
- #--------------------------------------------------------------------------
- # ● スキルを忘れる
- # skill_id : スキル ID
- #--------------------------------------------------------------------------
- alias forget_skill_KGC_PassiveSkill forget_skill
- def forget_skill(skill_id)
- forget_skill_KGC_PassiveSkill(skill_id)
- restore_passive_rev
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_File
- #==============================================================================
- class Scene_File < Scene_Base
- #--------------------------------------------------------------------------
- # ● セーブデータの読み込み
- # file : 読み込み用ファイルオブジェクト (オープン済み)
- #--------------------------------------------------------------------------
- alias read_save_data_KGC_PassiveSkill read_save_data
- def read_save_data(file)
- read_save_data_KGC_PassiveSkill(file)
- KGC::Commands.restore_passive_rev
- Graphics.frame_reset
- end
- end
复制代码
使用说明:
用下面的格式在装备的「备注」里写:
<passive_skill>
MAXHP +10%
MAXMP -5%
atk +30
attack_element 10,11
</passive_skill>
夹在<passive_skill>和</passive_skill>之间的就成了被动技能的定义。
当技能习得时,里面的各种能力值就会加值,记得一行写一种。
能力值名称 +n # n 增加
能力值名称 -n # n 减少
能力值名称 +n% # n% 增加
能力值名称 -n% # n% 减少
可以定义很多种能力值增减,没有顺序规定。
使用能力值名称时:
MAXHP 最大HP
MAXMP 最大MP
ATK 攻击力
DEF 防御力
SPI 精神力
AGI 敏捷性
HIT 命中率
EVA 闪躲率
CRI 会心一击率
ODDS 受敌攻击率(就是跟职业里设置的位置相关)
除了能力值以外,状态和攻击属性也能设定
设定方式:
名称 id1 # 单一设定
名称 id1, id2, id3.... #多数设定
例子:
attack_element 10, 11
plus_state 2
invalid_state 3, 4, 5
attack_element 攻击属性
plus_state 附加状态
invalid_state 无效化状态
两个可以和在一起用
<passive_skill>
MAXHP +10%
MAXMP -5%
atk +30
attack_element 10,11
plus_state 2
invalid_state 3, 4, 5
</passive_skill>
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~ |
|