adiktuzmiko icon

SS Add-On: Total Item Limit v1.00

adiktuzmiko | PRO | 09/27/14 01:20:47 AM UTC | 0 ⭐ | 512 👁️ | Never ⏰ | []
Ruby |

4.96 KB

|

None

|

0 👍

/

0 👎

=begin
======================================================
  
  SS Add-On: Total Item Limit v1.00
  by Adiktuzmiko                   
  
  Date Created: 09/27/2014
  Date Last Updated: 09/27/2014
  Requires: Shared Storage v2.10
  Difficulty: Easy
  
======================================================
 Overview
======================================================
 
 Allows the shared storages to have a limit based
 on total items inside of it
 
======================================================
 Usage
====================================================== 
 
 Put this script into your scripts editor and modify
 the settings below
 
 To make a storage use this limit script, on the ITEM_MAX_NUMBER
 of that storage, put "SceneManager.scene.get_item_limit"
 
 Example: If you want storage 1 to use this:
 
 ITEM_MAX_NUMBER[1] = "SceneManager.scene.get_item_limit"
 
 if you want the remaining slots to show on the custom window:
   
 CUSTOM_WINDOW[index] = "SceneManager.scene.get_remaining_slots"
 
 Example: If you want storage 1 to use this:
 
 CUSTOM_WINDOW[1] = "SceneManager.scene.get_remaining_slots"
 
 The 0 indexed setting will be the one used by default
 by any storage that you open that doesn't have it's own
 settings defined. So don't remove it.
 
 Copy paste the setting constants and modify the index to the
 storage number that you want, then modify the values
 
 For example:
 
 This would be the limit for storage 1
 
 ITEM_TOTAL_LIMIT[1] = 10
 
 Do that for every setting that you want to change
 for a particular storage
 
======================================================
 Compatibility
======================================================
 
 Overwrites the Shared Stash's can_store and Process
 Digits methods
 
======================================================
 Terms and Conditions
======================================================
 
 View it here: http://lescripts.wordpress.com/terms-and-conditions/
 
======================================================
=end
 
 
module ADIK
  module SHARED_STORAGE
    #Important:  Do not remove!
    #======================================================
    ITEM_TOTAL_LIMIT = []
    #======================================================
    
    ITEM_TOTAL_LIMIT[0] = "1"
  end
end
 
class Scene_SharedStorage
  
  def get_remaining_slots
    total = 0
    $shared_storage.each_key do |key|
      if key[0] == @storage_number
        total += $shared_storage[key]
      end
    end
    limit = ADIK::SHARED_STORAGE::ITEM_TOTAL_LIMIT[@storage_number]
    limit = ADIK::SHARED_STORAGE::ITEM_TOTAL_LIMIT[0] if limit.nil?
    return eval(limit) - total
  end
  
  def get_item_limit
    item = get_item
    begin
      return $shared_storage[[@storage_number,item.class.to_s,item.id]] + get_remaining_slots
    rescue
      return get_remaining_slots
    end
  end
  
  def get_item_limit_ex(item)
    begin
      return $shared_storage[[@storage_number,item.class.to_s,item.id]] + get_remaining_slots
    rescue
      return get_remaining_slots
    end
  end
  
  #Overwrites the original
  def can_store(item)
    if @ss_category == :deposit
      numb = ADIK::SHARED_STORAGE::MAX_ITEM_NUMBER[@storage_number]
      numb = ADIK::SHARED_STORAGE::MAX_ITEM_NUMBER[0] if numb.nil?
      if numb == "SceneManager.scene.get_item_limit"
        numb = get_item_limit_ex(item)
      else
        numb = eval(numb)
      end
      begin
        numb -= $shared_storage[[@storage_number,item.class.to_s,item.id]]
      rescue
      end
      return numb > 0
    else
      numb = $game_party.item_number(item)
      return numb < $game_party.max_item_number(item)
    end
  end
  
end
 
class Window_NumberInput_SS
  
  #Overwrites the original
  def process_digit_change
    return unless active
    if Input.repeat?(:UP) || Input.repeat?(:DOWN)
      Sound.play_cursor
      place = 10 ** (@digits_max - 1 - @index)
      n = @number / place % 10
      @number -= n * place
      n = (n + 1) % 10 if Input.repeat?(:UP)
      n = (n + 9) % 10 if Input.repeat?(:DOWN)
      @number += n * place
      if @category == :deposit
        item = @item
        numb = ADIK::SHARED_STORAGE::MAX_ITEM_NUMBER[$shared_storage_number]
        numb = ADIK::SHARED_STORAGE::MAX_ITEM_NUMBER[0] if numb.nil?
        if numb == "SceneManager.scene.get_item_limit"
          numb = SceneManager.scene.get_item_limit_ex(item)
        else
          numb = eval(numb)
        end
        begin
          numb -= $shared_storage[[$shared_storage_number,@item.class.to_s,@item.id]]
        rescue
        end
        @number = [@number,$game_party.item_number(@item),numb].min
      else
        amount = $shared_storage[[$shared_storage_number,@item.class.to_s,@item.id]]
        limit = $game_party.max_item_number(@item)- $game_party.item_number(@item)
        @number = [@number,amount,limit].min
      end
      refresh
    end
  end
  
end

Comments