Advertisement
Raizen

Untitled

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