Advertisement
Vendily

Cram-o-Matic [v20/v21]

Aug 19th, 2023
1,632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.31 KB | None | 0 0
  1. #===============================================================================
  2. # Cram-o-Matic - By Vendily and KyureJL [v20/v21]
  3. #===============================================================================
  4. # This script adds in the Cram-o-Matic, the combinational machine from the SwSh
  5. #  Isle of Armor DLC.
  6. #===============================================================================
  7. # The you only need to call pbCramOMatic in an event, and the script will allow
  8. #  you to pick 4 items to convert. Canceling early returns the items.
  9. #  Only items with the CramOMatic_TYPE_VALUE flag can be chosen.
  10. #  TYPE is one of the CRAMOMATIC_TYPERECIPIES keys.
  11. #  VALUE is the numerical point value of this item when combined
  12. #
  13. # There are a few hard coded recipies, and the generic type based recipies
  14. #  are defined in CRAMOMATIC_TYPERECIPIES
  15. #
  16. # CRAMOMATIC_TYPERECIPIES contains entries where the key is the type (doesn't
  17. #  have to be a type) and the value is an array of item symbols. The array has to
  18. #  be the same length as CRAMOMATIC_RATIO. You can set a slot as an array of
  19. #  item symbols to pick one at random.
  20. #===============================================================================
  21. PluginManager.register({
  22.   :name    => "Cram-o-Matic",
  23.   :version => "2.0",
  24.   :link    => "https://reliccastle.com/resources/449/",
  25.   :credits => ["Vendily","KyureJL"]
  26. })
  27.  
  28. CRAMOMATIC_TYPERECIPIES={
  29.   :BUG=>[:TR60,:TR18,:BRIGHTPOWDER,:WISHINGPIECE,:SILVERPOWDER,:BALMMUSHROOM,:TR61,:SHEDSHELL,:PEARLSTRING,:TR96,:COMETSHARD,:TR28,:RARECANDY,:BOTTLECAP,:PPUP],
  30.   :DARK=>[:TR37,:WIDELENS,:TR68,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:TR81,:SCOPELENS,:TR95,:TR58,:TR32,:TR93,:RARECANDY,:BOTTLECAP,:PPUP],
  31.   :DRAGON=>[:TR47,:DRAGONFANG,:BIGMUSHROOM,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:DRAGONSCALE,:LIFEORB,:TR62,:KINGSROCK,:TR51,:TR24,:RARECANDY,:BOTTLECAP,:PPUP],
  32.   :ELECTRIC=>[:ELECTRICSEED,:TR80,:CELLBATTERY,:WISHINGPIECE,:MAGNET,:TR86,:UPGRADE,:LIGHTBALL,:PEARLSTRING,:DUBIOUSDISC,:TR08,:TR09,:RARECANDY,:BOTTLECAP,:PPUP],
  33.   :FAIRY=>[:STARDUST,:MISTYSEED,:BIGMUSHROOM,:WISHINGPIECE,:SACHET,:ROOMSERVICE,:WHIPPEDDREAM,:DESTINYKNOT,
  34.     [:BERRYSWEET,:CLOVERSWEET,:FLOWERSWEET,:LOVESWEET,:STRAWBERRYSWEET],:TR92,
  35.     [:RIBBONSWEET,:STARSWEET,:STRAWBERRYSWEET],:TR90,:RARECANDY,:BOTTLECAP,:PPUP],
  36.   :FIGHTING=>[:TR07,:TR56,:MUSCLEBAND,:WISHINGPIECE,:TR48,:TR21,:MACHOBRACE,:TM00,:EXPERTBELT,:TR64,:TR39,:TR53,:RARECANDY,:BOTTLECAP,:PPUP],
  37.   :FIRE=>[:TR88,:FLAMEORB,:TR41,:WISHINGPIECE,:TR02,:BALMMUSHROOM,:TR36,:REDCARD,:TR15,:CHARCOAL,:TR55,:TR43,:RARECANDY,:BOTTLECAP,:PPUP],
  38.   :FLYING=>[:PRETTYFEATHER,:SHARPBEAK,:BIGMUSHROOM,:WISHINGPIECE,:AIRBALLOON,:BLUNDERPOLICY,:GRIPCLAW,:AIRBALLOONN,:WEAKNESSPOLICY,:TR89,:COMETSHARD,:TR66,:RARECANDY,:BOTTLECAP,:PPUP],
  39.   :GHOST=>[:ODDINCENSE,:ADRENALINEORB,:RINGTARGET,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:CLEANSETAG,:SPELLTAG,:CRACKEDPOT,:REAPERCLOTH,:COMETSHARD,:TR33,:RARECANDY,:BOTTLECAP,:PPUP],
  40.   :GRASS=>[:GRASSYSEED,:TR59,:WHITEHERB,:WISHINGPIECE,:TR77,:TR50,:TR65,:ABSORBBULB,:PEARLSTRING,:TR72,:COMETSHARD,:TR71,:RARECANDY,:BOTTLECAP,:PPUP],
  41.   :GROUND=>[:STARDUST,:TR23,:BIGMUSHROOM,:WISHINGPIECE,:LIGHTCLAY,:TR87,:TR67,:TERRAINEXTENDER,:PEARLSTRING,:TR94,:COMETSHARD,:TR10,:RARECANDY,:BOTTLECAP,:PPUP],
  42.   :ICE=>[:SNOWBALL,:ICYROCK,:NEVERMELTICE,:WISHINGPIECE,:STARPIECE,:BALMMUSHROOM,:RAZORCLAW,:SNOWBALL,:PEARLSTRING,:TR05,:COMETSHARD,:TR06,:RARECANDY,:BOTTLECAP,:PPUP],
  43.   :NORMAL=>[:TR85,:TR14,:TR26,:TR13,:TR27,:TR35,:TR01,:TR19,:TR29,:TR30,:TR20,:TR00,:TR42,:BOTTLECAP,:PPUP],
  44.   :POISON=>[:BLACKSLUDGE,:TOXICORB,:TR91,:WISHINGPIECE,:TR54,:SMOKEBALL,:TR57,:QUICKPOWDER,:POISONBARB,:TR22,:TR78,:TR73,:RARECANDY,:BOTTLECAP,:PPUP],
  45.   :PSYCHIC=>[:TR12,:TR34,:TR40,:TR82,:TR44,:TR83,:TR25,:TR69,:TR17,:TR38,:TR49,:TR97,:TR11,:BOTTLECAP,:PPUP],
  46.   :ROCK=>[:FLOATSTONE,:OVALSTONE,:HARDSTONE,:WISHINGPIECE,:EVERSTONE,:PROTECTOR,:ROCKYHELMET,:TR63,:WISHINGPIECE,:EVIOLITE,:TR76,:TR75,:RARECANDY,:BOTTLECAP,:PPUP],
  47.   :STEEL=>[:TR31,:TR46,:METALPOWDER,:WISHINGPIECE,:UTILITYUMBRELLA,:METALCOAT,:TR52,:ASSAULTVEST,:TR79,:AMULETCOIN,:TR70,:TR64,:RARECANDY,:BOTTLECAP,:PPUP],
  48.   :WATER=>[:SEAINCENSE,:TR04,:SHELLBELL,:WISHINGPIECE,:TR16,:TR98,:PRISMSCALE,:MYSTICWATER,:PEARLSTRING,:TR45,:TR84,:TR03,:RARECANDY,:BOTTLECAP,:PPUP],
  49. }
  50. CRAMOMATIC_RATIO=[20,30,40,50,60,70,80,90,100,110,120,130,140,150,-1]
  51.  
  52. def pbCramOMatic
  53.   if Kernel.pbConfirmMessage(_INTL("Combine Items?"))
  54.     Kernel.pbMessage(_INTL("Select the items to be combined.\\1"))
  55.     items=[]
  56.     pbFadeOutIn(99999){
  57.       4.times do
  58.         craft=nil
  59.         scene = PokemonBag_Scene.new
  60.         screen = PokemonBagScreen.new(scene,$bag)
  61.         craft = screen.pbChooseItemScreen(Proc.new{|item| GameData::Item.get(item).flags.any? { |f| f[/^CramOMatic_/i] } })
  62.         break unless craft
  63.         items.push(craft)
  64.         $bag.remove(craft)
  65.       end
  66.     }
  67.     if items.length<4
  68.       items.each{|item| $bag.add(item)}
  69.       return
  70.     end
  71.     qty=1
  72.     if items.all?{|item| GameData::Item.get(item).is_apricorn?}
  73.       ratio=[247,247,247,247,10,1,1]
  74.       craft=items[rand(items.length)]
  75.       case craft
  76.       when :BLACKAPRICORN
  77.         table=[:POKEBALL,:GREATBALL,:DUSKBALL,:LUXURYBALL,:HEAVYBALL,:SAFARIBALL,:SPORTBALL]
  78.       when :BLUEAPRICORN
  79.         table=[:POKEBALL,:GREATBALL,:DIVEBALL,:NETBALL,:LUREBALL,:SAFARIBALL,:SPORTBALL]
  80.       when :GREENAPRICORN
  81.         table=[:POKEBALL,:GREATBALL,:ULTRABALL,:NESTBALL,:FRIENDBALL,:SAFARIBALL,:SPORTBALL]
  82.       when :PINKAPRICORN
  83.         table=[:POKEBALL,:GREATBALL,:ULTRABALL,:HEALBALL,:LOVEBALL,:SAFARIBALL,:SPORTBALL]
  84.       when :REDAPRICORN
  85.         table=[:POKEBALL,:GREATBALL,:ULTRABALL,:REPEATBALL,:LEVELBALL,:SAFARIBALL,:SPORTBALL]
  86.       when :WHITEAPRICORN
  87.         table=[:POKEBALL,:GREATBALL,:PREMIERBALL,:TIMERBALL,:FASTBALL,:SAFARIBALL,:SPORTBALL]
  88.       when :YELLOWAPRICORN
  89.         table=[:POKEBALL,:GREATBALL,:ULTRABALL,:QUICKBALL,:MOONBALL,:SAFARIBALL,:SPORTBALL]
  90.       end
  91.       total=0
  92.       ratio.each{|r| total+=r}
  93.       num=rand(total)
  94.       cumtotal=0
  95.       ball=0
  96.       table.length.times do |i|
  97.         cumtotal+=ratio[i]
  98.         if num<cumtotal
  99.           ball=i
  100.           break
  101.         end
  102.       end
  103.       item=table[ball]
  104.       qty=(rand(100)==0)? 5 : 1
  105.     elsif items[0] == :TINYMUSHROOM &&
  106.           items[2] == :TINYMUSHROOM &&
  107.           items[3] == :TINYMUSHROOM
  108.       item=:BIGMUSHROOM
  109.     elsif items[0] == :PEARL &&
  110.           items[2] == :PEARL &&
  111.           items[3] == :PEARL
  112.       item=:BIGPEARL
  113.     elsif items[0] == :BIGPEARL &&
  114.           items[2] == :BIGPEARL &&
  115.           items[3] == :BIGPEARL
  116.       item=:PEARLSTRING
  117.     elsif items[0] == :STARDUST &&
  118.           items[2] == :STARDUST &&
  119.           items[3] == :STARDUST
  120.       item=:STARPIECE
  121.     elsif items[0] == :BIGMUSHROOM &&
  122.           items[2] == :BIGMUSHROOM &&
  123.           items[3] == :BIGMUSHROOM
  124.       item=:BALMMUSHROOM
  125.     elsif items[0] == :NUGGET &&
  126.           items[2] == :NUGGET &&
  127.           items[3] == :NUGGET
  128.       item=:BIGNUGGET
  129.     elsif items[0] == :RARECANDY &&
  130.           items[2] == :RARECANDY &&
  131.           items[3] == :RARECANDY
  132.       item=:ABILITYCAPSULE
  133.     elsif items[0] == :BOTTLECAP &&
  134.           items[2] == :BOTTLECAP &&
  135.           items[3] == :BOTTLECAP
  136.       item=:GOLDBOTTLECAP
  137.     elsif items[0] == :ARMORITEORE &&
  138.           items[2] == :ARMORITEORE &&
  139.           items[3] == :ARMORITEORE
  140.       item=:PPUP
  141.     elsif items[0] == :STARPIECE &&
  142.           items[2] == :STARPIECE &&
  143.           items[3] == :STARPIECE
  144.       item=:COMETSHARD
  145.     else
  146.       cram_data = items.map do |item|
  147.         ret = nil
  148.         GameData::Item.get(item).flags.each do |flag|
  149.           next unless flag[/^CramOMatic_(\w+)_(\d+)$/i]
  150.           ret = [$~[1].to_sym,$~[2].to_i]
  151.         end
  152.         next ret
  153.       end
  154.       type = cram_data[0][0]
  155.       value=0
  156.       cram_data.each do |item|
  157.         value+=item[1]
  158.       end
  159.       list=CRAMOMATIC_TYPERECIPIES[type]
  160.       index=0
  161.       CRAMOMATIC_RATIO.each_index do |i|
  162.         if CRAMOMATIC_RATIO[i]==-1 || value<=CRAMOMATIC_RATIO[i]
  163.           index=i
  164.           break
  165.         end
  166.       end
  167.       item=list[index]
  168.       item=item[rand(item.length)] if item.is_a?(Array)
  169.     end
  170.     item=:REPEL unless item
  171.     Kernel.pbMessage(_INTL("Combination process complete!\n*BUZZ*\\1"))
  172.     Kernel.pbReceiveItem(item,qty)
  173.   end
  174. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement