O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Taka Menu EX

Iniciado por Takkun, 10/09/2015 às 07:17

10/09/2015 às 07:17 Última edição: 20/01/2017 às 09:22 por King Gerar




Fala autor: Esse script modifica a Janela de Menu do seu jogo deixando a mais bonita e simples, todos os efeitos foram criados recursos do próprio maker para que tivesse o mínimo de incompatibilidades possíveis. Alguns comandos foram recriados para que caso eles fossem usados em outros scripts não sofressem mudanças. Espero que gostem do script e que ele possa ser útil em seus projetos.

Lag: Inexistente, mínimo ou imperceptível.

Incompatibilidade: Com outro script que altere a Scene_Menu.
Este script também altera informações no Window_MenuCommand, Window_Gold,Window_Base e a Window_MenuStatus.









Script:

==============================================================================
#   Taka Menu EX
#   Autor: Taka (a.k.a Faalco / Takkun)
#   Criado: 27/08/2015
#   Version: 1.0a
#==============================================================================
# ◆ Instruções:
# -----------------------------------------------------------------------------
# Copie o script e cole o mesmo acima do Main de seu projeto. Pode causar
# incompatibilidade com outros scripts que modifiquem o Menu ou acresentem
# algo no mesmo (Devido a modificação das janelas).
#
#==============================================================================
#
# Esse script modifica a Janela de Menu do seu jogo deixando a mais bonita e
# simples, todos os efeitos foram criados recursos do próprio maker para que
# tivesse o mínimo de incompatibilidades possíveis. Alguns comandos foram
# recriados para que caso eles fossem usados em outros scripts não sofressem
# mudanças.
#
# Qualquer dúvida perante ao script pode ser tirada no tópico onde encontrou
# o mesmo, caso queira dar uma sugestão para melhoria ou ideia para script
# mande-me uma mensagem pessoal em umas das comunidades que atuo.
#
#                      ◆ Apenas para RPG Maker VXAce ◆
#==============================================================================
($imported ||= {})["Taka_Menu_EX"] = true
#==============================================================================#
# ► Módulo de configuração do Script
#==============================================================================#
module TAKA
  #=============================================================================
  # ** COLORS
  #=============================================================================
  module COLORS

    HPCOLOR1 = Color.new(255, 186, 0, 255)      #Cor (Clara) da barra de HP.
    HPCOLOR2 = Color.new(255, 78, 0, 255)       #Cor (Escura) da barra de HP.
    
    MPCOLOR1 = Color.new(42, 181, 237, 255)     #Cor (Clara) da barra de MP.
    MPCOLOR2 = Color.new(79, 105, 178, 255)     #Cor (Escura) da barra de MP.
    
    XPCOLOR1 = Color.new(255, 205, 0, 255)      #Cor (Clara) da barra de XP.
    XPCOLOR2 = Color.new(255, 169, 0, 255)      #Cor (Escura) da barra de XP.
    
    OUT_COLOR1 = Color.new(0, 0, 0, 192)        #Cor da borda exterior. (Preta)
    OUT_COLOR2 = Color.new(255, 255, 192, 255)  #Cor da borda interior. (Branca)
    
  end # COLORS
  
  #=============================================================================
  # ** VOCAB
  #=============================================================================
  module VOCAB
    
    VOCABXP = "XP"               #Vocabulário da barra de Experiência.
    VOCABLOAD = "Load Game"      #Vocabulário da opção de Carregar no menu.
    VOCABDEBUG = "Debug"         #Vocabulário da opção de Debug no menu.
    VOCABSHOP = "Sell Shop"      #Vocabulário da opção de Shop de Vendas no menu.
    VOCABTIME = "Tempo: "        #Vocabulário da janela de tempo.
    
  end #VOCAB
  
  #=============================================================================
  # ** MENU
  #=============================================================================
  module MENU

    FONTNAME = "Verdana"         #Fonte a ser usada nos textos.
    FONTSIZE = 14                #Tamanho da Fonte a ser usada nos textos.
    
    ACTIVE_LOAD = true           #Opção de Load no Menu Ativa (True/False). 
    ACTIVE_DEBUG = true          #Opção de Debug no Menu Ativa (True/False). 
    ACTIVE_SHOP = true           #Opção de Shop no Menu Ativa (True/False). 
    
    ICON_GOLD = 361              #Ícone que será mostrada na janela de Gold.
    ICON_TIME = 280              #Ícone que será mostrada na janela de Tempo.
    
    CURSOR = "Cursor"            #Cursor que irá aparecer nas janelas.
  
  end #MENU
  
end #TAKA

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This is a super class of all windows within the game.
#==============================================================================

class Window_Base < Window

  def draw_actor_hp2(actor, x, y, width = 124)
    self.contents.fill_rect(x - 2, y + line_height - 10, width + 4, 10, TAKA::COLORS::OUT_COLOR1)
    self.contents.fill_rect(x - 1, y + line_height - 9,  width + 2, 8,  TAKA::COLORS::OUT_COLOR2)
    draw_gauge(x, y, width, actor.hp_rate, TAKA::COLORS::HPCOLOR2, 
    TAKA::COLORS::HPCOLOR1)
    change_color(system_color)
    draw_text(x, y, 30, line_height, Vocab::hp_a)
    draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
    hp_color(actor), normal_color)
  end

  def draw_actor_mp2(actor, x, y, width = 124)
    self.contents.fill_rect(x - 2, y + line_height - 10, width + 4, 10, TAKA::COLORS::OUT_COLOR1)
    self.contents.fill_rect(x - 1, y + line_height - 9,  width + 2, 8,  TAKA::COLORS::OUT_COLOR2)
    draw_gauge(x, y, width, actor.mp_rate, TAKA::COLORS::MPCOLOR2,
    TAKA::COLORS::MPCOLOR1)
    change_color(system_color)
    draw_text(x, y, 30, line_height, Vocab::mp_a)
    draw_current_and_max_values(x, y, width, actor.mp, actor.mmp,
    mp_color(actor), normal_color)
  end

  def draw_actor_xp2(actor, x, y, width = 124)
    self.contents.fill_rect(x - 2, y + line_height - 10, width + 4, 10, TAKA::COLORS::OUT_COLOR1)
    self.contents.fill_rect(x - 1, y + line_height - 9,  width + 2, 8,  TAKA::COLORS::OUT_COLOR2)
    draw_gauge(x, y, width, actor.exp.to_f / actor.next_level_exp.to_f, 
    TAKA::COLORS::XPCOLOR2, TAKA::COLORS::XPCOLOR1)
    change_color(system_color)
    draw_text(x, y, 30, line_height, TAKA::VOCAB::VOCABXP)
    draw_current_and_max_values(x, y, width, actor.exp, actor.next_level_exp,
    normal_color, normal_color)
  end

  def draw_actor_simple_status(actor, x, y)
    contents.font.name = TAKA::MENU::FONTNAME
    contents.font.size = TAKA::MENU::FONTSIZE
    contents.font.bold = true
    draw_actor_name(actor, x - 5, y - 10)
    draw_actor_class(actor, x - 5, y + 5)
    draw_actor_level(actor, x - 5, y + 20)
    draw_actor_hp2(actor, x - 105, y + 80)
    draw_actor_mp2(actor, x - 105, y + 100)
    draw_actor_xp2(actor, x - 105, y + 120)
    draw_actor_icons(actor, x - 105, y + 150)
    draw_actor_graphic(actor, x + 15, y + 75)
  end
end
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

class Window_MenuStatus < Window_Selectable

  def window_width
    Graphics.width - 160
  end

  def col_max
    return 2
  end

  def item_height
    (height - standard_padding * 2) / 2 
  end

  def item_width
    (width - standard_padding * 2 + spacing) / col_max - spacing
  end
end
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
#  This command window appears on the menu screen.
#==============================================================================

class Window_MenuCommand < Window_Command
  
  def make_command_list
    add_main_commands
    add_formation_command
    add_original_commands
  if TAKA::MENU::ACTIVE_LOAD == true
    add_load_command
  end
    add_save_command
  if TAKA::MENU::ACTIVE_DEBUG == true
    add_debug_command
  end
  if TAKA::MENU::ACTIVE_SHOP == true
    add_sellshop_command
  end
    add_game_end_command
  end
  
  def add_load_command
    add_command(TAKA::VOCAB::VOCABLOAD, :load)
  end
 
  def add_debug_command
    add_command(TAKA::VOCAB::VOCABDEBUG, :debug)
  end
 
  def add_sellshop_command
    add_command(TAKA::VOCAB::VOCABSHOP, :sellshop)
  end
end
#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
#  This window displays the party's gold.
#==============================================================================

class Window_Gold < Window_Base

  def refresh
    contents.font.name = TAKA::MENU::FONTNAME
    contents.font.size = TAKA::MENU::FONTSIZE
    contents.font.bold = true
    contents.clear
    draw_currency_value(value, currency_unit, 4, 0, contents.width - 8)
    icon = draw_icon(TAKA::MENU::ICON_GOLD, 0, 0)
  end
  
end
#==============================================================================
# ** Window_Time
#------------------------------------------------------------------------------
#  This window displays the playtime.
#==============================================================================

class Window_Time < Window_Base

  def initialize(x,y)
    super(x, y, 160, 60)
    refresh
  end

  def refresh
    self.contents.clear
    contents.font.name = TAKA::MENU::FONTNAME
    contents.font.size = TAKA::MENU::FONTSIZE
    contents.font.bold = true
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    time = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.draw_text(10, 0, contents.width - 19, contents.height - 2, TAKA::VOCAB::VOCABTIME + time, 2)
    icon = draw_icon(TAKA::MENU::ICON_TIME, 0, 5)
  end

  def update
    super
      if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
  
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_MenuBase
  
  alias :alice_menuex123_start :start
  def start
    alice_menuex123_start
    create_time_window
  end
  
  def create_time_window
    @time_window = Window_Time.new(384, 304)
  end
  
  def create_gold_window
    @gold_window = Window_Gold.new
    @gold_window.x = 384
    @gold_window.y = Graphics.height - @gold_window.height
  end

  def create_status_window
    @status_window = Window_MenuStatus.new(0, 0)
  end

  def create_command_window
    @command_window = Window_MenuCommand.new
    @command_window.set_handler(:item,      method(:command_item))
    @command_window.set_handler(:skill,     method(:command_personal))
    @command_window.set_handler(:equip,     method(:command_personal))
    @command_window.set_handler(:status,    method(:command_personal))
    @command_window.set_handler(:formation, method(:command_formation))
    @command_window.set_handler(:load,      method(:command_load))
    @command_window.set_handler(:save,      method(:command_save))
    @command_window.set_handler(:sellshop,  method(:command_sellshop))
    @command_window.set_handler(:debug,     method(:command_debug))
    @command_window.set_handler(:game_end,  method(:command_game_end))
    @command_window.set_handler(:cancel,    method(:return_scene))
  end

  def command_load
    SceneManager.call(Scene_Load)
  end

  def command_debug
    SceneManager.call(Scene_Debug)
  end

  def command_sellshop
    SceneManager.call(Scene_ShopSell)
  end
end
#==============================================================================
# ** Window_SellShop
#------------------------------------------------------------------------------
#  This window displays a list of sellable goods on the shop screen.
#==============================================================================

class Window_SellShop < Window_HorzCommand
 
  def initialize(window_width, purchase_only)
    @window_width = window_width
    super(0, 0)
  end

  def window_width
    @window_width
  end

  def col_max
    return 2
  end

  def make_command_list
    add_command(TAKA::VOCAB::VOCABSHOP, :sell)
    add_command(Vocab::ShopCancel, :cancel)
  end
end
#==============================================================================
# ** Scene_SellShop
#------------------------------------------------------------------------------
#  This class performs shop screen processing.
#==============================================================================
class Scene_ShopSell < Scene_MenuBase
  
  def start
    super
    create_help_window
    create_gold_window
    create_command_window
    create_dummy_window
    create_number_window
    create_status_window
    create_category_window
    create_sell_window
  end
  
  def create_gold_window
    @gold_window = Window_Gold.new
    @gold_window.viewport = @viewport
    @gold_window.x = Graphics.width - @gold_window.width
    @gold_window.y = @help_window.height
  end
  
  def create_command_window
    @command_window = Window_SellShop.new(@gold_window.x, @purchase_only)
    @command_window.viewport = @viewport
    @command_window.y = @help_window.height
    @command_window.set_handler(:sell,   method(:command_sell))
    @command_window.set_handler(:cancel, method(:return_scene))
  end
  
  def create_dummy_window
    wy = @command_window.y + @command_window.height
    wh = Graphics.height - wy
    @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
    @dummy_window.viewport = @viewport
  end
  
  def create_number_window
    wy = @dummy_window.y
    wh = @dummy_window.height
    @number_window = Window_ShopNumber.new(0, wy, wh)
    @number_window.viewport = @viewport
    @number_window.hide
    @number_window.set_handler(:ok,     method(:on_number_ok))
    @number_window.set_handler(:cancel, method(:on_number_cancel))
  end
  
  def create_status_window
    wx = @number_window.width
    wy = @dummy_window.y
    ww = Graphics.width - wx
    wh = @dummy_window.height
    @status_window = Window_ShopStatus.new(wx, wy, ww, wh)
    @status_window.viewport = @viewport
    @status_window.hide
  end
  
  def create_category_window
    @category_window = Window_ItemCategory.new
    @category_window.viewport = @viewport
    @category_window.help_window = @help_window
    @category_window.y = @dummy_window.y
    @category_window.hide.deactivate
    @category_window.set_handler(:ok,     method(:on_category_ok))
    @category_window.set_handler(:cancel, method(:on_category_cancel))
  end
  
  def create_sell_window
    wy = @category_window.y + @category_window.height
    wh = Graphics.height - wy
    @sell_window = Window_ShopSell.new(0, wy, Graphics.width, wh)
    @sell_window.viewport = @viewport
    @sell_window.help_window = @help_window
    @sell_window.hide
    @sell_window.set_handler(:ok,     method(:on_sell_ok))
    @sell_window.set_handler(:cancel, method(:on_sell_cancel))
    @category_window.item_window = @sell_window
  end
  
  def activate_sell_window
    @category_window.show
    @sell_window.refresh
    @sell_window.show.activate
    @status_window.hide
  end
  
  def command_sell
    @dummy_window.hide
    @category_window.show.activate
    @sell_window.show
    @sell_window.unselect
    @sell_window.refresh
  end
  
  def on_category_ok
    activate_sell_window
    @sell_window.select(0)
  end
  
  def on_category_cancel
    @command_window.activate
    @dummy_window.show
    @category_window.hide
    @sell_window.hide
  end
  
  def on_sell_ok
    @item = @sell_window.item
    @status_window.item = @item
    @category_window.hide
    @sell_window.hide
    @number_window.set(@item, max_sell, selling_price, currency_unit)
    @number_window.show.activate
    @status_window.show
  end
  
  def on_sell_cancel
    @sell_window.unselect
    @category_window.activate
    @status_window.item = nil
    @help_window.clear
  end
  
  def on_number_ok
    Sound.play_shop
    case @command_window.current_symbol
    when :sell
      do_sell(@number_window.number)
    end
    end_number_input
    @gold_window.refresh
    @status_window.refresh
  end
  
  def on_number_cancel
    Sound.play_cancel
    end_number_input
  end
  
  def do_sell(number)
    $game_party.gain_gold(number * selling_price)
    $game_party.lose_item(@item, number)
  end
  
  def end_number_input
    @number_window.hide
    case @command_window.current_symbol
    when :sell
      activate_sell_window
    end
  end
  
  def max_sell
    $game_party.item_number(@item)
  end
  def money
    @gold_window.value
  end
  
  def currency_unit
    @gold_window.currency_unit
  end
  
  def selling_price
    @item.price / 2
  end

end
#==============================================================================
# ** Sprite_Cursor
#------------------------------------------------------------------------------
#  A sprite class to create the cursor menu.
#==============================================================================
class Sprite_Cursor < Sprite
  
  def initialize(viewport=nil, window)
    super(viewport)
    @window = window
    @name = TAKA::MENU::CURSOR
  end
  
  def update
    super
    update_visibility
    update_bitmap
    update_position
  end
  
  def update_bitmap
    self.bitmap = Cache.system(@name)
  end
  
  def update_visibility
    @index = @window.index
    if @window.close?
      self.visible = false
    elsif !@window.visible
      self.visible = false
    elsif @index < 0
      self.visible = false
    else
      self.visible = true
    end
  end
  
  def update_position
    @index = @window.index
    rect = @window.item_rect(@index)
    self.x = @window.x + rect.x
    self.y = @window.y + rect.y
    self.z = @window.z + 100
  end
  
  def dispose    
    self.bitmap.dispose
    super
  end
  
end
#==============================================================================
# ** Window_Selectable
#------------------------------------------------------------------------------
#  This window class contains cursor movement and scroll functions.
#==============================================================================
class Window_Selectable
  
  alias :alice_menu_cursor_initialize :initialize
  def initialize(*args)
    @sprite_cursor = Sprite_Cursor.new(self)
    alice_menu_cursor_initialize(*args)
  end
  
  alias :alice_menu_cursor_update :update
  def update
    @sprite_cursor.update
    alice_menu_cursor_update    
  end
  
  alias :alice_menu_cursor_dispose :dispose
  def dispose
    @sprite_cursor.dispose
    alice_menu_cursor_dispose
  end
end


Engines: RPG Maker VXAce.

Créditos:
  • Takkun: Por criar o Script.

Eu só não achei legal algumas fontes ficarem "espremidas", tipo a exp, que não tem
assim taaanta necessidade de saber o valor. Mas ficou um menu bonitinho, eu acho
as informações assim em duas colunas bem melhor do que em uma só, fica menos
vazio e tals. Bem legal!
  :ok:

 Gostei também e faço minhas palavras do Gerar, só o XP mesmo ficou exprimido.
Ainda ficou um espaço vazio ali, porque não, número de passos como FF? :3

2010 ~ 2016 / 2024

Citação de: King Gerar online 10/09/2015 às 08:08
Eu só não achei legal algumas fontes ficarem "espremidas", tipo a exp, que não tem
assim taaanta necessidade de saber o valor. Mas ficou um menu bonitinho, eu acho
as informações assim em duas colunas bem melhor do que em uma só, fica menos
vazio e tals. Bem legal!
  :ok:

Verdade, obrigado pelo comentário Gerar.
Ficam mesmo, minha ideia inicial era fazer um menu de 3 colunas onde as janelas apareceriam como Pop up's (quem sabe uma ideia futura), mas obrigado parceiro pelo seu comentário.

Abração!


Citação de: Vash online 10/09/2015 às 22:26
Gostei também e faço minhas palavras do Gerar, só o XP mesmo ficou exprimido.
Ainda ficou um espaço vazio ali, porque não, número de passos como FF? :3

FF tenho algo aqui bacana que em breve irei postar.
Em breve faço modificações nesse script, mesmo assim obrigado Vash.

Abraço parça!

Gostei o script. Também achei ruim a fonte um pouco exprimida. O mais legal é o modo dinâmico que ele fica. Gostei bastante do script :)
Prazer, Terror dos Modinha

Para resolver o problema da fonte exprimida é só aumentar o tamanho do quadro que encaixa ela, ou então diminuir o tamanho da fonte (o que ao meu ver, não é o mais adequado nesta situação).

Gostei do menu, achei ele simples, porém abrangendo todas as informações necessárias. Mas ao meu ver, eu só retiraria o gráfico do charset dos personagens :D
Tio R. está voltando para o Maker! Confira o meu projeto clicando na imagem abaixo!

Como todos já disseram, menu muito legal. Bem organizado e bonito.
Não vou nem comentar sobre a fonte espremida, pois fora ela, ficou tudo muito legal!


Aff
sempre postam scripts q pendem um monte de coisa
esse aki ta pedindo graphcis/cursor

por nunca colocam especicações quando postam scripts?
não é todo mundo q nasceu sabendo como  fazer um script  funcionar como deve

Desculpe incomodar mas assim, coloquei o script no meu projeto mas acabou ficando desse jeito:

https://www.mediafire.com/view/0w08sfudcrrz4i1/Sem_t%EDtulo.png/file

Gostaria de saber como faço pra arrumar pois esse script foi de longe o melhor script de menu que eu vi até agora e mais uma vez desculpe incomodar.

~Puddinn
G O O D   J O J O

Citação de: PuddinnDeDolly online 25/07/2019 às 19:19
Desculpe incomodar mas assim, coloquei o script no meu projeto mas acabou ficando desse jeito:

https://www.mediafire.com/view/0w08sfudcrrz4i1/Sem_t%EDtulo.png/file

Gostaria de saber como faço pra arrumar pois esse script foi de longe o melhor script de menu que eu vi até agora e mais uma vez desculpe incomodar.

~Puddinn

Certamente fez algo errado u_u...

Brinks, acho que ele talvez tenha esquecido de algo, aqui deu isso também,

Só colocar esse script abaixo do dele, faz e me diga se funcionou  :ok:

class Scene_Menu < Scene_MenuBase
  alias :taka_menu_ex_create_command_window :create_command_window
   def create_command_window
    taka_menu_ex_create_command_window
    @command_window.x = Graphics.width - @command_window.width
  end
end

Citação de: Raizen online 25/07/2019 às 19:35
Certamente fez algo errado u_u...

Brinks, acho que ele talvez tenha esquecido de algo, aqui deu isso também,

Só colocar esse script abaixo do dele, faz e me diga se funcionou  :ok:

class Scene_Menu < Scene_MenuBase
  alias :taka_menu_ex_create_command_window :create_command_window
   def create_command_window
    taka_menu_ex_create_command_window
    @command_window.x = Graphics.width - @command_window.width
  end
end


Valeu mesmo, graças a isso o menu finalmente está do jeito que deveria. :heart:
G O O D   J O J O