Advertisement
Guest User

extd. Questing System

a guest
Jul 31st, 2017
556
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 34.05 KB | None | 0 0
  1. #=#===========================================================================
  2. #=# Easy Questing System - made by M3rein
  3. #=#===========================================================================
  4. #=# Create your own quests starting from line 72. Be aware of the following:
  5. #=# * Every quest should have a unique ID;
  6. #=# * Every quest should be unique (at least one field has to be different);
  7. #=# * The "Name" field can't be very long;
  8. #=# * The "Desc" field can be quite long;
  9. #=# * The "NPC" field is JUST a name;
  10. #=# * The "Sprite" field is the name of the sprite in "Graphics/Characters";
  11. #=# * The "Location" field is JUST a name;
  12. #=# * The "Color" field is a SYMBOL (starts with ':'). List under "pbColor";
  13. #=# * The "Time" field can be a random string for it to be "?????" in-game;
  14. #=# * The "Completed" field can be pre-set, but is normally only changed in-game
  15. #=#===========================================================================
  16. class Quest
  17.   attr_accessor :id
  18.   attr_accessor :name
  19.   attr_accessor :desc
  20.   attr_accessor :npc
  21.   attr_accessor :sprite
  22.   attr_accessor :location
  23.   attr_accessor :color
  24.   attr_accessor :time
  25.   attr_accessor :completed
  26.   attr_accessor :progress
  27.   attr_accessor :experience
  28.   def initialize(id, name, desc, npc, sprite, location, color = :WHITE, time = Time.now, completed = false, progress = "0/0", experience = 0)
  29.     self.id = id
  30.     self.name = name
  31.     self.desc = desc
  32.     self.npc = npc
  33.     self.sprite = sprite
  34.     self.location = location
  35.     self.color = pbColor(color)
  36.     self.time = time
  37.     self.completed = completed
  38.     self.progress = progress
  39.   end
  40. end
  41.  
  42. def pbColor(color)
  43.   # Mix your own colors: http://www.rapidtables.com/web/color/RGB_Color.htm
  44.   return Color.new(0,0,0)         if color == :BLACK
  45.   return Color.new(255,115,115)   if color == :LIGHTRED
  46.   return Color.new(245,11,11)     if color == :RED
  47.   return Color.new(164,3,3)       if color == :DARKRED
  48.   return Color.new(47,46,46)      if color == :DARKGREY
  49.   return Color.new(100,92,92)     if color == :LIGHTGREY
  50.   return Color.new(226,104,250)   if color == :PINK
  51.   return Color.new(243,154,154)   if color == :PINKTWO
  52.   return Color.new(255,160,50)    if color == :GOLD
  53.   return Color.new(255,186,107)   if color == :LIGHTORANGE
  54.   return Color.new(95,54,6)       if color == :BROWN
  55.   return Color.new(122,76,24)     if color == :LIGHTBROWN
  56.   return Color.new(255,246,152)   if color == :LIGHTYELLOW
  57.   return Color.new(242,222,42)    if color == :YELLOW
  58.   return Color.new(80,111,6)      if color == :DARKGREEN
  59.   return Color.new(154,216,8)     if color == :GREEN
  60.   return Color.new(197,252,70)    if color == :LIGHTGREEN
  61.   return Color.new(74,146,91)     if color == :FADEDGREEN
  62.   return Color.new(6,128,92)      if color == :DARKLIGHTBLUE
  63.   return Color.new(18,235,170)    if color == :LIGHTBLUE
  64.   return Color.new(139,247,215)   if color == :SUPERLIGHTBLUE
  65.   return Color.new(35,203,255)    if color == :BLUE
  66.   return Color.new(3,44,114)      if color == :DARKBLUE
  67.   return Color.new(7,3,114)       if color == :SUPERDARKBLUE
  68.   return Color.new(63,6,121)      if color == :DARKPURPLE
  69.   return Color.new(113,16,209)    if color == :PURPLE
  70.   return Color.new(219,183,37)    if color == :ORANGE
  71.   return Color.new(255,255,255)
  72. end
  73.  
  74. QUESTS = [
  75. # Make sure you take into account all the information given at the top of this script.
  76. # You don't have to give the Quest a color - :SUPERLIGHTBLUE in this example. It will default to White.
  77.    Quest.new(0, "Sprich mit Daisy!", "Sprich mit Daisy.", "dummyNPC", "NPC 06", "Lappet Town", :SUPERLIGHTBLUE, Time.now, false, "nicht angesprochen."),
  78. ]
  79.  
  80. class PokeBattle_Trainer
  81.   attr_accessor :quests
  82. end
  83.  
  84. def pbCompletedQuest?(id)
  85.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  86.   for i in 0...$Trainer.quests.size
  87.     return true if $Trainer.quests[i].completed && $Trainer.quests[i].id == id
  88.   end
  89.   return false
  90. end
  91.  
  92. def pbQuestlog
  93.   Questlog.new
  94. end
  95.  
  96. def pbAddQuest(id)
  97.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  98.   for q in QUESTS
  99.     $Trainer.quests << q if q.id == id
  100.   end
  101. end
  102.  
  103. def pbDeleteQuest(id)
  104.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  105.   for q in $Trainer.quests
  106.     $Trainer.quests.delete(q) if q.id == id
  107.   end
  108. end
  109.  
  110. def pbSetQuest(id, completed)
  111.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  112.   for q in $Trainer.quests
  113.     q.completed = completed if q.id == id
  114.   end
  115. end
  116.  
  117. def pbSetQuestName(id, name)
  118.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  119.   for q in $Trainer.quests
  120.     q.name = name if q.id == id
  121.   end
  122. end
  123.  
  124. def pbSetQuestDesc(id, desc)
  125.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  126.   for q in $Trainer.quests
  127.     q.desc = desc if q.id == id
  128.   end
  129. end
  130.  
  131. def pbSetQuestNPC(id, npc)
  132.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  133.   for q in $Trainer.quests
  134.     q.npc = npc if q.id == id
  135.   end
  136. end
  137.  
  138. def pbSetQuestNPCSprite(id, sprite)
  139.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  140.   for q in $Trainer.quests
  141.     q.sprite = sprite if q.id == id
  142.   end
  143. end
  144.  
  145. def pbSetQuestLocation(id, location)
  146.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  147.   for q in $Trainer.quests
  148.     q.location = location if q.id == id
  149.   end
  150. end
  151.  
  152. def pbSetQuestColor(id, color)
  153.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  154.   for q in $Trainer.quests
  155.     q.color = pbColor(color) if q.id == id
  156.   end
  157. end
  158.  
  159. def pbSetQuestProgress(id, progress)
  160.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  161.   for q in $Trainer.quests
  162.     q.progress = progress if q.id == id
  163.   end
  164. end
  165.  
  166. def pbSetQuestExperience(id, experience)
  167.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  168.   for q in $Trainer.quests
  169.     q.experience = experience if q.id == id
  170.   end
  171. end
  172. =begin
  173. def pbIsQuestNPC?(id, npc)
  174.   $Trainer.quests = [] if $Trainer.quests.class == NilClass
  175.    for q in $Trainer.quests
  176.     return true if q.completed && q.id == id && q.npc == npc
  177.   end
  178.   return false
  179. end
  180. =end
  181.  
  182. def pbGainQuestExperience(id,showmessages=true)
  183.     $Trainer.quests = [] if $Trainer.quests.class == NilClass
  184.     for q in $Trainer.quests
  185.       if q.id == id
  186.           $Trainer.party = [] if $Trainer.party.class == NilClass
  187.           for i in 0...$Trainer.party.size
  188.             thispoke=$Trainer.party[i]
  189.             if pbCompletedQuest?(id) && !thispoke.isEgg?
  190.              
  191.               exp=q.experience
  192.              
  193.               oldlevel = thispoke.level
  194.              
  195.               growthrate=thispoke.growthrate
  196.               newexp=PBExperience.pbAddExperience(thispoke.exp,exp,growthrate)
  197.               exp=newexp-thispoke.exp
  198.               if exp>0
  199.                 newlevel=PBExperience.pbGetLevelFromExperience(newexp,growthrate)
  200.                 tempexp=0
  201.                 curlevel=thispoke.level
  202.                 if newlevel<curlevel
  203.                   return
  204.                end
  205.                tempexp1=thispoke.exp
  206.                tempexp2=0  
  207.                loop do
  208.                   startexp=PBExperience.pbGetStartExperience(curlevel,growthrate)
  209.                   endexp=PBExperience.pbGetStartExperience(curlevel+1,growthrate)
  210.                   tempexp2=(endexp<newexp) ? endexp : newexp
  211.                   thispoke.exp=tempexp2
  212.                   tempexp1=tempexp2
  213.                   curlevel+=1
  214.                   if curlevel>newlevel
  215.                     thispoke.calcStats
  216.                     break
  217.                   end
  218.                   oldtotalhp=thispoke.totalhp
  219.                   oldattack=thispoke.attack
  220.                   olddefense=thispoke.defense
  221.                   oldspeed=thispoke.speed
  222.                   oldspatk=thispoke.spatk
  223.                   oldspdef=thispoke.spdef
  224.                   thispoke.calcStats
  225.                   Kernel.pbMessage(_INTL("{1} ist auf Level {2} gestiegen!",thispoke.name,curlevel))
  226.                   movelist=thispoke.getMoveList
  227.                   oldlevel+=1
  228.                   for k in movelist #attacken durchlaufen
  229.                     if k[0]==curlevel   # wenn eines der gestiegenen Level eine neue Attacke enthält
  230.                       moveid=k[1]
  231.                       movename=PBMoves.getName(moveid)
  232.                       allfourmoves = false
  233.                       # bereits gelernte Attacken durchlaufen
  234.                       for j in 0...4
  235.                         if thispoke.moves[j].id==moveid
  236.                           allfourmoves = true
  237.                         end
  238.                         #wenn nicht bereits 4 Attacken, dann lernen
  239.                         if thispoke.moves[j].id==0
  240.                           thispoke.moves[j]=PBMove.new(moveid)
  241.                           Kernel.pbMessage(_INTL("#{thispoke.name} hat #{movename} gelernt."))
  242.                           allfourmoves = true
  243.                         end
  244.                       end
  245.                       #wenn bereits 4 Attacken bekannt
  246.                       if !allfourmoves
  247.                         loop do
  248.                           Kernel.pbMessage(_INTL("#{thispoke.name} versucht #{movename} zu lernen."))
  249.                           Kernel.pbMessage(_INTL("#{thispoke.name} kann nicht mehr als 4 Attacken lernen."))
  250.                           if Kernel.pbConfirmMessage(_INTL("Eine vorhandene Attacke ersetzen?"))
  251.                             Kernel.pbMessage(_INTL("Welche Attacke soll vergessen werden?"))
  252.                             forgetmove=-1
  253.                             pbFadeOutIn(99999){
  254.                                scene=PokemonSummaryScene.new
  255.                                screen=PokemonSummary.new(scene)
  256.                                forgetmove=screen.pbStartForgetScreen([thispoke],0,moveid)
  257.                             }
  258.                             if forgetmove>=0
  259.                               oldmovename=PBMoves.getName(thispoke.moves[forgetmove].id)
  260.                               thispoke.moves[forgetmove]=PBMove.new(moveid) # Replaces current/total PP
  261.                               Kernel.pbMessage(_INTL("1,  2, und... ... ..."))
  262.                               Kernel.pbMessage(_INTL("Schwupp!"))
  263.                               Kernel.pbMessage(_INTL("#{thispoke.name} hat #{oldmovename} vergessen."))
  264.                               Kernel.pbMessage(_INTL("Und..."))
  265.                               Kernel.pbMessage(_INTL("#{thispoke.name} hat #{movename} gelernt!"))
  266.                               break
  267.                             elsif Kernel.pbConfirmMessage(_INTL("Soll #{thispoke.name} #{movename} nicht lernen?"))
  268.                               Kernel.pbMessage(_INTL("#{thispoke.name} hat #{movename} nicht gelernt."))
  269.                               break
  270.                             end
  271.                           elsif Kernel.pbConfirmMessage(_INTL("Soll #{thispoke.name} #{movename} nicht lernen?"))
  272.                               Kernel.pbMessage(_INTL("#{thispoke.name} hat #{movename} nicht gelernt."))
  273.                               break
  274.                           end
  275.                         end
  276.                       end
  277.                     end
  278.                   end
  279.                  
  280.                   newspecies=Kernel.pbCheckEvolution(thispoke)
  281.                   if newspecies>0
  282.                     # Start evolution scene
  283.                     evo=PokemonEvolutionScene.new
  284.                     evo.pbStartScreen(thispoke,newspecies)
  285.                     evo.pbEvolution
  286.                     evo.pbEndScreen
  287.                   end
  288.                   thispoke.calcStats
  289.                 end
  290.               end
  291.             end
  292.           end
  293.         end
  294.       end
  295.     end
  296.  
  297.  
  298. class QuestSprite < IconSprite
  299.   attr_accessor :quest
  300. end
  301.  
  302. class Questlog
  303.   def initialize
  304.     $Trainer.quests = [] if $Trainer.quests.class == NilClass
  305.     @page = 0
  306.     @sel_one = 0
  307.     @sel_two = 0
  308.     @scene = 0
  309.     @mode = 0
  310.     @box = 0
  311.     @completed = []
  312.     @ongoing = []
  313.     for q in $Trainer.quests
  314.       @ongoing << q if !q.completed
  315.       @completed << q if q.completed
  316.     end
  317.     @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
  318.     @viewport.z = 99999
  319.     @sprites = {}
  320.     @sprites["main"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
  321.     @sprites["main"].z = 1
  322.     @sprites["main"].opacity = 0
  323.     @main = @sprites["main"].bitmap
  324.     pbSetSystemFont(@main)
  325.     pbDrawOutlineText(@main,0,2-178,512,384,"Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  326.    
  327.     @sprites["bg0"] = IconSprite.new(0, 0, @viewport)
  328.     @sprites["bg0"].setBitmap("Graphics/Pictures/PauseMenu/bg2")
  329.     @sprites["bg0"].opacity = 0
  330.    
  331.     for i in 0..1
  332.       @sprites["btn#{i}"] = IconSprite.new(0, 0, @viewport)
  333.       @sprites["btn#{i}"].setBitmap("Graphics/Pictures/questBtn")
  334.       @sprites["btn#{i}"].x = 84
  335.       @sprites["btn#{i}"].y = 130 + 56 * i
  336.       @sprites["btn#{i}"].src_rect.height = (@sprites["btn#{i}"].bitmap.height / 2).round
  337.       @sprites["btn#{i}"].src_rect.y = i == 0 ? (@sprites["btn#{i}"].bitmap.height / 2).round : 0
  338.       @sprites["btn#{i}"].opacity = 0
  339.     end
  340.     pbDrawOutlineText(@main,0,142-180,512,384,"Offen: " + @ongoing.size.to_s,Color.new(255,255,255),Color.new(0,0,0),1)
  341.     pbDrawOutlineText(@main,0,198-180,512,384,"Abgeschlossen: " + @completed.size.to_s,Color.new(255,255,255),Color.new(0,0,0),1)
  342.  
  343.     12.times do |i|
  344.       Graphics.update
  345.       @sprites["bg0"].opacity += 32 if i < 8
  346.       @sprites["btn0"].opacity += 32 if i > 3
  347.       @sprites["btn1"].opacity += 32 if i > 3
  348.       @sprites["main"].opacity += 64 if i > 7
  349.     end
  350.     pbUpdate
  351.   end
  352.  
  353.   def pbUpdate
  354.     @frame = 0
  355.     loop do
  356.       @frame += 1
  357.       Graphics.update
  358.       Input.update
  359.       if @scene == 0
  360.         break if Input.trigger?(Input::B)
  361.         pbList(@sel_one) if Input.trigger?(Input::C)
  362.         pbSwitch(:DOWN) if Input.trigger?(Input::DOWN)
  363.         pbSwitch(:UP) if Input.trigger?(Input::UP)
  364.       end
  365.       if @scene == 1
  366.         pbMain if Input.trigger?(Input::B)
  367.         pbMove(:DOWN) if Input.trigger?(Input::DOWN)
  368.         pbMove(:UP) if Input.trigger?(Input::UP)
  369.         pbLoad(0) if Input.trigger?(Input::C)
  370.         pbArrows
  371.       end
  372.       if @scene == 2
  373.         pbList(@sel_one) if Input.trigger?(Input::B)
  374.         pbChar if @frame == 6 || @frame == 12 || @frame == 18
  375.         pbLoad(1) if Input.trigger?(Input::RIGHT) && @page == 0
  376.         pbLoad(2) if Input.trigger?(Input::LEFT) && @page == 1
  377.       end
  378.       @frame = 0 if @frame == 18
  379.     end
  380.     pbEnd
  381.     pbDisposeSpriteHash(@sprites)
  382.     @viewport.dispose
  383.     pbWait(1)
  384.   end
  385.  
  386.   def pbArrows
  387.     if @frame == 2 || @frame == 4 || @frame == 14 || @frame == 16
  388.       @sprites["up"].y -= 1 rescue nil
  389.       @sprites["down"].y -= 1 rescue nil
  390.     elsif @frame == 6 || @frame == 8 || @frame == 10 || @frame == 12
  391.       @sprites["up"].y += 1 rescue nil
  392.       @sprites["down"].y += 1 rescue nil
  393.     end
  394.   end
  395.  
  396.   def pbLoad(page)
  397.     return if @mode == 0 ? @ongoing.size == 0 : @completed.size == 0
  398.     quest = @mode == 0 ? @ongoing[@sel_two] : @completed[@sel_two]
  399.     pbWait(1)
  400.     if page == 0
  401.       @scene = 2
  402.       @sprites["bg1"] = IconSprite.new(0, 0, @viewport)
  403.       @sprites["bg1"].setBitmap("Graphics/Pictures/questPage1")
  404.       @sprites["bg1"].opacity = 0
  405.       @sprites["pager"] = IconSprite.new(0, 0, @viewport)
  406.       @sprites["pager"].setBitmap("Graphics/Pictures/questPager")
  407.       @sprites["pager"].x = 442
  408.       @sprites["pager"].y = 3
  409.       @sprites["pager"].z = 1
  410.       @sprites["pager"].opacity = 0
  411.       8.times do
  412.         Graphics.update
  413.         @sprites["up"].opacity -= 32
  414.         @sprites["down"].opacity -= 32
  415.         @sprites["main"].opacity -= 32
  416.         @sprites["bg1"].opacity += 32
  417.         @sprites["pager"].opacity += 32
  418.         @sprites["char"].opacity -= 32 rescue nil
  419.         for i in 0...@ongoing.size
  420.           break if i > 5
  421.           @sprites["ongoing#{i}"].opacity -= 32 rescue nil
  422.         end
  423.         for i in 0...@completed.size
  424.           break if i > 5
  425.           @sprites["completed#{i}"].opacity -= 32 rescue nil
  426.         end
  427.       end
  428.       @sprites["up"].dispose
  429.       @sprites["down"].dispose
  430.       @sprites["char"] = IconSprite.new(0, 0, @viewport)
  431.       @sprites["char"].setBitmap("Graphics/Characters/#{quest.sprite}")
  432.       @sprites["char"].x = 62
  433.       @sprites["char"].y = 130
  434.       @sprites["char"].src_rect.height = (@sprites["char"].bitmap.height / 4).round
  435.       @sprites["char"].src_rect.width = (@sprites["char"].bitmap.width / 4).round
  436.       @sprites["char"].opacity = 0
  437.       @main.clear
  438.       @text.clear rescue nil
  439.       @text2.clear rescue nil
  440.       drawTextExMulti(@main,188,54,318,8,quest.desc,Color.new(255,255,255),Color.new(0,0,0))
  441.       pbDrawOutlineText(@main,188,162,512,384,"von " + quest.npc,Color.new(255,172,115),Color.new(0,0,0))
  442.       pbDrawOutlineText(@main,10,-178,512,384,quest.name,quest.color,Color.new(0,0,0))
  443.       if !quest.completed
  444.         pbDrawOutlineText(@main,8,136,512,384,"offen",pbColor(:LIGHTRED),Color.new(0,0,0))
  445.       else
  446.         pbDrawOutlineText(@main,8,136,512,384,"abgeschlossen",pbColor(:LIGHTBLUE),Color.new(0,0,0))
  447.       end
  448.       10.times do |i|
  449.         Graphics.update
  450.         @sprites["main"].opacity += 32
  451.         @sprites["char"].opacity += 32 if i > 1
  452.       end
  453.     elsif page == 1
  454.       @page = 1
  455.       @sprites["bg2"] = IconSprite.new(0, 0, @viewport)
  456.       @sprites["bg2"].setBitmap("Graphics/Pictures/questPage1")
  457.       @sprites["bg2"].x = 512
  458.       @sprites["pager2"] = IconSprite.new(0, 0, @viewport)
  459.       @sprites["pager2"].setBitmap("Graphics/Pictures/questPager")
  460.       @sprites["pager2"].x = 474 + 512
  461.       @sprites["pager2"].y = 3
  462.       @sprites["pager2"].z = 1
  463.       @sprites["char2"].dispose rescue nil
  464.       @sprites["char2"] = IconSprite.new(0, 0, @viewport)
  465.       @sprites["char2"].setBitmap("Graphics/Characters/#{quest.sprite}")
  466.       @sprites["char2"].x = 62 + 512
  467.       @sprites["char2"].y = 130
  468.       @sprites["char2"].z = 1
  469.       @sprites["char2"].src_rect.height = (@sprites["char2"].bitmap.height / 4).round
  470.       @sprites["char2"].src_rect.width = (@sprites["char2"].bitmap.width / 4).round
  471.       @sprites["text2"] = IconSprite.new(@viewport)
  472.       @sprites["text2"].bitmap = Bitmap.new(Graphics.width,Graphics.height)
  473.       @text2 = @sprites["text2"].bitmap
  474.       pbSetSystemFont(@text2)
  475.       pbDrawOutlineText(@text2,188,-122,512,384,"Hier erhalten:",Color.new(255,255,255),Color.new(0,0,0))
  476.       pbDrawOutlineText(@text2,188,-94,512,384,quest.location,Color.new(255,172,115),Color.new(0,0,0))
  477.       pbDrawOutlineText(@text2,188,-62,512,384,"Erhalten um:",Color.new(255,255,255),Color.new(0,0,0))
  478.       time = quest.time.to_s
  479.       txt = time.split(' ')[1] + " " + time.split(' ')[2] + ", " + time.split(' ')[3].split(':')[0] + ":" + time.split(' ')[3].split(':')[1] rescue "?????"
  480.       pbDrawOutlineText(@text2,188,-36,512,384,txt,Color.new(255,172,115),Color.new(0,0,0))
  481.       pbDrawOutlineText(@text2,188,-4,512,384,"Fortschritt:",Color.new(255,255,255),Color.new(0,0,0))
  482.       pbDrawOutlineText(@text2,188,22,512,384,quest.progress,Color.new(255,172,115),Color.new(0,0,0))
  483.       pbDrawOutlineText(@text2,188,54,512,384,"Quest erhalten von:",Color.new(255,255,255),Color.new(0,0,0))
  484.       pbDrawOutlineText(@text2,188,80,512,384,quest.npc,Color.new(255,172,115),Color.new(0,0,0))
  485.       pbDrawOutlineText(@text2,188,162,512,384,"von " + quest.npc,Color.new(255,172,115),Color.new(0,0,0))
  486.       pbDrawOutlineText(@text2,10,-178,512,384,quest.name,quest.color,Color.new(0,0,0))
  487.       if !quest.completed
  488.         pbDrawOutlineText(@text2,8,136,512,384,"offen",pbColor(:LIGHTRED),Color.new(0,0,0))
  489.       else
  490.         pbDrawOutlineText(@text2,8,136,512,384,"abgeschlossen",pbColor(:LIGHTBLUE),Color.new(0,0,0))
  491.       end
  492.       @sprites["text2"].x = 512
  493.       16.times do
  494.         Graphics.update
  495.         @sprites["bg1"].x -= (@sprites["bg1"].x + 526) * 0.2
  496.         @sprites["pager"].x -= (@sprites["pager"].x + 526) * 0.2 rescue nil
  497.         @sprites["char"].x -= (@sprites["char"].x + 526) * 0.2 rescue nil
  498.         @sprites["main"].x -= (@sprites["main"].x + 526) * 0.2
  499.         @sprites["text"].x -= (@sprites["text"].x + 526) * 0.2 rescue nil
  500.         @sprites["bg2"].x -= (@sprites["bg2"].x + 14) * 0.2
  501.         @sprites["pager2"].x -= (@sprites["pager2"].x - 459) * 0.2
  502.         @sprites["text2"].x -= (@sprites["text2"].x + 14) * 0.2
  503.         @sprites["char2"].x -= (@sprites["char2"].x - 47) * 0.2
  504.       end
  505.       @sprites["main"].x = 0
  506.       @main.clear
  507.     else
  508.       @page = 0
  509.       @sprites["bg1"] = IconSprite.new(0, 0, @viewport)
  510.       @sprites["bg1"].setBitmap("Graphics/Pictures/questPage1")
  511.       @sprites["bg1"].x = -512
  512.       @sprites["pager"] = IconSprite.new(0, 0, @viewport)
  513.       @sprites["pager"].setBitmap("Graphics/Pictures/questPager")
  514.       @sprites["pager"].x = 442 - 512
  515.       @sprites["pager"].y = 3
  516.       @sprites["pager"].z = 1
  517.       @sprites["text"] = IconSprite.new(@viewport)
  518.       @sprites["text"].bitmap = Bitmap.new(Graphics.width,Graphics.height)
  519.       @text = @sprites["text"].bitmap
  520.       pbSetSystemFont(@text)
  521.       @sprites["char"].dispose rescue nil
  522.       @sprites["char"] = IconSprite.new(0, 0, @viewport)
  523.       @sprites["char"].setBitmap("Graphics/Characters/#{quest.sprite}")
  524.       @sprites["char"].x = 62 - 512
  525.       @sprites["char"].y = 130
  526.       @sprites["char"].z = 1
  527.       @sprites["char"].src_rect.height = (@sprites["char"].bitmap.height / 4).round
  528.       @sprites["char"].src_rect.width = (@sprites["char"].bitmap.width / 4).round
  529.       drawTextExMulti(@text,188,54,318,8,quest.desc,Color.new(255,255,255),Color.new(0,0,0))
  530.       pbDrawOutlineText(@text,188,162,512,384,"von " + quest.npc,Color.new(255,172,115),Color.new(0,0,0))
  531.       pbDrawOutlineText(@text,10,-178,512,384,quest.name,quest.color,Color.new(0,0,0))
  532.       if !quest.completed
  533.         pbDrawOutlineText(@text,8,136,512,384,"offen",pbColor(:LIGHTRED),Color.new(0,0,0))
  534.       else
  535.         pbDrawOutlineText(@text,8,136,512,384,"abgeschlossen",pbColor(:LIGHTBLUE),Color.new(0,0,0))
  536.       end
  537.       @sprites["text"].x = -512
  538.       16.times do
  539.         Graphics.update
  540.         @sprites["bg1"].x -= (@sprites["bg1"].x - 14) * 0.2
  541.         @sprites["pager"].x -= (@sprites["pager"].x - 457) * 0.2
  542.         @sprites["bg2"].x -= (@sprites["bg2"].x - 526) * 0.2
  543.         @sprites["pager2"].x -= (@sprites["pager2"].x - 526) * 0.2
  544.         @sprites["char2"].x -= (@sprites["char2"].x - 526) * 0.2
  545.         @sprites["text2"].x -= (@sprites["text2"].x - 526) * 0.2
  546.         @sprites["text"].x -= (@sprites["text"].x - 15) * 0.2
  547.         @sprites["char"].x -= (@sprites["char"].x - 76) * 0.2
  548.       end
  549.     end
  550.   end
  551.  
  552.   def pbChar
  553.     @sprites["char"].src_rect.x += (@sprites["char"].bitmap.width / 4).round rescue nil
  554.     @sprites["char"].src_rect.x = 0 if @sprites["char"].src_rect.x >= @sprites["char"].bitmap.width rescue nil
  555.     @sprites["char2"].src_rect.x += (@sprites["char2"].bitmap.width / 4).round rescue nil
  556.     @sprites["char2"].src_rect.x = 0 if @sprites["char2"].src_rect.x >= @sprites["char2"].bitmap.width rescue nil
  557.   end
  558.  
  559.   def pbMain
  560.     pbWait(1)
  561.     12.times do |i|
  562.       Graphics.update
  563.       @sprites["main"].opacity -= 32 rescue nil
  564.       @sprites["bg0"].opacity += 32 if @sprites["bg0"].opacity < 255
  565.       @sprites["bg1"].opacity -= 32 rescue nil if i > 3
  566.       @sprites["bg2"].opacity -= 32 rescue nil if i > 3
  567.       @sprites["pager"].opacity -= 32 rescue nil if i > 3
  568.       @sprites["pager2"].opacity -= 32 rescue nil if i > 3
  569.       @sprites["char"].opacity -= 32 rescue nil
  570.       @sprites["char2"].opacity -= 32 rescue nil
  571.       @sprites["text"].opacity -= 32 rescue nil
  572.       @sprites["up"].opacity -= 32
  573.       @sprites["down"].opacity -= 32
  574.       for j in 0...@ongoing.size
  575.         @sprites["ongoing#{j}"].opacity -= 32 rescue nil
  576.       end
  577.       for j in 0...@completed.size
  578.         @sprites["completed#{j}"].opacity -= 32 rescue nil
  579.       end
  580.     end
  581.     @sprites["up"].dispose
  582.     @sprites["down"].dispose
  583.     @main.clear
  584.     @text.clear rescue nil
  585.     @text2.clear rescue nil
  586.     @sel_two = 0
  587.     @scene = 0
  588.     pbDrawOutlineText(@main,0,2-178,512,384,"Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  589.     pbDrawOutlineText(@main,0,142-180,512,384,"Offen: " + @ongoing.size.to_s,Color.new(255,255,255),Color.new(0,0,0),1)
  590.     pbDrawOutlineText(@main,0,198-180,512,384,"Abgeschlossen: " + @completed.size.to_s,Color.new(255,255,255),Color.new(0,0,0),1)
  591.     12.times do |i|
  592.       Graphics.update
  593.       @sprites["bg0"].opacity += 32 if i < 8
  594.       @sprites["btn0"].opacity += 32 if i > 3
  595.       @sprites["btn1"].opacity += 32 if i > 3
  596.       @sprites["main"].opacity += 48 if i > 5
  597.     end
  598.   end
  599.  
  600.   def pbSwitch(dir)
  601.     if dir == :DOWN
  602.       return if @sel_one == 1
  603.       @sprites["btn#{@sel_one}"].src_rect.y = 0
  604.       @sel_one += 1
  605.       @sprites["btn#{@sel_one}"].src_rect.y = (@sprites["btn#{@sel_one}"].bitmap.height / 2).round
  606.     else
  607.       return if @sel_one == 0
  608.       @sprites["btn#{@sel_one}"].src_rect.y = 0
  609.       @sel_one -= 1
  610.       @sprites["btn#{@sel_one}"].src_rect.y = (@sprites["btn#{@sel_one}"].bitmap.height / 2).round
  611.     end
  612.   end
  613.  
  614.   def pbMove(dir)
  615.     pbWait(1)
  616.     if dir == :DOWN
  617.       return if @sel_two == @ongoing.size - 1 && @mode == 0
  618.       return if @sel_two == @completed.size - 1 && @mode == 1
  619.       return if @ongoing.size == 0 && @mode == 0
  620.       return if @completed.size == 0 && @mode == 1
  621.       @sprites["ongoing#{@box}"].src_rect.y = 0 if @mode == 0
  622.       @sprites["completed#{@box}"].src_rect.y = 0 if @mode == 1
  623.       @sel_two += 1
  624.       @box += 1
  625.       @box = 5 if @box > 5
  626.       @sprites["ongoing#{@box}"].src_rect.y = (@sprites["ongoing#{@box}"].bitmap.height / 2).round if @mode == 0
  627.       @sprites["completed#{@box}"].src_rect.y = (@sprites["completed#{@box}"].bitmap.height / 2).round if @mode == 1
  628.       if @box == 5
  629.         @main.clear
  630.         if @mode == 0
  631.           for i in 0...@ongoing.size
  632.             break if i > 5
  633.             j = (i==0 ? -5 : (i==1 ? -4 : (i==2 ? -3 : (i==3 ? -2 : (i==4 ? -1 : 0)))))
  634.             @sprites["ongoing#{i}"].quest = @ongoing[@sel_two+j]
  635.             pbDrawOutlineText(@main,11,-124+52*i,512,384,@ongoing[@sel_two+j].name,@ongoing[@sel_two+j].color,Color.new(0,0,0),1)
  636.           end
  637.           if @sprites["ongoing0"].quest != @ongoing[0]
  638.             @sprites["up"].visible = true
  639.           else
  640.             @sprites["up"].visible = false
  641.           end
  642.           if @sprites["ongoing5"].quest != @ongoing[@ongoing.size - 1]
  643.             @sprites["down"].visible = true
  644.           else
  645.             @sprites["down"].visible = false
  646.           end
  647.           pbDrawOutlineText(@main,0,2-178,512,384,"Ongoing Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  648.         else
  649.           for i in 0...@completed.size
  650.             break if i > 5
  651.             j = (i==0 ? -5 : (i==1 ? -4 : (i==2 ? -3 : (i==3 ? -2 : (i==4 ? -1 : 0)))))
  652.             @sprites["completed#{i}"].quest = @completed[@sel_two+j]
  653.             pbDrawOutlineText(@main,11,-124+52*i,512,384,@completed[@sel_two+j].name,@completed[@sel_two+j].color,Color.new(0,0,0),1)
  654.           end
  655.           if @sprites["completed0"].quest != @completed[0]
  656.             @sprites["up"].visible = true
  657.           else
  658.             @sprites["up"].visible = false
  659.           end
  660.           if @sprites["completed5"].quest != @completed[@completed.size - 1]
  661.             @sprites["down"].visible = true
  662.           else
  663.             @sprites["down"].visible = false
  664.           end
  665.           pbDrawOutlineText(@main,0,2-178,512,384,"Abgeschlossene Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  666.         end
  667.       end
  668.     else
  669.       return if @sel_two == 0
  670.       return if @ongoing.size == 0 && @mode == 0
  671.       return if @completed.size == 0 && @mode == 1
  672.       @sprites["ongoing#{@box}"].src_rect.y = 0 if @mode == 0
  673.       @sprites["completed#{@box}"].src_rect.y = 0 if @mode == 1
  674.       @sel_two -= 1
  675.       @box -= 1
  676.       @box = 0 if @box < 0
  677.       @sprites["ongoing#{@box}"].src_rect.y = (@sprites["ongoing#{@box}"].bitmap.height / 2).round if @mode == 0
  678.       @sprites["completed#{@box}"].src_rect.y = (@sprites["completed#{@box}"].bitmap.height / 2).round if @mode == 1
  679.       if @box == 0
  680.         @main.clear
  681.         if @mode == 0
  682.           for i in 0...@ongoing.size
  683.             break if i > 5
  684.             @sprites["ongoing#{i}"].quest = @ongoing[@sel_two+i]
  685.             pbDrawOutlineText(@main,11,-124+52*i,512,384,@ongoing[@sel_two+i].name,@ongoing[@sel_two+i].color,Color.new(0,0,0),1)
  686.           end
  687.           if @sprites["ongoing0"].quest != @ongoing[0]
  688.             @sprites["up"].visible = true
  689.           else
  690.             @sprites["up"].visible = false
  691.           end
  692.           if @ongoing.size > 5
  693.             if @sprites["ongoing5"].quest != @ongoing[@ongoing.size - 1]
  694.               @sprites["down"].visible = true
  695.             else
  696.               @sprites["down"].visible = false
  697.             end
  698.           end
  699.           pbDrawOutlineText(@main,0,2-178,512,384,"Offene Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  700.         else
  701.           for i in 0...@completed.size
  702.             break if i > 5
  703.             @sprites["completed#{i}"].quest = @completed[@sel_two+i]
  704.             pbDrawOutlineText(@main,11,-124+52*i,512,384,@completed[@sel_two+i].name,@completed[@sel_two+i].color,Color.new(0,0,0),1)
  705.           end
  706.           if @sprites["completed0"].quest != @completed[0]
  707.             @sprites["up"].visible = true
  708.           else
  709.             @sprites["up"].visible = false
  710.           end
  711.           if @completed.size > 5
  712.             if @sprites["completed5"].quest != @completed[@completed.size - 1]
  713.               @sprites["down"].visible = true
  714.             else
  715.               @sprites["down"].visible = false
  716.             end
  717.           end
  718.           pbDrawOutlineText(@main,0,2-178,512,384,"Abgeschlossene Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  719.         end
  720.       end
  721.     end
  722.   end
  723.  
  724.   def pbList(id)
  725.     pbWait(1)
  726.     @sel_two = 0
  727.     @page = 0
  728.     @scene = 1
  729.     @mode = id
  730.     @box = 0
  731.     @sprites["up"] = IconSprite.new(0, 0, @viewport)
  732.     @sprites["up"].setBitmap("Graphics/Pictures/questArrow")
  733.     @sprites["up"].zoom_x = 1.25
  734.     @sprites["up"].zoom_y = 1.25
  735.     @sprites["up"].x = Graphics.width / 2
  736.     @sprites["up"].y = 36
  737.     @sprites["up"].z = 2
  738.     @sprites["up"].visible = false
  739.     @sprites["down"] = IconSprite.new(0, 0, @viewport)
  740.     @sprites["down"].setBitmap("Graphics/Pictures/questArrow")
  741.     @sprites["down"].zoom_x = 1.25
  742.     @sprites["down"].zoom_y = 1.25
  743.     @sprites["down"].x = Graphics.width / 2 + 21
  744.     @sprites["down"].y = 360
  745.     @sprites["down"].z = 2
  746.     @sprites["down"].angle = 180
  747.     @sprites["down"].visible = @mode == 0 ? @ongoing.size > 6 : @completed.size > 6
  748.     @sprites["down"].opacity = 0
  749.     10.times do |i|
  750.       Graphics.update
  751.       @sprites["btn0"].opacity -= 32 if i > 1
  752.       @sprites["btn1"].opacity -= 32 if i > 1
  753.       @sprites["main"].opacity -= 32 if i > 1
  754.       @sprites["bg1"].opacity -= 32 rescue nil if i > 1
  755.       @sprites["bg2"].opacity -= 32 rescue nil if i > 1
  756.       @sprites["pager"].opacity -= 32 rescue nil if i > 1
  757.       @sprites["pager2"].opacity -= 32 rescue nil if i > 1
  758.       @sprites["char"].opacity -= 32 rescue nil
  759.       @sprites["char2"].opacity -= 32 rescue nil
  760.       @sprites["text"].opacity -= 32 rescue nil if i > 1
  761.       @sprites["text2"].opacity -= 32 rescue nil if i > 1
  762.     end
  763.     @main.clear
  764.     @text.clear rescue nil
  765.     @text2.clear rescue nil
  766.     if id == 0
  767.       for i in 0...@ongoing.size
  768.         break if i > 5
  769.         @sprites["ongoing#{i}"] = QuestSprite.new(0, 0, @viewport)
  770.         @sprites["ongoing#{i}"].setBitmap("Graphics/Pictures/questBtn")
  771.         @sprites["ongoing#{i}"].quest = @ongoing[i]
  772.         @sprites["ongoing#{i}"].x = 94
  773.         @sprites["ongoing#{i}"].y = 42 + 52 * i
  774.         @sprites["ongoing#{i}"].src_rect.height = (@sprites["ongoing#{i}"].bitmap.height / 2).round
  775.         @sprites["ongoing#{i}"].src_rect.y = (@sprites["ongoing#{i}"].bitmap.height / 2).round if i == @sel_two
  776.         @sprites["ongoing#{i}"].opacity = 0
  777.         pbDrawOutlineText(@main,11,-124+52*i,512,384,@ongoing[i].name,@ongoing[i].color,Color.new(0,0,0),1)
  778.       end
  779.       pbDrawOutlineText(@main,0,0,512,384,"Keine offenen Quests",pbColor(:WHITE),pbColor(:BLACK),1) if @ongoing.size == 0
  780.       pbDrawOutlineText(@main,0,2-178,512,384,"offene Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  781.       12.times do |i|
  782.         Graphics.update
  783.         @sprites["main"].opacity += 32 if i < 8
  784.         for j in 0...@ongoing.size
  785.           break if j > 5
  786.           @sprites["ongoing#{j}"].opacity += 32 if i > 3
  787.         end
  788.       end
  789.     elsif id == 1
  790.       for i in 0...@completed.size
  791.         break if i > 5
  792.         @sprites["completed#{i}"] = QuestSprite.new(0, 0, @viewport)
  793.         @sprites["completed#{i}"].setBitmap("Graphics/Pictures/questBtn")
  794.         @sprites["completed#{i}"].x = 94
  795.         @sprites["completed#{i}"].y = 42 + 52 * i
  796.         @sprites["completed#{i}"].src_rect.height = (@sprites["completed#{i}"].bitmap.height / 2).round
  797.         @sprites["completed#{i}"].src_rect.y = (@sprites["completed#{i}"].bitmap.height / 2).round if i == @sel_two
  798.         @sprites["completed#{i}"].opacity = 0
  799.         pbDrawOutlineText(@main,11,-124+52*i,512,384,@completed[i].name,@completed[i].color,Color.new(0,0,0),1)
  800.       end
  801.       pbDrawOutlineText(@main,0,0,512,384,"Keine abgeschlossenen Quests",pbColor(:WHITE),pbColor(:BLACK),1) if @completed.size == 0
  802.       pbDrawOutlineText(@main,0,2-178,512,384,"abgeschlossene Quests",Color.new(255,255,255),Color.new(0,0,0),1)
  803.       12.times do |i|
  804.         Graphics.update
  805.         @sprites["main"].opacity += 32 if i < 8
  806.         @sprites["down"].opacity += 32 if i > 3
  807.         for j in 0...@completed.size
  808.           break if j > 5
  809.           @sprites["completed#{j}"].opacity += 32 if i > 3
  810.         end
  811.       end
  812.     end
  813.   end
  814.  
  815.   def pbEnd
  816.     12.times do |i|
  817.       Graphics.update
  818.       @sprites["bg0"].opacity -= 32 if i > 3
  819.       @sprites["btn0"].opacity -= 32
  820.       @sprites["btn1"].opacity -= 32
  821.       @sprites["main"].opacity -= 32
  822.       @sprites["char"].opacity -= 40 rescue nil
  823.       @sprites["char2"].opacity -= 40 rescue nil
  824.     end
  825.   end
  826. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement