Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # Cram-o-Matic - By Vendily and KyureJL [v20/v21]
- #===============================================================================
- # This script adds in the Cram-o-Matic, the combinational machine from the SwSh
- # Isle of Armor DLC.
- #===============================================================================
- # The you only need to call pbCramOMatic in an event, and the script will allow
- # you to pick 4 items to convert. Canceling early returns the items.
- # Only items with the CramOMatic_TYPE_VALUE flag can be chosen.
- # TYPE is one of the CRAMOMATIC_TYPERECIPIES keys.
- # VALUE is the numerical point value of this item when combined
- #
- # There are a few hard coded recipies, and the generic type based recipies
- # are defined in CRAMOMATIC_TYPERECIPIES
- #
- # CRAMOMATIC_TYPERECIPIES contains entries where the key is the type (doesn't
- # have to be a type) and the value is an array of item symbols. The array has to
- # be the same length as CRAMOMATIC_RATIO. You can set a slot as an array of
- # item symbols to pick one at random.
- #===============================================================================
- PluginManager.register({
- :name => "Cram-o-Matic",
- :version => "2.0",
- :link => "https://reliccastle.com/resources/449/",
- :credits => ["Vendily","KyureJL"]
- })
- CRAMOMATIC_TYPERECIPIES={
- :BUG=>[:TR60,:TR18,:BRIGHTPOWDER,:WISHINGPIECE,:SILVERPOWDER,:BALMMUSHROOM,:TR61,:SHEDSHELL,:PEARLSTRING,:TR96,:COMETSHARD,:TR28,:RARECANDY,:BOTTLECAP,:PPUP],
- :DARK=>[:TR37,:WIDELENS,:TR68,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:TR81,:SCOPELENS,:TR95,:TR58,:TR32,:TR93,:RARECANDY,:BOTTLECAP,:PPUP],
- :DRAGON=>[:TR47,:DRAGONFANG,:BIGMUSHROOM,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:DRAGONSCALE,:LIFEORB,:TR62,:KINGSROCK,:TR51,:TR24,:RARECANDY,:BOTTLECAP,:PPUP],
- :ELECTRIC=>[:ELECTRICSEED,:TR80,:CELLBATTERY,:WISHINGPIECE,:MAGNET,:TR86,:UPGRADE,:LIGHTBALL,:PEARLSTRING,:DUBIOUSDISC,:TR08,:TR09,:RARECANDY,:BOTTLECAP,:PPUP],
- :FAIRY=>[:STARDUST,:MISTYSEED,:BIGMUSHROOM,:WISHINGPIECE,:SACHET,:ROOMSERVICE,:WHIPPEDDREAM,:DESTINYKNOT,
- [:BERRYSWEET,:CLOVERSWEET,:FLOWERSWEET,:LOVESWEET,:STRAWBERRYSWEET],:TR92,
- [:RIBBONSWEET,:STARSWEET,:STRAWBERRYSWEET],:TR90,:RARECANDY,:BOTTLECAP,:PPUP],
- :FIGHTING=>[:TR07,:TR56,:MUSCLEBAND,:WISHINGPIECE,:TR48,:TR21,:MACHOBRACE,:TM00,:EXPERTBELT,:TR64,:TR39,:TR53,:RARECANDY,:BOTTLECAP,:PPUP],
- :FIRE=>[:TR88,:FLAMEORB,:TR41,:WISHINGPIECE,:TR02,:BALMMUSHROOM,:TR36,:REDCARD,:TR15,:CHARCOAL,:TR55,:TR43,:RARECANDY,:BOTTLECAP,:PPUP],
- :FLYING=>[:PRETTYFEATHER,:SHARPBEAK,:BIGMUSHROOM,:WISHINGPIECE,:AIRBALLOON,:BLUNDERPOLICY,:GRIPCLAW,:AIRBALLOONN,:WEAKNESSPOLICY,:TR89,:COMETSHARD,:TR66,:RARECANDY,:BOTTLECAP,:PPUP],
- :GHOST=>[:ODDINCENSE,:ADRENALINEORB,:RINGTARGET,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:CLEANSETAG,:SPELLTAG,:CRACKEDPOT,:REAPERCLOTH,:COMETSHARD,:TR33,:RARECANDY,:BOTTLECAP,:PPUP],
- :GRASS=>[:GRASSYSEED,:TR59,:WHITEHERB,:WISHINGPIECE,:TR77,:TR50,:TR65,:ABSORBBULB,:PEARLSTRING,:TR72,:COMETSHARD,:TR71,:RARECANDY,:BOTTLECAP,:PPUP],
- :GROUND=>[:STARDUST,:TR23,:BIGMUSHROOM,:WISHINGPIECE,:LIGHTCLAY,:TR87,:TR67,:TERRAINEXTENDER,:PEARLSTRING,:TR94,:COMETSHARD,:TR10,:RARECANDY,:BOTTLECAP,:PPUP],
- :ICE=>[:SNOWBALL,:ICYROCK,:NEVERMELTICE,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:RAZORCLAW,:SNOWBALL,:PEARLSTRING,:TR05,:COMETSHARD,:TR06,:RARECANDY,:BOTTLECAP,:PPUP],
- :NORMAL=>[:TR85,:TR14,:TR26,:TR13,:TR27,:TR35,:TR01,:TR19,:TR29,:TR30,:TR20,:TR00,:TR42,:BOTTLECAP,:PPUP],
- :POISON=>[:BLACKSLUDGE,:TOXICORB,:TR91,:WISHINGPIECE,:TR54,:SMOKEBALL,:TR57,:QUICKPOWDER,:POISONBARB,:TR22,:TR78,:TR73,:RARECANDY,:BOTTLECAP,:PPUP],
- :PSYCHIC=>[:TR12,:TR34,:TR40,:TR82,:TR44,:TR83,:TR25,:TR69,:TR17,:TR38,:TR49,:TR97,:TR11,:BOTTLECAP,:PPUP],
- :ROCK=>[:FLOATSTONE,:OVALSTONE,:HARDSTONE,:WISHINGPIECE,:EVERSTONE,:PROTECTOR,:ROCKYHELMET,:TR63,:WISHINGPIECE,:EVIOLITE,:TR76,:TR75,:RARECANDY,:BOTTLECAP,:PPUP],
- :STEEL=>[:TR31,:TR46,:METALPOWDER,:WISHINGPIECE,:UTILITYUMBRELLA,:METALCOAT,:TR52,:ASSAULTVEST,:TR79,:AMULETCOIN,:TR70,:TR64,:RARECANDY,:BOTTLECAP,:PPUP],
- :WATER=>[:SEAINCENSE,:TR04,:SHELLBELL,:WISHINGPIECE,:TR16,:TR98,:PRISMSCALE,:MYSTICWATER,:PEARLSTRING,:TR45,:TR84,:TR03,:RARECANDY,:BOTTLECAP,:PPUP],
- }
- CRAMOMATIC_RATIO=[20,30,40,50,60,70,80,90,100,110,120,130,140,150,-1]
- def pbCramOMatic
- if Kernel.pbConfirmMessage(_INTL("Combine Items?"))
- Kernel.pbMessage(_INTL("Select the items to be combined.\\1"))
- items=[]
- pbFadeOutIn(99999){
- 4.times do
- craft=nil
- scene = PokemonBag_Scene.new
- screen = PokemonBagScreen.new(scene,$bag)
- craft = screen.pbChooseItemScreen(Proc.new{|item| GameData::Item.get(item).flags.any? { |f| f[/^CramOMatic_/i] } })
- break unless craft
- items.push(craft)
- $bag.remove(craft)
- end
- }
- if items.length<4
- items.each{|item| $bag.add(item)}
- return
- end
- qty=1
- if items.all?{|item| GameData::Item.get(item).is_apricorn?}
- ratio=[247,247,247,247,10,1,1]
- craft=items[rand(items.length)]
- case craft
- when :BLACKAPRICORN
- table=[:POKEBALL,:GREATBALL,:DUSKBALL,:LUXURYBALL,:HEAVYBALL,:SAFARIBALL,:SPORTBALL]
- when :BLUEAPRICORN
- table=[:POKEBALL,:GREATBALL,:DIVEBALL,:NETBALL,:LUREBALL,:SAFARIBALL,:SPORTBALL]
- when :GREENAPRICORN
- table=[:POKEBALL,:GREATBALL,:ULTRABALL,:NESTBALL,:FRIENDBALL,:SAFARIBALL,:SPORTBALL]
- when :PINKAPRICORN
- table=[:POKEBALL,:GREATBALL,:ULTRABALL,:HEALBALL,:LOVEBALL,:SAFARIBALL,:SPORTBALL]
- when :REDAPRICORN
- table=[:POKEBALL,:GREATBALL,:ULTRABALL,:REPEATBALL,:LEVELBALL,:SAFARIBALL,:SPORTBALL]
- when :WHITEAPRICORN
- table=[:POKEBALL,:GREATBALL,:PREMIERBALL,:TIMERBALL,:FASTBALL,:SAFARIBALL,:SPORTBALL]
- when :YELLOWAPRICORN
- table=[:POKEBALL,:GREATBALL,:ULTRABALL,:QUICKBALL,:MOONBALL,:SAFARIBALL,:SPORTBALL]
- end
- total=0
- ratio.each{|r| total+=r}
- num=rand(total)
- cumtotal=0
- ball=0
- table.length.times do |i|
- cumtotal+=ratio[i]
- if num<cumtotal
- ball=i
- break
- end
- end
- item=table[ball]
- qty=(rand(100)==0)? 5 : 1
- elsif items[0] == :TINYMUSHROOM &&
- items[2] == :TINYMUSHROOM &&
- items[3] == :TINYMUSHROOM
- item=:BIGMUSHROOM
- elsif items[0] == :PEARL &&
- items[2] == :PEARL &&
- items[3] == :PEARL
- item=:BIGPEARL
- elsif items[0] == :BIGPEARL &&
- items[2] == :BIGPEARL &&
- items[3] == :BIGPEARL
- item=:PEARLSTRING
- elsif items[0] == :STARDUST &&
- items[2] == :STARDUST &&
- items[3] == :STARDUST
- item=:STARPIECE
- elsif items[0] == :BIGMUSHROOM &&
- items[2] == :BIGMUSHROOM &&
- items[3] == :BIGMUSHROOM
- item=:BALMMUSHROOM
- elsif items[0] == :NUGGET &&
- items[2] == :NUGGET &&
- items[3] == :NUGGET
- item=:BIGNUGGET
- elsif items[0] == :RARECANDY &&
- items[2] == :RARECANDY &&
- items[3] == :RARECANDY
- item=:ABILITYCAPSULE
- elsif items[0] == :BOTTLECAP &&
- items[2] == :BOTTLECAP &&
- items[3] == :BOTTLECAP
- item=:GOLDBOTTLECAP
- elsif items[0] == :ARMORITEORE &&
- items[2] == :ARMORITEORE &&
- items[3] == :ARMORITEORE
- item=:PPUP
- elsif items[0] == :STARPIECE &&
- items[2] == :STARPIECE &&
- items[3] == :STARPIECE
- item=:COMETSHARD
- else
- cram_data = items.map do |item|
- ret = nil
- GameData::Item.get(item).flags.each do |flag|
- next unless flag[/^CramOMatic_(\w+)_(\d+)$/i]
- ret = [$~[1].to_sym,$~[2].to_i]
- end
- next ret
- end
- type = cram_data[0][0]
- value=0
- cram_data.each do |item|
- value+=item[1]
- end
- list=CRAMOMATIC_TYPERECIPIES[type]
- index=0
- CRAMOMATIC_RATIO.each_index do |i|
- if CRAMOMATIC_RATIO[i]==-1 || value<=CRAMOMATIC_RATIO[i]
- index=i
- break
- end
- end
- item=list[index]
- item=item[rand(item.length)] if item.is_a?(Array)
- end
- item=:REPEL unless item
- Kernel.pbMessage(_INTL("Combination process complete!\n*BUZZ*\\1"))
- Kernel.pbReceiveItem(item,qty)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement