#============================================================================== # ■ VXAce-RGSS3-7 閃きシステム [Ver.1.2.0] by Claimh #------------------------------------------------------------------------------ # 通常攻撃時、スキル使用時にある確率でスキルを新たに覚える(= 閃く) # 次の3タイプの閃き動作を行います # 通常 :通常攻撃時に設定した閃き率で閃く # スキル派生 :特定のスキル使用時に閃く # エネミー閃き :エネミーが通常攻撃時またはスキル使用時に閃く #------------------------------------------------------------------------------ # [Ace版特別仕様] # ・複数行動時の閃き # 複数回行動する場合、閃きを1回に制限できます。 # ・対象選択 # 攻撃選択時に複数/ランダムの攻撃やスキルを選択していた場合、 # 複数/ランダム → 単体 のような攻撃対象が狭まるスキルは閃き対象からは除外されます。 # ・威力計算による閃き制限 # 威力計算/コスト計算で威力やコストの下がるスキルを閃き対象から除外します。 # (威力計算は発動者→発動者で計算するため、お勧めしません…) # ・閃きアニメーション # 行動者のスプライト表示が有効の場合のみ機能します。 # ・レーティング # 確率計算前にレーティングによって、閃く対象のスキルを優先度付けします。 # これによって、単純な確率計算以外にも重み付けができます。 #============================================================================== module SysFlash #============================================================================== # □ 基本設定 #============================================================================== # 通常閃き有り NORMAL_FLASH = true # スキル派生有り DERIVE_FLASH = true # スキル派生時の閃き基準 # スキル使用回数:true # 閃き率 :false DEREIVE_USE = false # スキル使用時に通常閃き判定有り # …この機能を有効化するとスキル派生に失敗した後に通常閃きの判定に入ります # (結果、スキル使用時は閃きやすくなります) SKILL_NORMAL_FLASH = true # エネミー閃き(通常攻撃時)有り ENEMY_NORMAL = true # エネミー閃き(スキル使用時)有り ENEMY_SKILL = true # 威力の落ちるスキルは閃かない<非推奨> DISABLE_PW_DOWN = false # 消費コストの落ちるスキルは閃かない DISABLE_COST_DOWN = true # 同一属性を持つスキルしか閃かない ONLY_SAME_ELEMENT = false UNCHECK_ELEMENTS = [20, 21] # チェック対象外とする属性ID # 複数回行動時の閃きは1回に限定する NOT_MULTI_FLASH = true # 閃き時にアニメーションを使用する # ※アクター側はGame_Actor#use_sprite? がtrueのときのみ FLASH_ANIME = false # スキルを閃いたときに表示するアニメーションID FLASH_ANIMATION_ID = 49 # スキルを閃いたときのSE(nil時はSEなし) FLASH_SE = RPG::SE.new("Flash1") # スキル閃き時の消費MP/TPを0にする FLASH_COST = true #============================================================================ # □ 閃き率上昇機能設定 #============================================================================ # ピンチの時ほど閃きやすくする USE_PINCH_UP = true # 上昇させる値 # [〜10%, 〜25%, 〜50%, 50%over, 100%] PINCH_PRO_UP = [10, 5, 1, 0, 0.5] # 自分のレベルに応じて閃き率上昇 USE_LV_UP = true # 上昇させる値(この値からランダムで上昇する) # [〜10, 〜20, 〜30, 〜40, 〜50, 50over] LVUP_RATE = [0, 2, 4, 8, 15, 30] #++スキル習得数に応じて閃き率を減衰+++ USE_SKILL_NUM = true # 減衰させる値(この値からランダムで減算する) # [〜10, 〜20, 〜30, 〜40, 〜50, 50over] SKN_RATE = [0, 2, 5, 10, 25, 50] # 装備によって閃き率を増減 # 装備品のメモ欄に以下の記述がある場合に増減します # @f_a_ud[増減%] : 全スキルに対して増減 # @f_s_ud[スキルID, 増減%] : 対象スキルIDに対して増減 # @f_t_ud[スキルタイプ, 増減%] : 対象スキルタイプに対して増減 # @f_w_ud[増減%] : <武器のみ>同じ武器タイプのスキルに対して増減 USE_EQUIP_UP = false #+++ 熟練度システムとの併用 +++# # 攻撃属性が得意・不得意かによって確率を変動させる USE_ATK_ATTR_UP = true # 閃き対象の攻撃属性が得意・不得意かによって確率を変動させる USE_FLASH_ATTR_UP = true # 熟練度による閃き上昇値(×熟練度レベル) ATTR_PRO_UP = 1 #+++ エネミー設定との併用 +++# # エネミーとのレベル差によって閃く確率を上昇 USE_DIF_LV_UP = true # 弱い敵に対しては確率を減算する USE_DIF_LV_DW = true # レベル差で加算/減算する値 # [〜5, 〜10, 〜20, 〜30, 〜40, 〜50, 50over] DIF_LV_UP = [0, 2, 5, 10, 25, 50, 80] #-------------------------------------------------------------------------- # ● 閃き率変動操作 # battler : 行動者 # skill : 閃き対象のスキル # [return] : 増減する閃き率 #-------------------------------------------------------------------------- def self.add_usr_prob(battler, skill) r = 0.0 # 変数による増減 # r += $game_variables[1] # スイッチによる増減 # r += 10 if $game_switches[1] # 特定ステートによる増減 # r += 10 if battler.state?(state_id) return r end #============================================================================== # □ 閃き対象外スキルの設定 # 特定のスキルのみ閃きの対象外に指定できます。 # 回復スキル等はこちらに設定することをお勧めします。 #============================================================================== # スキル派生のみ有効にするスキル # ONLY_DERIVE_SKILL = [スキルID, スキルID,・・・] ONLY_DERIVE_SKILL = [1,2,4,5] # スキル使用時には絶対閃きをなしにするスキル # NOT_FLASH_SKILL = [スキルID, スキルID,・・・] NOT_FLASH_SKILL = [3,6] #============================================================================== # □ 熟練度による閃き制限(要:熟練度システム) # 特定の熟練度以上に達している場合のみ閃きます。 # 達していないスキルは強制的に閃かないようにします。 #============================================================================== # 熟練度による閃き制限を使用する? USE_ATTR_LV_LIMITTER = false if defined?(SysUpdate) # この行は削除禁止 # 熟練度LVと閃くスキルの設定 ATTR_LIMIT_SKILL = { # スキルID => [[熟練度属性ID, 閃き可能な熟練度レベル], …] # ※熟練度属性IDには熟練度内の設定を使うと後々の変更も簡単です 9 => [[SysUpdate::FIRE, 3]], 12 => [[SysUpdate::ICE, 3]], 15 => [[SysUpdate::THUNDER, 3]], 18 => [[SysUpdate::WATER, 3]], 21 => [[SysUpdate::GROUND, 3]], 24 => [[SysUpdate::WIND, 3]], 27 => [[SysUpdate::LIGHT, 3]], 30 => [[SysUpdate::DARK, 3]], 60 => [[SysUpdate::SWORD, 4]], 64 => [[SysUpdate::LANCE, 4]], 68 => [[SysUpdate::AX, 5]], 80 => [[SysUpdate::SWORD, 5]], } end #if defined?(SysUpdate) # この行は削除禁止 #============================================================================== # □ 通常閃きの設定 … SysFlash#divide_normal #============================================================================== NORMAL = [] =begin <基本設定形式> NORMAL[アクターID] = [ スキル閃き設定@, スキル閃き設定A, … ] [スキル閃き設定] --> [閃きスキルID, 閃く確率, レーティング(1〜10)] 閃きスキルID : ここで指定したものを閃く 閃く確率 : 閃く確率or使用回数 =end # アクターID:1 NORMAL[1] = [ [80, 5, 5], [81, 10, 1] ] # アクターID:2 NORMAL[2] = [ [61, 30, 5], [62, 12.5, 3], [63, 5, 1] ] # アクターID:3 NORMAL[3] = [ [65, 40, 5], [66, 9.5, 3], [67, 3.6, 1] ] # アクターID:4 NORMAL[4] = [ [69, 20, 5], [70, 15.5, 1] ] # アクターID:5 NORMAL[5] = [ [73, 30, 5], [74, 12.4, 2], [75, 8, 1] ] # アクターID:6 NORMAL[6] = [ [77, 18.6, 5], [78, 10, 2], [79, 3.3, 1] ] # アクターID:7 NORMAL[7] = [ [] # 個別で閃きなしの場合はこんな感じで ] # アクターID:8 NORMAL[8] = [ [ 7, 20, 3], [10, 20, 3], [13, 20, 3], [16, 20, 3], [19, 20, 3], [22, 20, 3], [25, 20, 3], [28, 20, 3], [31, 20, 3] ] #============================================================================== # □ スキル派生の設定 … SysFlash#divide_derive #============================================================================== DERIVE = [] =begin スキル派生の指定方法 スキル派生は少し複雑な設定となっています。 スキル派生についてはまず派生元のスキルから決める必要があります。 (この派生元スキルを使用したときに閃く判定が実行されます) <基本設定形式> DERIVE[アクターID] = { 派生元スキルID => [派生スキル設定@, 派生スキル設定A, …] } <派生スキル設定> [派生適合確率, 閃き条件, 閃きスキルID, レーティング(1〜10)] 派生適合確率 : 派生が発生する確率or使用回数 閃き条件 : 派生元スキル以外に特定のスキルを習得しておく必要のあるスキル 閃きスキルID : ここで指定したものを閃く <閃き条件設定形式> [条件@スキルID, 条件AスキルID, …] =end # アクターID:1 DERIVE[1] = { # 派生元スキルID => [派生スキル設定@, 派生スキル設定A, …] 57 => [ # 派生スキル@ [10, # 派生適合確率:10% nil, # 閃き条件:なし 59, # 閃くスキル:スキルID 59 5], # レーティング:5 # 派生スキルA [5, # 派生適合確率:5% [58, 59], # 閃き条件:スキルID 58,59を習得済み 60, # 閃くスキル:スキルID 60 1] # レーティング:1 ] } #簡略化した例 #DERIVE[1] = { # 57 => [[10, nil, 59, 5], [5, [58, 59], 60, 1]] #} # アクターID:2 DERIVE[2] = { 61 => [[ 3, [63], 60, 5]] } # アクターID:3 DERIVE[3] = { 51 => [[10, nil, 52, 5]], 53 => [[15, [51], 54, 5]] } # アクターID:4 DERIVE[4] = { 69 => [[50, nil, 73, 5]], 70 => [[20, [71], 74, 5]] } # アクターID:5 DERIVE[5] = { 74 => [[50, [75], 76, 5]] } # アクターID:6 DERIVE[6] = { 77 => [[30, nil, 80, 5]] } # アクターID:7 DERIVE[7] = { 1 => [[15, nil, 2, 5]], 2 => [[ 5, [1], 3, 5]], 4 => [[15, nil, 5, 5]] } # アクターID:8 DERIVE[8] = { 7 => [[15, nil, 8, 5]], 8 => [[ 5, [7], 9, 5]], 10 => [[15, nil, 11, 5]], 11 => [[ 5, [10], 12, 5]], 13 => [[15, nil, 14, 5]], 14 => [[ 5, [13], 15, 5]], 16 => [[15, nil, 17, 5]], 17 => [[ 5, [16], 18, 5]], 19 => [[15, nil, 20, 5]], 20 => [[ 5, [19], 21, 5]], 22 => [[15, nil, 23, 5]], 23 => [[ 5, [22], 24, 5]], 25 => [[15, nil, 26, 5]], 26 => [[ 5, [25], 27, 5]], 28 => [[15, nil, 29, 5]], 29 => [[ 5, [27], 30, 5]], 31 => [[ 2, nil, 32, 5]] } #============================================================================== # □ エネミー閃きの設定 #============================================================================== E_FLASH = [] # エネミー用の閃き設定 # 閃くスキルの指定方法は 通常閃き と同じです # E_FLASH[エネミーID] = [スキル指定1, スキル指定2・・・] # エネミーID:1 E_FLASH[1] = [[ 7, 10, 5], [ 8, 5.5, 1]] # エネミーID:2 E_FLASH[2] = [[10, 20, 5], [11, 5, 1]] # エネミーID:11 E_FLASH[11] = [[80, 52, 5], [81, 50, 1]] # エネミーID:30 E_FLASH[30] = [[80, 10, 5], [81, 50, 1]] #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- # ● 通常閃き 対象振り分け ☆カスタマイズポイント # アクター別 -> actor.id # 職業別 -> actor.class_id # 装備武器ID別 -> actor.weaponsからRPG::Weaponのidを見る # 装備武器タイプ別 -> actor.weaponsからRPG::Weaponのwtype_idを見る #-------------------------------------------------------------------------- def self.divide_normal(actor) flash_skills = NORMAL[actor.id] # アクターID別 # 空定義は無視する。 return nil if flash_skills.nil? or flash_skills.empty? # 閃き対象がある場合はクラス化して返す return NormalFlash.new(actor, flash_skills.dup).randum_set end #-------------------------------------------------------------------------- # ● スキル派生 対象振り分け ☆カスタマイズポイント # アクター別 -> actor.id # 職業別 -> actor.class_id # 装備武器ID別 -> actor.weaponsからRPG::Weaponのidを見る # 装備武器タイプ別 -> actor.weaponsからRPG::Weaponのwtype_idを見る #-------------------------------------------------------------------------- def self.divide_derive(actor, skill_id) flash_skills = DERIVE[actor.id] # アクターID別 # 空定義は無視する。 return nil if flash_skills.nil? or flash_skills.empty? or flash_skills[skill_id].nil? # 閃き対象がある場合はクラス化して返す return DeriveFlash.new(actor, flash_skills[skill_id].dup, skill_id) end end =begin # 武器ID別の例 # ID:0 … 素手 # ID:1〜 … 武器ID module SysFlash #-------------------------------------------------------------------------- # ● 通常閃き 対象振り分け #-------------------------------------------------------------------------- def self.divide_normal(actor) flash_skills = setting_w_id(actor, true) return nil if flash_skills.nil? or flash_skills.empty? return NormalFlash.new(actor, flash_skills.dup).randum_set end #-------------------------------------------------------------------------- # ● スキル派生 対象振り分け #-------------------------------------------------------------------------- def self.divide_derive(actor, skill_id) flash_skills = setting_w_id(actor, false, skill_id) return nil if flash_skills.nil? or flash_skills.empty? or flash_skills[skill_id].nil? return DeriveFlash.new(actor, flash_skills[skill_id].dup, skill_id) end #-------------------------------------------------------------------------- # ●装備武器ID別(二刀流の場合は両者のIDで見る) #-------------------------------------------------------------------------- def self.setting_w_id(actor, normal=true, skill_id=0) weapons = actor.weapons weapons.empty? ? flash_wid_one(0, normal, skill_id) : weapons.collect {|w| flash_wid_one(w.id, normal, skill_id)} end #-------------------------------------------------------------------------- # ● 武器ID別の設定を取得(通常 & 派生) #-------------------------------------------------------------------------- def self.flash_wid_one(id, normal=true, skill_id=0) return NORMAL[id] if normal # 通常 return DERIVE[id] # 派生 end end =end =begin # 武器タイプID別の例 # ID:0 … 武器タイプなし(素手を含む) # ID:1〜 … 武器タイプID module SysFlash #-------------------------------------------------------------------------- # ● 通常閃き 対象振り分け #-------------------------------------------------------------------------- def self.divide_normal(actor) flash_skills = setting_w_type(actor, true) return nil if flash_skills.nil? or flash_skills.empty? return NormalFlash.new(actor, flash_skills.dup).randum_set end #-------------------------------------------------------------------------- # ● スキル派生 対象振り分け #-------------------------------------------------------------------------- def self.divide_derive(actor, skill_id) flash_skills = setting_w_type(actor, false, skill_id) return nil if flash_skills.nil? or flash_skills.empty? or flash_skills[skill_id].nil? return DeriveFlash.new(actor, flash_skills[skill_id].dup, skill_id) end #-------------------------------------------------------------------------- # ●装備武器type別(二刀流の場合は両者のタイプで見る) #-------------------------------------------------------------------------- def self.setting_w_type(actor, normal=true, skill_id=0) weapons = actor.weapons weapons.empty? ? flash_wid_one(0, normal, skill_id) : weapons.collect {|w| flash_wtype_one(w.wtype_id, normal, skill_id)} end #-------------------------------------------------------------------------- # ● 武器タイプID別の設定を取得(通常 & 派生) #-------------------------------------------------------------------------- def self.flash_wid_one(wtype_id, normal=true, skill_id=0) return NORMAL[id] if normal # 通常 return DERIVE[id] # 派生 end end =end