- Pokémon Essentials Version
- v18.1 ➖
This is a Proper Wild Item Drop script. I based my script on the work of Cilerba (https://reliccastle.com/threads/1332/)
I'd also like to say thank you to ThatWelshOne_, Vendily and Golisopod User for helping with parts of the script and pointing me in the right direction, respectively!
Essentially, what this does is read the pokemon.txt PBS file and generate a list of items that can be "dropped" by a wild pokemon at the end of a battle. These items are completely separate from Wild Hold Items (so a wild pokemon can both hold an item and drop completely different items at the same time if you so wish). The way the script is set up now, a pokemon will have up to 3 different drop items defined. At the end of a battle, a random number between 1-3 will be set for each item and that number of items will be "dropped" and added to the player's bag. There is a 50 percent chance to drop the common item, 20 to drop the uncommon item, and 5 to drop the rare item. These can be edited in the portion of the script "chances". There are also 2 other arrays of chances that the script will use instead, if the first pokemon in your party has the Compound Eyes ability, or the Super Luck ability, respectively.
Set up is very simple.
First, you're gonna want to define wildDropItems. In PokeBattle_Pokemon, find the section
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
In Compiler_PBS find
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
and paste this directly below it:
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
Now to add the proper fields to the PBS file:
in Misc_Data, scroll down to the section labeled Pokemon Data and add these to the list of things there:
SpeciesWildDropCommon = 28
SpeciesWildDropUncommon = 29
SpeciesWildDropRare = 30
(Make sure the numbers you use here are unused in your file, my next available ones were 28-30 but if you're already using those, just use the next available numbers)
then, just below, in
find
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
and directly underneath it, paste:
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
the next step is the actual script, put this anywhere above "Main". I recommend directly above, as that is where I have it placed.
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
The very last step is adding the fields WildDropCommon/WildDropUncommon/WildDropRare to the PBS file for whichever pokemon you want and defining the item that you want to be dropped. This is an optional field, so you don't have to define one at all, and I personally recommend putting those fields underneath the POKEDEX entry (or WIldItemCommon/WildItemUncommon/WildItemRare fields, if those are defined. I'm not sure if the position is important, but why chance it?)
If you have questions or any bugs/issues to report, lemme know and I'll try my best to help. I'm still learning to code myself!
					
					
	
		
			I'd also like to say thank you to ThatWelshOne_, Vendily and Golisopod User for helping with parts of the script and pointing me in the right direction, respectively!
Essentially, what this does is read the pokemon.txt PBS file and generate a list of items that can be "dropped" by a wild pokemon at the end of a battle. These items are completely separate from Wild Hold Items (so a wild pokemon can both hold an item and drop completely different items at the same time if you so wish). The way the script is set up now, a pokemon will have up to 3 different drop items defined. At the end of a battle, a random number between 1-3 will be set for each item and that number of items will be "dropped" and added to the player's bag. There is a 50 percent chance to drop the common item, 20 to drop the uncommon item, and 5 to drop the rare item. These can be edited in the portion of the script "chances". There are also 2 other arrays of chances that the script will use instead, if the first pokemon in your party has the Compound Eyes ability, or the Super Luck ability, respectively.
Set up is very simple.
First, you're gonna want to define wildDropItems. In PokeBattle_Pokemon, find the section
def wildHoldItems and underneath it, paste this bit of code:
			
				Ruby:
			
		
		
		# Returns the items this species can drop in the wild.
  def wildDropItems
    ret = []
    ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropCommon))
    ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropUncommon))
    ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropRare))
    return ret
  endIn Compiler_PBS find
			
				Ruby:
			
		
		
		# If any held item is defined for this form, clear default data for all
      # three held items.
      if (contents["WildItemCommon"] && contents["WildItemCommon"]!="") ||
         (contents["WildItemUncommon"] && contents["WildItemUncommon"]!="") ||
         (contents["WildItemRare"] && contents["WildItemRare"]!="")
        speciesData[speciesID][SpeciesWildItemCommon]   = nil
        speciesData[speciesID][SpeciesWildItemUncommon] = nil
        speciesData[speciesID][SpeciesWildItemRare]     = nil
      endand paste this directly below it:
			
				Ruby:
			
		
		
		if (contents["WildDropCommon"] && contents["WildDropCommon"]!="") ||
         (contents["WildDropUncommon"] && contents["WildDropUncommon"]!="") ||
         (contents["WildDropRare"] && contents["WildDropRare"]!="")
        speciesData[speciesID][SpeciesWildDropCommon]   = nil
        speciesData[speciesID][SpeciesWildDropUncommon] = nil
        speciesData[speciesID][SpeciesWildDropRare]     = nil
      endNow to add the proper fields to the PBS file:
in Misc_Data, scroll down to the section labeled Pokemon Data and add these to the list of things there:
SpeciesWildDropCommon = 28
SpeciesWildDropUncommon = 29
SpeciesWildDropRare = 30
(Make sure the numbers you use here are unused in your file, my next available ones were 28-30 but if you're already using those, just use the next available numbers)
then, just below, in
def self.optionalValues(compilingForms = false)find
			
				Ruby:
			
		
		
		"WildItemCommon"      => [SpeciesWildItemCommon,   "e", :PBItems],
      "WildItemUncommon"    => [SpeciesWildItemUncommon, "e", :PBItems],
      "WildItemRare"        => [SpeciesWildItemRare,     "e", :PBItems],and directly underneath it, paste:
			
				Ruby:
			
		
		
		"WildDropCommon"      => [SpeciesWildDropCommon,   "e", :PBItems],
      "WildDropUncommon"    => [SpeciesWildDropUncommon, "e", :PBItems],
      "WildDropRare"        => [SpeciesWildDropRare,     "e", :PBItems],the next step is the actual script, put this anywhere above "Main". I recommend directly above, as that is where I have it placed.
			
				Ruby:
			
		
		
		class PokeBattle_Scene
  def pbWildBattleSuccess
    @battle.battlers.each {|b|
    next if !b
    next if !b.opposes?
    pkmn = b.pokemon
    next if !pkmn
    if pkmn.wildDropItems.inject(0){|sum,x| sum + x } != 0
      wildDrop = pkmn.wildDropItems
      firstqty = rand(3)+1
      secondqty = rand(3)+1
      thirdqty = rand(3)+1
      firstPkmn = $Trainer.firstPokemon
      chances = [50,20,5]
      chances = [60,40,15] if firstPkmn && isConst?(firstPkmn.ability,PBAbilities,:COMPOUNDEYES)
      chances = [50,50,50] if firstPkmn && isConst?(firstPkmn.ability,PBAbilities,:SUPERLUCK)
      droprnd = rand(100)
      if (wildDrop[0]==wildDrop[1] && wildDrop[1]==wildDrop[2]) || droprnd<chances[0]
        if $PokemonBag.pbStoreItem(wildDrop[0],firstqty)
          itemname = PBItems.getName(wildDrop[0])
          pocket = pbGetPocket(wildDrop[0])
          @battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,firstqty))
        end
      end
      if droprnd<chances[1]
        if $PokemonBag.pbStoreItem(wildDrop[1],secondqty)
          itemname = PBItems.getName(wildDrop[1])
          pocket = pbGetPocket(wildDrop[1])
          @battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,secondqty))
        end
      end
      if droprnd<chances[2]
        if $PokemonBag.pbStoreItem(wildDrop[2],thirdqty)
          itemname = PBItems.getName(wildDrop[2])
          pocket = pbGetPocket(wildDrop[2])
          @battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,thirdqty))
        end
      end
    end
    }
  @battleEnd = true
  pbBGMPlay(pbGetWildVictoryME)
  end
endThe very last step is adding the fields WildDropCommon/WildDropUncommon/WildDropRare to the PBS file for whichever pokemon you want and defining the item that you want to be dropped. This is an optional field, so you don't have to define one at all, and I personally recommend putting those fields underneath the POKEDEX entry (or WIldItemCommon/WildItemUncommon/WildItemRare fields, if those are defined. I'm not sure if the position is important, but why chance it?)
If you have questions or any bugs/issues to report, lemme know and I'll try my best to help. I'm still learning to code myself!
- Credits
- Tungesten Basilisk (Me)
 Cilerba
 ThatWelshOne_
 
	 
			
 
 
		