Guest User

Untitled

a guest
Dec 14th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 20.30 KB | None | 0 0
  1. #=======================================================
  2. #         Lune Item Weight
  3. # Autor : Raizen
  4. # Função do script: O script adiciona um baú ou banco,
  5. # dependendo da preferência, que permite guardar itens,
  6. # depositar dinheiro, sacar itens e sacar o dinheiro guardado
  7. #=======================================================
  8.  
  9. # Funções: Adiciona um sistema de pesos no jogo,
  10. # limitando os itens no inventário.
  11.  
  12.  
  13. module Lune_Weight
  14. #=============================================================================#
  15. #========================= Configurações gerais ==============================#
  16. #=============================================================================#
  17.  
  18. # Para configurar um peso para o item, basta ir no database,
  19. # Ir no bloco de notas e colocar o seguinte.
  20. # <peso n>, aonde n é o valor do peso
  21. # Se quero um certo item para pesar 60, basta eu colocar nas
  22. # Notas dentro do database na parte de itens.
  23. # <peso 60>
  24.  
  25. # Caso não tenha anotação na parte notas do Database,
  26. # O script assumirá o valor padrão do peso que é de.
  27. Default = 50
  28.  
  29. # Receber o item mesmo sobre o peso?
  30. # Para evitar perdas como itens importantes ou outros itens,
  31. # Você pode permitir que o personagem receba o item mesmo se ficar acima
  32. # do peso, caso não permita é altamente recomendável que leia logo a seguir
  33. # sobre como criar condições para o caso de estar acima do peso, para evitar
  34. # que o personagem deixe de receber itens essenciais para o jogo.
  35. # true = recebe, false = não recebe
  36. Receive = true
  37.  
  38. # Caso marque true, você pode configurar para o personagem ficar travado
  39. # quando estiver acima do peso.
  40. Travar = true
  41.  
  42. # Se marcar false, é importante saber como configurar condições por eventos,
  43. # para evitar que um item não seja recebido.
  44.  
  45. # Escolha uma variável para receber a quantidade de peso carregado.
  46. Var_C = 5
  47. # Escolha uma variável para receber a quantidade de peso máximo.
  48. Var_M = 6
  49. # A partir dessas 2 variáveis é possível criar condições para caso depois de
  50. # receber o item fique acima do peso que descartaria o item, ou não.
  51.  
  52. LimiteB = 8000 # Configure apenas se estiver usando o Lune_Vault
  53. # para tirar o limite do baú coloque LimiteB = ""
  54. #=============================================================================#
  55. #===================== Configurações do limite de peso =======================#
  56. #=============================================================================#
  57.  
  58. # Quantidade máxima de peso carregado.
  59. # Para configurar o peso máximo você pode,
  60. # colocar um valor de uma variável, você pode colocar um número constante
  61. # ou colocar a força dos persongens do grupo.
  62.  
  63. # Para indicar que o valor a ser carregado é apenas a força do ator principal
  64. # coloque :for1
  65. # Para indicar que o valor a ser carregado é a somatória das forças, coloque
  66. # :all_for
  67. # Para indicar que o valor a ser carregado é a apenas o level do ator principal
  68. #, coloque :lvl1
  69. # Para indicar que o valor a ser carregado é a somatória dos leveis, coloque
  70. # :all_lvl
  71. # Para indicar que é uma variável coloque :var
  72. # Para indicar que é um número fixo coloque :fix
  73.  
  74. # Exemplo Carry_Limit = lvl1 fará ele considerar só o
  75. # level do primeiro personagem
  76. Carry_Limit = :for1
  77.  
  78. # Caso faça de acordo com a força ou o level acima indique aqui a
  79. #fórmula de peso em relação a força ou level.
  80.  
  81. # aonde o at significa o atributo (level ou força) que será colocado
  82. # na fórmula, por exemplo.
  83. # Se eu quero que o peso seja 2 vezes o valor da força do personagem eu
  84. # colocaria
  85.  
  86. # def self.weight_formula(at)
  87. #   at * 2
  88. # end
  89.  
  90. # Caso seja uma variável coloque o ID da variavel, ou se for
  91. # um número fixo, coloque o ID desse número.
  92.  
  93. # Exemplo:
  94.  
  95. # def self.weight_formula(at)
  96. #   20
  97. # end
  98.  
  99. # O caso acima representa que ele será a variável 20, ou o limite
  100. # do peso será 20, dependendo do que foi escolhido dentro do
  101. # Carry_Limit.
  102.  
  103.  
  104. def self.weight_formula(at)
  105.   at * 2 + 1000
  106. end
  107.  
  108.  
  109. #===================== Configurações do vocabulário ==========================#
  110. # Para o vocabulário coloque sempre a palavra em aspas "", ou ''
  111. # Unidade de peso
  112. PS = ' Oz'
  113.  
  114. # Vocabulário no menu e na loja.
  115. Peso = 'Peso:'
  116. Carregando = 'Carregando: '
  117. Bau = 'No Baú: ' # Apenas caso use o script Lune_Vault
  118.  
  119. # Vocabulário na janela de itens.
  120. Usar = 'Usar'
  121. Descartar = 'Descartar'
  122.  
  123. #=============================================================================#
  124. #========================== Aqui começa o script =============================#
  125. #=============================================================================#
  126.  
  127.   #--------------------------------------------------------------------------
  128.   # * Calculo do limite de peso
  129.   #--------------------------------------------------------------------------
  130.   def self.weight_limit
  131.     return unless $game_party.members[0]
  132.     case Carry_Limit
  133.     when :for1
  134.       weight = weight_formula($game_party.members[0].param(2))
  135.     when :all_for
  136.       weight = 0
  137.       for members in 0...$game_party.members.size - 1
  138.         weight += weight_formula($game_party.members[members].param(2))
  139.       end
  140.     when :lvl1
  141.       weight = weight_formula($game_party.members[0].level)
  142.     when :all_lvl
  143.       weight = 0
  144.       for members in 0...$game_party.members.size - 1
  145.         weight += weight_formula($game_party.members[members].level)
  146.       end
  147.     when :fix
  148.       weight = weight_formula(0)
  149.     when :var
  150.       weight = $game_variables[weight_formula(0)]
  151.     end
  152.     $game_variables[Var_M] = weight
  153.     weight
  154.   end
  155. end
  156.  
  157.  
  158.  
  159. #==============================================================================
  160. # ** Game_Party
  161. #------------------------------------------------------------------------------
  162. #  Esta classe gerencia o grupo. Contém informações sobre dinheiro, itens.
  163. # A instância desta classe é referenciada por $game_party.
  164. #==============================================================================
  165.  
  166. class Game_Party < Game_Unit
  167. alias :lune_weight_gain :gain_item
  168.   #--------------------------------------------------------------------------
  169.   # * Quantidade de itens carregados mais os itens equipados
  170.   #--------------------------------------------------------------------------
  171.   def carried_items
  172.     @all_carried_items = 0
  173.     all_items.each {|item| get_weight(item)}
  174.     for i in 0...4
  175.       members.each {|actor| @all_carried_items += calc_weight(actor.equips[i], 1)}
  176.     end
  177.     $game_variables[Lune_Weight::Var_C] = @all_carried_items
  178.     @all_carried_items
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # * Calculo do peso de um item no inventário
  182.   #--------------------------------------------------------------------------
  183.   def get_weight(item)
  184.     if item.note =~ /<peso (.*)>/i
  185.       @all_carried_items += $1.to_i * item_number(item)
  186.     else
  187.       @all_carried_items += Lune_Weight::Default * item_number(item)
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # * Calculo do peso de um item relativo a quantidade
  192.   #--------------------------------------------------------------------------
  193.   def calc_weight(item, amount)
  194.     return 0 unless item
  195.     if item.note =~ /<peso (.*)>/i
  196.       carried_itens = $1.to_i * amount
  197.     else
  198.       carried_itens = Lune_Weight::Default * amount
  199.     end
  200.     carried_itens
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # * Acrescentar item (redução)
  204.   #     item          : item
  205.   #     amount        : quantia alterada
  206.   #     include_equip : incluir itens equipados
  207.   #--------------------------------------------------------------------------
  208.   def gain_item(item, amount, include_equip = false)
  209.     if Lune_Weight::Receive
  210.       lune_weight_gain(item, amount, include_equip = false)
  211.       return
  212.     end
  213.     return if item == nil
  214.     weight = calc_weight(item, amount) + carried_items
  215.     while weight > Lune_Weight.weight_limit
  216.       amount -= 1
  217.       weight = calc_weight(item, amount) + carried_items
  218.       return if amount == 0
  219.     end
  220.     lune_weight_gain(item, amount, include_equip = false)
  221.   end
  222. end
  223.  
  224. #==============================================================================
  225. # ** Scene_Shop
  226. #------------------------------------------------------------------------------
  227. #  Esta classe executa o processamento da tela de loja.
  228. #==============================================================================
  229.  
  230. class Scene_Shop < Scene_MenuBase
  231. alias :lune_max_buy :max_buy
  232.   #--------------------------------------------------------------------------
  233.   # * Aquisição do número máximo disponível para compra
  234.   #--------------------------------------------------------------------------
  235.   def max_buy
  236.     max = lune_max_buy
  237.     weight = $game_party.calc_weight(@item, max) + $game_party.carried_items
  238.     while weight > Lune_Weight.weight_limit && max > 0
  239.       max -= 1
  240.       weight = $game_party.calc_weight(@item, max) + $game_party.carried_items
  241.     end
  242.     max
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # * Criação da janela de ajuda.
  246.   #--------------------------------------------------------------------------
  247.   def create_help_window
  248.     @help_window = Window_Weight_Help.new
  249.     @help_window.viewport = @viewport
  250.     @get_item_num = $game_party.carried_items
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # * Atualização da janela de peso
  254.   #--------------------------------------------------------------------------
  255.   def update
  256.     super
  257.     if @get_item_num != $game_party.carried_items
  258.       @help_window.refresh
  259.       @get_item_num = $game_party.carried_items
  260.     end
  261.   end
  262. end
  263.  
  264. #==============================================================================
  265. # ** Window_ShopBuy
  266. #------------------------------------------------------------------------------
  267. #  Esta janela exibe bens compráveis na tela de loja.
  268. #==============================================================================
  269.  
  270. class Window_ShopBuy < Window_Selectable
  271. alias :lune_enable_item :enable?
  272.   #--------------------------------------------------------------------------
  273.   # * Definição de habilitação do item
  274.   #     item : item
  275.   #--------------------------------------------------------------------------
  276.   def enable?(item)
  277.     return false if $game_party.calc_weight(item, 1) + $game_party.carried_items > Lune_Weight.weight_limit
  278.     lune_enable_item(item)
  279.   end
  280. end
  281.  
  282.  
  283. #==============================================================================
  284. # ** Window_Help
  285. #------------------------------------------------------------------------------
  286. #  Esta janela exibe explicação de habilidades e itens e outras informações.
  287. #==============================================================================
  288.  
  289. class Window_Weight_Help < Window_Base
  290. include Lune_Weight
  291.   #--------------------------------------------------------------------------
  292.   # * Inicialização do objeto
  293.   #     line_number : número de linhas
  294.   #--------------------------------------------------------------------------
  295.   def initialize(line_number = 2, bau = false)
  296.     @bau = bau
  297.     super(0, 0, Graphics.width, fitting_height(line_number))
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # * Configuração de texto
  301.   #     text : texto
  302.   #--------------------------------------------------------------------------
  303.   def set_text(text)
  304.     if text != @text
  305.       @text = text
  306.       refresh
  307.     end
  308.   end
  309.   def on_bau(bau = false)
  310.     @bau = bau
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # * Limpeza
  314.   #--------------------------------------------------------------------------
  315.   def clear
  316.     set_text("")
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # * Definição de item
  320.   #     item : habilidades, itens, etc.
  321.   #--------------------------------------------------------------------------
  322.   def set_item(item)
  323.     @item = item
  324.     set_text(item ? item.description : "")
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # * Renovação
  328.   #--------------------------------------------------------------------------
  329.   def refresh
  330.     contents.clear
  331.     draw_text_ex(4, 0, @text)
  332.     if @item
  333.       text = Peso + $game_party.calc_weight(@item,1).to_s + PS
  334.       draw_text(4, line_height, 200, line_height, text, 0)
  335.       if @bau == true
  336.         LimiteB == "" ? text_lim = "????" : text_lim = LimiteB
  337.         text = Bau + $game_party.items_on_vault.to_s + "/" + text_lim.to_s + PS
  338.       else
  339.         text = Carregando + $game_party.carried_items.to_s + "/" + Lune_Weight.weight_limit.to_s + PS
  340.       end
  341.       draw_text(- 20, line_height, Graphics.width, line_height, text, 2)
  342.     end
  343.   end
  344. end
  345.  
  346.  
  347. #==============================================================================
  348. # ** Game_Player
  349. #------------------------------------------------------------------------------
  350. #  Esta classe gerencia o jogador.
  351. # A instância desta classe é referenciada por $game_player.
  352. #==============================================================================
  353.  
  354. class Game_Player < Game_Character
  355. alias :lune_move_by :move_by_input
  356.   #--------------------------------------------------------------------------
  357.   # * Processamento de movimento através de pressionar tecla
  358.   #--------------------------------------------------------------------------
  359.   def move_by_input
  360.     return if Lune_Weight::Travar && $game_party.carried_items > Lune_Weight.weight_limit
  361.     lune_move_by
  362.   end
  363. end
  364.  
  365.  
  366. #==============================================================================
  367. # ** Scene_Item
  368. #------------------------------------------------------------------------------
  369. #  Esta classe executa o processamento da tela de item.
  370. #==============================================================================
  371. class Scene_Item < Scene_ItemBase
  372. alias raizen_combine_start start
  373.   def start
  374.     raizen_combine_start
  375.     @combine_item = Window_Item_Combine.new
  376.     @combine_item.viewport = @viewport
  377.     @combine_item.set_handler(:new_game, method(:command_use))
  378.     @combine_item.set_handler(:continue, method(:command_combine))
  379.   end
  380.   def on_item_ok
  381.     if item == nil
  382.       @item_window.activate
  383.       return
  384.     end
  385.     if @combine_item.close?
  386.       @combine_item.open
  387.       @combine_item.activate
  388.     else
  389.       determine_item    
  390.     end
  391.   end
  392.  
  393.   def update
  394.     super
  395.     if @number_window and @number_window.nitens == true
  396.         @number_window.nitens = false
  397.         @combine_item.close
  398.         @item_window.refresh
  399.         @help_window.refresh
  400.         @item_window.activate
  401.     end
  402.     if Input.trigger?(:B) and !@combine_item.close?
  403.       Sound.play_cancel
  404.       if @number_window and !@number_window.close?
  405.         @number_window.close
  406.         @combine_item.activate
  407.       else
  408.         @combine_item.close
  409.         @item_window.activate
  410.       end
  411.     end
  412.   end
  413.   def command_use
  414.     determine_item
  415.   end
  416.  
  417.   def command_combine
  418.     if @number_window and !@number_window.close?
  419.       @combine_item.activate
  420.       return
  421.     end
  422.     @number_window = Window_NumberInputInner.new(Window_Base.new(0,0,0,0), item, @item_window.index)
  423.     @number_window.viewport = @viewport
  424.     @number_window.start
  425.   end
  426.   def create_help_window
  427.     @help_window = Window_Weight_Help.new
  428.     @help_window.viewport = @viewport
  429.   end
  430. end
  431.  
  432. #==============================================================================
  433. # ** Window_MenuStatus
  434. #------------------------------------------------------------------------------
  435. #  Esta janela exibe os parâmetros dos membros do grupo na tela de menu.
  436. #==============================================================================
  437.  
  438. class Window_Item_Combine < Window_Command
  439. include Lune_Weight
  440.   #--------------------------------------------------------------------------
  441.   # * Inicialização do objeto
  442.   #--------------------------------------------------------------------------
  443.   def initialize
  444.     super(0, 0)
  445.     self.z = 9999
  446.     self.x = (Graphics.width / 2) - (window_width / 2)
  447.     self.y = Graphics.height / 2
  448.     self.openness = 0
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # * Aquisição da largura da janela
  452.   #--------------------------------------------------------------------------
  453.   def window_width
  454.     return 160
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # * Criação da lista de comandos
  458.   #--------------------------------------------------------------------------
  459.   def make_command_list
  460.     add_main_commands
  461.  
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # * Adição dos comandos principais
  465.   #--------------------------------------------------------------------------
  466.   def add_main_commands
  467.     add_command(Usar,   :new_game,   true)
  468.     add_command(Descartar,  :continue,  true)
  469.   end
  470. end
  471.  
  472.  
  473.  
  474.  
  475. #==============================================================================
  476. # ** Scene_ItemBase
  477. #------------------------------------------------------------------------------
  478. #  Esta é a superclasse das classes que executam as telas de itens e
  479. # habilidades.
  480. #==============================================================================
  481.  
  482. class Scene_ItemBase < Scene_MenuBase
  483.   def determine_item
  484.     @combine_item.close
  485.     if item.is_a?(RPG::Item) and item.for_friend?
  486.       show_sub_window(@actor_window)
  487.       @actor_window.select_for_item(item)
  488.     else
  489.       item.is_a?(RPG::Item) ? use_item : Sound.play_buzzer
  490.       activate_item_window
  491.     end
  492.   end
  493. end
  494.  
  495. #==============================================================================
  496. # ** Window_NumberInputInner
  497. #------------------------------------------------------------------------------
  498. #  Esta janela é utilizada para o comando de eventos [Armazenar Número]
  499. #==============================================================================
  500.  
  501. class Window_NumberInputInner < Window_NumberInput
  502. attr_accessor :nitens
  503. def initialize(message_window, item, index_2)
  504.   @index_2 = index_2
  505.   @item = item
  506.   @get_lost_itens = 0
  507.   super(message_window)
  508. end
  509.   #--------------------------------------------------------------------------
  510.   # * Inicialização do processo
  511.   #--------------------------------------------------------------------------
  512.   def start
  513.     @digits_max = 2
  514.     @number = @get_lost_itens
  515.     @number = [[@number, 0].max, 10 ** @digits_max - 1].min
  516.     @index = 0
  517.     update_placement
  518.     create_contents
  519.     refresh
  520.     open
  521.     activate
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # * Atualização da posição da janela
  525.   #--------------------------------------------------------------------------
  526.   def update_placement
  527.     self.width = @digits_max * 20 + padding * 2
  528.     self.height = fitting_height(1)
  529.     self.x = (Graphics.width - width) / 2
  530.     self.y = Graphics.height/2 - height
  531.     self.z = 150
  532.   end
  533.  
  534.   #--------------------------------------------------------------------------
  535.   # * Definição de resultado ao pressionar o botão de confirmação
  536.   #--------------------------------------------------------------------------
  537.   def process_ok
  538.     Sound.play_ok
  539.     number = $game_party.item_number(@item)
  540.     if @number <= number
  541.     make_icon
  542.     end
  543.     deactivate
  544.     @nitens = true
  545.     close
  546.   end
  547.   def make_icon
  548.     @nitens = true
  549.     $game_party.lose_item(@item, @number)
  550.   end
  551. end
  552.  
  553. #==============================================================================
  554. # ** Window_ItemList
  555. #------------------------------------------------------------------------------
  556. #  Esta janela exibe a lista de itens possuidos na tela de itens.
  557. #==============================================================================
  558.  
  559. class Window_ItemList < Window_Selectable
  560.   #--------------------------------------------------------------------------
  561.   # * Definição de habilitação do item
  562.   #     item : item
  563.   #--------------------------------------------------------------------------
  564.   def enable?(item)
  565.     true
  566.   end
  567. end
  568.  
  569. $lune_weight_script = true
Add Comment
Please, Sign In to add comment