#============================================================================== # ポケ○ン風タイプ設定スクリプト ver1.00 #------------------------------------------------------------------------------ #[特徴] # エネミーにタイプを持たせて(ほのおタイプとか) # 属性によるダメージ修正をそれっぽいのにします。 # #[設定方法] # エネミーのメモ欄に <ポケタイプ:ID> と書いて、 # 下記の設定項目で各タイプの属性有効値を設定する。 # (この設定をすると、データベースで設定した属性有効度(A〜F)は無視されます) # #[属性有効値の設定方法] # ID => [格闘の有効値,斬撃の有効値,…], # 各属性の有効値はデータベースで設定した属性、すべての値を設定してください。 # 有効値は、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」 になります。 # # Q.『ポケタイプ』ってなんなのん? # A. <タイプ:ID>だと他のスクリプトと競合するかもと思ったので。 # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module ELEMENT_POCKET TYPE = { 1 => [# ノーマルタイプ(こうやってタイプに名前を付けると管理しやすいかも) 100,100,100,100,100,100,100,100, 100,100,100,100,100,100,100,100], # ←「,」を忘れずに! 2 => # ゴーストタイプ(物理無効、特殊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 self.actor? # アクターの場合通常通り poke_elements_max_rate(element_set) else enemy = $data_enemies[self.enemy_id] if enemy.note.include?("<ポケタイプ:") elements_rate = calc_poke_elements(enemy) rate = 100 for i in element_set rate *= elements_rate[i] / 100.0 end 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 end