Advertisement
TechSkylander1518

Prize Wheels (v20)

Dec 19th, 2022
1,299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.06 KB | None | 0 0
  1. module WheelData
  2.   DEFAULT_BACKGROUND = "hatchbg"
  3.   DEFAULT_WHEEL      = "prizewheel"
  4.   DEFAULT_RADIUS     = 110
  5.   DEFAULT_MINSPINS   = 3
  6.   DEFAULT_RESPIN     = true
  7.   DEFAULT_COST       = 0
  8.   DEFAULT_COSTCOINS  = false
  9.   DEFAULT_PRIZECOINS = false
  10.   DEFAULT_SPINSFX    = ["battle ball shake",80,150]
  11.   DEFUALT_WINSFX     = ["mining reveal full",100,100]
  12.   DEFAULT_LEVEL      = 20
  13.  
  14.   Wheel = {
  15.     :background => "hatchbg",
  16.     :wheel      => "prizewheel",
  17.     :radius     => 110,
  18.     :minspins   => 3,
  19.     :respin     => false,
  20.     :cost       => 10,
  21.     :costcoins  => false,
  22.     :prizecoins => false,
  23.     :spinsfx    => ["battle ball shake",80,150],
  24.     :winsfx     => ["mining reveal full",100,100],
  25.     :level      => 20,
  26.     :prizes     => [:GREATBALL,
  27.                     :NETBALL,
  28.                     :FRIENDBALL,
  29.                     :NESTBALL,
  30.                     :ULTRABALL,
  31.                     :LEVELBALL,
  32.                     :FASTBALL,
  33.                     :POKEBALL,
  34.                     :HEALBALL,
  35.                     :MASTERBALL]
  36.   }
  37.  
  38. end
  39.  
  40. #center_origins command from Marin's Scripting Utilities.
  41. #If you have that script, you can delete this section
  42. class Sprite
  43.   def center_origins
  44.     return if !self.bitmap
  45.     self.ox = self.bitmap.width / 2
  46.     self.oy = self.bitmap.height / 2
  47.   end
  48. end
  49.  
  50.  
  51.  
  52. #.degrees command, to convert degrees to radians
  53. class Numeric
  54.    def degrees
  55.      self * Math::PI / 180
  56.    end
  57. end
  58.  
  59. def pbWheel(wheeldata)
  60.   PrizeWheelScene.new(wheeldata)
  61. end
  62.  
  63.  
  64.  
  65.  
  66. class PrizeWheelScene
  67.  
  68.   def pbUpdate
  69.     pbUpdateSpriteHash(@sprites)
  70.   end
  71.  
  72.  
  73.   def initialize(wheeldata)
  74.     @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
  75.     wheeldata = WheelData.const_get(wheeldata)
  76.     @respin = (wheeldata[:respin]) ? wheeldata[:respin] : WheelData::DEFAULT_RESPIN
  77.     @cost=(wheeldata[:cost]) ? wheeldata[:cost] : 0
  78.     @costcoins = (wheeldata[:costcoins]) ? wheeldata[:costcoins] : WheelData::DEFAULT_COSTCOINS
  79.     @prizecoins = (wheeldata[:prizecoins]) ? wheeldata[:prizecoins] : WheelData::DEFAULT_PRIZECOINS
  80.     @prizes=wheeldata[:prizes]
  81.     @sprites = {}
  82.     @bg        = (wheeldata[:bg]) ? wheeldata[:bg] : WheelData::DEFAULT_BACKGROUND
  83.     @wheel     = (wheeldata[:wheel]) ? wheeldata[:wheel] : WheelData::DEFAULT_WHEEL
  84.     @radius    = (wheeldata[:radius]) ? wheeldata[:radius] : WheelData::DEFAULT_RADIUS
  85.     @minspins  = (wheeldata[:minspins]) ? wheeldata[:minspins] : WheelData::DEFAULT_MINSPINS
  86.     @spinsfx   = (wheeldata[:spinsfx]) ? wheeldata[:spinsfx] : WheelData::DEFAULT_SPINSFX
  87.     @winsfx    = (wheeldata[:winsfx]) ? wheeldata[:winsfx] : WheelData::DEFUALT_WINSFX
  88.     @level     = (wheeldata[:level]) ? wheeldata[:level] : WheelData::DEFAULT_LEVEL
  89.     raise _INTL("Invalid level. (exceeds maximum level)") if @level > Settings::MAXIMUM_LEVEL
  90.     @prizespin=0
  91.     @angle=[72,36,0,313,287,251,216,180,144,108]
  92.     @xyangle=[198,234,270,306,340,16,52,90,126,162]
  93.     @sprites["bg"] = Sprite.new(@viewport)
  94.     @sprites["bg"].bitmap = Bitmap.new("Graphics/Pictures/#{@bg}")
  95.     @sprites["downarrow"] = AnimatedSprite.new("Graphics/Pictures/downarrow",8,28,40,2,@viewport)
  96.     @sprites["downarrow"].x = (Graphics.width/2)-15
  97.     @sprites["downarrow"].y = 10
  98.     @sprites["downarrow"].z = 5
  99.     @sprites["downarrow"].play
  100.     @sprites["wheel"] = Sprite.new(@viewport)
  101.     @sprites["wheel"].bitmap = Bitmap.new("Graphics/Pictures/#{@wheel}")
  102.     @sprites["wheel"].center_origins
  103.     @sprites["wheel"].x=Graphics.width/2
  104.     @sprites["wheel"].y=Graphics.height/2
  105.     for i in 0...10
  106.       raise _INTL("Not enough prizes.") if !@prizes[i]
  107.       display = @prizes[i]
  108.       display = @prizes[i][0] if @prizes[i].is_a?(Array)
  109.       if display.is_a?(Symbol) && !GameData::Item.try_get(display) &&
  110.                                   !GameData::Species.try_get(display)
  111.         raise _INTL("#{display} is not an item or species.")
  112.       end
  113.       if display.is_a?(Integer)
  114.         @sprites["prize#{i}"] = Sprite.new(@viewport)
  115.         if @prizecoins == true
  116.           @sprites["prize#{i}"].bitmap = Bitmap.new("Graphics/Items/COINCASE")
  117.         else
  118.           @sprites["prize#{i}"].bitmap = Bitmap.new("Graphics/Pictures/Money")
  119.         end
  120.         @sprites["prize#{i}"].center_origins
  121.       elsif display.is_a?(String)
  122.         @sprites["prize#{i}"] = Sprite.new(@viewport)
  123.         @sprites["prize#{i}"].bitmap = Bitmap.new("Graphics/#{display}")
  124.         @sprites["prize#{i}"].center_origins
  125.       elsif GameData::Item.try_get(display)
  126.         @sprites["prize#{i}"]=ItemIconSprite.new(0,0,nil,@viewport)
  127.         @sprites["prize#{i}"].item = display
  128.         @sprites["prize#{i}"].ox=24
  129.         @sprites["prize#{i}"].oy=24
  130.       elsif GameData::Species.try_get(display)
  131.         @sprites["prize#{i}"]=PokemonSpeciesIconSprite.new(display,@viewport)
  132.         @sprites["prize#{i}"].shiny = false
  133.         @sprites["prize#{i}"].ox=32
  134.         @sprites["prize#{i}"].oy=32
  135.       end
  136.       @sprites["prize#{i}"].angle = @angle[i]
  137.       @sprites["prize#{i}"].x=(Graphics.width/2) + Math.cos(@xyangle[i].degrees)*@radius
  138.       @sprites["prize#{i}"].y=(Graphics.height/2) + Math.sin(@xyangle[i].degrees)*@radius
  139.     end
  140.     main
  141.   end
  142.  
  143.   def main
  144.     loop do
  145.       Graphics.update
  146.       Input.update
  147.       pbUpdate
  148.       if Input.trigger?(Input::C)
  149.         confirmtext="Spin the wheel?"
  150.         confirmtext="Spin the wheel for $#{@cost}?" if @cost > 0
  151.         confirmtext="Spin the wheel for #{@cost} coins?" if @costcoins == true
  152.         if pbConfirmMessage("#{confirmtext}")
  153.             if @costcoins == true && $player.coins<=@cost
  154.                pbMessage(_INTL("You don't have enough coins..."))
  155.                 break
  156.             elsif @costcoins == false && $player.money<=@cost
  157.                 pbMessage(_INTL("You don't have enough money..."))
  158.                 break
  159.             end
  160.           $player.coins-=@cost if @costcoins == true
  161.           $player.money-=@cost if @costcoins == false
  162.           spins=rand(360)
  163.           spins+=360*(@minspins)
  164.           spun=0
  165.           click=true
  166.           loop do
  167.             pbUpdate
  168.             @sprites["wheel"].angle -= 5
  169.             @prizespin+=5
  170.             for i in 0...10
  171.               @sprites["prize#{i}"].angle -= 5
  172.               @sprites["prize#{i}"].x= (Graphics.width/2) + Math.cos((@xyangle[i]+@prizespin).degrees)*@radius
  173.               @sprites["prize#{i}"].y= (Graphics.height/2) + Math.sin((@xyangle[i]+@prizespin).degrees)*@radius
  174.             end
  175.             spun+=5
  176.             Graphics.update
  177.             if click==true
  178.               pbSEPlay(@spinsfx[0],@spinsfx[1],@spinsfx[2])
  179.               click=false
  180.             else
  181.               click=true
  182.             end
  183.             if spun>=spins
  184.             prize=0
  185.             prizey=[]
  186.             for i in 0...10
  187.               prizey[i]=@sprites["prize#{i}"].y
  188.             end
  189.              winner=prizey.min
  190.               for i in 0...10
  191.                 if @sprites["prize#{i}"].y==winner
  192.                    prize=i
  193.                  end
  194.               end
  195.               prize=@prizes[prize]
  196.               pbSEPlay(@winsfx[0],@winsfx[1],@winsfx[2])
  197.               if prize.is_a?(Integer)
  198.                 if @prizecoins == true
  199.                   pbMessage("You won #{prize} coins!")
  200.                   $player.coins+=prize
  201.                 else
  202.                   pbMessage("You won $#{prize}!")
  203.                   $player.money+=prize
  204.                 end
  205.               elsif prize.is_a?(Array)
  206.                 prize.delete_at(0)
  207.                 prize = prize.sample
  208.               end
  209.               pbUpdate
  210.               pbReceiveItem(prize) if GameData::Item.try_get(prize)
  211.               pbAddPokemon(prize,@level) if GameData::Species.try_get(prize)
  212.               @spun = true if @respin == false
  213.               break
  214.             end
  215.           end
  216.         end
  217.       end
  218.       if Input.trigger?(Input::B) || @spun == true
  219.         break
  220.       end
  221.     end
  222.     pbFadeOutAndHide(@sprites) {pbUpdate}
  223.     dispose
  224.   end
  225.  
  226.   def dispose
  227.     pbDisposeSpriteHash(@sprites)
  228.     @viewport.dispose
  229.   end
  230. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement