赞 | 0 |
VIP | -1 |
好人卡 | 0 |
积分 | 1 |
经验 | 329224 |
最后登录 | 2016-9-9 |
在线时间 | 5 小时 |
Lv1.梦旅人 NewS-
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 5 小时
- 注册时间
- 2005-10-23
- 帖子
- 3651
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
效果图:
[概要]
戦闘時の行動によって、バトル終了時に一定確率で能力値がアップします。
- #==============================================================================
- # ++ 戦闘終了時にステータスUP ver. 1.40 ++
- # Script by パラ犬
- # http://para.j-mx.com/
- #------------------------------------------------------------------------------
- # 戦闘時の行動により、バトル終了時にステータスがアップします。
- #------------------------------------------------------------------------------
- #[設置上の注意]
- # アクティブタイムバトルと併用する時は、このスクリプトを下に置いてください。
- #==============================================================================
- module PARA_STSUP
-
- # 各行動時に能力値がアップする確率
- # (戦闘終了時に全ての行動の平均値で計算します)
- # [最大HP/最大SP/腕力/器用さ/素早さ/魔力]
- ACT_ATK = [10, 0, 10, 5, 5, 0] # 通常攻撃
- ACT_SKILL = [5, 10, 5, 5, 5, 5] # スキル
- ACT_GUARD = [20, 0, 0, 0, 0, 0] # 防御
- ACT_ITEM = [5, 5, 5, 5, 5, 5] # アイテム
- ACT_NONE = [0, 0, 0, 0, 0, 0] # コマンド未入力または行動不能
- # 武器属性で通常攻撃の成長率を変化
- # (書式は「 "属性名"=>成長率 」。最終行は「 } 」で閉じる)
- ATK_ELEMENTS = { "剣" => [10, 0, 10, 5, 5, 0],
- "槍" => [10, 0, 10, 5, 5, 0],
- "斧" => [10, 0, 20, 0, 0, 0]}
- # スキルの属性で成長率を変化
- SKILL_ELEMENTS = { "剣" => [5, 10, 10, 5, 5, 0],
- "槍" => [5, 10, 5, 5, 10, 0],
- "斧" => [10, 10, 20, 0, 0, 0],
- "黒魔法\" => [0, 15, 0, 5, 0, 15],
- "神聖魔法" => [0, 15, 0, 0, 5, 15]}
- # 上昇値 [最小値,最大値]
- # [最大HP/最大SP/腕力/器用さ/素早さ/魔力]
- UP_POINT = [ [5,20], [5,20], [1,5], [1,5], [1,5], [1,5] ]
-
- # 能力値限界
- # [最大HP/最大SP/腕力/器用さ/素早さ/魔力]
- LIMIT = [ 999999, 9999, 999, 999, 999, 999 ]
- # ステータスアップを行わないアクターのID
- #(アクターIDをコンマで区切って記述。 例:[ 0, 2, 3 ] )
- EXC_ACTOR = []
- # ステータスアップ結果の表示順( 0:アクターごと / 1:能力値ごと )
- THREAD_TYPE = 0
- # ステータス上昇ウインドウを表示するか( true / false )
- VIEW_VISIBLE = true
- # ステータス上昇ウインドウの書式
- # {name} :アクター名
- # {param} :パラメータ
- # {point} :上昇値
- VIEW_TEXT = "{name}の{param}が{point}ポイントアップ"
- # ステータス上昇ウインドウの表示時間
- VIEW_TIME = 40
- # ステータス上昇ウインドウを表示しないときのアニメーション表示間隔
- VIEW_ANM_TIME = 8
-
- # 敵との強さに差があるとき、成長率に影響を与えるか( true / false )
- # (補正率は「敵の能力値÷アクターの能力値」の平均)
- LVEF = true
- # 能力値アップ率に対する補正率の適用パーセント
- LVEF_PER = 50
- # 上昇値に対する補正率の適用パーセント
- LVEF_POINT = 0
- # 人数差が補正率に与える影響(パーセント)
- LVEF_PARTIES = 50
-
- # ステータスアップ時にアニメーションを表示( true / false )
- ANM_USE = true
- # 表示するアニメーションのID
- ANM_HP = 98 # 最大HP
- ANM_SP = 98 # 最大SP
- ANM_STR = 98 # 腕力
- ANM_DEX = 98 # 器用さ
- ANM_AGI = 98 # 素早さ
- ANM_INT = 98 # 魔力
-
- end
- # ↑ 設定項目ここまで
- #------------------------------------------------------------------------------
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● プレバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias start_phase1_stsup start_phase1
- def start_phase1
- for actor in $game_party.actors
- # 行動履歴を初期化
- actor.act_history = []
- end
- @stsup = []
- @now_stsup_anm = -1
- @btl_lv = 0
- enemy_sts = [0,0,0,0,0,0]
- actor_sts = [0,0,0,0,0,0]
- btl_lv = [0,0,0,0,0,0]
- # エネミーの強さを記録
- for enemy in $game_troop.enemies
- enemy_sts[0] += enemy.base_maxhp
- enemy_sts[1] += enemy.base_maxsp
- enemy_sts[2] += enemy.base_str
- enemy_sts[3] += enemy.base_dex
- enemy_sts[4] += enemy.base_agi
- enemy_sts[5] += enemy.base_int
- end
- # アクターの強さを記録
- for actor in $game_party.actors
- actor_sts[0] += actor.base_maxhp
- actor_sts[1] += actor.base_maxsp
- actor_sts[2] += actor.base_str
- actor_sts[3] += actor.base_dex
- actor_sts[4] += actor.base_agi
- actor_sts[5] += actor.base_int
- end
- # 一体あたりの強さを計算
- for i in 0..5
- enemy_sts[i] /= $game_troop.enemies.size.to_f
- actor_sts[i] /= $game_party.actors.size.to_f
- end
- # 敵の強さの倍率
- for i in 0..5
- btl_lv[i] = enemy_sts[i] / actor_sts[i]
- @btl_lv += btl_lv[i]
- end
- @btl_lv /= btl_lv.size
- # 人数差による補正
- m = $game_troop.enemies.size.to_f / $game_party.actors.size.to_f
- if m >= 1
- m = 1 + (m - 1) * PARA_STSUP::LVEF_PARTIES / 100
- else
- m = 1 - (1 - m) * PARA_STSUP::LVEF_PARTIES / 100
- end
- if @btl_lv >= 1
- @btl_lv = (@btl_lv - 1) * m + 1
- else
- @btl_lv = @btl_lv * m
- end
- start_phase1_stsup
- end
- #--------------------------------------------------------------------------
- # ● 次のアクターのコマンド入力へ
- #--------------------------------------------------------------------------
- alias phase3_next_actor_stsup phase3_next_actor
- def phase3_next_actor
- if @active_battler != nil
- # アクションを行動履歴に追加
- act_kind = @active_battler.current_action.kind
- act_basic = @active_battler.current_action.basic
- act = [act_kind,act_basic]
- if act == [0,0] # 攻撃
- # 武器属性によって成長率を変更
- if @active_battler.element_set.size != 0
- for element_id in @active_battler.element_set
- element_name = $data_system.elements[element_id]
- if PARA_STSUP::ATK_ELEMENTS.include?(element_name)
- per = PARA_STSUP::ATK_ELEMENTS[element_name]
- end
- end
- end
- if per == nil
- per = PARA_STSUP::ACT_ATK
- end
- elsif act == [0,1] # 防御
- per = PARA_STSUP::ACT_GUARD
- elsif act == [1,3] or act == [1,0] # スキル
- # スキル属性によって成長率を変更
- skill_id = @active_battler.current_action.skill_id
- skill_elements = $data_skills[skill_id].element_set
- if skill_elements.size != 0
- for element_id in skill_elements
- element_name = $data_system.elements[element_id]
- if PARA_STSUP::SKILL_ELEMENTS.include?(element_name)
- per = PARA_STSUP::SKILL_ELEMENTS[element_name]
- end
- end
- end
- if per == nil
- per = PARA_STSUP::ACT_SKILL
- end
- elsif act == [2,3] or act == [2,0] # アイテム
- per = PARA_STSUP::ACT_ITEM
- else
- per = PARA_STSUP::ACT_NONE
- end
- @active_battler.act_history.push(per)
- end
- phase3_next_actor_stsup
- end
- #--------------------------------------------------------------------------
- # ● 前のアクターのコマンド入力へ
- #--------------------------------------------------------------------------
- alias phase3_prior_actor_stsup phase3_prior_actor
- def phase3_prior_actor
- phase3_prior_actor_stsup
- if @active_battler != nil
- # 行動履歴を削除
- @active_battler.act_history.pop
- end
- end
- #--------------------------------------------------------------------------
- # ● アフターバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias start_phase5_stsup start_phase5
- def start_phase5
- start_phase5_stsup
- # ステータスアップ処理
- status_up
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アフターバトルフェーズ)
- #--------------------------------------------------------------------------
- alias update_phase5_stsup update_phase5
- def update_phase5
- # ステータス上昇ウインドウ表示待ちのアイテムがある場合
- if @stsup != nil and @stsup != []
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # 次のステータスアップウインドウを表示
- result_stsup
- end
- # ウェイトカウントが 0 より大きい場合
- if @phase5_wait_count > 0
- # ウェイトカウントを減らす
- @phase5_wait_count -= 1
- # ウェイトカウントが 0 になった場合
- if @phase5_wait_count == 0
- # 次のステータスアップウインドウを表示
- result_stsup
- end
- return
- end
- # ステータス上昇ウインドウ表示中の場合
- elsif @help_window.visible
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- @help_window.visible = false
- @phase5_wait_count = 1
- end
- # ウェイトカウントが 0 より大きい場合
- if @phase5_wait_count > 0
- # ウェイトカウントを減らす
- @phase5_wait_count -= 1
- # ウェイトカウントが 0 になった場合
- if @phase5_wait_count == 0
- @help_window.visible = false
- @phase5_wait_count = 1
- end
- return
- end
- else
- update_phase5_stsup
- end
- end
- #--------------------------------------------------------------------------
- # ○ ステータスアップウインドウを表示
- #--------------------------------------------------------------------------
- def result_stsup
- if @stsup[0] != nil and @stsup[0] != []
- # 配列の先頭から値を取り出す
- stsup = @stsup[0]
- # 能力値の名前を取得
- case stsup[1]
- when 0 # 最大HP
- stsup_sts = $data_system.words.hp
- when 1 # 最大SP
- stsup_sts = $data_system.words.sp
- when 2 # 腕力
- stsup_sts = $data_system.words.str
- when 3 # 器用さ
- stsup_sts = $data_system.words.dex
- when 4 # 素早さ
- stsup_sts = $data_system.words.agi
- when 5 # 魔力
- stsup_sts = $data_system.words.int
- end
- name = stsup[0].name
- param = stsup_sts
- point = stsup[2]
- # 表示する文字列を設定
- text = PARA_STSUP::VIEW_TEXT.dup
- begin
- text[/{name}/] = "#{name}"
- rescue
- end
- begin
- text[/{param}/] = "#{param}"
- rescue
- end
- begin
- text[/{point}/] = "#{point.to_s}"
- rescue
- end
- # ヘルプウィンドウに文字列をセット
- @help_window.set_text(text, 1)
- # アニメーションを表示
- if PARA_STSUP::ANM_USE
- # アニメーションをまとめて表示
- if PARA_STSUP::THREAD_TYPE == 1
- if @now_stsup_anm != stsup[1]
- @now_stsup_anm = stsup[1]
- actors = []
- for sts_group in @stsup
- if sts_group[1] == @now_stsup_anm
- actors.push(sts_group[0])
- end
- end
- for actor in actors
- case @now_stsup_anm
- when 0 # 最大HP
- actor.animation_id = PARA_STSUP::ANM_HP
- when 1 # 最大SP
- actor.animation_id = PARA_STSUP::ANM_SP
- when 2 # 腕力
- actor.animation_id = PARA_STSUP::ANM_STR
- when 3 # 器用さ
- actor.animation_id = PARA_STSUP::ANM_DEX
- when 4 # 素早さ
- actor.animation_id = PARA_STSUP::ANM_AGI
- when 5 # 魔力
- actor.animation_id = PARA_STSUP::ANM_INT
- end
- end
- end
- else
- actor = stsup[0]
- case stsup[1]
- when 0 # 最大HP
- actor.animation_id = PARA_STSUP::ANM_HP
- when 1 # 最大SP
- actor.animation_id = PARA_STSUP::ANM_SP
- when 2 # 腕力
- actor.animation_id = PARA_STSUP::ANM_STR
- when 3 # 器用さ
- actor.animation_id = PARA_STSUP::ANM_DEX
- when 4 # 素早さ
- actor.animation_id = PARA_STSUP::ANM_AGI
- when 5 # 魔力
- actor.animation_id = PARA_STSUP::ANM_INT
- end
- end
- end
- @stsup.shift
- # ヘルプウィンドウを表示
- if PARA_STSUP::VIEW_VISIBLE
- @help_window.visible = true
- @phase5_wait_count = PARA_STSUP::VIEW_TIME
- else
- @help_window.visible = false
- @phase5_wait_count = PARA_STSUP::VIEW_ANM_TIME
- end
- end
- end
- #--------------------------------------------------------------------------
- # ○ ステータスアップ処理
- #--------------------------------------------------------------------------
- def status_up
- for actor in $game_party.actors
- # EXPを取得できないステート時もしくは
- # 除外アクターは処理をスキップ
- if actor.cant_get_exp? or PARA_STSUP::EXC_ACTOR.include?(actor.id)
- next
- end
- stsup_percent = [0,0,0,0,0,0]
- # コマンド未入力だった場合
- if actor.act_history == []
- # ダミーコマンドを追加
- actor.act_history.push(PARA_STSUP::ACT_NONE)
- end
- for act in actor.act_history
- # 上昇パーセンテージを合計
- for i in 0...stsup_percent.size
- stsup_percent[i] += act[i]
- end
- end
- # 敵の強さによる補正
- if PARA_STSUP::LVEF
- for i in 0..stsup_percent.size-1
- if @btl_lv >= 1
- btl_per = 1 + (@btl_lv - 1) * PARA_STSUP::LVEF_PER / 100
- else
- btl_per = 1 - (1 - @btl_lv) * PARA_STSUP::LVEF_PER / 100
- end
- stsup_percent[i] *= btl_per
- end
- end
- # 上昇パーセンテージを算出
- for i in 0..stsup_percent.size-1
- stsup_percent[i] /= actor.act_history.size
- end
- # 各ステータスで上昇判定
- for s in 0..stsup_percent.size-1
- rnd = rand(100)
- if stsup_percent[s] > rnd
- # 上昇値を決定
- up_point = PARA_STSUP::UP_POINT[s].dup
- # 敵の強さによる補正
- if PARA_STSUP::LVEF
- if @btl_lv >= 1
- btl_point = 1 + (@btl_lv - 1) * PARA_STSUP::LVEF_POINT / 100
- else
- btl_point = 1 - (1 - @btl_lv) * PARA_STSUP::LVEF_POINT / 100
- end
- up_point[0] *= @btl_lv * btl_point
- up_point[1] *= @btl_lv * btl_point
- end
- # ランダマイズ
- rnd_val = (up_point[1] - up_point[0]).floor
- rnd_pt = rand(rnd_val)
- stsup_pt = (rnd_pt + up_point[0]).floor
- # 能力値を上昇
- case s
- when 0 # 最大HP
- if actor.stsup_maxhp + stsup_pt > PARA_STSUP::LIMIT[0]
- stsup_pt = PARA_STSUP::LIMIT[0] - actor.stsup_maxhp
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_maxhp += stsup_pt
- when 1 # 最大SP
- if actor.stsup_maxsp + stsup_pt > PARA_STSUP::LIMIT[1]
- stsup_pt = PARA_STSUP::LIMIT[1] - actor.stsup_maxsp
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_maxsp += stsup_pt
- when 2 # 腕力
- if actor.stsup_str + stsup_pt > PARA_STSUP::LIMIT[2]
- stsup_pt = PARA_STSUP::LIMIT[2] - actor.stsup_str
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_str += stsup_pt
- when 3 # 器用さ
- if actor.stsup_dex + stsup_pt > PARA_STSUP::LIMIT[3]
- stsup_pt = PARA_STSUP::LIMIT[3] - actor.stsup_dex
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_dex += stsup_pt
- when 4 # 素早さ
- if actor.stsup_agi + stsup_pt > PARA_STSUP::LIMIT[4]
- stsup_pt = PARA_STSUP::LIMIT[4] - actor.stsup_agi
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_agi += stsup_pt
- when 5 # 魔力
- if actor.stsup_int + stsup_pt > PARA_STSUP::LIMIT[5]
- stsup_pt = PARA_STSUP::LIMIT[5] - actor.stsup_int
- stsup_pt = stsup_pt < 0 ? 0 : stsup_pt
- end
- actor.stsup_int += stsup_pt
- end
- # 上昇ポイントが0のときはスキップ
- if stsup_pt <= 0
- next
- end
- # 配列に追加
- @stsup.push([actor,s,stsup_pt])
- end
- end
- end
- if PARA_STSUP::THREAD_TYPE == 1 and @stsup != []
- # 能力値ごとにソート
- @stsup.sort! do |a, b|
- if a[1] > b[1]
- +1
- elsif a[1] < b[1]
- -1
- elsif a[0].index > b[0].index
- +1
- elsif a[0].index < b[0].index
- -1
- else
- a <=> b
- end
- end
- end
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :act_history # 行動履歴
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_stsup initialize
- def initialize
- initialize_stsup
- @act_history = []
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :stsup_maxhp
- attr_accessor :stsup_maxsp
- attr_accessor :stsup_str
- attr_accessor :stsup_dex
- attr_accessor :stsup_agi
- attr_accessor :stsup_int
- #--------------------------------------------------------------------------
- # ● セットアップ
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias setup_stsup setup
- def setup(actor_id)
- setup_stsup(actor_id)
- @stsup_maxhp = 0
- @stsup_maxsp = 0
- @stsup_str = 0
- @stsup_dex = 0
- @stsup_agi = 0
- @stsup_int = 0
- end
- #--------------------------------------------------------------------------
- # ● 基本 MaxHP の取得
- #--------------------------------------------------------------------------
- alias base_maxhp_stsup base_maxhp
- def base_maxhp
- n = base_maxhp_stsup
- if @stsup_maxhp != nil
- n += @stsup_maxhp
- end
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本 MaxSP の取得
- #--------------------------------------------------------------------------
- alias base_maxsp_stsup base_maxsp
- def base_maxsp
- n = base_maxsp_stsup
- if @stsup_maxsp != nil
- n += @stsup_maxsp
- end
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本腕力の取得
- #--------------------------------------------------------------------------
- alias base_str_stsup base_str
- def base_str
- n = base_str_stsup
- if @stsup_str != nil
- n += @stsup_str
- end
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本器用さの取得
- #--------------------------------------------------------------------------
- alias base_dex_stsup base_dex
- def base_dex
- n = base_dex_stsup
- if @stsup_dex != nil
- n += @stsup_dex
- end
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本素早さの取得
- #--------------------------------------------------------------------------
- alias base_agi_stsup base_agi
- def base_agi
- n = base_agi_stsup
- if @stsup_agi != nil
- n += @stsup_agi
- end
- return n
- end
- #--------------------------------------------------------------------------
- # ● 基本魔力の取得
- #--------------------------------------------------------------------------
- alias base_int_stsup base_int
- def base_int
- n = base_int_stsup
- if @stsup_int != nil
- n += @stsup_int
- end
- return n
- end
- end
复制代码
[設定]
まず、能力値上昇が発生するパーセンテージを決定します。
値は各自のゲームバランスに合わせて調節してください。
配列は、左から順に[最大HP/最大SP/腕力/器用さ/素早さ/魔力]となっています。
戦闘終了時に全ての行動の上昇率の平均値から、能力上昇が起こるか決定します。
合計ではなく平均値なので、注意してください。
たとえば、次のように上昇率を設定したとします。
ACT_ATK = [10, 0, 10, 5, 5, 0] # 通常攻撃
ACT_GUARD = [20, 0, 0, 0, 0, 0] # 防御
この上昇率で、攻撃4回&防御1回を行ったとき、
戦闘終了時に各能力値がアップする確率は
最大HP:12% 最大SP:0% 腕力:8%
器用さ:4% 素早さ:4% 魔力:0%
となります。
(これを基本値として、敵の強さに応じて補正が入ります)
上昇する数値は、各ステータスごとに最大値と最小値を設定し、
その範囲内でランダムに上昇します。
[おまけ]
[更新履歴]
2005/9/20 ver.1.40
設定項目「能力値限界」を追加。
EXPを獲得できないステート時はステータスアップ処理を行わないように。
ステータスアップしないアクターを設定できるように。
2005/7/31 ver.1.31
Raise Field様のサイドビュースクリプトとの併用に対応。
2005/7/31 ver.1.30
武器およびスキルに属性を付加することで成長率を変化させる機能を追加。
ステータスアップ結果をアップした能力値ごとにまとめて表示可能に。
ステータス上昇ウインドウの書式が欠けると正しく表示されない問題を修正。
2005/7/3 ver.1.22
戦闘不能時はステータスアップ処理を行わないように。
2005/7/1 ver.1.21
上昇値が0の時はステータスアップ表示を行わないように。
補正値が0のとき上昇値が+1されてしまう問題を修正。
2005/6/29 ver.1.20
ステータスアップ時にアニメーションを表示可能に。
上昇値が勝手に変動してしまうバグを修正。
2005/6/28 ver.1.10
敵の強さに応じて成長率を補正する機能を追加。
ATB導入等でコマンド未入力のアクターが存在するとエラーが出るバグを修正。
2005/6/28 ver.1.02
動作確認用の数値ウインドウを消し忘れていたのを修正。
2005/6/28 ver.1.01
能力値アップウインドウが正しく切り替わらなかったのを修正。
2005/6/27 ver.1.00
公開。
[本贴由 柳柳 于 2006-6-8 17:29:47 最后编辑] |
|