=begin 条件ドロップforAce テストバージョン1.021 エネミーのメモ欄を使って、特殊な条件を満たすことで入手可能な装備品を設定します。 ver1.021 属性条件がスキルで反応しないバグを修正 ver1.02 属性条件がアイテムで反応しないバグを修正 ver1.01 通常攻撃の属性判定がおかしいのを修正 ver1.01 ステータス条件、対象ステータス条件、人数条件を追加 ver1.01 条件ドロップで追加されたアイテムの文字色変更を仕様として追加 ※※※設定方法※※※ ------------------------------------------ エネミーのメモ欄に以下のように記述します。 ------------------------------------------ --------------ここから------------------- <条件ドロップ A:B C%> ※この間に条件を書きます※ --------------ここまで------------------- A:I,W,Aのいずれかのアルファベット。Iはアイテム、Wは武器、Aは防具。 B:ドロップするアイテムのID。種類はAで設定したもの。 C:条件を満たした上でドロップする確率。 ------------------------------------------ ※以下設定可能な条件の説明※ ------------------------------------------ 属性条件:A[,B,C・・・] ※トドメを刺した攻撃にA[,B,C・・・]で指定したいずれかの属性が含まれていれば条件を満たします。 設定例:属性条件:2,3,4,5,6 属性条件:5 ------------------------------------------ ターン条件:A[以下,以上] ※トドメを刺した時のターンがA[以上,以下]の時に条件を満たします。[以上.以下]はどちらか必ず指定してください。 設定例:ターン条件:5以上 ターン条件:A-B[以内,以外] ※トドメを刺した時のターンがA-B[以内,以外]の時に条件を満たします。[以外,以内]はどちらか必ず指定してください。 設定例:ターン条件:3-8以内 ------------------------------------------ ステート条件:A[,B,C・・・] ※トドメを刺した時、エネミーがA[,B,C・・・]で指定したいずれかのステートに掛かっていれば条件を満たします。 設定例:ステート条件:2,3,4,5,6 ステート条件:5 ------------------------------------------ 討伐者ステート条件:A[,B,C・・・] ※トドメを刺したアクターがA[,B,C・・・]で指定したいずれかのステートに掛かっていれば条件を満たします。 設定例:討伐者ステート条件:2,3,4,5,6 討伐者ステート条件:5 ------------------------------------------ ダメージ条件:A[以下,以上] ※トドメを刺したダメージがA[以上,以下]の時に条件を満たします。[以上.以下]はどちらか必ず指定してください。 設定例:ダメージ条件:500以下 ダメージ条件:A-B[以内,以外] ※トドメを刺したダメージがA-B[以内,以外]の時に条件を満たします。[以外,以内]はどちらか必ず指定してください。 設定例:ダメージ条件:400-700以外 ------------------------------------------ アクター条件:A[,B,C・・・] ※トドメを刺したアクターがA[,B,C・・・]で指定したいずれかのアクターならば条件を満たします。 設定例:アクター条件:2,3,4,5,6 アクター条件:5 ------------------------------------------ レベル条件:[平均,最大,最低,討伐者]A[以下,以上] ※トドメを刺した時[パーティの平均,最大,最低 または討伐者]のレベルがA[以上,以下]の時に条件を満たします。 [平均,最大,最低,討伐者][以上.以下]はそれぞれいずれかを必ず指定してください。 設定例:レベル条件:平均5以上 レベル条件:[平均,最大,最低,討伐者]A-B[以内,以外] ※トドメを刺した時[パーティの平均,最大,最低 または討伐者]のレベルがA-B[以内,以外]の時に条件を満たします。 [平均,最大,最低,討伐者][以上.以下]はそれぞれいずれかを必ず指定してください。 設定例:レベル条件:最大4-9以内 ------------------------------------------ 通常攻撃[以外] ※トドメを刺した攻撃が通常攻撃[以外]の時、条件を満たします。[以外]を記述すると通常攻撃以外に反応します。 設定例:通常攻撃以外 ------------------------------------------ スキル攻撃[以外] ※トドメを刺した攻撃がスキル攻撃[以外]の時、条件を満たします。[以外]を記述するとスキル攻撃以外に反応します。 設定例:スキル攻撃以外 ------------------------------------------ アイテム攻撃[以外] ※トドメを刺した攻撃がアイテム攻撃[以外]の時、条件を満たします。[以外]を記述するとアイテム攻撃以外に反応します。 設定例:アイテム攻撃以外 ------------------------------------------ スキル条件:A[,B,C・・・] ※トドメを刺したスキルがA[,B,C・・・]で指定したいずれかのスキルならば条件を満たします。 設定例:スキル条件:2,3,4,5,6 スキル条件:5 ------------------------------------------ アイテム条件:A[,B,C・・・] ※トドメを刺したアイテムがA[,B,C・・・]で指定したいずれかのアイテムならば条件を満たします。 設定例:アイテム条件:2,3,4,5,6 アイテム条件:5 ------------------------------------------ 防御中[以外] ※トドメを刺した時エネミーが防御中[以外]なら条件を満たします。[以外]を記述すると防御中以外の時に条件を満たします。 設定例:防御中 ------------------------------------------ ステータス条件:[HP,MP,LV,攻撃力,防御力,敏捷性,魔法力,魔法防御,運]A(%)[以上,以下] ※トドメを刺したアクターのステータスがA(%)[以上,以下]なら条件を満たします。HPとMPを指定した場合、%指定もできます。 設定例:ステータス条件:HP10%以下 ステータス条件:攻撃力500以上 ステータス条件:[HP,MP,LV,攻撃力,防御力,敏捷性,魔法力,魔法防御,運A(%)-B(%)[以内,以外] ※トドメを刺したアクターのステータスがA(%)-B(%)[以内,以外]なら条件を満たします。HPとMPを指定した場合、%指定もできます。 設定例:ステータス条件:HP15%-40%以内 ステータス条件:攻撃力100-400以外 ------------------------------------------ 対象ステータス条件:[HP,MP,LV,攻撃力,防御力,敏捷性,魔法力,魔法防御,運]A(%)[以上,以下] ※トドメを刺したとき自身のステータスがA(%)[以上,以下]なら条件を満たします。HPとMPを指定した場合、%指定もできます。 設定例:対象ステータス条件:HP10%以下 対象ステータス条件:攻撃力500以上 対象ステータス条件:[HP,MP,LV,攻撃力,防御力,敏捷性,魔法力,魔法防御,運]A(%)-B(%)[以内,以外] ※トドメを刺したとき自身のステータスがA(%)-B(%)[以内,以外]なら条件を満たします。HPとMPを指定した場合、%指定もできます。 設定例:対象ステータス条件:HP15%-40%以内 対象ステータス条件:攻撃力100-400以外 ------------------------------------------ 人数条件:A[以下,以上] ※戦闘終了時の人数がA[以上,以下]の時に条件を満たします。[以上.以下]はどちらか必ず指定してください。 設定例:人数条件:5以上 人数条件:A-B[以内,以外] ※戦闘終了時の人数がA-B[以内,以外]の時に条件を満たします。[以外,以内]はどちらか必ず指定してください。 設定例:人数条件:3-8以内 ------------------------------------------ このスクリプトは素材として利用してもらって構いません。 ※利用規約 特になし =end #============================================================================== # ■ BattleManager #------------------------------------------------------------------------------ #  戦闘の進行を管理するモジュールです。 #============================================================================== module BattleManager EXTEND_ITEM_TEXT_COLOR = 5 #条件ドロップしたアイテムの表示色、システムカラーのインデックスで指定 #-------------------------------------------------------------------------- # ● ドロップアイテムの獲得と表示 #-------------------------------------------------------------------------- def self.gain_drop_items $game_troop.make_drop_items.each do |item| name = item.name f = false $game_troop.members.each{|e| f = e.check_extend_drop.include?(item);break if f} name = f ? "\\c["+ EXTEND_ITEM_TEXT_COLOR.to_s + "]" + name + "\\c[0]" : name $game_party.gain_item(item, 1) $game_message.add(sprintf(Vocab::ObtainItem, name)) end wait_for_message end end module Extend_Drop_Prerequisite # 攻撃種類のタイプ分け用定義 NORMAL_ATTACK = 0 SKILL_ATTACK = 1 ITEM_ATTACK = 2 # 各項目の読み取り用定義 EX_DROP_START = /<(?:EX_DROP|条件ドロップ)\s*([IWA])+\s*\:(\s*\d+)? (\s+\d+[%%])?(\s*\/)?>/ix EX_DROP_END = /<\/(?:EX_DROP|条件ドロップ)>/ ELEMENT_PR = /^(?:ELEMENT|属性条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*/i TURN_PR = /^(?:TURN|ターン条件)[::](\s*\d+)以([上下])/i TURN_PR_WIDE = /^(?:TURN|ターン条件)[::](\s*\d+)\-(\s*\d+)以([内外])/i STATE_PR = /^(?:STATE|ステート条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*([以外])*/i FINISHER_STATE_PR = /^(?:FINISHER_STATE|討伐者ステート条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*([以外])*/i DAMAGE_PR = /^(?:DAMAGE|ダメージ条件)[::](\s*\d+)以([上下])/i DAMAGE_PR_WIDE = /^(?:DAMAGE|ダメージ条件)[::](\s*\d+)\-(\s*\d+)以([内外])/i FINISHER_PR = /^(?:ACTOR|アクター条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*$/i LV_PR = /^(?:LEVEL|レベル条件)[::]((?:平均)|(?:最大)|(?:最低)|(?:討伐者))*(\s*\d+)以([上下])/i LV_PR_WIDE = /^(?:LEVEL|レベル条件)[::]((?:平均)|(?:最大)|(?:最低)|(?:討伐者))*(\s*\d+)\-(\s*\d+)以([内外])/i USER_STATUS_PR = /^(?:STATUS|ステータス条件)[::]((?:HP|HP)|(?:MP|MP)|(?:TP|TP)|(?:ATK|ATK|攻撃力)|(?:DEF|DEF|防御力)|(?:AGI|AGI|敏捷性)|(?:MAT|MAT|魔法力)|(?:MDF|MDF|魔法防御)|(?:LUK|LUK|運)|(?:LV|LV))+(\s*\d+)+([%%])?以([上下])/i USER_STATUS_PR_WIDE = /^(?:STATUS|ステータス条件)[::]((?:HP|HP)|(?:MP|MP)|(?:TP|TP)|(?:ATK|ATK|攻撃力)|(?:DEF|DEF|防御力)|(?:AGI|AGI|敏捷性)|(?:MAT|MAT|魔法力)|(?:MDF|MDF|魔法防御)|(?:LUK|LUK|運)|(?:LV|LV))+(\s*\d+)+([%%])?\-+(\s*\d+)+([%%])?以([内外])/i TARGET_STATUS_PR = /^(?:T_STATUS|対象ステータス条件)[::]((?:HP|HP)|(?:MP|MP)|(?:TP|TP)|(?:ATK|ATK|攻撃力)|(?:DEF|DEF|防御力)|(?:AGI|AGI|敏捷性)|(?:MAT|MAT|魔法力)|(?:MDF|MDF|魔法防御)|(?:LUK|LUK|運)|(?:LV|LV))+(\s*\d+)+([%%])?以([上下])/i TARGET_STATUS_PR_WIDE = /^(?:T_STATUS|対象ステータス条件)[::]((?:HP|HP)|(?:MP|MP)|(?:TP|TP)|(?:ATK|ATK|攻撃力)|(?:DEF|DEF|防御力)|(?:AGI|AGI|敏捷性)|(?:MAT|MAT|魔法力)|(?:MDF|MDF|魔法防御)|(?:LUK|LUK|運)|(?:LV|LV))+(\s*\d+)+([%%])?\-+(\s*\d+)+([%%])?以([内外])/i NORMAL_PR = /^(?:ATTACK|通常攻撃)(?:以外)*/ SKILL_PR = /^(?:SKILL|スキル条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*/i SKILL_NON_PR = /^(?:SKILL_ATTACK|スキル攻撃)(?:以外)*/ ITEM_PR = /^(?:ITEM|アイテム条件)[::](\s*\d+(?:\s*,\s*\d+)*)\s*/i ITEM_NON_PR = /^(?:ITEM_ATTACK|アイテム攻撃)(?:以外)*/ DEFENSE_PR = /^(?:DEFENSE|防御中)(?:以外)*/ MEMBER_SIZE_PR = /^(?:MEMBER_SIZE|人数条件)[::](\s*\d+)以([上下])/i MEMBER_SIZE_WIDE = /^(?:MEMBER_SIZE|人数条件)[::](\s*\d+)\-(\s*\d+)以([内外])/i end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  敵キャラを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler # エネミー撃破時の状況を記録用 attr_reader :dead_condition # 条件ドロップ用 attr_reader :extend_drop_prere #-------------------------------------------------------------------------- # ● オブジェクト初期化 エイリアス # index : 敵グループ内インデックス # enemy_id : 敵キャラ ID # ※条件ドロップの初期化処理を追加 #-------------------------------------------------------------------------- alias init_enemy initialize unless $@ def initialize(index, enemy_id) init_enemy(index,enemy_id) init_extend_drop_prere @dead_condition = [] end #-------------------------------------------------------------------------- # ● 条件ドロップの初期化 #-------------------------------------------------------------------------- def init_extend_drop_prere @extend_drop_prere = [] ex_drop_flag = false extend_drop_status = {} self.enemy.note.each_line{|l| if ex_drop_flag # 属性条件読み取り if l =~ Extend_Drop_Prerequisite::ELEMENT_PR array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} if extend_drop_status["element"] == nil extend_drop_status["element"] = [array] else extend_drop_status["element"].push(array) end # ターン条件読み取り elsif l =~ Extend_Drop_Prerequisite::TURN_PR if extend_drop_status["turn"] == nil extend_drop_status["turn"] = [[$1.to_i,$2]] else extend_drop_status["turn"].push([$1.to_i,$2]) end elsif l =~ Extend_Drop_Prerequisite::TURN_PR_WIDE if extend_drop_status["turn"] == nil extend_drop_status["turn"] = [[$1.to_i,$2.to_i,$3]] else extend_drop_status["turn"].push([$1.to_i,$2.to_i,$3]) end # ステート条件読み取り elsif l =~ Extend_Drop_Prerequisite::STATE_PR flg = $2 array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} array.push(flg) unless flg == nil if extend_drop_status["state"] == nil extend_drop_status["state"] = [array] else extend_drop_status["state"].push(array) end # 討伐者ステート条件読み取り elsif l =~ Extend_Drop_Prerequisite::FINISHER_STATE_PR flg = $2 array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} array.push(flg) unless flg == nil if extend_drop_status["finisher_state"] == nil extend_drop_status["finisher_state"] = [array] else extend_drop_status["finisher_state"].push(array) end # ダメージ条件読み取り elsif l =~ Extend_Drop_Prerequisite::DAMAGE_PR if extend_drop_status["damage"] == nil extend_drop_status["damage"] = [[$1.to_i,$2]] else extend_drop_status["damage"].push([$1.to_i,$2]) end elsif l =~ Extend_Drop_Prerequisite::DAMAGE_PR_WIDE if extend_drop_status["damage"] == nil extend_drop_status["damage"] = [[$1.to_i,$2.to_i,$3]] else extend_drop_status["damage"].push([$1.to_i,$2.to_i,$3]) end # アクター条件読み取り elsif l =~ Extend_Drop_Prerequisite::FINISHER_PR array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} if extend_drop_status["finisher"] == nil extend_drop_status["finisher"] = [array] else extend_drop_status["finisher"].push(array) end # レベル条件読み取り elsif l =~ Extend_Drop_Prerequisite::LV_PR if extend_drop_status["lv"] == nil extend_drop_status["lv"] = [[$1,$2.to_i,$3]] else extend_drop_status["lv"].push([$1,$2.to_i,$3]) end elsif l =~ Extend_Drop_Prerequisite::LV_PR_WIDE if extend_drop_status["lv"] == nil extend_drop_status["lv"] = [[$1,$2.to_i,$3.to_i,$4]] else extend_drop_status["lv"].push([$1,$2.to_i,$3.to_i,$4]) end # 通常攻撃条件読み取り elsif l =~ Extend_Drop_Prerequisite::NORMAL_PR if $&.include?("以外") extend_drop_status["normal"] = false else extend_drop_status["normal"] = true end # スキル攻撃条件読み取り elsif l =~ Extend_Drop_Prerequisite::SKILL_NON_PR if $&.include?("以外") extend_drop_status["skill_attack"] = false else extend_drop_status["skill_attack"] = true end # アイテム攻撃条件読み取り elsif l =~ Extend_Drop_Prerequisite::ITEM_NON_PR if $&.include?("以外") extend_drop_status["item_attack"] = false else extend_drop_status["item_attack"] = true end # スキル条件読み取り elsif l =~ Extend_Drop_Prerequisite::SKILL_PR array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} if extend_drop_status["skill"] == nil extend_drop_status["skill"] = [array] else extend_drop_status["skill"].push(array) end # アイテム条件読み取り elsif l =~ Extend_Drop_Prerequisite::ITEM_PR array = $1.scan(/\s*\d+/) array.each_index{|i| array[i] = array[i].to_i} if extend_drop_status["item"] == nil extend_drop_status["item"] = [array] else extend_drop_status["item"].push(array) end # 防御状態条件読み取り elsif l =~ Extend_Drop_Prerequisite::DEFENSE_PR if $&.include?("以外") extend_drop_status["guard"] = false else extend_drop_status["guard"] = true end # ステータス条件読み取り elsif l =~ Extend_Drop_Prerequisite::USER_STATUS_PR if extend_drop_status["user_status"] == nil extend_drop_status["user_status"] = [[$1,$2.to_i,$3,$4]] else exctend_drop_status["user_status"].push([$1,$2.to_i,$3,$4]) end elsif l =~ Extend_Drop_Prerequisite::USER_STATUS_PR_WIDE if extend_drop_status["user_status"] == nil extend_drop_status["user_status"] = [[$1,$2.to_i,$3,$4.to_i,$5,$6]] else extend_drop_status["user_status"].push([$1,$2.to_i,$3,$4.to_i,$5,$6]) end # 対象ステータス条件読み取り elsif l =~ Extend_Drop_Prerequisite::TARGET_STATUS_PR if extend_drop_status["target_status"] == nil extend_drop_status["target_status"] = [[$1,$2.to_i,$3,$4]] else extend_drop_status["target_status"].push([$1,$2.to_i,$3,$4]) end elsif l =~ Extend_Drop_Prerequisite::TARGET_STATUS_PR_WIDE if extend_drop_status["target_status"] == nil extend_drop_status["target_status"] = [[$1,$2.to_i,$3,$4.to_i,$5,$6]] else extend_drop_status["target_status"].push([$1,$2.to_i,$3,$4.to_i,$5,$6]) end # 人数条件読み取り elsif l =~ Extend_Drop_Prerequisite::MEMBER_SIZE_PR if extend_drop_status["size"] == nil extend_drop_status["size"] = [[$1.to_i,$2]] else extend_drop_status["size"].push([$1.to_i,$2]) end elsif l =~ Extend_Drop_Prerequisite::MEMBER_SIZE_WIDE if extend_drop_status["size"] == nil extend_drop_status["size"] = [[$1.to_i,$2.to_i,$3]] else extend_drop_status["size"].push([$1.to_i,$2.to_i,$3]) end end end # 条件ドロップ定義の開始 if l =~ Extend_Drop_Prerequisite::EX_DROP_START ex_drop_flag = true extend_drop_status = {} case $1 when "I" item = $data_items[$2.to_i] when "W" item = $data_weapons[$2.to_i] when "A" item = $data_armors[$2.to_i] end probability = $3 == nil ? 100 : $3.to_i extend_drop_status = {"drop_item" => item,"probability" => probability} # 条件ドロップ定義の終了 elsif l =~ Extend_Drop_Prerequisite::EX_DROP_END ex_drop_flag = false @extend_drop_prere.push(extend_drop_status) end next if ex_drop_flag } end #-------------------------------------------------------------------------- # ● ターン終了処理 #-------------------------------------------------------------------------- alias p_d_on_turn_end on_turn_end unless $@ def on_turn_end p_d_on_turn_end @dead_condition = [] unless self.dead? end #-------------------------------------------------------------------------- # ● 撃破時の状態を記録 #-------------------------------------------------------------------------- def set_dead_conditions(user,type,state,gd,item=nil) return if @dead_condition != [] @dead_condition = [user, # 撃破者 type, # 撃破時の攻撃の種類 state, # 撃破直前の敵ステート item, # 撃破を行った攻撃(通常攻撃だとnil) self.result.hp_damage, # 撃破時のダメージ $game_troop.turn_count, # 撃破したときのターン gd, # 撃破したとき敵が防御状態か? user.states.clone, ] end #-------------------------------------------------------------------------- # ● スキル/アイテムの効果適用 #-------------------------------------------------------------------------- alias p_d_item_apply item_apply unless $@ def item_apply(user, item) type = item.is_a?(RPG::Skill) ? Extend_Drop_Prerequisite::SKILL_ATTACK : Extend_Drop_Prerequisite::ITEM_ATTACK if type == Extend_Drop_Prerequisite::SKILL_ATTACK and item.id == 1 type = Extend_Drop_Prerequisite::NORMAL_ATTACK end state = self.states gd = self.guard? p_d_item_apply(user,item) set_dead_conditions(user,type,state,gd,item) if self.states.include?($data_states[1]) end #-------------------------------------------------------------------------- # ● ドロップ条件をチェックし条件を満たしている場合、アイテムを返す #-------------------------------------------------------------------------- def check_extend_drop item = [] return [] if @extend_drop_prere == [] @extend_drop_prere.each{|prere| next unless check_turn_prere(prere["turn"]) next unless check_normal_prere(prere["normal"]) next unless check_element_prere(prere["element"]) next unless check_damage_prere(prere["damage"]) next unless check_state_prere(prere["state"]) next unless check_finisher_state_prere(prere["finisher_state"]) next unless check_skill_attack_prere(prere["skill_attack"]) next unless check_skill_prere(prere["skill"]) next unless check_item_attack_prere(prere["item_attack"]) next unless check_item_prere(prere["item"]) next unless check_lv_prere(prere["lv"]) next unless check_actor_prere(prere["finisher"]) next unless check_guard_prere(prere["guard"]) next unless check_status(prere["user_status"],true) next unless check_status(prere["target_status"],false) next unless check_battle_members(prere["size"]) item.push(prere["drop_item"]) if rand(100) < prere["probability"] } return item end #-------------------------------------------------------------------------- # ● ターン条件のチェック # prere : ターン条件の配列 #-------------------------------------------------------------------------- def check_turn_prere(prere) return true if prere == nil prere.each{|pr| cond = pr.last case cond when "上" return false unless @dead_condition[5] >= pr[0] when "下" return false unless @dead_condition[5] <= pr[0] when "外" return false unless @dead_condition[5] < pr[0] or @dead_condition[5] > pr[1] when "内" return false unless @dead_condition[5] >= pr[0] and @dead_condition[5] <= pr[1] end } return true end #-------------------------------------------------------------------------- # ● 通常攻撃条件のチェック # prere : 通常攻撃条件 #-------------------------------------------------------------------------- def check_normal_prere(prere) return true if prere == nil return @dead_condition[1] == Extend_Drop_Prerequisite::NORMAL_ATTACK ? prere : !prere end #-------------------------------------------------------------------------- # ● 属性条件のチェック # prere : 属性条件の配列 #-------------------------------------------------------------------------- def check_element_prere(prere) return true if prere == nil case @dead_condition[1] when Extend_Drop_Prerequisite::NORMAL_ATTACK ele = @dead_condition[0].atk_elements when Extend_Drop_Prerequisite::SKILL_ATTACK, Extend_Drop_Prerequisite::ITEM_ATTACK ele = @dead_condition[3].damage.element_id ele = ele == -1 ? @dead_condition[0].atk_elements : [ele] else ele = [0] end prere.each{|pre| flg = false pre.each{|pr| if ele.include?(pr) flg = true break end } next if flg return false } return true end #-------------------------------------------------------------------------- # ● ダメージ条件のチェック # prere : ダメージ条件の配列 #-------------------------------------------------------------------------- def check_damage_prere(prere) return true if prere == nil prere.each{|pr| cond = pr.last case cond when "上" return false unless @dead_condition[4] >= pr[0] when "下" return false unless @dead_condition[4] <= pr[0] when "内" return false unless @dead_condition[4] >= pr[0] and @dead_condition[4] <= pr[1] when "外" return false unless @dead_condition[4] < pr[0] or @dead_condition[4] > pr[1] end } return true end #-------------------------------------------------------------------------- # ● ステート条件のチェック # prere : ステート条件の配列 #-------------------------------------------------------------------------- def check_state_prere(prere) return true if prere == nil prere.each{|pr| flg = false rev = pr.last == "外" @dead_condition[2].each{|st| if pr.include?(st.id) flg = true return false if flg and rev break end } unless rev next if flg return false end } return true end #-------------------------------------------------------------------------- # ● 討伐者ステート条件のチェック # prere : 討伐者ステート条件の配列 #-------------------------------------------------------------------------- def check_finisher_state_prere(prere) return true if prere == nil prere.each{|pr| flg = false rev = pr.last == "外" @dead_condition[7].each{|st| if pr.include?(st.id) flg = true return false if flg and rev break end } next if flg return false } return true end #-------------------------------------------------------------------------- # ● スキル攻撃条件のチェック # prere : スキル攻撃条件 #-------------------------------------------------------------------------- def check_skill_attack_prere(prere) return true if prere == nil return @dead_condition[1] == Extend_Drop_Prerequisite::SKILL_ATTACK ? prere : !prere end #-------------------------------------------------------------------------- # ● アイテム攻撃条件 # prere : アイテム攻撃条件 #-------------------------------------------------------------------------- def check_item_attack_prere(prere) return true if prere == nil return @dead_condition[1] == Extend_Drop_Prerequisite::ITEM_ATTACK ? prere : !prere end #-------------------------------------------------------------------------- # ● スキル条件のチェック # prere : スキル条件の配列 #-------------------------------------------------------------------------- def check_skill_prere(prere) return true if prere == nil return false if @dead_condition[3] == nil return false unless @dead_condition[3].is_a?(RPG::Skill) for pr in prere next if pr.include?(@dead_condition[3].id) return false end return true end #-------------------------------------------------------------------------- # ● アイテム条件のチェック # prere : アイテム条件の配列 #-------------------------------------------------------------------------- def check_item_prere(prere) return true if prere == nil return false if @dead_condition[3] == nil return false unless @dead_condition[3].is_a?(RPG::Item) for pr in prere next if pr.include?(@dead_condition[3].id) return false end return true end #-------------------------------------------------------------------------- # ● レベル条件のチェック # prere : レベル条件の配列 #-------------------------------------------------------------------------- def check_lv_prere(prere) return true if prere == nil for pre in prere cond = pre[0] case cond when "最大" level = 0 $game_party.members.each{|mem| level = mem.level if level < mem.level} when "最低" level = 99 $game_party.members.each{|mem| level = mem.level if level > mem.level} when "平均" level = 0 $game_party.members.each{|mem| level += mem.level } level /= $game_party.members.size else level = @dead_condition[0].level end cond = pre.last case cond when "上" return false unless level >= pre[1] when "下" return false unless level <= pre[1] when "外" return false unless level < pre[1] or level > pre[2] when "内" return false unless level >= pre[1] and level <= pre[2] end end return true end #-------------------------------------------------------------------------- # ● アクター条件のチェック トドメを刺したアクターの判定 # prere : アクター条件の配列 #-------------------------------------------------------------------------- def check_actor_prere(prere) return true if prere == nil for pre in prere next if pre.include?(@dead_condition[0].id) return false end return true end #-------------------------------------------------------------------------- # ● 防御状態条件のチェック # prere : 防御状態条件 #-------------------------------------------------------------------------- def check_guard_prere(prere) return true if prere == nil return @dead_condition[6] ? prere : !prere end # ステータス条件のチェック def check_status(prere,flag) return true if prere == nil target = flag ? @dead_condition[0] : self prere.each{|pr| st = nil case pr[0] when "HP","HP" st = pr[2] == nil ? target.hp : target.hp * 100 / target.mhp when "MP","MP" st = pr[2] == nil ? target.mp : target.mp * 100 / target.mmp when "LV","LV" st = target.level if target.actor? when "攻撃力","ATK","ATK" st = target.atk when "防御力","DEF","DEF" st = target.def when "敏捷性","AGI","AGI" st = target.agi when "魔法力","MAT","MAT" st = target.mat when "魔法防御","MDF","MDF" st = target.mdf when "運","LUK","LUK" st = target.luk end return false if st == nil case pr.last when "下","上" judge = pr.last == "上" ? pr[1] <= st : pr[1] >= st when "内","外" judge = pr.last == "内" ? pr[1] <= st && pr[3] >= st : (pr[1] > st) || (pr[3] < st) end return false unless judge } return true end # 人数条件のチェック def check_battle_members(prere) return true if prere == nil size = $game_party.battle_members.size prere.each{|pr| case pr.last when "上","下" judge = pr.last == "上" ? pr[0] <= size : pr[0] >= size when "内","外" judge = pr.last == "内" ? pr[0] <= size && pr[1] >= size : pr[0] > size || pr[1] < size end return false unless judge } return true end end #============================================================================== # ■ Game_Troop #------------------------------------------------------------------------------ #  敵グループおよび戦闘に関するデータを扱うクラスです。バトルイベントの処理も # 行います。このクラスのインスタンスは $game_troop で参照されます。 #============================================================================== class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # ● ドロップアイテムの配列作成 エイリアス #  ※条件を満たした戦利品を追加する処理を追加 #-------------------------------------------------------------------------- alias p_d_make_drop_items make_drop_items unless $@ def make_drop_items result = p_d_make_drop_items dead_members.each{|enemy| item = enemy.check_extend_drop result.concat(item) } result.sort!{|a,b| b.id - a.id} return result end end