mcgluszak

Drop Item v2.0

May 14th, 2011
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.08 KB | None | 0 0
  1. #==============================================================================
  2. # DROP ITEM
  3. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  4. # Autor: Andrzej 'mc' Głuszak
  5. # Wersja: 2.0
  6. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  7. # Opis: Skrypt ten pozwala na wyrzucanie niepotrzebnych przedmiotów w Scene_Item
  8. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  9. # Instrukcja: Wybierz klawisz odpowiadający za wyrzucanie przedmiotów.
  10. #             Wypisz numery broni, których nie można wyrzucić.
  11. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  12. # Kompatybilność: Nie testowany z SDK.
  13. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  14. # Licencja: CREATIVE COMMONS Uznanie autorstwa 3.0 Unported (CC BY 3.0)
  15. #           Wolno: kopiować, rozpowszechniać, odtwarzać i wykonywać utwór,
  16. #                  tworzyć utwory zależne
  17. #           Na następujących warunkach: Uznanie autorstwa —
  18. #                   należy wpisać twórcę skryptu (mcgluszak)
  19. #                   do credits (podziękowań).
  20. #-=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=--=-=-=-=-=-=
  21. # Zmiany: v1.0 - wydanie skryptu
  22. #         v1.1 - id przedmiotów, których nie można wyrzucić
  23. #         v2.0 - okienko pozwalające wybrać ilość wyrzucanych przedmiotów
  24. #==============================================================================
  25.  
  26. # KONFIGURACJA
  27. module Gluszak
  28.   module Drop_Item
  29.     Drop_Key = Input::L # Klawisz odpowiadający za wyrzucanie przedmiotów.
  30.                         # (Domyślnie 'L', czyli 'Q' na klawiaturze.)
  31.                        
  32.     Quest_Items = [1]        # Id przedmiotów, których nie można wyrzucić.
  33.     Quest_Weapons = [5]      # Id broni, których nie można wyrzucić.
  34.     Quest_Armors = [12, 13]  # Id zbroi, których nie można wyrzucić.
  35.   end
  36. end
  37. # KONIEC KONFIGURACJI
  38.  
  39. $drop_item = 2.0
  40.  
  41. #==============================================================================
  42. # ** Scene_Item
  43. #==============================================================================
  44.  
  45. class Scene_Item
  46.  
  47.   #--------------------------------------------------------------------------
  48.   # * Uaktualnij scenę
  49.   #--------------------------------------------------------------------------
  50.   alias update_drop_item update
  51.   def update
  52.     update_drop_item
  53.     update_drop
  54.   end
  55.  
  56.   #--------------------------------------------------------------------------
  57.   # * Uaktualnij proces wyrzucania
  58.   #--------------------------------------------------------------------------
  59.   def update_drop
  60.  
  61.     @item = @item_window.item
  62.    
  63.     if Input.trigger?(Gluszak::Drop_Item::Drop_Key) # jeśli został naciśnięty przycisk
  64.       if droppable_item? # jeśli można ten przedmiot wyrzucić
  65.         @drop_window = Window_Drop_Item.new(@item) if !@drop_window# utwórz okno
  66.         @item_window.active = false # wyłącz item_window
  67.       else # jeśli nie można tego przedmiotu wyrzucić
  68.         $game_system.se_play($data_system.cancel_se) # odegraj dźwięk
  69.       end
  70.     end
  71.    
  72.     if Input.trigger? Input::B # jeśli został naciśnięty przycisk
  73.       @item_window.active = true # włącz item_window
  74.       if @drop_window # jeśli okno jest utworzone
  75.         @drop_window.dispose # pozbądź się bitmapy
  76.         @drop_window = nil # pozbądź się okna
  77.       end
  78.     end
  79.    
  80.     if @drop_window # jeśli okno jest utworzone
  81.       @drop_window.update # uaktualnij je
  82.      
  83.       if Input.trigger? Input::C # jeśli został naciśnięty przycisk
  84.         lose_items # pozbądź się przedmiotów
  85.         @drop_window.dispose # pozbądź się bitmapy
  86.         @drop_window = nil # pozbądź się okna
  87.         @item_window.active = true # włącz item_window
  88.       end
  89.     end
  90.   end
  91.  
  92.   #--------------------------------------------------------------------------
  93.   # * Czy dany przedmiot można wyrzucić?
  94.   #--------------------------------------------------------------------------
  95.   def droppable_item?
  96.     if @item.is_a?(RPG::Item) and not Gluszak::Drop_Item::Quest_Items.include? @item.id
  97.       return true
  98.     elsif @item.is_a?(RPG::Weapon) and not Gluszak::Drop_Item::Quest_Weapons.include? @item.id
  99.       return true
  100.     elsif @item.is_a?(RPG::Armor) and not Gluszak::Drop_Item::Quest_Armors.include? @item.id
  101.       # jeśli przedmiot jest danego rodzaju i nie ma go na liście przedmiotów nie-do-wyrzucenia
  102.       return true # zwróć prawdę
  103.     else # jeśli jest na liście przedmiotów nie-do-wyrzucenia
  104.       return false # zwróć fałsz
  105.     end
  106.   end
  107.  
  108.   #--------------------------------------------------------------------------
  109.   # * Wyrzuć przedmioty
  110.   #--------------------------------------------------------------------------
  111.   def lose_items    
  112.     $game_system.se_play($data_system.buzzer_se) # zagraj dźwięk
  113.     if @item.is_a?(RPG::Item) and not Gluszak::Drop_Item::Quest_Items.include? @item.id
  114.       $game_party.lose_item(@item.id, @drop_window.quantity)
  115.     elsif @item.is_a?(RPG::Weapon) and not Gluszak::Drop_Item::Quest_Weapons.include? @item.id
  116.       $game_party.lose_weapon(@item.id, @drop_window.quantity)
  117.     elsif @item.is_a?(RPG::Armor) and not Gluszak::Drop_Item::Quest_Armors.include? @item.id
  118.       $game_party.lose_armor(@item.id, @drop_window.quantity)
  119.       # strać dany przedmiot w ilości pokazywanej w drop_window
  120.     end
  121.     @item_window.refresh # odśwież item_window
  122.   end
  123.  
  124. end
  125.  
  126. #==============================================================================
  127. # ** Window_Drop_Item
  128. #==============================================================================
  129.  
  130. class Window_Drop_Item < Window_Base
  131.  
  132.   attr_reader :quantity # pozwól odczytywać ilość
  133.  
  134.   #--------------------------------------------------------------------------
  135.   # * Inicjalizacja
  136.   #--------------------------------------------------------------------------
  137.     def initialize(item)
  138.     @drop_key = false # zapobiega ustawianiu się ilości od razu na maksymalną
  139.     @item = item
  140.     @quantity = 0
  141.     set_max_quantity
  142.         super(160, 132, 320, 128) # stwórz okno
  143.     self.contents = Bitmap.new(width - 32, height - 32) # stwórz bitmapę
  144.     self.back_opacity = 200 # ustaw przezroczystość
  145.     self.z = 200 # ustaw kotę
  146.     refresh # odśwież
  147.   end
  148.  
  149.   #--------------------------------------------------------------------------
  150.   # * Odświeżenie
  151.   #--------------------------------------------------------------------------
  152.   def refresh
  153.     self.contents.clear # wyczyść bitmapę
  154.     self.contents.font.color = normal_color # ustaw kolor
  155.     self.contents.draw_text(0, 0, 288, 32, 'Ile sztuk tego przedmiotu chcesz wyrzucić?', 2)
  156.     # wyświetl tekst
  157.     self.contents.draw_text(128, 50, 32, 32, @quantity.to_s, 2)
  158.     # wyświetl ilość
  159.     icon = RPG::Cache.icon(@item.icon_name)
  160.     # ustaw ikonę
  161.     self.contents.blt(96, 50, icon, Rect.new(0, 0, 24, 24))
  162.     # wyświetl ikonę
  163.   end
  164.  
  165.   #--------------------------------------------------------------------------
  166.   # * Ustal maksymalną ilość przedmiotów do wyrzucenia
  167.   #--------------------------------------------------------------------------
  168.   def set_max_quantity
  169.     if @item.is_a?(RPG::Item)
  170.       @max_quantity = $game_party.item_number(@item.id)
  171.     elsif @item.is_a?(RPG::Weapon)
  172.       @max_quantity = $game_party.weapon_number(@item.id)
  173.     elsif @item.is_a?(RPG::Armor)
  174.       @max_quantity = $game_party.armor_number(@item.id)
  175.     end
  176.   end
  177.  
  178.   #--------------------------------------------------------------------------
  179.   # * Sprawdź, czy któryś przycisk został naciśnięty
  180.   #--------------------------------------------------------------------------
  181.   def check_input
  182.     q = 0
  183.     if Input.trigger? Input::UP
  184.       q = [@max_quantity - @quantity, 1].min
  185.       @quantity += q
  186.     elsif Input.trigger? Input::RIGHT
  187.       q = [@max_quantity - @quantity, 10].min
  188.       @quantity += q
  189.     elsif Input.trigger? Input::DOWN
  190.       q = @quantity > 0 ? 1 : 0
  191.       @quantity -= q
  192.     elsif Input.trigger? Input::LEFT
  193.       q = @quantity > 10 ? 10 : @quantity
  194.       @quantity -= q
  195.     elsif Input.trigger? Gluszak::Drop_Item::Drop_Key
  196.       q = @quantity = 0 ? @max_quantity : @max_quantity - @quantity
  197.     end
  198.    
  199.     if q != 0
  200.       $game_system.se_play($data_system.cursor_se)
  201.       # jeśli ilość się zmienia, zagraj dźwięk
  202.     end
  203.   end
  204.  
  205.   #--------------------------------------------------------------------------
  206.   # * Uaktualnij
  207.   #--------------------------------------------------------------------------
  208.   def update
  209.     super
  210.     set_max_quantity # ustaw maksymalną ilość
  211.     check_input if @drop_key # zapobiega ustawianiu się ilości od razu na maksymalną
  212.     @drop_key = true
  213.     refresh # odśwież
  214.   end
  215.  
  216.   #--------------------------------------------------------------------------
  217.   # * Pozbądź się bitmapy
  218.   #--------------------------------------------------------------------------
  219.   def dispose
  220.     super
  221.   end
  222.  
  223. end
Advertisement
Add Comment
Please, Sign In to add comment