Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Looking for multidrop script

Seda

Member

RMXP or RMVX:
RPG Maker XP.

Detailed Description:

I am trying to find a script that is SDK compatible, and compatible with MR.Mo's ABS. I am looking for something that will make it so that enemies will drop more then 1 item at one time. The reason for this is because I want each enemy to drop an item specific to them, along with the normal item. I also want to be able to set the drop rate of the monster specific item.


Other Scripts I am using (in order):

Oh boy... here we go...I am using A LOT of scripts...

Equipment creator by The Sleeping Leonhart
RMXP SDK 2.2
Anti lag script by NearFantastica
MOG - Scene Skill
MOG - Scene File
MOG - Scene Shop
MOG - Scene Menu
MOG - Scene Status
MOG - MPW Map_Name
Mr.Mo's SBABS lite 2.0
Mr.Mo's HUD
Mr.MO's Enemy HP Bars
GUILLAUM777's multi-slot
UMS by Ccoa

Thanks in advance!
 
Please don't credit me, credit my friend SephirothSpawn for this...

Code:
#==============================================================================

# ** Dynamic Enemies

#------------------------------------------------------------------------------

# SephirothSpawn

# Version 3.01

# 2007-05-11

# SDK : Version 2.0+, Part 1

#------------------------------------------------------------------------------

# * Version History :

#

#   Version 1 ---------------------------------------------------- (2006-08-06)

#   Version 2 ---------------------------------------------------- (2006-10-07)

#    - Update : Updated to work with Trickster's Curve Generator Module

#   Version 3 ---------------------------------------------------- (2007-02-28)

#    - Update : Rescripted entire system

#    Version 3.01 ------------------------------------------------ (2007-05-11)

#     - Bug Fix : Fixed Extremely Minor Base Stat Level Error

#------------------------------------------------------------------------------

# * Requirements :

#

#   Method & Class Library 2.1+

#------------------------------------------------------------------------------

# * Description

#

#   This script was designed to allow your game to have enemies that develope

#   as your actors do. No longer will you encounter the same old boring enemy

#   each time. As the developer, you can control the development of each stat

#   for each enemy. The script assigns the enemy a semi-random and controled

#   level depending on the party's average level. The stats are then pulled

#   from a generated curve based of your definitions.

#------------------------------------------------------------------------------

# * Instructions

#

#   Place The Script Below the SDK and Above Main.

#   To Customize your enemy stats, refer to the customization instructions.

#------------------------------------------------------------------------------

# * Customization

#

#   Setting unaffected enemies

#    - Unaffected_Enemies = [enemy_id, enemy_id, ...]

#

#   Setting enemy stats

#    - Stats = { 

#        enemy_id => { <stat_name> => [ generator_type, *args ], ... }

#        , ...

#      }

#

#   Stat Names : 'maxhp', 'maxsp', 'str', 'dex', 'agi', 'int', 'atk', 

#                'pdef',  'mdef',  'eva', 'hit', 'exp', 'gold'

#

#   ** Refer to Curve Generator System for type and args specification.

#

#   Enemy Min & Max Level

#    - Min_Levels = { enemy_id => min_level, ... }

#    - Max_Levels = { enemy_id => max_level, ... }

#

#   Default Min & Max Level (For all non-defined enemies)

#    - Min_Levels.default = min_level

#    - Max_Levels.default = max_level

#

#   Range For Enemy Levels Off Party Level

#    - Level_Ranges = { enemy_id => (min_v..max_v), ... }

#

#   Range For Enemy Levels Off Party Level (For all non-defined enemies)

#    - Level_Ranges.default = (min_v..max_v)

#--------------------------------------------------------------------------

# * Syntax :

#

#   Enemy Level

#    - <game_enemy>.level

#

#   Dynamic Enemies

#    - <game_enemy>.is_dynamic?

#==============================================================================

 

#------------------------------------------------------------------------------

# * SDK Log Script

#------------------------------------------------------------------------------

SDK.log('Dynamic Enemies', 'SephirothSpawn', 3.01, '2007-05-11')

SDK.check_requirements(2.0, [], {'Method & Class Library' => 2.1}) 

 

#------------------------------------------------------------------------------

# * Begin SDK Enable Test

#------------------------------------------------------------------------------

if SDK.enabled?('Dynamic Enemies')

  

#==============================================================================

# ** Dynamic_Enemies

#==============================================================================

 

module Dynamic_Enemies

  #--------------------------------------------------------------------------

  # * Saves Curves

  #

  #  ~ @cache = { <generator_setup> => <curve>, ... }

  #--------------------------------------------------------------------------

  @cache = {}

  #--------------------------------------------------------------------------

  # * Unaffected Enemies

  #

  #  ~ Unaffected_Enemies = [enemy_id, enemy_id, ...]

  #--------------------------------------------------------------------------

  Unaffected_Enemies = []

  #--------------------------------------------------------------------------

  # * Stats

  #

  #  ~ enemy_id => { <stat_name> => [ generator_type, *args ], ... }

  #

  #  Stat Names : 'maxhp', 'maxsp', 'str', 'dex', 'agi', 'int', 'atk', 

  #               'pdef',  'mdef',  'eva', 'hit', 'exp', 'gold'

  #

  #  ** Refer to Curve Generator System for type and args specification.

  #--------------------------------------------------------------------------

  Stats = {

  }

  #--------------------------------------------------------------------------

  # * Defaults : BE CAREFUL WITH ALTERATION

  #--------------------------------------------------------------------------

  Stats.default = {}

  # Default For All Non-Defined Stats

  Stats.default.default = [0, 1, 99, 500, 220]

  Stats.values.each do |stat_settings|

    # Default For All Non-Defined Stats For Defined Enemies

    stat_settings.default = [0, 1, 99, 500, 220]

  end

  #--------------------------------------------------------------------------

  # * Level Specifications

  #

  #   Enemy Min & Max Level

  #    - Min_Levels = { enemy_id => min_level, ... }

  #    - Max_Levels = { enemy_id => max_level, ... }

  #

  #   Default Min & Max Level (For all non-defined enemies)

  #    - Min_Levels.default = min_level

  #    - Max_Levels.default = max_level

  #

  #   Range For Enemy Levels Off Party Level

  #    - Level_Ranges = { enemy_id => (min_v..max_v), ... }

  #

  #   Range For Enemy Levels Off Party Level (For all non-defined enemies)

  #    - Level_Ranges.default = (min_v..max_v)

  #--------------------------------------------------------------------------

  Min_Levels           = {}

  Max_Levels           = {}

  Level_Ranges         = {}

  Min_Levels.default   = 1

  Max_Levels.default   = 99

  Level_Ranges.default = (-3..3)

  #--------------------------------------------------------------------------

  # * Get Base Stat

  #--------------------------------------------------------------------------

  def self.get_stat_base(enemy_id, stat_name, level)

    # Gets Curve Data

    curve_data = Stats[enemy_id][stat_name]

    # Checks For Pre-defined Curve

    if @cache.has_key?(curve_data)

      return @cache[curve_data][level]

    end

    # Creates Curve Data

    curve = Curve_Generator.generate_curve(*curve_data)

    # Save Curve

    @cache[curve_data] = curve

    # Return Stat

    return curve[level]

  end

  #--------------------------------------------------------------------------

  # * Generate Level

  #--------------------------------------------------------------------------

  def self.generate_level(enemy_id)

    # Collect Average Party Level

    level = 0

    $game_party.actors.each {|a| level += a.level}

    level /= $game_party.actors.size

    # Cap Level

    level = [[level, Min_Levels[enemy_id]].max, Max_Levels[enemy_id]].min

    # Modifies Level

    level += Level_Ranges[enemy_id].random

    # Return Level Data

    return level

  end

end

 

#==============================================================================

# ** Game_Enemy

#==============================================================================

 

class Game_Enemy < Game_Battler

  #--------------------------------------------------------------------------

  # * Public Instance Variables

  #--------------------------------------------------------------------------

  attr_reader :level

  #--------------------------------------------------------------------------

  # * Alias Listings

  #--------------------------------------------------------------------------

  alias_method :seph_dynenemies_gmenmy_init,  :initialize

  alias_method :seph_dynenemies_gmenmy_maxhp, :base_maxhp

  alias_method :seph_dynenemies_gmenmy_maxsp, :base_maxhp

  alias_method :seph_dynenemies_gmenmy_str,   :base_str

  alias_method :seph_dynenemies_gmenmy_dex,   :base_dex

  alias_method :seph_dynenemies_gmenmy_agi,   :base_agi

  alias_method :seph_dynenemies_gmenmy_int,   :base_int

  alias_method :seph_dynenemies_gmenmy_atk,   :base_atk

  alias_method :seph_dynenemies_gmenmy_eva,   :base_eva

  alias_method :seph_dynenemies_gmenmy_pdef,  :base_pdef

  alias_method :seph_dynenemies_gmenmy_mdef,  :base_mdef

  alias_method :seph_dynenemies_gmenmy_exp,   :exp

  alias_method :seph_dynenemies_gmenmy_gold,  :gold

  #--------------------------------------------------------------------------

  # * Is Dynamic

  #--------------------------------------------------------------------------

  def is_dynamic?(enemy_id = @enemy_id)

    return Dynamic_Enemies::Unaffected_Enemies.include?(enemy_id)

  end

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize(troop_id, member_index)

    # Gets Enemy ID

    enemy_id = $data_troops[troop_id].members[member_index].enemy_id

    # Set Level

    @level = Dynamic_Enemies.generate_level(enemy_id)

    # Setup Dynamic Enemy

    setup_dynamic_enemy(enemy_id) if is_dynamic?(enemy_id)

    # Original Initialization

    seph_dynenemies_gmenmy_init(troop_id, member_index)

  end

  #--------------------------------------------------------------------------

  # * Setup Dynamic Enemy

  #--------------------------------------------------------------------------

  def setup_dynamic_enemy(enemy_id)

    # Set Dynamic Stats

    @dyn_base_maxhp = Dynamic_Enemies.get_base_stat(enemy_id, 'hp',   @level)

    @dyn_base_maxsp = Dynamic_Enemies.get_base_stat(enemy_id, 'sp',   @level)

    @dyn_base_str   = Dynamic_Enemies.get_base_stat(enemy_id, 'str',  @level)

    @dyn_base_dex   = Dynamic_Enemies.get_base_stat(enemy_id, 'dex',  @level)

    @dyn_base_agi   = Dynamic_Enemies.get_base_stat(enemy_id, 'agi',  @level)

    @dyn_base_int   = Dynamic_Enemies.get_base_stat(enemy_id, 'int',  @level)

    @dyn_base_atk   = Dynamic_Enemies.get_base_stat(enemy_id, 'atk',  @level)

    @dyn_base_eva   = Dynamic_Enemies.get_base_stat(enemy_id, 'eva',  @level)

    @dyn_base_pdef  = Dynamic_Enemies.get_base_stat(enemy_id, 'pdef', @level)

    @dyn_base_mdef  = Dynamic_Enemies.get_base_stat(enemy_id, 'mdef', @level)

    @dyn_gold       = Dynamic_Enemies.get_base_stat(enemy_id, 'gold', @level)

    @dyn_exp        = Dynamic_Enemies.get_base_stat(enemy_id, 'exp',  @level)

  end

  #--------------------------------------------------------------------------

  # * Get Basic Maximum HP

  #--------------------------------------------------------------------------

  def base_maxhp

    return is_dynamic? ? @dyn_base_maxhp : seph_dynenemies_gmenmy_maxhp

  end

  #--------------------------------------------------------------------------

  # * Get Basic Maximum SP

  #--------------------------------------------------------------------------

  def base_maxsp

    return is_dynamic? ? @dyn_base_maxsp : seph_dynenemies_gmenmy_maxsp

  end

  #--------------------------------------------------------------------------

  # * Get Basic Strength

  #--------------------------------------------------------------------------

  def base_str

    return is_dynamic? ? @dyn_base_str : seph_dynenemies_gmenmy_str

  end

  #--------------------------------------------------------------------------

  # * Get Basic Dexterity

  #--------------------------------------------------------------------------

  def base_dex

    return is_dynamic? ? @dyn_base_dex : seph_dynenemies_gmenmy_dex

  end

  #--------------------------------------------------------------------------

  # * Get Basic Agility

  #--------------------------------------------------------------------------

  def base_agi

    return is_dynamic? ? @dyn_base_agi : seph_dynenemies_gmenmy_agi

  end

  #--------------------------------------------------------------------------

  # * Get Basic Intelligence

  #--------------------------------------------------------------------------

  def base_int

    return is_dynamic? ? @dyn_base_int : seph_dynenemies_gmenmy_int

  end

  #--------------------------------------------------------------------------

  # * Get Basic Attack Power

  #--------------------------------------------------------------------------

  def base_atk

    return is_dynamic? ? @dyn_base_atk : seph_dynenemies_gmenmy_atk

  end

  #--------------------------------------------------------------------------

  # * Get Basic Physical Defense

  #--------------------------------------------------------------------------

  def base_pdef

    return is_dynamic? ? @dyn_base_pdef : seph_dynenemies_gmenmy_pdef

  end

  #--------------------------------------------------------------------------

  # * Get Basic Magic Defense

  #--------------------------------------------------------------------------

  def base_mdef

    return is_dynamic? ? @dyn_base_mdef : seph_dynenemies_gmenmy_mdef

  end

  #--------------------------------------------------------------------------

  # * Get Basic Evasion

  #--------------------------------------------------------------------------

  def base_eva

    return is_dynamic? ? @dyn_base_eva : seph_dynenemies_gmenmy_eva

  end

  #--------------------------------------------------------------------------

  # * Exp

  #--------------------------------------------------------------------------

  def exp

    return is_dynamic? ? @dyn_exp : seph_dynenemies_gmenmy_exp

  end

  #--------------------------------------------------------------------------

  # * Gold

  #--------------------------------------------------------------------------

  def gold

    return is_dynamic? ? @dyn_gold : seph_dynenemies_gmenmy_gold

  end

end

 

#--------------------------------------------------------------------------

# * End SDK Enable Test

#--------------------------------------------------------------------------

end
Code:
#==============================================================================

# ** Dynamic & Additional Enemy Drops

#------------------------------------------------------------------------------

# SephirothSpawn

# Version 3

# 2007-03-01

# SDK : Version 2.0+, Part 1

#------------------------------------------------------------------------------

# * Version History :

#

#   Version 1 ---------------------------------------------------- (2006-07-09)

#   Version 2 ---------------------------------------------------- (2006-09-20)

#    - Update : Re-scripted Much of the System

#    Version 2.1 ------------------------------------------------- (2006-12-13)

#     - Addition : Added Max Number of Drops Feature

#   Version 3 ---------------------------------------------------- (2007-03-01)

#     - Update : Re-scripted the entire system. Added Dynamic Drops.

#------------------------------------------------------------------------------

# * Requirements :

#

#   Method & Class Library 2.1+

#   Dynamic Enemies (3.0 +) (Optional : Required For Dynamic Drops)

#------------------------------------------------------------------------------

# * Description :

#

#   This script was designed to let you control multiple item, weapon & armor

#   drops for each enemy. You can also control the drop percentages as well.

#

#   With the Dynamic Enemies script, you can also make drops occur at certain

#   levels.

#

#   You can set a number of times an item can be dropped in each way.

#

#   As a bonus, you can limit the number of items, weapons, armors or total

#   items dropped by a monster.

#------------------------------------------------------------------------------

# * Instructions :

#

#   Place The Script Below the SDK and Above Main.

#   To Customize your drops, refer to the customization instructions.

#------------------------------------------------------------------------------

# * Customization :

#

#   Max Drops (Item, Weapon, Armor & Overall Drops)

#    - <Type> = { enemy_id => max, ... }

#

#    Types : Max_Item_Drops, Max_Weapon_Drops, 

#            Max_Armor_Drops, Max_Overall_Drops

#

#   Additional Drops

#    - <Type> = { enemy_id => { item_id => [max, drop_percent], ... }, ... }

#

#    Types : Enemy_Item_Drops, Enemy_Weapon_Drops, Enemy_Armor_Drops

#

#   Dynamic Drops

#    - <Type> = { 

#        enemy_id => {

#          level => { 

#            <operator> => { item_id => [max, drop_percent], ... }

#            , ... }

#          , ... }

#        , ... }

#      }

#

#    <Type> = Dynamic_Item_Drops, Dynamic_Weapon_Drops, Dynamic_Armor_Drops

#

#    <operator> : 0 - Less Than, 1 - Less Than or Equal To, 2 - Equals, 

#                 3 - Greater Than or Equal To, 4 - Greater Than

#------------------------------------------------------------------------------

# * Syntax :

#

#   Force Enemy to Drop Items (Auto-added to inventory)

#    - <game_enemy>.multi_item_drops

#    - <game_enemy>.multi_weapon_drops

#    - <game_enemy>.multi_armor_drops

#    - <game_enemy>.drop_multi_items

#==============================================================================

 

#------------------------------------------------------------------------------

# * SDK Log Script

#------------------------------------------------------------------------------

SDK.log('Dynamic + Additional Enemy Drops', 'SephirothSpawn', 3, '2007-03-01')

SDK.check_requirements(2.0, [], {'Method & Class Library' => 2.1}) 

 

#------------------------------------------------------------------------------

# * Begin SDK Enable Test

#------------------------------------------------------------------------------

unless SDK.enabled?('Dynamic Enemies', 3)

  p 'Dynamic Enemies System Not Found. You will not be able to set Dynamic ' +

    'item, weapon and armor drops.'

end

#------------------------------------------------------------------------------

# * End SDK Enable Test

#------------------------------------------------------------------------------

 

#------------------------------------------------------------------------------

# * Begin SDK Enable Test

#------------------------------------------------------------------------------

if SDK.enabled?('Dynamic + Additional Enemy Drops')

  

#==============================================================================

# ** Dynamic_Additiona_Drops

#==============================================================================

  

module DA_Enemy_Drops

  #--------------------------------------------------------------------------

  # * Max Item, Weapon & Armor Drops

  #

  #  ~ enemy_id => max_items

  #--------------------------------------------------------------------------

  Max_Item_Drops    = {}

  Max_Weapon_Drops  = {}

  Max_Armor_Drops   = {}

  Max_Overall_Drops = {}

  #--------------------------------------------------------------------------

  # * Enemy Item Drops

  #

  #  ~ enemy_id => { item_id => [max, drop_percent], ... }

  #--------------------------------------------------------------------------

  Enemy_Item_Drops = {

    # Enemy 1

    1 => {

      # Item 1 : 3* 50%, Item 2 : 2 * 30%, Item 3 : 1 * 10% 

      1 => [3, 50], 2 => [2, 30], 3 => [1, 10]

    }

  }

  #--------------------------------------------------------------------------

  # * Enemy Weapon Drops

  #

  #  ~ enemy_id => { weapon_id => [max, drop_percent], ... }

  #--------------------------------------------------------------------------

  Enemy_Weapon_Drops = {

    # Enemy 1

    1 => {

      # Weapon 1 : 2 * 25%

      1 => [2, 25]

    }

  }

  #--------------------------------------------------------------------------

  # * Enemy Item Drops

  #

  #  ~ enemy_id => { armor_id => [max, drop_percent], ... }

  #--------------------------------------------------------------------------

  Enemy_Armor_Drops = {

    # Enemy 1

    1 => {

      # Armor 1 : 2 * 25%

      1 => [2, 25]

    }

  }

  #--------------------------------------------------------------------------

  # * Dynamic Item Drops

  #

  #  ~ enemy_id => { level => { <operator_value> => 

  #    { item_id => [max, drop_percent] }, ... }, ... }

  #

  # Operator Value : 0 - Less Than, 1 - Less Than or Equal To, 2 - Equals, 

  #                  3 - Greater Than or Equal To, 4 - Greater Than

  #--------------------------------------------------------------------------

  Dynamic_Item_Drops = {

    # Enemy 1

    1 => {

      # Level 5

      5 => {

        # Greater or Equal to 5

        3 => {

          # Item 4 : 3 * 50%, Item 5 : 2 * 25%

          4 => [3, 50], 5 => [2, 25]

        }

      }

    }

  }

  #--------------------------------------------------------------------------

  # * Dynamic Weapon Drops

  #

  #  ~ enemy_id => { level => { <operator_value> => 

  #    { weapon_id => [max, drop_percent] }, ... }, ... }

  #

  # Operator Value : 0 - Less Than, 1 - Less Than or Equal To, 2 - Equals, 

  #                  3 - Greater Than or Equal To, 4 - Greater Than

  #--------------------------------------------------------------------------

  Dynamic_Weapon_Drops = {

      # Enemy 1

    1 => {

      # Level 5

      5 => {

        # Greater or Equal to 5

        3 => {

          # Weapon 2 : 3 * 25%, Armor 3 : 2 * 5%

          2 => [3, 25], 3 => [2, 5]

        }

      }

    }

  }

  #--------------------------------------------------------------------------

  # * Dynamic Armor Drops

  #

  #  ~ enemy_id => { level => { <operator_value> => 

  #    { armor_id => [max, drop_percent] }, ... }, ... }

  #

  # Operator Value : 0 - Less Than, 1 - Less Than or Equal To, 2 - Equals, 

  #                  3 - Greater Than or Equal To, 4 - Greater Than

  #--------------------------------------------------------------------------

  Dynamic_Armor_Drops = {

      # Enemy 1

    1 => {

      # Level 5

      5 => {

        # Greater or Equal to 5

        3 => {

          # Armor 2 : 3 * 25%, Armor 3 : 2 * 5%

          2 => [3, 25], 3 => [2, 5]

        }

      }

    }

  }

  #--------------------------------------------------------------------------

  # * Collect Item List

  #--------------------------------------------------------------------------

  def self.collect_item_list(c1, c2, c3, enemy_id, level = nil)

    # Starts Item List

    items = []

    # If Enemy Has Additional Item Drop

    if c1.has_key?(enemy_id)

      # Pass Through Item List

      c1[enemy_id].each do |item_id, par|

        par[0].times do

          items << item_id if rand(100) < par[1]

        end

      end

    end

    # If Non-nil Enemy Level

    unless level.nil?

      # If Enemy Has Dynamic Item Drops

      if c2.has_key?(enemy_id)

        # Pass Through Level List

        c2[enemy_id].each do |l, l_p|

          # Pass Through Level Parameters

          l_p.each do |operator_value, par|

            # Branch Point By Operator

            case operator_value

            when 0 ; next unless level < l

            when 1 ; next unless level <= l

            when 2 ; next unless level == l

            when 3 ; next unless level >= l

            when 4 ; next unless level > l

            else   # Error

              p 'Improper Operator Value Defined for : ' + 

                "#{c1} - #{enemy_id} - #{level}"

              next

            end

            # Pass Through Item List

            par[0].times do

              items << item_id if rand(100) < par[1]

            end

          end

        end

      end

    end

    # If Max Items Defined

    if c3.has_key?(enemy_id)

      # Until Item List is at max size

      until items.size <= c3[enemy_id]

        # Delete Random Item

        items.delete_at(rand(items.size))

      end

    end

    # Returns Item List

    return items.sort

  end

  #--------------------------------------------------------------------------

  # * Generate Item List

  #--------------------------------------------------------------------------

  def self.generate_item_list(enemy_id, level = nil)

    return self.collect_item_list(Enemy_Item_Drops, Dynamic_Item_Drops, 

      Max_Item_Drops, enemy_id, level)

  end

  #--------------------------------------------------------------------------

  # * Generate Weapon List

  #--------------------------------------------------------------------------

  def self.generate_weapon_list(enemy_id, level = nil)

    return self.collect_item_list(Enemy_Weapon_Drops, Dynamic_Weapon_Drops, 

      Max_Weapon_Drops, enemy_id, level)

  end

  #--------------------------------------------------------------------------

  # * Generate Armor List

  #--------------------------------------------------------------------------

  def self.generate_armor_list(enemy_id, level = nil)

    return self.collect_item_list(Enemy_Armor_Drops, Dynamic_Armor_Drops, 

      Max_Armor_Drops, enemy_id, level)

  end

  #--------------------------------------------------------------------------

  # * Generate Complete List

  #--------------------------------------------------------------------------

  def self.generate_complete_list(enemy_id, level = nil)

    # Start Item List

    list = []

    # Collect Items

    items   = self.generate_item_list(enemy_id, level)

    items.each {|item_id| list << $data_items[item_id]}

    # Collect Weapons

    weapons = self.generate_weapon_list(enemy_id, level)

    weapons.each {|weapon_id| list << $data_weapons[weapon_id]}

    # Collect Armors

    armors  = self.generate_armor_list(enemy_id, level)

    armors.each {|armor_id| list << $data_armors[armor_id]}

    # If Max Items Defined

    if Max_Overall_Drops.has_key?(enemy_id)

      # Until Item List is at max size

      until list.size <= Max_Overall_Drops[enemy_id]

        # Delete Random Item

        list.delete_at(rand(list.size))

      end

    end

    # Gains Items

    for item in list

      # Branch By Item Type

      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

    # Return Drop List

    return list

  end

end

 

#==============================================================================

# ** Game_Enemy

#==============================================================================

 

class Game_Enemy < Game_Battler

  #--------------------------------------------------------------------------

  # * Multiple Item Drops

  #--------------------------------------------------------------------------

  def multi_item_drops

    return DA_Enemy_Drops.generate_item_list(@enemy_id, @level)

  end

  #--------------------------------------------------------------------------

  # * Multiple Weapon Drops

  #--------------------------------------------------------------------------

  def multi_weapon_drops

    return DA_Enemy_Drops.generate_weapon_list(@enemy_id, @level)

  end

  #--------------------------------------------------------------------------

  # * Multiple Armor Drops

  #--------------------------------------------------------------------------

  def multi_armor_drops

    return DA_Enemy_Drops.generate_armor_list(@enemy_id, @level)

  end

  #--------------------------------------------------------------------------

  # * Drop Multi Items

  #--------------------------------------------------------------------------

  def drop_multi_items

    return DA_Enemy_Drops.generate_complete_list(@enemy_id, @level)

  end

end

 

#==============================================================================

# ** Window_BattleResult

#==============================================================================

 

class Window_BattleResult < Window_Base

  #--------------------------------------------------------------------------

  # * Add Multiple Drops

  #--------------------------------------------------------------------------

  def add_multi_drops

    # Collects Extra Droppings

    for enemy in $game_troop.enemies

      # Adds Extra Treasures

      @treasures << enemy.drop_multi_items

    end

    # Flatten Array

    @treasures.flatten!

    # Sort Treasures By ID

    @treasures.sort! {|a, b| a.id <=> b.id}

    # Sort Treasures By Type

    @treasures.sort! do |a, b| 

      a_class = a.is_a?(RPG::Item) ? 0 : a.is_a?(RPG::Weapon) ? 1 : 2

      b_class = b.is_a?(RPG::Item) ? 0 : b.is_a?(RPG::Weapon) ? 1 : 2

      a_class <=> b_class

    end

    # Adjust Height & Window Contents

    self.height = [@treasures.size * 32 + 64, 256].min

    self.contents = Bitmap.new(width - 32, @treasures.size * 32 + 32)

    # Adjust Y

    self.y = 160 - height / 2

    # Refresh Window

    refresh

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    super

    if Input.press?(Input::UP)

      self.oy -= 4 if self.oy > 0

    elsif Input.press?(Input::DOWN)

      self.oy += 4 if self.oy < self.contents.height - (self.height - 32)

    end

  end

end

 

#==============================================================================

# ** Scene_Battle

#==============================================================================

 

class Scene_Battle

  #--------------------------------------------------------------------------

  # * Alias Listings

  #--------------------------------------------------------------------------

  alias_method :seph_enemydrops_scnbtl_sp5, :start_phase5

  #--------------------------------------------------------------------------

  # * Start After Battle Phase

  #--------------------------------------------------------------------------

  def start_phase5

    # Original Start Phase 5

    seph_enemydrops_scnbtl_sp5

    # Add Extra Item Drops

    @result_window.add_multi_drops

  end

end

 

#--------------------------------------------------------------------------

# * End SDK Enable Test

#--------------------------------------------------------------------------

end
 

Seda

Member

Awesome, that's exactly what I was looking for, I knew SephirothSpawn had made something like this a while back. While I'm here, would it be possible to ask for additional scripting help, or should I just go ahead and start another thread? (sorry for the long wait time, been busy with work, and life in general, hahah)
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top