赞 | 23 |
VIP | 0 |
好人卡 | 0 |
积分 | 9 |
经验 | 297497 |
最后登录 | 2018-10-13 |
在线时间 | 94 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 910
- 在线时间
- 94 小时
- 注册时间
- 2005-10-22
- 帖子
- 397
|
- # ————————————————————————————————————
- # 本脚本来自www.66rpg.com,转载请保留此信息
- # ————————————————————————————————————
- # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
- # by 桜雅 在土, 和希, シムナフ
- #==============================================================================
- # ■ 以下内容定义各特技的属性名
- #==============================================================================
- class Game_Battler
- RERAISE_STATE_NAME = /复活/
- LIBLA_SKILL_ELEMENT_NAME = "透视"
- POWERSTOCK_SKILL_ELEMENT_NAME = "聚气"
- POWERSTOCK_BASE_RATE = 1.0 #——每回合聚气威力上升倍率
- STEAL_SKILL_ELEMENT_NAME = "偷窃"
- ELEMENT_NAME_SP_DAMAGE = "SP损伤"
- ELEMENT_NAME_HP_DRAIN = "HP吸收"
- ELEMENT_NAME_SP_DRAIN = "SP吸收"
- ELEMENT_NAME_CRITICAL_HIT = "必杀"
- ELEMENT_NAME_CERTAIN_HIT = "必中"
- ELEMENT_NAME_HP_COST = "HP消耗"
- end
- class Game_BattleAction
- ELEMENT_NAME_SPEED_PRIORITY = "优先度"
- end
- class Scene_Battle
- ELEMENT_NAME_HP_COST = "HP消耗"
- ELEMENT_NAME_DERIVER = "派生"
- ELEMENT_NAME_MOVE_TIMES = "行动回数"
- ELEMENT_NAME_AREA_ENEMY_ALL = "全体化"
- ELEMENT_NAME_AREA_WHOLE = "全域化"
- ELEMENT_NAME_AREA_ENEMY_RAND = "敌方随机"
- ELEMENT_NAME_AREA_ACTOR_RAND ="我方随机"
- ELEMENT_NAME_AREA_ALL_RANDOM ="对象随机"
- RERAISE_HP = 1
- RERAISE_HP_PERCENT = 0
- RERAISE_ANIMATION_ID = 26
- end
- module Cover_Module
- ELEMENT_NAME_COVER = "援助"
- STATE_NAME_COVER = "援助"
- COVER_HP_PERCENT = 100
- COVER_EFFECT_PERCENT = 100
- COVER_EFFECT_CHAR = "Covered!"
- COVER_ANIMATION_ID = 64
- COVER_DEFAULT_NUMBER = 2
- end
- #==============================================================================
- $xrxs19_special_effections_set_work = true
- #--------------------------------------------------------------------------
- # ● 属性修正の計算?改
- #--------------------------------------------------------------------------
- class Game_Battler
- def elements_correct(element_set)
- # 無属性の場合 100 を返す
- return 100 if element_set == []
- # 与えられた属性のレートを全て乗算
- result = 100
- for i in element_set
- result *= self.element_rate(i) / 100.0
- end
- return result.to_i
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 追加公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :reraise_state
- attr_accessor :reraised # リレイズしたかどうか
- attr_accessor :metamor_target # 変身対象
- attr_accessor :battler_name # バトラーグラフィック
- attr_reader :battler_name_original # バトラーグラフィック初期値
- attr_writer :hp0_ban # HP/SPの 0 化または最大制限の解除
- attr_writer :certain_hit # 必中受け(Trueだと攻撃を避けられない)
- attr_accessor :covered_friends #庇っている味方の配列
- attr_accessor :effect_message #
- attr_accessor :current_friend #かばっている味方
- attr_accessor :cover_remain #かばう可能な残り回数
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- alias xrxs19_battler_initialize initialize
- def initialize
- xrxs19_battler_initialize
- # 「かばう」用変数初期化
- @covered_friends = []
- @effect_message = nil
- @current_friend = nil
- @cover_remain = 0
- end
- #--------------------------------------------------------------------------
- # ● ステートの付加
- # state_id : ステート ID
- # force : 強制付加フラグ (オートステートの処理で使用)
- #--------------------------------------------------------------------------
- alias xrxs19_add_state add_state
- def add_state(state_id, force = false)
- xrxs19_add_state(state_id, force)
- # 「かばう」のステート付加の場合
- if state_id == get_cover_state_id()
- self.cover_remain = COVER_DEFAULT_NUMBER
- end
- end
- #--------------------------------------------------------------------------
- # ● HP の変更
- #--------------------------------------------------------------------------
- def hp=(hp)
- if @hp0_ban
- @hp = hp
- else
- @hp = [[hp, maxhp].min, 0].max
- # 戦闘不能を付加または解除
- for i in 1...$data_states.size
- if $data_states[i].zero_hp
- if self.dead?
- # 追加
- for x in 1...$data_states.size
- # ステート名は変更可。
- if $data_states[x].name[RERAISE_STATE_NAME] != nil
- reraise_id = $data_states[x].id
- break
- end
- end
- # リレイズ復活
- if reraise_id != nil && self.state?(reraise_id)
- self.remove_state(reraise_id)
- @reraised = true
- # 戦闘不能マイナスステートに設定されているものを解除
- if $data_states[i].minus_state_set != []
- for j in $data_states[i].minus_state_set
- remove_state(j)
- end
- end
- elsif
- # ここまで
- add_state(i)
- end
- else
- remove_state(i)
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● SP の変更
- #--------------------------------------------------------------------------
- def sp=(sp)
- if @hp0_ban
- @sp = sp
- else
- @sp = [[sp, maxsp].min, 0].max
- end
- end
- #--------------------------------------------------------------------------
- # ● ステート [攻撃を回避できない] 判定
- #--------------------------------------------------------------------------
- alias xrxs19_cant_evade? cant_evade?
- def cant_evade?
- return true if @certain_hit
- return xrxs19_cant_evade?
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃の効果適用
- #--------------------------------------------------------------------------
- alias xrxs19_attack_effect attack_effect# alias したものは effect_it 内で使用
- def attack_effect(attacker)
- # 通常攻撃の場合、skill = nil で呼ぶ
- return effect_it(attacker, nil)
- end
- #--------------------------------------------------------------------------
- # ● スキルの効果適用
- #--------------------------------------------------------------------------
- alias xrxs19_skill_effect skill_effect # alias したものは effect_it 内で使用
- def skill_effect(user, skill)
- # スキルの場合は、skill を指定して呼ぶ
- return effect_it(user, skill)
- end
- #--------------------------------------------------------------------------
- # ● 効果適用
- #--------------------------------------------------------------------------
- def effect_it(user, skill = nil)
- # 実行前の数値を保持
- last_hp = self.hp
- last_sp = self.sp
- @hp0_ban = true
- # 武器IDの取得
- weapon_id = user.is_a?(Game_Actor) ? user.weapon_id : 0
- # 特殊効果:必中
- if skill != nil and skill_element_include?(skill, ELEMENT_NAME_CERTAIN_HIT)
- self.certain_hit = true
- elsif skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CERTAIN_HIT)
- self.certain_hit = true
- end
- # 基本実行、skill が nil かどうかで通常攻撃とスキルを分別
- if skill == nil
- bool = xrxs19_attack_effect(user)
- else
- bool = xrxs19_skill_effect(user, skill)
- end
- # ダメージ測定
- damage = last_hp - self.hp
- # 必中の解除
- self.certain_hit = false
- # 特殊効果:スティール/アイテム奪取
- if skill != nil and skill_element_include?(skill, STEAL_SKILL_ELEMENT_NAME)
- self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
- elsif skill == nil and equip_weapon_element_include?(user, STEAL_SKILL_ELEMENT_NAME)
- self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
- end
- # 特殊効果:対象に変身
- if skill != nil and skill_element_include?(skill, "变身")
- if user.metamor_target == nil
- if self.metamor_target == nil
- # 変身状態で無い場合、変身
- user.metamor_target = self
- else
- # 対象が変身状態の場合、対象の変身対象に変身する。
- user.metamor_target = self.metamor_target
- end
- else
- # 変身状態の場合、変身を解除する
- user.metamor_target = user
- end
- # 自分への変身を禁止
- user.metamor_target = nil if user.metamor_target == user
- # 対象のダメージ表示を消す
- self.damage = nil if self.damage == "Miss"
- # HP/SP最大値変更への対応
- @hp0_ban = false
- user.hp = user.hp
- user.sp = user.sp
- end
- # 特殊効果:武器を投げる
- if (skill != nil and skill_element_include?(skill, "武器投掷"))
- # 投擲武器の取得
- throw_weapon = $data_weapons[user.current_action.basic]
- # 武器の消費
- if $xrxs24_weapon_property_system_work
- $game_party.lose_weapon(throw_weapon.id, user.current_action.basic_ex)
- else
- $game_party.lose_weapon(throw_weapon.id, 1)
- end
- # ダメージの変更
- self.hp += damage if bool
- damage = throw_weapon.atk
- if weapon_element_include?(throw_weapon.id, "投掷威力")
- damage = damage * @one.to_i / 100
- end
- self.damage = damage
- self.hp -= self.damage
- bool = true
- end
- # 特殊効果:消費金額に順ずる固定ダメージ
- if skill != nil and skill_element_include?(skill, "金钱投掷")
- # ゴールドの消費
- last_gold = $game_party.gold
- $game_party.gain_gold(-1 * ($game_party.gold * skill.variance / 100 + skill.power))
- self.hp += damage if bool
- damage = last_gold - $game_party.gold
- self.damage = damage
- self.hp -= self.damage
- bool = true
- end
- # 基本実行でfalse(Miss等)の場合、ここで終了する
- # つまり、この上までにダメージに関係なく実行される特殊効果をいれて
- # これより下はダメージに関係する特殊効果を入れる。
- # "武器投擲"と"銭投げ"はMissでも金額を消費するため上に。
- return false if bool == false
- # 特殊効果:防御能力の判定
- if damage > 0 and self.guarding?
- # 特殊効果:防御能力 2(強防御)
- if battler_element_rank?(self, "防御能力") == 2
- damage /= 2
- self.damage -= damage
- self.hp += damage
- end
- # 特殊効果:防御能力 1(無効防御)
- if battler_element_rank?(self, "防御能力") == 1
- self.hp += damage
- damage = 0
- self.damage = damage
- end
- end
- # 特殊効果:必殺確実クリティカル
- if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_CRITICAL_HIT)) or
- (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CRITICAL_HIT)) and damage > 0
- if self.critical
- self.critical = false
- damage /= 2
- self.damage -= damage
- self.hp += damage
- end
- if @one == nil or rand(100) < @one.to_i
- damage += 4 * self.pdef + rand(100)
- self.damage = damage
- self.hp -= damage
- self.critical = true
- end
- end
- # 特殊効果:使用者の 最大HP - 現在HP 固定ダメージ
- if skill != nil and skill_element_include?(skill, "固定HP差分")
- self.hp += damage
- damage = user.maxhp - user.hp
- self.damage = damage
- self.hp -= self.damage
- self.critical = false # 固定ダメージ故クリティカルを禁止
- end
- # 特殊効果:使用者の 現在HP 固定ダメージ
- if skill != nil and skill_element_include?(skill, "现在HP损伤")
- self.hp += damage
- damage = user.hp
- self.damage = damage
- self.hp -= self.damage
- self.critical = false # 固定ダメージ故クリティカルを禁止
- end
- # 特殊効果:現在HPに順ずる固定ダメージ
- if skill != nil and skill_element_include?(skill, "固定现在HP")
- self.hp += damage
- damage = self.hp * skill.variance / 100 + skill.power
- damage *= -1 if skill.power < 0
- self.damage = damage
- self.hp -= self.damage
- self.critical = false # 固定ダメージ故クリティカルを禁止
- end
- # 特殊効果:最大HPに順ずる固定ダメージ
- if skill != nil and skill_element_include?(skill, "固定最大HP")
- self.hp += damage
- damage = self.maxhp * @one.to_i / 100
- damage *= -1 if skill.power < 0
- self.damage = damage
- self.hp -= self.damage
- self.critical = false # 固定ダメージ故クリティカルを禁止
- end
- # 特殊効果:HPではなくSPにダメージを与える
- if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DAMAGE)) or
- (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DAMAGE))
- self.hp += damage
- sp_save = self.sp <= self.maxsp * 5 /100
- case skill.id
- when 463
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 5 / 100)
- else
- sp_damage = 0
- end
- when 464
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 10 / 100)
- else
- sp_damage = 0
- end
- when 465
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 15 / 100)
- else
- sp_damage = 0
- end
- when 466
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 20 / 100)
- else
- sp_damage = 0
- end
- when 467
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 25 / 100)
- else
- sp_damage = 0
- end
- when 468
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 30 / 100)
- else
- sp_damage = 0
- end
- when 469
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 35 / 100)
- else
- sp_damage = 0
- end
- when 470
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 40 / 100)
- else
- sp_damage = 0
- end
- when 471
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 45 / 100)
- else
- sp_damage = 0
- end
- when 472
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 50 / 100)
- else
- sp_damage = 0
- end
- when 528
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 5 / 100)
- else
- sp_damage = 0
- end
- when 529
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 10 / 100)
- else
- sp_damage = 0
- end
- when 530
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 15 / 100)
- else
- sp_damage = 0
- end
- when 531
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 20 / 100)
- else
- sp_damage = 0
- end
- when 739
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 5 / 100)
- else
- sp_damage = 0
- end
- when 740
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 10 / 100)
- else
- sp_damage = 0
- end
- when 741
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 15 / 100)
- else
- sp_damage = 0
- end
- when 742
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 20 / 100)
- else
- sp_damage = 0
- end
- when 743
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 25 / 100)
- else
- sp_damage = 0
- end
- else
- unless sp_save
- sp_damage = (damage / 100) + (self.sp * 30 / 100)
- else
- sp_damage = 0
- end
- end
- self.sp -= sp_damage
- self.damage = sp_damage.to_s#damage.to_s
- # このタイミングで戦闘不能判定
- @hp0_ban = false
- self.sp = self.sp
- real_damage = last_sp - self.sp
- else
- # このタイミングで戦闘不能判定
- @hp0_ban = false
- self.hp = self.hp
- real_damage = last_hp - self.hp
- end
- # 使用者のHP/SPもリセット
- user.hp = user.hp
- user.sp = user.sp
- # 特殊効果:与えたダメージを自分のHPとして吸収
- if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_HP_DRAIN)) or
- (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_HP_DRAIN))
- user.damage = -real_damage * @one.to_i / 100
- user.hp -= user.damage
- end
- # 特殊効果:与えたダメージを自分のSPとして吸収
- if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DRAIN)) or
- (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DRAIN))
- user.damage -= real_damage * @one.to_i / 100
- user.sp -= user.damage
- user.damage = user.damage.to_s
- end
- return true
- end
- #--------------------------------------------------------------------------
- # ● バトラーの指定名の属性のランクを判定
- #--------------------------------------------------------------------------
- def battler_element_rank?(battler, element_name)
- for i in 1..$data_system.elements.size
- if $data_system.elements[i] == element_name
- if self.is_a?(Game_Actor)
- return $data_classes[battler.class_id].element_ranks[i]
- else
- return $data_enemies[battler.id].element_ranks[i]
- end
- end
- end
- return 3
- end
- #--------------------------------------------------------------------------
- # ● MaxHP の取得
- #--------------------------------------------------------------------------
- alias xrxs19_maxhp maxhp
- def maxhp
- if !@metamor_target.nil?
- return @metamor_target.maxhp
- end
- xrxs19_maxhp
- end
- #--------------------------------------------------------------------------
- # ● MaxSP の取得
- #--------------------------------------------------------------------------
- alias xrxs19_maxsp maxsp
- def maxsp
- if !@metamor_target.nil?
- return @metamor_target.maxsp
- end
- xrxs19_maxsp
- end
- #--------------------------------------------------------------------------
- # ● 腕力の取得
- #--------------------------------------------------------------------------
- alias xrxs19_str str
- def str
- if !@metamor_target.nil?
- return @metamor_target.str
- end
- xrxs19_str
- end
- #--------------------------------------------------------------------------
- # ● 器用さの取得
- #--------------------------------------------------------------------------
- alias xrxs19_dex dex
- def dex
- if !@metamor_target.nil?
- return @metamor_target.dex
- end
- xrxs19_dex
- end
- #--------------------------------------------------------------------------
- # ● 素早さの取得
- #--------------------------------------------------------------------------
- alias xrxs19_agi agi
- def agi
- if !@metamor_target.nil?
- return @metamor_target.agi
- end
- xrxs19_agi
- end
- #--------------------------------------------------------------------------
- # ● 魔力の取得
- #--------------------------------------------------------------------------
- alias xrxs19_int int
- def int
- if !@metamor_target.nil?
- return @metamor_target.int
- end
- xrxs19_int
- end
- #--------------------------------------------------------------------------
- # ● 攻撃力の取得
- #--------------------------------------------------------------------------
- alias xrxs19_atk atk
- def atk
- if !@metamor_target.nil?
- return @metamor_target.atk
- end
- xrxs19_atk
- end
- #--------------------------------------------------------------------------
- # ● 物理防御の取得
- #--------------------------------------------------------------------------
- alias xrxs19_pdef pdef
- def pdef
- if !@metamor_target.nil?
- return @metamor_target.pdef
- end
- xrxs19_pdef
- end
- #--------------------------------------------------------------------------
- # ● 魔法防御の取得
- #--------------------------------------------------------------------------
- alias xrxs19_mdef mdef
- def mdef
- if !@metamor_target.nil?
- return @metamor_target.mdef
- end
- xrxs19_mdef
- end
- #--------------------------------------------------------------------------
- # ● 回避修正の取得
- #--------------------------------------------------------------------------
- alias xrxs19_eva eva
- def eva
- if !@metamor_target.nil?
- return @metamor_target.eva
- end
- xrxs19_eva
- end
- end
- #==============================================================================
- # ■ Game_BattleAction
- #==============================================================================
- class Game_BattleAction
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :speed_priority # スピード優先度
- attr_accessor :weapon_id # 武器 ID
- attr_accessor :basic_ex # 基本拡張(補助的に数値を保持)
- #--------------------------------------------------------------------------
- # ● クリア
- #--------------------------------------------------------------------------
- alias xrxs19_clear clear
- def clear
- @weapon_id = 0
- xrxs19_clear
- end
- #--------------------------------------------------------------------------
- # ● スキルの優先度取得
- #--------------------------------------------------------------------------
- def speed_priority
- if @kind == 0 and @basic == 0
- # 通常攻撃の場合
- elsif @kind == 1
- # スキルの場合
- return 0 if $data_skills[@skill_id] == nil
- for i in $data_skills[@skill_id].element_set
- if $data_system.elements[i] != nil
- if $data_system.elements[i] =~ /^#{ELEMENT_NAME_SPEED_PRIORITY}([+-]?[0-9]+)/
- return $1.to_i
- end
- end
- end
- end
- return 0
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- alias xrxs19_setup setup
- def setup(actor_id)
- xrxs19_setup(actor_id)
- @reraised = false
- @reraise_state = 0
- @metamor_target = nil
- @battler_name_original = @battler_name
- end
- #--------------------------------------------------------------------------
- # ● MaxHP の取得
- #--------------------------------------------------------------------------
- alias xrxs19_maxhp maxhp
- def maxhp
- if !@metamor_target.nil?
- return @metamor_target.maxhp
- end
- xrxs19_maxhp
- end
- #--------------------------------------------------------------------------
- # ● スキルの使用可能判定
- #--------------------------------------------------------------------------
- alias xrxs19_skill_can_use? skill_can_use?
- def skill_can_use?(skill_id)
- # スキルを取得
- @skill = $data_skills[skill_id]
- # HP消費スキルの場合
- if skill_element_include?(@skill, ELEMENT_NAME_HP_COST) and @actor_id > 0
- # HP が足りない場合は使用不可
- if $data_skills[skill_id].sp_cost > self.hp
- return false
- end
- # SP消費量を回復させ、SP が足りない場合を回避(最大値を超えて回復)
- self.hp0_ban = true
- self.sp += @skill.sp_cost
- bool = xrxs19_skill_can_use?(skill_id)
- # SPを元に戻す
- self.sp -= @skill.sp_cost
- self.hp0_ban = false
- return bool
- else
- return xrxs19_skill_can_use?(skill_id)
- end
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #==============================================================================
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias xrxs19_initialize initialize
- def initialize(troop_id, member_index)
- xrxs19_initialize(troop_id, member_index)
- @reraised = false
- @reraise_state = 0
- @metamor_target = nil
- @battler_name_original = @battler_name
- end
- end
- #==============================================================================
- # ■ Window_Item
- #==============================================================================
- class Window_Item < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias xrxs19_initialize initialize
- def initialize
- xrxs19_initialize
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 値の受け渡し
- #--------------------------------------------------------------------------
- def set_itemkind(itemkind)
- @itemkind = itemkind
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 値の受け渡し
- #--------------------------------------------------------------------------
- def set_restrict(restrict)
- @restrict = restrict
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- alias xrxs19_refresh refresh
- def refresh
- if @itemkind != 11
- xrxs19_refresh
- return
- end
- # 11 = 制限:投擲武器のみ
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- @data_id = []
- for i in 1...$data_weapons.size
- if $game_party.weapon_number(i) > 0
- @data.push($data_weapons[i]) if weapon_element_include?(i, "投掷威力")
- end
- end
- # 項目数が 0 でなければビットマップを作成し、全項目を描画
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 32)
- for i in 0...@item_max
- draw_item(i)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- alias xrxs19_draw_item draw_item
- def draw_item(index)
- if @itemkind != 11
- xrxs19_draw_item(index)
- return
- end
- # 11 = 制限:投擲武器のみ
- item = @data[index]
- number = $game_party.weapon_number(item.id)
- self.contents.font.color = normal_color
- x = 4 + index % @column_max * (288 + 32)
- y = index / @column_max * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias xrxs19_main main
- def main
- @phase4_5_done = false
- xrxs19_main
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アクターコマンドフェーズ)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase3 update_phase3
- def update_phase3
- # 武器のみアイテムウィンドウが有効の場合
- if @item_window_weapons != nil and @item_window_weapons.visible
- update_phase3_item_window_weapons
- return
- end
- # 他
- xrxs19_update_phase3
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase3_skill_select update_phase3_skill_select
- def update_phase3_skill_select
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # スキルウィンドウで現在選択されているデータを取得
- @skill = @skill_window.skill
- if skill_element_include?(@skill, "武器投掷")
- # 使用できない場合
- if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- # アクションを設定
- @active_battler.current_action.skill_id = @skill.id
- # アイテム選択へ移行する
- start_item_select_from_skill(@one.to_i)
- return
- end
- end
- xrxs19_update_phase3_skill_select
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
- #--------------------------------------------------------------------------
- def update_phase3_item_window_weapons
- # 武器アイテムウィンドウを可視状態にする
- @item_window_weapons.visible = true
- # 武器アイテムウィンドウを更新
- @item_window_weapons.update
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # 武器アイテムの選択を終了
- end_item_select_from_skill
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- # アイテムウィンドウで現在選択されているデータを取得
- @item = @item_window_weapons.item
- # アクションを設定
- @active_battler.current_action.basic = @item.id
- if $xrxs24_weapon_property_system_work
- # アイテムウィンドウで現在選択されているデータを取得
- @item_room_no = @item_window_weapons.item_room_no
- # アクションを設定
- @active_battler.current_action.basic_ex = @item_room_no
- end
- # 武器のみアイテムウィンドウを不可視化
- @item_window_weapons.visible = false
- # 効果範囲が敵単体の場合
- if @skill.scope == 1
- # エネミーの選択を開始
- start_enemy_select
- # 効果範囲が味方単体の場合
- elsif @skill.scope == 3 or @skill.scope == 5
- # アクターの選択を開始
- start_actor_select
- # 効果範囲が単体ではない場合
- else
- # アイテムの選択を終了
- end_item_select_from_skill
- # 次のアクターのコマンド入力へ
- phase3_next_actor
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● スキルからのアイテム選択開始
- #--------------------------------------------------------------------------
- def start_item_select_from_skill(restrict = 0)
- # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
- @item_window_weapons = Window_Item.new
- if restrict == 1
- @item_window_weapons.set_itemkind(11)
- else
- @item_window_weapons.set_itemkind(1)
- end
- # ヘルプウィンドウを関連付け
- @item_window_weapons.help_window = @help_window
- # スキルウィンドウを無効化
- @skill_window.active = false
- @skill_window.visible = false
- end
- #--------------------------------------------------------------------------
- # ● スキルからのアイテム選択終了
- #--------------------------------------------------------------------------
- def end_item_select_from_skill
- # 武器のみアイテムウィンドウを解放
- @item_window_weapons.dispose
- @item_window_weapons = nil
- # ヘルプウィンドウを隠す
- @help_window.visible = false
- # スキルウィンドウを有効化
- @skill_window.active = true
- @skill_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ● エネミー選択開始
- #--------------------------------------------------------------------------
- alias xrxs19_start_enemy_select start_enemy_select
- def start_enemy_select
- return if start_select_check
- xrxs19_start_enemy_select
- end
- #--------------------------------------------------------------------------
- # ● アクター選択開始
- #--------------------------------------------------------------------------
- alias xrxs19_start_actor_select start_actor_select
- def start_actor_select
- return if start_select_check
- xrxs19_start_actor_select
- end
- #--------------------------------------------------------------------------
- # ● 選択開始時のチェック
- #--------------------------------------------------------------------------
- def start_select_check
- # "全体化"、"全域化"、"対象ランダム"の判定
- case @active_battler.current_action.kind
- when 0 # 攻撃
- # ここで「攻撃」使用者の武器IDを保持しておく
- @active_battler.current_action.weapon_id = @active_battler.weapon_id
- # チェックに戻る
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
- equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
- equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
- equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
- equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
- phase3_next_actor
- return true
- end
- when 1 # スキル
- if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
- skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
- skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
- skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
- skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
- end_skill_select
- phase3_next_actor
- return true
- end
- when 2 # アイテム
- if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
- item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
- item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
- item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
- item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
- end_item_select
- phase3_next_actor
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step1 update_phase4_step1
- def update_phase4_step1
- # 初期化
- @phase4_act_continuation = 0
- @phase4_act_times_max = 1
- @skill = nil
- @weapon_id = nil
- # 戻す
- xrxs19_update_phase4_step1
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step2 update_phase4_step2
- def update_phase4_step2
- #リレイズ判定
- next_phase_ok = true
- next_phase_ok = update_reraise_effect(@active_battler)
- if !next_phase_ok
- return
- end
- if next_phase_ok
- # ステップ 2 へ
- xrxs19_update_phase4_step2
- end
- end
- #--------------------------------------------------------------------------
- # ● 基本アクション 結果作成
- #--------------------------------------------------------------------------
- alias xrxs19_make_basic_action_result make_basic_action_result
- def make_basic_action_result
- # 攻撃の場合
- if @active_battler.current_action.basic == 0
- # 武器IDの取得
- @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
- # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
- weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
- @phase4_act_times_max = @one.to_i if @one != nil
- # アニメーション ID を設定
- @animation1_id = @active_battler.animation1_id
- @animation2_id = @active_battler.animation2_id
- # 初期化
- @target_battlers = []
- # 対象側バトラーの配列を設定
- # "全体化"の判定
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
- # 行動側バトラーがエネミーの場合
- if @active_battler.is_a?(Game_Enemy)
- if @active_battler.restriction == 3
- @target_battlers = $game_troop.enemies
- else
- @target_battlers = $game_party.actors
- end
- end
- # 行動側バトラーがアクターの場合
- if @active_battler.is_a?(Game_Actor)
- if @active_battler.restriction == 3
- @target_battlers = $game_party.actors
- else
- @target_battlers = $game_troop.enemies
- end
- end
- end
- # "敵ランダム"の判定
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
- # 行動側バトラーがエネミーの場合
- if @active_battler.is_a?(Game_Enemy)
- if @active_battler.restriction == 3
- tb_array = $game_troop.enemies
- else
- tb_array = $game_party.actors
- end
- end
- # 行動側バトラーがアクターの場合
- if @active_battler.is_a?(Game_Actor)
- if @active_battler.restriction == 3
- tb_array = $game_party.actors
- else
- tb_array = $game_troop.enemies
- end
- end
- @target_battlers = [tb_array[rand(tb_array.size)]]
- end
- # "味方ランダム"の判定
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
- # 行動側バトラーがエネミーの場合
- if @active_battler.is_a?(Game_Enemy)
- if @active_battler.restriction == 3
- tb_array = $game_party.actors
- else
- tb_array = $game_troop.enemies
- end
- end
- # 行動側バトラーがアクターの場合
- if @active_battler.is_a?(Game_Actor)
- if @active_battler.restriction == 3
- tb_array = $game_troop.enemies
- else
- tb_array = $game_party.actors
- end
- end
- @target_battlers = [tb_array[rand(tb_array.size)]]
- end
- # "全域化"の判定
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
- @target_battlers = $game_party.actors + $game_troop.enemies
- @target_battlers -= [@active_battler]
- for target in @target_battlers
- if target.dead? or target.hp0? or target.hidden
- @target_battlers -= [target]
- end
- end
- end
- # "対象ランダム"の判定
- if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
- tb_array = $game_party.actors + $game_troop.enemies
- @target_battlers = [tb_array[rand(tb_array.size)]]
- end
- if @target_battlers.size > 0
- ##かばう追加
- get_target_battlers_after_cover!(@target_battlers, @active_battler)
- # 通常攻撃の効果を適用
- for target in @target_battlers
- target.attack_effect(@active_battler)
- end
- return
- end
- end
- xrxs19_make_basic_action_result
- end
- #--------------------------------------------------------------------------
- # ● スキルまたはアイテムの対象側バトラー設定
- #--------------------------------------------------------------------------
- alias xrxs19_set_target_battlers set_target_battlers
- def set_target_battlers(scope)
- case @active_battler.current_action.kind
- when 1
- # "全体化"の判定
- if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
- scope = 2
- return
- end
- # "全域化"の判定
- scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
- # "敵ランダム"の判定
- scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
- # "味方ランダム"の判定
- scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
- # "対象ランダム"の判定
- scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
- when 2
- # "全体化"の判定
- if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
- scope = 2
- return
- end
- # "全域化"の判定
- scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
- # "敵ランダム"の判定
- scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
- # "味方ランダム"の判定
- scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
- # "対象ランダム"の判定
- scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
- end
- case scope
- when 8
- @target_battlers = $game_party.actors + $game_troop.enemies
- @target_battlers -= [@active_battler]
- for target in @target_battlers
- if target.dead? or target.hp0? or target.hidden
- @target_battlers -= [target]
- end
- end
- return
- when 9
- # 行動側バトラーがエネミーの場合
- if @active_battler.is_a?(Game_Enemy)
- tb_array = $game_party.actors
- target = $game_party.random_target_actor
-
- alive_num = 0 #同伴生还人数
- for actor in tb_array
- if actor.hp > 0
- alive_num += 1
- end
- end
- #人数大于1的话
- if alive_num > 0
- #重复随机选择己方角色,直到目标不是自己时停止
- until target != @target_battlers
- target = $game_party.random_target_enemy
- end
- end
-
-
- end
- # 行動側バトラーがアクターの場合
- if @active_battler.is_a?(Game_Actor)
- tb_array = $game_troop.enemies
- target = $game_troop.random_target_enemy
-
- alive_num = 0 #同伴生还人数
- for enemy in tb_array
- if enemy.hp > 0
- alive_num += 1
- end
- end
- #人数大于1的话
- if alive_num > 0
- #重复随机选择己方角色,直到目标不是自己时停止
- until target != @target_battlers
- target = $game_party.random_target_actor
- end
- end
-
-
- end
- @target_battlers = [target]
- #@target_battlers = [tb_array[rand(tb_array.size)]]
- return
- when 10
- # 行動側バトラーがエネミーの場合
- if @active_battler.is_a?(Game_Enemy)
- tb_array = $game_troop.enemies
- end
- # 行動側バトラーがアクターの場合
- if @active_battler.is_a?(Game_Actor)
- tb_array = $game_party.actors
- end
- @target_battlers = [tb_array[rand(tb_array.size)]]
- return
- when 11
- tb_array = $game_party.actors + $game_troop.enemies
- @target_battlers = [tb_array[rand(tb_array.size)]]
- return
- end
- # 呼び戻す
- xrxs19_set_target_battlers(scope)
- ##追加
- get_target_battlers_after_cover!(@target_battlers, @active_battler)
- end
- #--------------------------------------------------------------------------
- # ● スキルアクション 結果作成
- #--------------------------------------------------------------------------
- alias xrxs19_make_skill_action_result make_skill_action_result
- def make_skill_action_result
- # スキルを取得
- @skill = $data_skills[@active_battler.current_action.skill_id]
- # 既に一回以上行動している場合
- if @phase4_act_continuation >= 1
- # SP消費分のSPを回復させて擬似的にSPを減らさない
- @active_battler.sp += @skill.sp_cost
- else
- # 指定行動回数取得
- skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
- @phase4_act_times_max = @one.to_i if @one != nil
- # 特殊効果:消費金額に順ずる固定ダメージ
- if skill_element_include?(@skill, "金钱投掷")
- # ゴールドウィンドウを作成
- if @gold_window == nil or @gold_window.visible == false
- @gold_window = Window_Gold.new
- @gold_window.x = 640 - @gold_window.width
- @gold_window.y = 64
- @gold_window.opacity = 160
- @gold_window.visible = true
- end
- end
- # HP消費スキルの場合
- if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
- # HPが足りるか判定
- if @active_battler.hp <= @skill.sp_cost
- # 足りない場合
- # ステップ 1 に移行
- @phase4_step = 1
- return
- end
- # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
- @active_battler.hp0_ban = true
- @active_battler.sp += @skill.sp_cost
- # 戻す
- xrxs19_make_skill_action_result
- # HPを消費
- @active_battler.hp -= @skill.sp_cost
- # HP/SPの制限の解除
- @active_battler.hp0_ban = false
- return
- end
- end
- xrxs19_make_skill_action_result
- ##追加
- make_cover_skill_action_result()
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step3 update_phase4_step3
- def update_phase4_step3
- # 既に一回以上行動している場合
- if @phase4_act_continuation >= 1
- @active_battler.current_action.basic = 0
- @active_battler.animation_id = @active_battler.animation1_id
- # ステップ 4 に移行
- @phase4_step = 4
- @wait_count = 0
- return
- end
- xrxs19_update_phase4_step3
- # ちからためメッセージ表示。
- for target in @target_battlers
- if !target.action_message.nil?
- #@help_window.set_text(target.action_message, 1)
- target.action_message = nil
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step4 update_phase4_step4
- def update_phase4_step4
- # 武器投擲時、「武器のアニメーション」を対象に使う
- if skill_element_include?(@skill, "武器投掷")
- @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
- end
- # ゴールドウィンドウを更新
- @gold_window.refresh if @gold_window != nil
- if skill_element_include?(@skill, "变身")
- tb_array = @target_battlers
- @target_battlers = [@active_battler]
- xrxs19_update_phase4_step4
- @target_battlers = tb_array
- else
- xrxs19_update_phase4_step4
- end
- # かばわれたメンバーのアニメーション
- for target in @target_battlers
- if target.current_friend != nil
- target.current_friend.animation_id = COVER_ANIMATION_ID
- end
- end
- # 既に一回以上行動している場合
- if @phase4_act_continuation >= 1
- @wait_count = 0
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step5 update_phase4_step5
- def update_phase4_step5
- # 呼び戻す
- xrxs19_update_phase4_step5
- # かばわれたメンバーのダメージ
- for target in @target_battlers
- if target.current_friend != nil
- target.current_friend.damage_pop = true
- #かばっている状態の初期化
- target.current_friend = nil
- end
- end
- # 生存確認
- target_still_left = false
- for target in @target_battlers
- # ターゲットが生き残っているか判別
- target_still_left = true if !target.dead?
- # 戦闘不能時で、変身を解除
- if target.dead? and target.metamor_target != nil
- target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
- target.animation_hit = true
- target.battler_name = target.battler_name_original
- target.metamor_target = nil
- end
- end
- # ダメージ表示
- if @active_battler.damage != nil
- @active_battler.damage_pop = true
- end
- # 変身対象のバトラーグラフィックをコピー
- if skill_element_include?(@skill, "变身")
- if @active_battler.metamor_target != nil
- @active_battler.battler_name = @active_battler.metamor_target.battler_name
- else
- @active_battler.battler_name = @active_battler.battler_name_original
- end
- end
- # ターゲットの敵への処理
- for target in @target_battlers
- # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
- if !target.effect_message.nil?
- #@help_window.set_text(target.effect_message, 1)
- target.effect_message = nil
- end
- end
- # 行動した回数のカウントを 1 加算
- @phase4_act_continuation += 1
- # 実行済み行動回数が、指定行動回数に達したかを判別
- if @phase4_act_continuation < @phase4_act_times_max
- # 達していない場合
- # 生存している場合、続ける。
- if target_still_left
- # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
- @phase4_step = 2
- @wait_count = 0
- # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
- if @active_battler.current_action.kind == 1
- @help_window.visible = false
- #@help_window.visible = true
- end
- end
- else
- # 達した場合
- # 敵が生存、かつ skillが"派生"属性を持つ場合
- if target_still_left and
- (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
- (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
- if @one.to_i > 0
- # 回数をリセット
- @phase4_act_continuation = 0
- @phase4_act_times_max = 1
- # 武器攻撃ではなくなるため @weapon_id を nil 化
- @weapon_id = nil
- # 新しいスキルID
- @active_battler.current_action.kind = 1
- @active_battler.current_action.skill_id = @one.to_i
- # ステップ 2 に移行
- @phase4_step = 2
- @wait_count = 0
- end
- end
- end
- # ゴールドウィンドウを隠す
- @gold_window.visible = false if @gold_window != nil
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase4_step6 update_phase4_step6
- def update_phase4_step6
- next_phase_ok = true
- #リレイズ判定
- for enemy in $game_troop.enemies
- next_phase_ok = update_reraise_effect(enemy)
- if !next_phase_ok
- return
- end
- end
- for actor in $game_party.actors
- next_phase_ok = update_reraise_effect(actor)
- if !next_phase_ok
- return
- end
- end
- if next_phase_ok
- xrxs19_update_phase4_step6
- end
- end
- #===================================================
- #リレイズエフェクト
- #===================================================
- def update_reraise_effect(battler)
- if battler.reraised
- case battler.reraise_state
- when 0
- battler.reraise_state = 1 # コラプス待ち
- @wait_count = 16
- return false
- when 1
- battler.reraise_state = 2 # 復活アニメーション
- ##IDは好きなアニメーションIDを指定
- battler.animation_id = RERAISE_ANIMATION_ID
- @wait_count = 8
- return false#
- when 2
- #復活処理
- battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
- battler.reraise_state = 3 #アピアーアニメーション
- @wait_count = 8
- return false#
- when 3
- battler.reraise_state = 0 #終了?通常処理に戻る
- battler.reraised = false #フラグを初期値へ
- @status_window.refresh
- return true
- end
- else
- return true
- end
- end
- #--------------------------------------------------------------------------
- # ● アフターバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias xrxs19_update_phase5 update_phase5
- def update_phase5
- next_phase_ok = false
- # 次のアクターへ
- @phase5_i = -1 if @phase5_i == nil
- @phase5_i += 1
- if @phase5_i < $game_party.actors.size
- actor = $game_party.actors[@phase5_i]
- # 変身状態の味方がいるか判別し、それを解除する
- if actor.metamor_target != nil
- actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
- actor.animation_hit = true
- actor.battler_name = actor.battler_name_original
- actor.metamor_target = nil
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- # アニメーションの長さにかかわらず、最低 4 フレーム待つ
- @wait_count = 4
- end
- else
- next_phase_ok = true
- end
- if next_phase_ok
- xrxs19_update_phase5
- end
- end
- #--------------------------------------------------------------------------
- # ● 行動順序作成
- #--------------------------------------------------------------------------
- alias xrxs19_make_action_orders make_action_orders
- def make_action_orders
- xrxs19_make_action_orders
- # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
- @action_battlers.sort! do |a, b|
- if a.current_action.speed_priority > b.current_action.speed_priority
- -1
- elsif a.current_action.speed_priority < b.current_action.speed_priority
- +1
- elsif a.current_action.speed > b.current_action.speed
- -1
- elsif a.current_action.speed < b.current_action.speed
- +1
- else
- 0 # a <=> b
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● バトル終了
- #--------------------------------------------------------------------------
- alias xrxs19_battle_end battle_end
- def battle_end(result)
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- # 変身状態の味方がいるか判別し、それを解除する
- if actor.metamor_target != nil
- actor.battler_name = actor.battler_name_original
- actor.metamor_target = nil
- end
- end
- xrxs19_battle_end(result)
- end
- end
- #=============================================================================
- # ◇ スティール
- #=============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :effect_message
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias before_steal_original_battler_initialize initialize
- def initialize
- before_steal_original_battler_initialize()
- @effect_message = nil
- @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
- end
- end
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias before_steal_original_enemy_initialize initialize
- def initialize(troop_id, member_index)
- before_steal_original_enemy_initialize(troop_id, member_index)
- @item_possession = true
- end
- #===================================================
- #
- #===================================================
- def name
- name = $data_enemies[@enemy_id].name.split(/-/)[0]
- if !name.nil?
- return name = name.strip()
- else
- return ''
- end
- end
- #===================================================
- #ノーマルアイテムの指定
- #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
- #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
- #個数は省略可能、自動で1扱い。
- #また、ドロップアイテムと同一にしたい場合は
- #エネミーネームに -nd 個数(-nd 2) と入れて指定。
- #個数は省略可能、自動で1扱い。
- #===================================================
- def normal_item
- return get_item_from_name("n")#オプション"n"の文字列から取得
- end
- #===================================================
- #レアアイテムの指定
- #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
- #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
- #個数は省略可能、自動で1扱い。
- #また、ドロップアイテムと同一にしたい場合は
- #エネミーネームに -rd 個数(-nd 2) と入れて指定。
- #個数は省略可能、自動で1扱い。
- #===================================================
- def rare_item
- return get_item_from_name("r")#オプション"r"の文字列から取得
- end
- #===================================================
- #*Nameからアイテムを抜き出す処理
- #===================================================
- def get_item_from_name(opt)
- names = $data_enemies[@enemy_id].name.split(/-/)
- if names.size > 1
- for i in 1...names.size
- if names[i][0,1] != opt
- next
- end
- names[i].sub!(/^.(.*)/){$1}
- ary = names[i].split(/ /)
- if ary[0][0,1] == "g"
- cgy = "g"
- id = 0
- if ary[1].nil?
- ary[1] = "1"
- elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
- ary[1] = "1"
- end
- possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
- return possession
- elsif ary[0][0,1] == "d"
- cgy = ""
- id = 0
- if self.item_id != 0
- cgy = "i"
- id = self.item_id
- elsif self.weapon_id != 0
- cgy = "w"
- id = self.weapon_id
- elsif self.armor_id != 0
- cgy = "a"
- id = self.armor_id
- else
- return nil
- end
- if ary[1].nil?
- ary[1] = "1"
- elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
- ary[1] = "1"
- end
- possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
- return possession
- elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
- if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
- ary[2] = "1"
- end
- possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
- return possession
- end
- end
- end
- return nil
- end
- #===================================================
- #スティールエフェクト
- #===================================================
- def steal_effect(user, skill) # 引数skillを追加
- pos = self.normal_item
- if !@item_possession || pos.nil?
- @effect_message = "没有东西可偷。"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "没有东西可偷。"
- #self.damage = "Miss"
- return false
- end
- #盗み成功判定 アジリティが同一で50%、2倍で100%
- if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
- r_pos = self.rare_item
- #レアアイテム判定
- if !r_pos.nil? && rand(10) <= 1
- pos = r_pos
- end
- case pos["Category"]
- when "i"
- item = $data_items[pos["ID"]]
- if item.nil?
- #print "这个物品不存在!"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "这个物品不存在!"
- return false
- end
- $game_party.gain_item(item.id, pos["Num"])
- when "w"
- item = $data_weapons[pos["ID"]]
- if item.nil?
- #print "这个物品不存在!"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "这个物品不存在!"
- return false
- end
- $game_party.gain_weapon(item.id, pos["Num"])
- when "a"
- item = $data_armors[pos["ID"]]
- if item.nil?
- #print "这个物品不存在!"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "这个物品不存在!"
- return false
- end
- $game_party.gain_armor(item.id, pos["Num"])
- when "g"
- # ゴールド獲得
- $game_party.gain_gold(pos["Num"])
- end
- if pos["Category"] == "g"
- @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "偷到#{pos["Num"]}#{$data_system.words.gold}!"
- else
- @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
- $am = "偷到#{pos["Num"]}个#{item.name}!"
- end
- @item_possession = false
- self.damage = "Steal!" if self.damage == "Miss"
- return true
- else
- @effect_message = "没有东西可偷???"
- Audio.se_play("Audio/SE/cgsys20", 100, 100)
- $am = "没有东西可偷???"
- #self.damage = "Miss
- return false
- end
- return false # 念のためfalse返す処理追加
- # 多分なくてもifの結果(false)が返ると思うけど…
- end
- end
- #=============================================================================
- # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
- #=============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 追加公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :libla_reserve # ライブラ予約
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- alias before_libra_initialize initialize
- def initialize
- before_libra_initialize
- # 「ライブラ」属性のID取得
- @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
- @libra_element_id = 0 if @libra_element_id.nil?
- # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
- @libla_reserve = false
- end
- #--------------------------------------------------------------------------
- # ● スキルの効果適用
- # user : 使用者 (バトラー)
- # skill: スキル
- #--------------------------------------------------------------------------
- alias before_libra_skill_effect skill_effect
- def skill_effect(user, skill)
- #「ライブラ」スキルかどうかの判定。
- if skill.element_set.include?(@libra_element_id)
- # 命中率を適用する場合は下のif文のコメントを外してください
- #if rand(100) < skill.hit
- # このバトラーがエネミーなら情報ウィンドウを表示する
- if self.is_a?(Game_Enemy)
- self.libla_reserve = true
- end
- # 命中率を適用する場合は下のelse~endのコメントを外してください
- #else
- # self.damage = "Miss"
- #end
- # 普通のスキル判定は行わない。
- return true
- else
- return before_libra_skill_effect(user, skill)
- end
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
- #--------------------------------------------------------------------------
- alias before_libra_update_phase4_step5 update_phase4_step5
- def update_phase4_step5
- # ダメージ表示
- for target in @target_battlers
- if target.libla_reserve
- libra_window = Window_EnemyStatus.new(target)
- loop do
- # ゲーム画面を更新
- Graphics.update
- # 入力情報を更新
- Input.update
- # ボタンが押されたら情報ウィンドウを閉じてループを中断
- if Input.trigger?(Input::C) or Input.trigger?(Input::B)
- libra_window.dispose
- libra_window = nil
- break
- end
- end
- end
- # ライブラ予約フラグを解除
- target.libla_reserve = false
- end
- before_libra_update_phase4_step5
- end
- end
- #==============================================================================
- # ■ Window_EnemyStatus
- #------------------------------------------------------------------------------
- # エネミーのステータスを表示するステータスウィンドウです。
- #==============================================================================
- class Window_EnemyStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # enemy : エネミー
- #--------------------------------------------------------------------------
- def initialize(enemy)
- super(0, 64, 640, 256)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.back_opacity = 127
- @enemy = enemy
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_enemy_name(@enemy, 4, 0)
- #draw_enemy_state(@enemy, 4, 48)
- draw_enemy_hp(@enemy,196, 48, 172)
- draw_enemy_sp(@enemy,196, 72, 172)
- draw_enemy_parameter(@enemy, 4, 120, 0)
- draw_enemy_parameter(@enemy, 4, 144, 1)
- draw_enemy_parameter(@enemy, 4, 168, 2)
- draw_enemy_parameter(@enemy, 4, 192, 7)
- draw_enemy_parameter(@enemy,196, 120, 3)
- draw_enemy_parameter(@enemy,196, 144, 4)
- draw_enemy_parameter(@enemy,196, 168, 5)
- draw_enemy_parameter(@enemy,196, 192, 6)
- self.contents.font.color = system_color
- self.contents.draw_text(384, 24, 80, 32, "EXP")
- if @enemy.gold != 0
- self.contents.draw_text(384, 48, 80, 32, "等级")
- #self.contents.draw_text(384, 48, 80, 32, "金钱")
- end
- self.contents.draw_text(384, 96, 96, 32, "战利品")
- self.contents.draw_text(384, 144, 96, 32, "偷窃物")
- self.contents.font.color = normal_color
- self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
- if @enemy.gold != 0
- self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
- #self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
- end
- draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
- draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
- draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの取得
- #--------------------------------------------------------------------------
- def get_enemy_item( enemy, type )
- case type
- when 1:
- if enemy.item_id != nil and enemy.item_id != 0
- return $data_items[enemy.item_id]
- elsif enemy.weapon_id != nil and enemy.weapon_id != 0
- return $data_weapons[enemy.weapon_id]
- elsif enemy.armor_id != nil and enemy.armor_id != 0
- return $data_armors[enemy.armor_id]
- else
- return nil
- end
- when 2:
- info = enemy.get_item_from_name("n")
- return nil if info == nil
- case info["Category"]
- when "i"
- return $data_items[info["ID"]]
- when "w"
- return $data_weapons[info["ID"]]
- when "a"
- return $data_armors[info["ID"]]
- otherwise
- return nil
- end
- when 3:
- info = enemy.get_item_from_name("r")
- return nil if info == nil
- case info["Category"]
- when "i"
- return $data_items[info["ID"]]
- when "w"
- return $data_weapons[info["ID"]]
- when "a"
- return $data_armors[info["ID"]]
- otherwise
- return nil
- end
- otherwise
- return nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 名前の描画
- # enemy : エネミー
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- #--------------------------------------------------------------------------
- def draw_enemy_name(enemy, x, y)
- self.contents.font.color = normal_color
- self.contents.draw_text(x, y, 120, 32, enemy.name)
- end
- #--------------------------------------------------------------------------
- # ● ステートの描画
- # enemy : エネミー
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # width : 描画先の幅
- #--------------------------------------------------------------------------
- def draw_enemy_state(enemy, x, y, width = 120)
- text = make_battler_state_text(enemy, width, true)
- self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
- self.contents.draw_text(x, y, width, 32, text)
- end
- #--------------------------------------------------------------------------
- # ● HP の描画
- # enemy : エネミー
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # width : 描画先の幅
- #--------------------------------------------------------------------------
- def draw_enemy_hp(enemy, x, y, width = 144)
- # 文字列 "HP" を描画
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
- # MaxHP を描画するスペースがあるか計算
- if width - 32 >= 108
- hp_x = x + width - 108
- flag = true
- elsif width - 32 >= 48
- hp_x = x + width - 48
- flag = false
- end
- # HP を描画
- self.contents.font.color = enemy.hp == 0 ? knockout_color :
- enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
- self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
- # MaxHP を描画
- if flag
- self.contents.font.color = normal_color
- self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
- self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
- end
- end
- #--------------------------------------------------------------------------
- # ● SP の描画
- # enemy : エネミー
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # width : 描画先の幅
- #--------------------------------------------------------------------------
- def draw_enemy_sp(enemy, x, y, width = 144)
- # 文字列 "SP" を描画
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
- # MaxSP を描画するスペースがあるか計算
- if width - 32 >= 108
- sp_x = x + width - 108
- flag = true
- elsif width - 32 >= 48
- sp_x = x + width - 48
- flag = false
- end
- # SP を描画
- self.contents.font.color = enemy.sp == 0 ? knockout_color :
- enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
- self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
- # MaxSP を描画
- if flag
- self.contents.font.color = normal_color
- self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
- self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
- end
- end
- #--------------------------------------------------------------------------
- # ● パラメータの描画
- # enemy : エネミー
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # type : パラメータの種類 (0~6)
- #--------------------------------------------------------------------------
- def draw_enemy_parameter(enemy, x, y, type)
- case type
- when 0
- parameter_name = $data_system.words.atk
- parameter_value = enemy.atk
- when 1
- parameter_name = $data_system.words.pdef
- parameter_value = enemy.pdef
- when 2
- parameter_name = $data_system.words.mdef
- parameter_value = enemy.mdef
- when 3
- parameter_name = $data_system.words.str
- parameter_value = enemy.str
- when 4
- parameter_name = $data_system.words.dex
- parameter_value = enemy.dex
- when 5
- parameter_name = $data_system.words.agi
- parameter_value = enemy.agi
- when 6
- parameter_name = $data_system.words.int
- parameter_value = enemy.int
- when 7
- parameter_name = "闪躲"
- parameter_value = enemy.eva
- end
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 120, 32, parameter_name)
- self.contents.font.color = normal_color
- self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
- end
- end
- #=============================================================================
- # ◇ ちからため スキル実装スクリプト by 和希
- #=============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 追加公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :powerstock # 「ちからため」回数
- attr_accessor :action_message # ヘルプウィンドウに表示する文字
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- alias before_powerstock_original_initialize initialize
- def initialize
- before_powerstock_original_initialize
- @powerstock = 0
- @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
- @powerstock_skill_id = 0 if @powerstock_skill_id == nil
- @effect_message = nil
- end
- #--------------------------------------------------------------------------
- # ● 通常攻撃の効果適用
- # attacker : 攻撃者 (バトラー)
- #--------------------------------------------------------------------------
- alias before_powerstock_original_attack_effect attack_effect
- def attack_effect(attacker)
- # 攻撃者が「ちからため」しているか?
- if attacker.powerstock > 0
- bool_powerstock = true
- # 攻撃者の力を一時的に上昇させる
- stock_attacker_str = attacker.str
- attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
- # ヘルプメッセージに「ちからためx?」を出す
- @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
- @action_message += " x"
- @action_message += attacker.powerstock.to_s
- # ストックを消す
- attacker.powerstock = 0
- else
- bool_powerstock = false
- end
- # fukuyamaさん↓のミス発見ありがとうございました
- result = before_powerstock_original_attack_effect(attacker)
- # 力を上昇させていた場合、元に戻す
- if bool_powerstock
- attacker.str = stock_attacker_str
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● スキルの効果適用
- # user : 使用者 (バトラー)
- # skill: スキル
- #--------------------------------------------------------------------------
- alias before_powerstock_original_skill_effect skill_effect
- def skill_effect(user, skill)
- #「ちからため」スキルかどうかの判定。
- if skill.element_set.include?(@powerstock_skill_id)
- # 命中率を適用する場合は下のif文のコメントを外してください
- #if rand(100) < skill.hit
- @powerstock += 1 # 「ちからため」回数を1増やす
- # ダメージに"Charge"をセットする
- self.damage = "Charge"
- # 命中率を適用する場合は下のelse~endのコメントを外してください
- #else
- # self.damage = "Miss"
- #end
- # 普通のスキル判定は行わない。
- return true
- else
- return before_powerstock_original_skill_effect(user, skill)
- end
- end
- end
- #=============================================================================
- # ◇ 見切りステート by 和希
- #=============================================================================
- class Game_Battler
- # 見切りステートの名前
- ABANDONS_SKILL_STATE_NAME = "断念"
- #--------------------------------------------------------------------------
- # ● 通常攻撃の効果適用
- #--------------------------------------------------------------------------
- alias before_abandons_original_attack_effect attack_effect
- def attack_effect(attacker)
- # 見切りステートが存在するか?
- if nil != (abandons_skill = get_abandons_id)
- # 見切りステートにかかっているか?
- if self.state?(abandons_skill)
- ## 避ける!
- # クリティカルフラグをクリア
- self.critical = false
- # ダメージに "Avoid!!" を設定
- self.damage = "Avoid!!"
- # 見切りステートを解除
- self.remove_state(abandons_skill,true)
- # メソッド終了
- return false
- end
- end
- # 見切りステート状態でなかった時は通常どおり
- return before_abandons_original_attack_effect(attacker)
- end
- #--------------------------------------------------------------------------
- # ● 見切りステータスのID取得
- #--------------------------------------------------------------------------
- def get_abandons_id
- result = nil
- if @abandons_status_id == nil
- for i in 1 ... $data_states.size
- if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
- result = $data_states[i].id
- break
- end
- end
- @abandons_status_id = ( result != nil ? result : 0 )
- elsif @abandons_status_id > 0
- result = @abandons_status_id
- end
- return result
- end
- end
- #=============================================================================
- # ◇ かばう by シムナフ
- #=============================================================================
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle
- #追加
- attr_reader :active_battler
- #ここまで
- ##新メソッド
- def make_cover_skill_action_result
- cover_num = 0
- cover_bool = false
- for i in @skill.element_set
- if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
- cover_bool = true
- elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
- if !(elm_num.nil?)
- cover_num += elm_num.to_i
- end
- end
- end
- if cover_bool.equal?(true)
- ##自分のみが対象だった場合は味方からランダムに1人をかばう
- if @target_battlers.include?(@active_battler)
- if @target_battlers.size == 1
- if @target_battlers[0].is_a?(Game_Actor)
- friends = $game_party.actors.dup
- friends.delete(@active_battler)
- @target_battlers = [friends[rand(friends.size)]]
- elsif @target_battlers[0].is_a?(Game_Enemy)
- friends = $game_troop.enemies.dup
- friends.delete(@active_battler)
- @target_battlers = [friends[rand(friends.size)]]
- end
- else
- @target_battlers.delete(@active_battler)
- end
- end
- @active_battler.covered_friends = @target_battlers.dup
- @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
- if (cover_num > 0)
- @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
- end
- for target in @target_battlers
- target.damage = COVER_EFFECT_CHAR
- end
- end
- end
- ##ここまで
- end
- class Game_Party
- ##追加エイリアス
- include Cover_Module
- #--------------------------------------------------------------------------
- # ● 対象アクターのスムーズな決定
- # actor_index : アクターインデックス
- #--------------------------------------------------------------------------
- alias before_cover_original_smooth_target_actor smooth_target_actor
- def smooth_target_actor(actor_index)
- if $scene.is_a?(Scene_Battle)
- battler = $scene.active_battler()
- else
- battler = nil
- end
- target = [before_cover_original_smooth_target_actor(actor_index)]
- get_target_battlers_after_cover!(target, battler)
- return target[0]
- end
- ##ここまで
- end
- class Game_Troop
- ##追加エイリアス
- include Cover_Module
- #--------------------------------------------------------------------------
- # ● 対象エネミーのスムーズな決定
- # enemy_index : エネミーインデックス
- #--------------------------------------------------------------------------
- alias before_cover_original_smooth_target_enemy smooth_target_enemy
- def smooth_target_enemy(enemy_index)
- if $scene.is_a?(Scene_Battle)
- battler = $scene.active_battler()
- else
- battler = nil
- end
- target = [before_cover_original_smooth_target_enemy(enemy_index)]
- get_target_battlers_after_cover!(target, battler)
- return target[0]
- end
- ##ここまで
- end
- #==============================================================================
- # ◇ 付加属性名称判定モジュール
- #==============================================================================
- module Check_ElementName_Set
- #--------------------------------------------------------------------------
- # ● スキルが指定名の属性を持つか判定
- #--------------------------------------------------------------------------
- def skill_element_include?(skill, element_name)
- @one = @two = nil
- return false if skill == nil or !skill.is_a?(RPG::Skill)
- for i in skill.element_set
- if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- @one = $1
- @two = $2
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● アイテムが指定名の属性を持つか判定
- #--------------------------------------------------------------------------
- def item_element_include?(item, element_name)
- @one = @two = nil
- return false if item == nil or !item.is_a?(RPG::Item)
- for i in item.element_set
- if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- @one = $1
- @two = $2
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 武器が指定名の属性を持つか判定
- #--------------------------------------------------------------------------
- def weapon_element_include?(weapon_id, element_name)
- @one = @two = nil
- return false if weapon_id == nil or weapon_id <= 0
- for i in $data_weapons[weapon_id].element_set
- if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- @one = $1
- @two = $2
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 防具が指定名の属性を持つか判定
- #--------------------------------------------------------------------------
- def armor_element_include?(armor_id, element_name)
- @one = @two = nil
- return false if armor_id == nil or armor_id <= 0
- for i in $data_armors[armor_id].guard_element_set
- if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- @one = $1
- @two = $2
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
- #--------------------------------------------------------------------------
- def armor_element_suftext(armor_id, element_name)
- return nil if armor_id == nil or armor_id <= 0
- for i in $data_armors[armor_id].guard_element_set
- if $data_system.elements[i] =~ /#{element_name}(.*)/
- return $1
- end
- end
- return nil
- end
- #--------------------------------------------------------------------------
- # ● アクターが指定名の属性を持つ武器を装備しているかか判定
- #--------------------------------------------------------------------------
- def equip_weapon_element_include?(actor, element_name)
- @one = @two = nil
- return false if !actor.is_a?(Game_Actor)
- return false if actor.weapon_id == nil or actor.weapon_id <= 0
- bool = false
- one_total = 0
- for i in $data_weapons[actor.weapon_id].element_set
- if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- one_total += $1.to_i
- @two = $2
- bool = true
- end
- end
- # 武器管理システムXC.が導入されている場合
- if $xrxs24_weapon_property_system_work
- for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
- PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
- if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
- one_total += $1.to_i
- @two = $2
- bool = true
- end
- end
- end
- @one = one_total
- return bool
- end
- #--------------------------------------------------------------------------
- # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
- #--------------------------------------------------------------------------
- def actor_element_equip?(actor, element_name)
- one_total = 0
- bool = false
- return false if !actor.is_a?(Game_Actor)
- weapon = $data_weapons[actor.weapon_id]
- armor1 = $data_armors[actor.armor1_id]
- armor2 = $data_armors[actor.armor2_id]
- armor3 = $data_armors[actor.armor3_id]
- armor4 = $data_armors[actor.armor4_id]
- if equip_weapon_element_include?(actor, element_name)
- one_total += @one.to_i
- bool = true
- end
- if armor_element_include?(armor1.id, element_name)
- one_total += @one.to_i
- bool = true
- end
- if armor_element_include?(armor2.id, element_name)
- one_total += @one.to_i
- bool = true
- end
- if armor_element_include?(armor3.id, element_name)
- one_total += @one.to_i
- bool = true
- end
- if armor_element_include?(armor4.id, element_name)
- one_total += @one.to_i
- bool = true
- end
- @one = one_total
- return bool
- end
- end
- #=============================================================================
- # ◇ かばうModule
- #=============================================================================
- ####以下新規追加Module
- module Cover_Module
- #--------------------------------------------------------------------------
- # ● かばう 後のターゲット配列生成
- #--------------------------------------------------------------------------
- def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
- #HP割合の低い順にソート
- #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
- target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
- #HP割合の多い順にソート
- actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
- enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
- for i in 0...target_battlers.size
- if target_battlers[i].is_a?(Game_Actor)
- for actor in actors
- new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
- if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
- #new_target.effect_message = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
- $am = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
- new_target.current_friend = target_battlers[i]
- new_target.current_friend.damage = COVER_EFFECT_CHAR
- target_battlers[i] = new_target
- break
- end
- end
- end
- if target_battlers[i].is_a?(Game_Enemy)
- for enemy in enemies
- new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
- if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
- #new_target.effect_message = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
- $am = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
- new_target.current_friend = target_battlers[i]
- new_target.current_friend.damage = COVER_EFFECT_CHAR
- target_battlers[i] = new_target
- break
- end
- end
- end
- end
- #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
- target_battlers.uniq!()
- #「かばう」ステートの解除判定
- for target in target_battlers
- if !target.current_friend.nil?
- #かばう 残り回数がなくなった場合
- target.cover_remain -= 1
- if target.cover_remain <= 0
- target.remove_state(get_cover_state_id())
- target.cover_remain = 0
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● かばう の発動判定
- #--------------------------------------------------------------------------
- def get_target_after_cover(battler, target, coverer)
- #味方からのターゲットは庇わない
- if battler.is_a?(Game_Actor)
- if target.is_a?(Game_Actor)
- return target
- end
- end
- if battler.is_a?(Game_Enemy)
- if target.is_a?(Game_Enemy)
- return target
- end
- end
- #庇う人が動けない時は庇わない
- if !(coverer.movable? && coverer.exist?)
- return target
- end
- #庇う人が かばう のステートになっている時のみ
- if !coverer.state?(get_cover_state_id())
- return target
- end
- #ターゲットが既に他の人を庇っている時は無効
- if target.state?(get_cover_state_id())
- return target
- end
- #ターゲットと庇う人が同じの場合は無効
- if target.equal?(coverer)
- return target
- end
- #発動確率判定
- if !(rand(100) <= COVER_EFFECT_PERCENT)
- return taget
- end
- #ターゲットのHP割合判定
- if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
- return target
- end
- #「かばっている味方配列」が空だったら、全ての味方を庇う
- if coverer.covered_friends.size.zero?
- return coverer
- else
- for covered_friend in coverer.covered_friends
- if target.equal?(covered_friend)
- return coverer
- end
- end
- end
- return target
- end
- #--------------------------------------------------------------------------
- # ● かばう のStateID
- #--------------------------------------------------------------------------
- def get_cover_state_id
- result = nil
- if @cover_status_id == nil
- for i in 1 ... $data_states.size
- if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
- result = $data_states[i].id
- break
- end
- end
- @cover_status_id = ( result != nil ? result : 0 )
- elsif @cover_status_id > 0
- result = @cover_status_id
- end
- return result
- end
- end
- ####Module End
- #//////////////////////////////////////////////////////////////////////////////
- # ◇ インクルード
- #//////////////////////////////////////////////////////////////////////////////
- module Check_ElementName_Set
- include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
- end
- class Game_Battler
- include Check_ElementName_Set
- include Cover_Module
- end
- class Window_Item < Window_Selectable
- include Check_ElementName_Set
- end
- class Scene_Battle
- include Check_ElementName_Set
- include Cover_Module
- end
- #==============================================================================
- # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
- #==============================================================================
- module RPG
- class Sprite < ::Sprite
- alias xrxs19_damage damage
- def damage(value, critical)
- if value.is_a?(String) and value.include?($data_system.words.sp)
- # 解放
- dispose_damage
- # 数値部分を抜き取る
- value = value.scan(/[+-]?[0-9]+/)[0].to_i
- # 表示文字列の設定
- damage_string = $data_system.words.sp + " " + value.abs.to_s
- # 描写
- bitmap = Bitmap.new(160, 48)
- #bitmap.font.name = "黑体"
- bitmap.font.size = 32
- bitmap.font.color.set(0, 0, 0)
- bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
- bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
- bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
- bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
- if value < 0
- bitmap.font.color.set(128, 255, 255)
- else
- bitmap.font.color.set(255, 176, 144)
- end
- bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
- if critical
- bitmap.font.size = 20
- bitmap.font.color.set(0, 0, 0)
- bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
- bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
- bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
- bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
- bitmap.font.color.set(255, 255, 255)
- bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
- end
- @_damage_sprite = ::Sprite.new(self.viewport)
- @_damage_sprite.bitmap = bitmap
- @_damage_sprite.ox = 80
- @_damage_sprite.oy = 20
- @_damage_sprite.x = self.x
- @_damage_sprite.y = self.y - self.oy / 2
- @_damage_sprite.z = 3000
- @_damage_duration = 40
- else
- # 通常時?戻す
- xrxs19_damage(value, critical)
- end
- end
- end
- end
复制代码
这个里边你可以用行动回数的属性来决定打几下,比如属性是行动回数6就是打6下…… |
|