ダブルドロップカスタム



ダブルドロップのトレジャー獲得最大数の設定+微妙な修正。
また、ステートによるトレジャー、経験値、ゴールド獲得の変動を設定

※以下のモジュールが別途導入必要です。
 ドロップ/窃盗アイテム共通モジュール


※このスクリプトは小さな本屋の改造素材です。

変更点
2007:12:27
・獲得変動ステートの設定をカスタマイズポイントへ移行。

2009:03:17
・ドロップ確率を個別に設定可能に

2009:03:18
・不正チェック関数を追加
・データベースでトレジャーを設定してない場合の処理を追加
 (と、言うか、今までもできていた・・・)

2009:03:25
・盗むカスタムの修正のための確率不正チェック関数の修正

2009:05:02
・データベース上でドロップアイテムを設定せず、スティールアイテムのみ設定した場合、スティール確率が
 データベースでトレジャーの設定を行ってない場合のトレジャー出現確率になっていたバグを修正
 
2011:07:01
・トレジャー、経験値、ゴールド獲得をスクリプト上の設定からデータベース上の設定に変更

2012:03:03
・module BMに設定したものをmodule Double_Dropに変更

2018:11:03
・module Double_Drop、IGEをNeoDropStealへ移動

ドロップアイテム設定
module XRXS_WDRP
  # エネミーデータ
  def self.data(id)
    data = []
    data[1] = [[50, $data_items[68]]]
    data[2] = [[nil, $data_items[68]]]
    return data[id]
  end
  #
  # ※記述例
  #  data[1] = [[50, $data_items[68]]]
  #  →エネミー1は50%の確率でアイテム68を落とす
  #
  #  data[2] = [[nil, $data_items[68]]]
  #  →エネミー2はデータベースで設定した確率でアイテム68を落とす
  #   (もしデータベースでトレジャーを設定してない場合はスクリプト
  #    本体のカスタマイズポイントで設定した確率で落とす)
  #
end
スクリプト本体
#----------------------------------------------------------------------------
# ダブル・ドロップ貪藻矢射妥←カスタム By 貪藻矢射妥←
# 微妙に使いづらいです・・・多分(をひ)
#----------------------------------------------------------------------------
# 原作:     ▼▲▼ XRXS79. ダブル・ドロップ ▼▲▼
# 原作者:   森穂様、XRXS.様
# HP:       小さな本屋 
# アドレス: http://xrxs.at-ninja.jp/
#
# 改造内容:
# ・トレジャー獲得最大数の設定
# ・トレジャー、経験値、ゴールド獲得の変動ステートを設定
# ・ダブルドロップにて個別にゲット確率を設定可能に
#============================================================================
# 変更点
# 
# 2007:12:27
# ・獲得変動ステートの設定をカスタマイズポイントへ移行。
# 
# 2009:03:17
# ・ドロップ確率を個別に設定可能に
# 
# 2009:03:18
# ・不正チェック関数を追加
# ・データベースでトレジャーを設定してない場合の処理を追加
#  (と、言うか、今までもできていた・・・)
# 
# 2009:03:25
# ・盗むカスタムの修正のための確率不正チェック関数の修正
# 
# 2009:05:02
# ・データベース上でドロップアイテムを設定せず、スティールアイテムのみ設定した
#  場合、スティール確率がデータベースでトレジャーの設定を行ってない場合の
#  トレジャー出現確率になっていたバグを修正
# 
# 2011:07:01
# ・トレジャー、経験値、ゴールド獲得をスクリプト上の設定からデータベース上の
#  設定に変更
# 
# 2012:03:03
# ・module BMに設定したものをmodule Double_Dropに変更
# 
# 2018:11:03
# ・module Double_Drop、IGEをNeoDropStealへ移動

module XRXS_WDRP
  # トレジャー獲得最大数
  # トレジャー獲得最大数が『0..n』なので0〜nまでの数値になります。
  # (設定した数+1が最大の獲得数になります)
  TRE_MAX = 9
end

#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
  include NeoDropSteal::IGE
  include NeoDropSteal::Double_Drop
  include XRXS_WDRP
  include BM
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  def start_phase5
    # フェーズ 5 に移行
    @phase = 5
    # バトル終了 ME を演奏
    $game_system.me_play($game_system.battle_end_me)
    # バトル開始前の BGM に戻す
    $game_system.bgm_play($game_temp.map_bgm)
    # EXP、ゴールド、トレジャーを初期化
    exp = 0
    gold = 0
    treasures = []
    gold_rate = 1
    # ループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態でない場合
      unless enemy.hidden
        # 獲得 EXP、ゴールドを追加
        exp += enemy.exp
        gold += enemy.gold
        # トレジャー出現乱数の初期値を設定
        prob = 100
        # ステート[アイテム出現n倍]になっている場合
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          # トレジャー出現確率の変動
          prob /= (get_rate(actor, TREJ_NAME) / 100.0)
          prob = Integer(prob)
        end
        # トレジャー出現判定
        if rand(prob) < enemy.treasure_prob
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    
    #
    # [タブル・ドロップ]
    #
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態でない場合
      unless enemy.hidden
        data = XRXS_WDRP.data(enemy.id)
        if data.is_a?(Array)
          for i in 0...data.size
            #probX = data[i][0] == nil ? enemy.treasure_prob : data[i][0]
            probX = ck_value(data[i][0], enemy)
            if data[i][1] != nil and rand(prob) < probX
              # 入手!
              treasures.push(data[i][1])
            end
          end
        end
      end
    end
    #
    #
    #
    
    # トレジャーの数を TRE_MAX個までに設定
    treasures = treasures[0..TRE_MAX]
    # EXP 獲得
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        # EXP獲得変動
        @exp_flag = false
        actor.exp += Integer(exp * get_rate(actor, EXP_NAME) / 100.0)
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    
    for i in 0...$game_party.actors.size
    actor = $game_party.actors[i]
      # ゴールド獲得の変動
      gold *= (get_rate(actor, GOLD_NAME) / 100.0)
      gold = Integer(gold)
    end
    
    # ゴールド獲得
    $game_party.gain_gold(gold)
    # トレジャー獲得
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    # バトルリザルトウィンドウを作成
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    # ウェイトカウントを設定
    @phase5_wait_count = 100
  end
end
カスタマイズポイント解説(・・・言わなくても分かるような・・・) 薄緑色の部分にてトレジャーの最大獲得数(-1)を設定。 あとは上記のようにデータベースで設定を行います。 ※〜None は取得しない場合の属性となります。 ※獲得変動ステートが重複して装備した場合、効果が重なり合い、場合によってはゴールドもEXPも手に入らなく なる可能性があります。 よって、(ステートが防具に付加する場合は)Tetra-Z氏の排他装備(あるいは排他装備inパーティー)を 併用することをお勧めします。 (ちなみに、そのスクリプトを使用する場合はさらに  Tetra-Z作「TETRAZ.排他理論」とXMS.「XRXS.装備属性取得機構」が必要になります。)

戻る