Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # Multiusable items
- # By gerkrt/gerrtunk
- # Version: 1.5
- # License: GPL, credits
- #==============================================================================
- =begin
- --------Instructions-----------
- Just add new items in the variable Multiusable_items. You have to do this to
- add a new item every time.
- Ex: If you wanted to add the item number 5 of the database with 3 uses:
- Multiusable_items = {1=>3, 3=>2, 5=>3}
- First goes the item id, then the uses. Note that you can remove the two examples
- i have add:
- Multiusable_items = {5=>3}
- This works like in old Rpgmakers. Internally it will be used the item with less
- number of uses left.
- ----------Options-------------
- Show_uses: If you turn this option on it will add to every multiusable descriptions
- the number of uses left, example:
- Super Potion
- Description: 2/2 uses. Recovers 300 HP.
- Uses_text: You can modify here the text that is add before the uses ratio.
- ----------Compatibality-------------
- The show uses option modifies the shop and item menu, if you have some script
- that changue that it can give you problems. Turn this option off if something goes
- wrong.
- =end
- module Wep
- # By uses. {Item_id=> number of uses}
- Multiusable_items = {1=>3, 3=>2}
- Show_uses = true
- Uses_text = ' uses. '
- end
- class Game_Party
- attr_reader :multiusable_items
- alias wep_gm_par_init initialize
- def initialize
- wep_gm_par_init
- @multiusable_items = []
- end
- #--------------------------------------------------------------------------
- # * Gain Items (or lose)
- # item_id : item ID
- # n : quantity
- #--------------------------------------------------------------------------
- def gain_item(item_id, n)
- # Update quantity data in the hash.
- if item_id > 0
- # Check if multiusable
- if multiusable?(item_id) and n > 0
- for i in 0...n
- # Push a new item with uses and item id
- uses = Wep::Multiusable_items[item_id]
- @multiusable_items.push([item_id,uses])
- end
- end
- @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
- end
- end
- #--------------------------------------------------------------------------
- # * Lose Items
- # item_id : item ID
- # n : quantity
- #--------------------------------------------------------------------------
- def lose_item(item_id, n)
- if multiusable?(item_id) and have_multiusables?(item_id) and not $scene.is_a?(Scene_Shop)
- # Sort by uses
- @multiusable_items.sort! {|a,b|a[1]<=> b[1]}
- # Iterate over all items in search of what have the lowest uses
- i=0
- for item in @multiusable_items
- if item[0] == item_id
- @multiusable_items[i][1]-=1
- # If have no more uses, delete it
- if @multiusable_items[i][1] == 0
- @multiusable_items.delete(item)
- @items[item_id] = [[item_number(item_id) -1, 0].max, 99].min
- end
- break
- end
- i+=1
- end
- elsif $scene.is_a?(Scene_Shop) and multiusable?(item_id)
- i=0
- to_lose = n
- @multiusable_items.sort! {|a,b|a[1]<=> b[1]}
- for item in @multiusable_items
- if to_lose == 0
- break
- end
- if item[0] == item_id
- @multiusable_items.delete_at(i)
- to_lose-=1
- end
- i+=1
- end
- @items[item_id] = [[item_number(item_id) -n, 0].max, 99].min
- else
- # Reverse the numerical value and call it gain_item
- gain_item(item_id, -n)
- end
- end
- #--------------------------------------------------------------------------
- # * Have Multiusables?
- #--------------------------------------------------------------------------
- def have_multiusables?(item_id)
- for item in @multiusable_items
- if item[0] == item_id
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # * Multiusables?
- #--------------------------------------------------------------------------
- def multiusable?(item_id)
- return Wep::Multiusable_items[item_id]
- end
- end
- if Wep::Show_uses
- class Window_Item < Window_Selectable
- #--------------------------------------------------------------------------
- # * Help Text Update
- #--------------------------------------------------------------------------
- def update_help
- if Wep::Multiusable_items[self.item.id]
- for item in $game_party.multiusable_items
- if item[0] == self.item.id
- uses=item[1]
- break
- end
- end
- description = uses.to_s+'/'+Wep::Multiusable_items[self.item.id].to_s+Wep::Uses_text+self.item.description
- @help_window.set_text(description)
- else
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- end
- class Window_ShopSell < Window_Selectable
- #--------------------------------------------------------------------------
- # * Help Text Update
- #--------------------------------------------------------------------------
- def update_help
- if Wep::Multiusable_items[self.item.id]
- for item in $game_party.multiusable_items
- if item[0] == self.item.id
- uses=item[1]
- break
- end
- end
- description = uses.to_s+'/'+Wep::Multiusable_items[self.item.id].to_s+Wep::Uses_text+self.item.description
- @help_window.set_text(description)
- else
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement