赞 | 0 |
VIP | -1 |
好人卡 | 2 |
积分 | 1 |
经验 | 19585 |
最后登录 | 2019-6-26 |
在线时间 | 73 小时 |
Lv1.梦旅人 堕落天使
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 73 小时
- 注册时间
- 2005-10-22
- 帖子
- 337
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
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] # 未输入命令或者不能行动
- # 武器用常规的攻击的成长率
- # 使用格式{ "武器名" => [最大HP,最大SP,力量,灵巧,速度,魔力](这里是成长率,乱七八糟的不知道怎么算)
- 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写下来,并用逗号分开.例子:[0,2,3], )
- #如果没有人能力不提升的话就空着
- EXC_ACTOR = []
- # 状态提高结果的表示次序( 0:连角色一起 / 1:连能力价一起 )
- # 注意,这个功能我不知道是干什么用的,只是翻译过来了.
- # 不过测试结果是: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(这里显示的都是第98号动画:惊讶)
- 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
复制代码 |
|