#============================================================================== # ポケ○ン風属性設定スクリプト - タイプ一致時ダメージ増加ver #------------------------------------------------------------------------------ #[特徴] # エネミーにタイプを持たせて(ほのおタイプとか) # 属性によるダメージ修正をそれっぽいのにします。 # #[設定方法] # エネミーのメモ欄に <ポケタイプ:ID> と書いて、 # 下記の設定項目で各タイプの属性有効値を設定する。 # (この設定をすると、データベースで設定した属性有効度(A〜F)は無視されます) # #[属性有効値の設定方法] # ID => [格闘の有効値,斬撃の有効値,…], # IDにはデータベースの属性のIDを入れてください。 # そうすると、そのエネミーはそのIDの属性のエネミーになります。 # 例)デフォルトだと、ID 1 は「格闘」属性になる # # 各属性の有効値はデータベースで設定した属性、すべての値を設定してください。 # 有効値は、100で通常通り、200で2倍、50で半減、0で無効、マイナス値で吸収、 # になります。(もちろん、75とか150とかでもOK) # #[タイプ設定の拡張機能] # <ポケタイプ:ID,ID> と書けば、その2つのタイプを持ったエネミーになります。 # タイプの有効値が両方とも 200 だった場合、ダメージは4倍になります。 # 200と50だった場合は等倍、200と0だった場合は無効、になります。 # ※ <ポケタイプ:ID,ID,ID,ID> とかも可能です。 # #[導入上の注意] # 他に属性修正を変更するスクリプトを導入している場合、 # こちらを下に導入した方が正常に動作すると思います。 # #[FAQ] # Q.通常攻撃したら、有効値は無効のはずなのに、1 ダメージ与えたんだけど? # A.デフォルトのダメージ設定の場合、通常攻撃でダメージが 0 だと、 # 50%の確率でダメージを 1 にするように設定されています。 # なので、その設定を書きかえる必要があります。 # 「def make_attack_damage_value(attacker)」にそれっぽい記述があるので、 # その文をコメントアウトしましょう。 # # Q.攻撃の属性が複数あって、タイプの複数ある場合はどうなるの? # A.各攻撃属性で有効値を出して、それらを掛け算します。 # ex.攻撃属性が「炎、雷」で # 2つあるタイプの属性有効値がそれぞれ「炎50,雷100」「炎200,雷50」の場合、 # 「炎」による有効値が 50 と 200 で 「100」、 # 「雷」による有効値が 100 と 50 で 「50」 となり、 # 最終的な有効値は 100 と 50 で 「50」 になります。 # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module ELEMENT_POCKET # タイプ一致技の威力の上昇率 AGREE_RATE = 200 TYPE = { # ↓ データベースの属性と一致させてください 1 => [ # 属性「格闘」 100,100,100,100,100,100,100,100, 100,100,100,100,100,100,100,100], # ←「,」を忘れずに! 2 => [ # 属性「斬撃」 0, 0, 0, 0, 0, 0,200,100, 0,100,100,100,100,100,100,100], } # ←この } は消しちゃダメ end #============================================================================== # ここまで #============================================================================== #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 属性の最大修正値の取得 # ↑を、ポケ○ンっぽい感じのに改造しています。 #-------------------------------------------------------------------------- alias poke_elements_max_rate elements_max_rate def elements_max_rate(element_set) return 100 if element_set.empty? # 無属性の場合 if @user.actor? poke_elements_max_rate(element_set) else enemy = @user.enemy if enemy.note.include?("<ポケタイプ:") elements_rate = calc_poke_elements(enemy) rate = 100 for i in element_set rate *= elements_rate[i] / 100.0 end rate *= agree_rate(element_set, enemy) return Integer(rate) else # 設定してない場合通常通り poke_elements_max_rate(element_set) end end end #-------------------------------------------------------------------------- # ● タイプから属性有効値を計算する #-------------------------------------------------------------------------- def calc_poke_elements(enemy) elements_rate = [0] type = [] memo = enemy.note.scan(/<ポケタイプ:((?:\d+,\s?)*(?:\d+)>)/i).to_s.split(/,\s?/) for i in 0...memo.size do type.push(memo[i].to_i) end for i in 0...$data_system.elements.size - 1 rate = 100 for j in 0...type.size rate *= ELEMENT_POCKET::TYPE[type[j]][i] / 100.0 end elements_rate.push(rate) end return elements_rate end #-------------------------------------------------------------------------- # ● 属性一致によるダメージ率の計算 #-------------------------------------------------------------------------- def agree_rate(element_set, enemy) rate = 1 if enemy.note.include?("<ポケタイプ:") type = [] memo = enemy.note.scan(/<ポケタイプ:((?:\d+,\s?)*(?:\d+)>)/i).to_s.split(/,\s?/) for i in 0...memo.size do type.push(memo[i].to_i) end agree = element_set & type rate = ELEMENT_POCKET::AGREE_RATE / 100.0 unless agree.empty? end return rate end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 #-------------------------------------------------------------------------- alias poke_attack_effect attack_effect def attack_effect(attacker) @user = attacker poke_attack_effect(attacker) end #-------------------------------------------------------------------------- # ● スキルの効果適用 #-------------------------------------------------------------------------- alias poke_skill_effect skill_effect def skill_effect(user, skill) @user = user poke_skill_effect(user, skill) end #-------------------------------------------------------------------------- # ● アイテムの効果適用 #-------------------------------------------------------------------------- alias poke_item_effect item_effect def item_effect(user, item) @user = user poke_item_effect(user, item) end end