Video

While Yanfly’s Extra Enemy Drops adds a lot of features to help customize the drops of Enemies, it lacks a couple of features to support large amount of possible Item drops. Having the possibility for a large amount of Items to drop is a major part of larger-scale RPGs. While it is technically possible to use a lot of the features within this Plugin without it, they help a lot with making things simplier and easier.

Enemy Bulk Drops
Version 1.00
SomeRanDev

Yanfly's Extra Enemy Drops Plugin is required.
Place this Plugin BELOW YEP_ExtraEnemyDrops.

While Yanfly's Extra Enemy Drops adds a lot of features to help customize
the drops of Enemies, it lacks a couple of features to support large
amount of possible Item drops. Having the possibility for a large amount
of Items to drop is a major part of larger-scale RPGs.

While it is technically possible to use a lot of the features within this
Plugin without it, they help a lot with making things simplier and easier.

==========================================================================
Batch Enemy Drop Percentages
==========================================================================

Available Enemy Notetags:





This sets a batch of Items, Weapons, or Armors to have a y% chance of
dropping.

For example:



Each Item from 3 to 20 has a 50% chance of dropping.

==========================================================================
Group Enemy Drop Percentages
==========================================================================

Available Enemy Notetags:





This sets a group of Items, Weapons, or Armors to have a y% chance of
dropping.

For example:



There is a 50% chance of 1 Item in this group of dropping.

==========================================================================
Creating Item/Armor/Weapon Groups
==========================================================================

Another feature added in this Plugin is the ability to set Items into
specific groups and base drops off of these groups.

Use the following Item/Weapon/Armor notetag:



to set an Item/Weapon/Armor to a specific group.

For example:



One Item/Weapon/Armor can be a part of multiple groups.

==========================================================================
Giving Item/Armor/Weapon Groups
==========================================================================

In order to have an Enemy drop Items based off of a group, use the
notetag:



This will set it so there is a y% chance of one item within my-group
to be dropped when the Enemy is defeated.

For example:

This would make it so there's a 50% chance that one Item/Weapon/Armor
from the "Fire" group will drop when the Eney is defeated.

==========================================================================
End of Help File
==========================================================================

Welcome to the bottom of the Help file.

Thanks for reading!
If you have questions, or if you enjoyed this Plugin, please check
out my YouTube channel!

https://www.youtube.com/c/SumRndmDde

Until next time,
~ SomeRanDev
var SRD = SRD || {};
SRD.EnemyBulkDrops = SRD.EnemyBulkDrops || {};

var Imported = Imported || {};
Imported["SumRndmDde Enemy Bulk Drops"] = true;

if(Imported.YEP_ExtraEnemyDrops) {

(function(_) {

	"use strict";

	_.groups = {};

	var notetagsLoaded = false;
	var _DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
	DataManager.isDatabaseLoaded = function() {
	    if(!_DataManager_isDatabaseLoaded.call(this)) return false;
	    if(!notetagsLoaded) {
	    	var i1 = /<\s*Drop\s*Group\s*:\s*(.*)\s*>/i;
	    	for(var i = 1; i < $dataItems.length; i++) {
	    		var lines = $dataItems[i].note.split(/[\n\r]+/);
	    		for(var j = 0; j < lines.length; j++) {
	    			if(lines[j].match(i1)) {
	    				var temp = String(RegExp.$1);
	    				if(temp.trim().length > 0) {
	    					if(!_.groups[temp]) _.groups[temp] = [];
	    					_.groups[temp].push($dataItems[i]);
	    				}
	    			}
	    		}
	    	}

	    	for(var i = 1; i < $dataWeapons.length; i++) {
	    		var lines = $dataWeapons[i].note.split(/[\n\r]+/);
	    		for(var j = 0; j < lines.length; j++) {
	    			if(lines[j].match(i1)) {
	    				var temp = String(RegExp.$1);
	    				if(temp.trim().length > 0) {
	    					if(!_.groups[temp]) _.groups[temp] = [];
	    					_.groups[temp].push($dataWeapons[i]);
	    				}
	    			}
	    		}
	    	}

	    	for(var i = 1; i < $dataArmors.length; i++) {
	    		var lines = $dataArmors[i].note.split(/[\n\r]+/);
	    		for(var j = 0; j < lines.length; j++) {
	    			if(lines[j].match(i1)) {
	    				var temp = String(RegExp.$1);
	    				if(temp.trim().length > 0) {
	    					if(!_.groups[temp]) _.groups[temp] = [];
	    					_.groups[temp].push($dataArmors[i]);
	    				}
	    			}
	    		}
	    	}


			var n1 = /<\s*Group\s*(?:ITEM|DROP ITEM)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/im;
			var n2 = /<\s*Group\s*(?:WEAPON|DROP WEAPON)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/im;
			var n3 = /<\s*Group\s*(?:ARMOR|DROP armor)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/im;
			var n4 = /<\s*Drop\s*Group\s*(.*)\s*:[ ](\d+)([%%])>/im;
	    	for(var i = 1; i < $dataEnemies.length; i++) {
	    		var lines = $dataEnemies[i].note.split(/[\n\r]+/);
	    		for(var k = 0; k < lines.length; k++) {
		    		if(lines[k].match(n1)) {
		    			if(!$dataEnemies[i].groupedDropItems) $dataEnemies[i].groupedDropItems = [];
		    			var result = [];
		    			var f = parseInt(RegExp.$1);
		    			var l = parseInt(RegExp.$2);
		    			for(var j = f; j <= l; j++) {
		    				result.push($dataItems[j]);
		    			}
		    			$dataEnemies[i].groupedDropItems.push([result, parseFloat(RegExp.$3) * 0.01]);
		    		}

		    		if(lines[k].match(n2)) {
		    			if(!$dataEnemies[i].groupedDropItems) $dataEnemies[i].groupedDropItems = [];
		    			var result = [];
		    			var f = parseInt(RegExp.$1);
		    			var l = parseInt(RegExp.$2);
		    			for(var j = f; j <= l; j++) {
		    				result.push($dataWeapons[j]);
		    			}
		    			$dataEnemies[i].groupedDropItems.push([result, parseFloat(RegExp.$3) * 0.01]);
		    		}

		    		if(lines[k].match(n3)) {
		    			if(!$dataEnemies[i].groupedDropItems) $dataEnemies[i].groupedDropItems = [];
		    			var result = [];
		    			var f = parseInt(RegExp.$1);
		    			var l = parseInt(RegExp.$2);
		    			for(var j = f; j <= l; j++) {
		    				result.push($dataArmors[j]);
		    			}
		    			$dataEnemies[i].groupedDropItems.push([result, parseFloat(RegExp.$3) * 0.01]);
		    		}

		    		if(lines[k].match(n4)) {
		    			if(_.groups[String(RegExp.$1)]) {
			    			if(!$dataEnemies[i].groupedDropItems) $dataEnemies[i].groupedDropItems = [];
			    			$dataEnemies[i].groupedDropItems.push([_.groups[String(RegExp.$1)], parseFloat(RegExp.$2) * 0.01]);
			    		}
		    		}
		    	}
	    	}
	    	notetagsLoaded = true;
	    }
	    return true;
	};

	var _DataManager_processEEDNotetags1 = DataManager.processEEDNotetags1;
	DataManager.processEEDNotetags1 = function(group) {
		var noteD1 = /<(?:ITEM|DROP ITEM)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/gi;
		var noteD2 = /<(?:WEAPON|DROP WEAPON)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/gi;
		var noteD3 = /<(?:ARMOR|DROP armor)[ ](\d+)\s*-\s*(\d+):[ ](\d+)([%%])>/gi;
    	for(var i = 1; i < $dataEnemies.length; i++) {
    		$dataEnemies[i].note = $dataEnemies[i].note.replace(noteD1, function() {
    			var result = "";
    			for(var j = arguments[1]; j <= arguments[2]; j++) {
    				result += "<Item " + j + ": " + arguments[3] + "%>\n";
    			}
    			return result;
    		}.bind(this));

    		$dataEnemies[i].note = $dataEnemies[i].note.replace(noteD2, function() {
    			var result = "";
    			for(var j = arguments[1]; j <= arguments[2]; j++) {
    				result += "<Weapon " + j + ": " + arguments[3] + "%>\n";
    			}
    			return result;
    		}.bind(this));

    		$dataEnemies[i].note = $dataEnemies[i].note.replace(noteD3, function() {
    			var result = "";
    			for(var j = arguments[1]; j <= arguments[2]; j++) {
    				result += "<Armor " + j + ": " + arguments[3] + "%>\n";
    			}
    			return result;
    		}.bind(this));
    	}
		_DataManager_processEEDNotetags1.call(this, group);
	};

	var _DropManager_makeConditionalDropItems = DropManager.makeConditionalDropItems;
	DropManager.makeConditionalDropItems = function() {
		_DropManager_makeConditionalDropItems.call(this);
		if(this._enemy.enemy().groupedDropItems) {
			var gdi = this._enemy.enemy().groupedDropItems;
			for(var i = 0; i < gdi.length; i++) {
				if(Math.random() < gdi[i][1]) {
					var r = Math.randomInt(gdi[i][0].length);
					this._drops.push(gdi[i][0][r]);
				}
			}
		}
	};

})(SRD.EnemyBulkDrops);

} else alert("HEY! Currently you have SRD_EnemyBulkDrops installed, but you don't have YEP_ExtraEnemyDrops installed. \nFix it!");