mikoF.gif (13.76 KB, 下载次数: 23)
#============================================================================== # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息 #============================================================================== # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼ # by 桜雅 在土, 和希, シムナフ # 援助修改BY:SOULSAGA #用法是加给角色加上名叫援助的状态后..当敌人用帶有名字叫援助的属性的特技攻击时候有援助状态的角色就会代替被攻击的角色承受伤害.. #如果敌人打的是有援助状态的角色是不会消耗次数的 #技能状态+援助 属性帶援助+或-数字0至9可以重新给角色减剩余次数 #============================================================================== # ■ 以下内容定义各特技的属性名 #============================================================================== class Game_Battler RERAISE_STATE_NAME = /复活/ LIBLA_SKILL_ELEMENT_NAME = "透视" POWERSTOCK_SKILL_ELEMENT_NAME = "聚气" POWERSTOCK_BASE_RATE = 0.5 #——每回合聚气威力上升倍率 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 = "承受" COVER_ANIMATION_ID = 99 COVER_DEFAULT_NUMBER = 3 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 $cover_ok = false 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 # ● ステートの解除 alias xrxs19_remove_state remove_state def xrxs19_remove_state(state_id, force = false) xrxs19_emove_state(state_id, force) if state_id == get_cover_state_id() and self.cover_remain <= 0 @states.delete(get_cover_state_id()) @states_turn.delete(get_cover_state_id()) 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 self.critical = true self.hp -= damage damage *= 2 self.damage = damage 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 self.sp -= damage self.damage = "SP " + 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 = "SP " + 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, 32, 32), 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 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 make_cover_attack_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 return when 9 # 行動側バトラーがエネミーの場合 if @active_battler.is_a?(Game_Enemy) tb_array = $game_party.actors end # 行動側バトラーがアクターの場合 if @active_battler.is_a?(Game_Actor) tb_array = $game_troop.enemies end @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 # ステップ 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 for target in @target_battlers target.animation_id = COVER_ANIMATION_ID if target.current_friend 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 p target.current_friend.animation_id 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 = 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 = "没有东西可偷。" #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 "这个物品不存在!" return false end $game_party.gain_item(item.id, pos["Num"]) when "w" item = $data_weapons[pos["ID"]] if item.nil? print "这个物品不存在!" return false end $game_party.gain_weapon(item.id, pos["Num"]) when "a" item = $data_armors[pos["ID"]] if item.nil? print "这个物品不存在!" 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}偷到!" else @effect_message = "#{item.name}#{pos["Num"]}个偷到!" end @item_possession = false self.damage = "Steal!" if self.damage == "Miss" return true else @effect_message = "没有东西可偷???" #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") self.contents.draw_text(384, 48, 80, 32, "金钱") 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) self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2) 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) $se_skill_id = 1 # 攻撃者が「ちからため」しているか? 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) #「ちからため」スキルかどうかの判定。 $se_skill_id = skill.id 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 for target in @target_battlers if (cover_num > 0) target.covered_friends = @target_battlers.dup #target.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される target.cover_remain = cover_num#発動回数が有った場合はその回数で上書き end target.damage = COVER_EFFECT_CHAR + target.damage.to_s + "伤害" if target.cover_remain > 0 and get_cover_state_id and $coverer_falg == true $coverer_falg = false end end end ##ここまで end def make_cover_attack_action_result cover_num = 0 cover_bool = true 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 for target in @target_battlers if (cover_num > 0) target.covered_friends = @target_battlers.dup #target.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される target.cover_remain = cover_num#発動回数が有った場合はその回数で上書き end target.damage = "承受" + target.damage.to_s + "伤害" if target.cover_remain > 0 and get_cover_state_id and $coverer_falg == true $coverer_falg = false 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}をかばった!" 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}をかばった!" 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? $coverer_falg = true return coverer else for covered_friend in coverer.covered_friends if target.equal?(covered_friend) $coverer_falg = true return coverer end end end $coverer_falg = true return coverer 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 #============================================================================== # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息 #==============================================================================
soulsaga 发表于 2017-11-13 10:24
#==============================================================================
# 本脚本来自www.66RP ...
89444640 发表于 2017-11-13 13:30
怎么设置使用方技能?总跳错误
jujuba02 发表于 2017-11-14 10:55
同意7楼,头发放后面比较好吧。
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |