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

Lune Shadow Equip

Iniciado por Raizen, 09/12/2013 às 23:22

Lune Shadow Equip

Compativel com: RMVXAce
Compatibilidade :boa
Facilidade de uso: fácil
Lag gerado: baixo
[box class=titlebg]
Condições de Uso
[/box]
  Pode ser modificado, e divulgado em outros lugares, mas peço que não retire os créditos.

[box class=titlebg]
Para que serve o script
[/box]

O script adiciona um Scene_Equip modificado no menu, aonde é possível adicionar uma imagem de fundo para mostrar aonde vai cada equipamento, além disso ele deixa apenas as janelas ativas visiveis, assim possibilitando mais funções em uma mesma cena.


[box class=titlebg]
Script.
[/box]

#=======================================================
#         Lune Shadow Equip
# Autor: Raizen
# Comunidade: www.centrorpg.com
# O script mudará o clássico Scene_Equip para outro com mais funções,
# que mostra a posição de cada equipamento do jogador, além de possibilitar
# imagens de fundo.
#=======================================================


module Lune_Equips_Scene
Actor = Array.new

#=======================================================
# CONFIGURE ABAIXO APENAS
#=======================================================
# Habilitar uma janela para cada equipamento?
# true para sim, false para não
Window = true


# Posição dos equips por padrão
# Coloque da seguinte forma 1 => [30, 140], e assim em diante
Default = {
# Nome da Imagem, deve estar na pasta Graphics/System
'Imagem' => 'equip_shadow',
0 => [30, 140],
1 => [300, 100],
2 => [230, 20],
3 => [200, 60],
4 => [200, 240],}

=begin
# Caso queira fazer especificamente para algum actor do database,
# utilize o seguinte template.
Actor[id] = {
'Imagem' => 'nome_da_imagem',
0 => [x, y],
1 => [x, y],
2 => [x, y],
3 => [x, y],
4 => [x, y],}

=end
# Exemplo actor de id 3 do database

Actor[3] = {
# Nome da Imagem, deve estar na pasta Graphics/System
'Imagem' => 'equip_shadow',
0 => [50, 140],
1 => [300, 100],
2 => [230, 20],
3 => [200, 60],
4 => [200, 240],}
# Nome da imagem no cursor
# Deve estar na pasta Graphics/System
Cursor = 'cursor'

# Posição do cursor
Cursor_x = 120
Cursor_y = 30

end

#=======================================================
#=======================================================
#=======================================================
#============== Aqui começa o script!!==================
#=======================================================
#=======================================================
#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da tela de equipamentos.
#==============================================================================

class Scene_Equip < Scene_MenuBase
include Lune_Equips_Scene
alias :lune_equip_start :start
alias :lune_on_item_ok :on_item_ok
alias :lune_command_optimize :command_optimize
alias :lune_command_clear :command_clear
alias :lune_on_actor_change :on_actor_change
alias :lune_terminate :terminate
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def start
    lune_equip_start
    create_shadow_equip
    initialize_windows if Window
    @cursor = Sprite.new
    @cursor.bitmap = Cache.system(Cursor)
    @cursor.z = 200
    @cursor.opacity = 0
    @cursor_index = 0
    @item_window.x += 10 until @item_window.x >= Graphics.width
    @status_window.x -= 10 until @status_window.x <= -@status_window.width
    @slot_window.x += 10 until @slot_window.x >= Graphics.width
    @command_window.x += 10 until @command_window.x >= Graphics.width
  end
  #--------------------------------------------------------------------------
  # * Inicialização das janelas auxiliares
  #--------------------------------------------------------------------------
  def initialize_windows
    @ekps_windows = Array.new(4)
    if Actor[@actor.id]
      a = @actor.id
      for n in 0..@ekps_windows.size
        @ekps_windows[n] = Window_Base.new(Actor[a][n][0], @help_window.height+Actor[a][n][1] + 2, 220, 40)
        @ekps_windows[n].back_opacity = 0
      end
    else
      for n in 0..@ekps_windows.size
        @ekps_windows[n] = Window_Base.new(Default[n][0], @help_window.height+Default[n][1] + 2, 220, 40)
        @ekps_windows[n].back_opacity = 0 
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Item [Confirmação]
  #--------------------------------------------------------------------------
  def on_item_ok
    lune_on_item_ok
    @shadow_window.actor = @actor
    @shadow_window.refresh
  end
  #--------------------------------------------------------------------------
  # * Comando [Otimizar]
  #--------------------------------------------------------------------------
  def command_optimize
    lune_command_optimize
    @shadow_window.refresh
  end
  #--------------------------------------------------------------------------
  # * Comando [Remover]
  #--------------------------------------------------------------------------
  def command_clear
    lune_command_clear
    @shadow_window.refresh
  end
  #--------------------------------------------------------------------------
  # * Atualização
  #--------------------------------------------------------------------------
  def update
    super
    @item_window.active ? move_in : move_out
    @command_window.active ? move_com_in : move_com_out
    @slot_window.active ? @cursor.opacity = 255 : @cursor.opacity = 0
    if @cursor_index != @slot_window.index && @actor != nil
      @cursor_index = @slot_window.index
      return if @cursor_index < 0
      if Actor[@actor.id]
        @cursor.x = Actor[@actor.id][@cursor_index][0] + Cursor_x
        @cursor.y = Actor[@actor.id][@cursor_index][1] + @help_window.height + Cursor_y
      else
        @cursor.x = Default[@cursor_index][0] + Cursor_x
        @cursor.y = Default[@cursor_index][1] + @help_window.height + Cursor_y
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização da posição das janelas de equipamentos
  #--------------------------------------------------------------------------
  def move_com_in
    @command_window.x -= 10 unless @command_window.x <= Graphics.width - @command_window.width
  end
  def move_com_out
    @command_window.x += 10 unless @command_window.x >= Graphics.width
  end
  def move_in
    @item_window.x -= 10 unless @item_window.x <= 0
    @status_window.x += 10 unless @status_window.x >= 0
  end
  def move_out
    @item_window.x += 10 unless @item_window.x >= Graphics.width
    @status_window.x -= 10 unless @status_window.x <= -@status_window.width
  end
  #--------------------------------------------------------------------------
  # * Criação da janela de imagens
  #--------------------------------------------------------------------------
  def create_shadow_equip
    @shadow_window = Window_ShadowEquip.new(0, @help_window.height)
    @shadow_window.actor = @actor
    @shadow_window.refresh
  end
  #--------------------------------------------------------------------------
  # * Processo da mudança de herói
  #--------------------------------------------------------------------------
  def on_actor_change
    lune_on_actor_change
    if Actor[@actor.id]
      a = @actor.id
      for n in 0..@ekps_windows.size - 1
        @ekps_windows[n].x = Actor[a][n][0]
        @ekps_windows[n].y = @help_window.height + Actor[a][n][1] + 2
      end
    else
      for n in 0..@ekps_windows.size - 1
        @ekps_windows[n].x = Default[n][0]
        @ekps_windows[n].y = @help_window.height + Default[n][1] + 2
      end
    end
    @shadow_window.actor = @actor
    @cursor_index = @slot_window.index
  end
  #--------------------------------------------------------------------------
  # * Finalização do processo
  #--------------------------------------------------------------------------
  def terminate
    lune_terminate
    dispose_cursor if Window
  end
  #--------------------------------------------------------------------------
  # * Dispose da imagem do cursor
  #--------------------------------------------------------------------------
  def dispose_cursor
    @cursor.bitmap.dispose
    @cursor.dispose
  end
end


#==============================================================================
# ** Window_EquipSlot
#------------------------------------------------------------------------------
#  Esta janela exibe a lista de itens que estão equipados com em um herói.
#==============================================================================

class Window_ShadowEquip < Window_Base
  #--------------------------------------------------------------------------
  # * Variáveis públicas
  #--------------------------------------------------------------------------
  attr_reader   :status_window            # Janela de atributos
  attr_reader   :item_window              # Janela de itens
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #     x      : coordenada X
  #     y      : coordenada Y
  #     width  : largura
  #--------------------------------------------------------------------------
  def initialize(x, y)
    @y = y
    super(x, y, Graphics.width, window_height)
    @actor = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
  def window_height
    Graphics.height - @y
  end
  #--------------------------------------------------------------------------
  # * Atualização de cena
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    refresh_scenes unless @actor.nil?
  end
  #--------------------------------------------------------------------------
  # * Atualização de cena do ator
  #--------------------------------------------------------------------------
  def refresh_scenes
    change_color(system_color, enable?(1))
    if Lune_Equips_Scene::Actor[@actor.id]
      bitmap = Cache.system(Lune_Equips_Scene::Actor[@actor.id]['Imagem'])
    else
      bitmap = Cache.system(Lune_Equips_Scene::Default['Imagem'])
    end
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(0, 0, bitmap, rect, 255) 
    if Lune_Equips_Scene::Actor[@actor.id]
      act = Lune_Equips_Scene::Actor[@actor.id]
    else
      act = Lune_Equips_Scene::Default
    end
    for n in 0..@actor.equips.size - 1
      draw_item_name(@actor.equips[n], act[n][0], act[n][1], enable?(0))
    end
  end
  #--------------------------------------------------------------------------
  # * Definição de herói
  #     actor : herói
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Definição de habilitação do item
  #     item : item
  #--------------------------------------------------------------------------
  def enable?(index)
    @actor ? @actor.equip_change_ok?(index) : false
  end
end


[box class=titlebg]
Imagens
[/box]

Spoiler
[close]

Spoiler
[close]

[box class=titlebg]
Download
[/box]

Caso ache necessário :)
https://www.mediafire.com/?0bf34m0kjhyk05g

[box class=titlebg]
Créditos e Avisos
[/box]

Raizen

Parece interessante e bem customizável, meus parabéns!  :blink:

Esse Raizen vindo com tudo ein.
Belo script Raizen, continue trazendo otimos scripts para todos nos \o/

 :clap:Muito bom Raizen! Bom saber que agora você vai vir com mais scripts para nós!
~ Masked

Bem, como já havia dito, é muito bacana, principalmente pelo fato de poder
se usar uma imagem lá atrás, dá pra colocar os equips nos lugares certinhos e tals.
Vi aqui e ficou legal os sliding das windows tbm. Show man!
  :ok:

Citação de: Mistyrol online 09/12/2013 às 23:30
Parece interessante e bem customizável, meus parabéns!  :blink:
Parcialmente customizável k xD, vlws ai man x].

Citação de: Allann Dsr! online 09/12/2013 às 23:46
Esse Raizen vindo com tudo ein.
Belo script Raizen, continue trazendo otimos scripts para todos nos \o/
AS ideias estão acabando >_>, mas estou tentando voltar a ativa, vlws ae :D.

Citação de: Masked online 10/12/2013 às 00:00
:clap:Muito bom Raizen! Bom saber que agora você vai vir com mais scripts para nós!
Tentando, quando sobra tempo xD, vlws man.
Citação de: King Gerar online 10/12/2013 às 08:08
Bem, como já havia dito, é muito bacana, principalmente pelo fato de poder
se usar uma imagem lá atrás, dá pra colocar os equips nos lugares certinhos e tals.
Vi aqui e ficou legal os sliding das windows tbm. Show man!
  :ok:
Ah você testou mesmo, vlws man xD, sim tentei dar um efeito melhorzinho :P

Ok que meu comentário será apenas mais um... But...
Parabéns Raizen! É um ótimo script!
Como o King falou, o sliding das janelas ficou muito bom!
Vi também que há a possibilidade de usar imagens diferentes para os actors.. Isso deixa esse script ainda mais atraente!!

Parabéns de novo Raizen, voltou com tudo mesmo hein ?!?! hehe
"Designer e Eventer. Manja um pouco de mapeamento e está aprendendo Pixel Art."


Meu projeto está passando por uma remodelagem, aguardem atualizações!!! (clique na barrinha pra ver o projeto)



Citação de: Hermanngui online 10/12/2013 às 09:21
Ok que meu comentário será apenas mais um... But...
Parabéns Raizen! É um ótimo script!
Como o King falou, o sliding das janelas ficou muito bom!
Vi também que há a possibilidade de usar imagens diferentes para os actors.. Isso deixa esse script ainda mais atraente!!

Parabéns de novo Raizen, voltou com tudo mesmo hein ?!?! hehe
Ah pods cre, até eu esqueci disso k, vou colocar no tópico, sim da pra criar um diferente para cada actor se desejar :P, bom vlws man em breve trarei mais coisas, eu acho xD.

 Eita voltando mano das antigas que deu uma sumido por uma causa nobre, parabéns pelo script, acho que nunca tinha pensado nisso, que bom que está voltando old friend, caso precisar de uma ajuda 'design/script' em algum projeto pode contar comigo.