.::RPG Joker::.
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Script]Ring Menu

Ir para baixo

[Script]Ring Menu Empty [Script]Ring Menu

Mensagem por X-Auron Ter Jun 10, 2008 11:57 pm

Um Ring Menu, criado por Momomo, e editado por AntiCasper

Código:

#==============================================================================
# Ring Item Menu Por AntiCasper
# Modulo de Ring criado originalmente por Momomo
#
# Para funcionar, coloque em uma nova sessão acima da main
#
# Configurações
#
# Diametro da Circunferencia
ARO = 86
# Som ao Mudar de Item
SOM = "056-Right02"
# X e Y Central
X = 305
Y = 220
# Numero da opção do menu (defaut = 0)
POS = 0
# Exibe o Spriteset do Mapa?
SPRITESET = true
# Possui Imagem de Fundo?
FUNDO = false
# Se possui, diga o seu nome na pasta Pictures
IMG = ""
# Possui Janela de Help?
HELP = true
# Possui Janela de Descrição?
JANDESC = true
# Descrição da Janela de itens
DESCRIÇÃO = "Itens"
# Janela de Target:
TARGET = Window_Target
#
# Para não haver problemas com o script, não edite abaixo dessa linha
#
# De créditos por usar ^^
#==============================================================================
end
#==============================================================================
class Window_Desc < Window_Base
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  def initialize(desc)
    super(80, 360, 480, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    @desc = desc
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 128, 32, @desc)
    end
  end
#===========================================================
class Window_Ring_Item < Window_Selectable

STARTUP_FRAMES = 70
MOVING_FRAMES = 40
RING_R = AC::ARO

Picture_DISABLE = RPG::Cache.picture("")

SE_STARTUP = AC::SOM

MODE_START = 1
MODE_WAIT  = 2
MODE_MOVER = 3
MODE_MOVEL = 4

attr_accessor :index

#-----------------------------------------------------------------
# Iniciar
#-----------------------------------------------------------------
def initialize( center_x, center_y )

super(0, 0, 640, 480)

self.contents = Bitmap.new(width-32, height-32)
self.contents.font.name = "Arial"
self.opacity = 0
self.back_opacity = 0
self.windowskin = RPG::Cache.windowskin("")


for i in 1...$data_items.size
@item_max = i
end
@cx = center_x - 16
@cy = center_y - 16
@index = 0
setup_move_start
refresh


end
#-----------------------------------------------------------------
def itemu
    return @data[self.index]
  end

#-----------------------------------------------------------------
#-----------------------------------------------------------------
# Update
#-----------------------------------------------------------------
def update
super
refresh
end
#-----------------------------------------------------------------
# Refresh
#-----------------------------------------------------------------
def refresh
self.contents.clear
    @data = []
    # Adicionar Item
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
    # Também é adicionados os equipamentos e os Itens chave caso se esteja fora
    # de uma batalha
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          @data.push($data_armors[i])
        end
      end
    end
    # Caso haja algum Item aqui a janela é desenhada, junto com todos os Itens
    @item_max = @data.size
    if @item_max > 0
      for i in 0...@item_max
case @mode
when MODE_START
refresh_start
when MODE_WAIT
refresh_wait
when MODE_MOVER
refresh_move(1)
when MODE_MOVEL
refresh_move(0)
end
      end
    end    # Caso haja algum Item aqui a janela é desenhada, junto com todos os Itens
    @item_max = @data.size


end

#-----------------------------------------------------------------

def refresh_start
d1 = 2.0 * Math::PI / @item_max
d2 = 1.0 * Math::PI / STARTUP_FRAMES
r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i

draw_item(x, y, i)

end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end

#-----------------------------------------------------------------

def refresh_wait
d = 2.0 * Math::PI / @item_max
for i in 0...@item_max
j = i - @index
x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
#-----------------------------------------------------------------

def refresh_move( mode )
d1 = 2.0 * Math::PI / @item_max
d2 = d1 / MOVING_FRAMES
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( RING_R * Math.sin( d ) ).to_i
y = @cy - ( RING_R * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#-----------------------------------------------------------------

def draw_item(x, y, i)

    @item = @data[i]
    case @item
    when RPG::Item
      number = $game_party.item_number(@item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(@item.id)
    when RPG::Armor
      number = $game_party.armor_number(@tem.id)
    end

  if @index == i
    rect = Rect.new(x, y, 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(@item.icon_name)
    self.contents.blt(x, y, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.draw_text(x + 5, y+5, 24, 32, number.to_s, 2)
    else
    rect = Rect.new(x, y, 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(@item.icon_name)
    opacity = 120
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)   
    self.contents.draw_text(x + 5, y+5, 24, 32, number.to_s, 2)
    end


end
#-----------------------------------------------------------------

def disable_item(index)
@disabled[index] = true
end

#-----------------------------------------------------------------

def setup_move_start
@mode = MODE_START
@steps = STARTUP_FRAMES

if  SE_STARTUP != nil and SE_STARTUP != ""
Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
end
end

#-----------------------------------------------------------------

def setup_move_move(mode)
if mode == MODE_MOVER
@index -= 1
@index = @data.size - 1 if @index < 0
elsif mode == MODE_MOVEL
@index += 1
@index = 0 if @index >= @data.size
else
return
end
@mode = mode
@steps = MOVING_FRAMES
end

#-----------------------------------------------------------------

def animation?
return @mode != MODE_WAIT
end
    def update_help
    @help_window.set_text(self.itemu == nil ? "" : self.itemu.description)
  end
end
#==============================================================================
# Scene_Item
#------------------------------------------------------------------------------
# Esta classe processa a tela de Itens
#==============================================================================

class Scene_Item
 
  #--------------------------------------------------------------------------
  # - Processamento Principal
  #--------------------------------------------------------------------------
 
  def main
    # Aqui são criadas a imagem do sprite set
    if AC::SPRITESET == true
    @spriteset = Spriteset_Map.new
    end
    @sprite = Sprite.new
    # Define a imagem do fundo
    if AC::FUNDO == true
    @sprite.bitmap = RPG::Cache.picture(AC::IMG)
    end
    # Define Texto da janela
    if AC::JANDESC == true
    @desc = Window_Desc.new(AC::DESCRIÇÃO)
    end
    @item_window = Window_Ring_Item.new(AC::X,AC::Y)
    if AC::HELP == true
    @help_window = Window_Help.new
    @item_window.help_window = @help_window
    end
    @item_window.index = 0
    # Criar janela alvo (definir como invisível / inativa)
    @target_window = AC::TARGET.new
    @target_window.visible = false
    @target_window.active = false
    # Executar transição
    Graphics.transition
    # Loop principal
    loop do
      # Atualizar a tela de jogo
      Graphics.update
      # Atualizar a entrada de informações
      Input.update
      # Atualização do frame
      update
      # Abortar o loop se a tela foi alterada
      if $scene != self
        break
      end
    end
    # Prepara para transição
    Graphics.freeze
    # Exibição das janelas
    if AC::HELP == true
    @help_window.dispose
    end
    @item_window.dispose
    @target_window.dispose
    if AC::SPRITESET == true
    @spriteset.dispose
    end
    @sprite.dispose
    if AC::JANDESC == true
    @desc.dispose
    end
  end
 
  #--------------------------------------------------------------------------
  # - Atualização do Frame
  #--------------------------------------------------------------------------
 
  def update
    # Atualizar janelas
    if AC::HELP == true
    @help_window.update
    end
    @item_window.update
    @target_window.update
    # Se a janela de Itens estiver ativa: chamar update_item
    if @item_window.active
      update_item
      return
    end
    # Se a janela alvo estiver ativa: chamar update_target
    if @target_window.active
      update_target
      return
    end
  end
 
  #--------------------------------------------------------------------------
  # - Atualização do Frame (Quando a janela de Itens estiver Ativa)
  #--------------------------------------------------------------------------
 
 
  def update_item
    # Se o botão B for pressionado
    if Input.trigger?(Input::B)
      # Reproduzir SE de cancelamento
      $game_system.se_play($data_system.cancel_se)
      # Alternar para a tela de Menu
      $scene = Scene_Menu.new(AC::POS)
      return
    end
    # Se o botão C for pressionado
    if Input.trigger?(Input::C)
      # Selecionar os dados escolhidos na janela de Itens
      @item = @item_window.itemu
      # Se não for um Item usável
      unless @item.is_a?(RPG::Item)
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Se não puder ser usado
      unless $game_party.item_can_use?(@item.id)
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Reproduzir SE de OK
      $game_system.se_play($data_system.decision_se)
      # Se o alcance do Item for um aliado
      if @item.scope >= 3
        # Ativar a janela alvo
        @item_window.active = false
        @target_window.x = (@item_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        # Definir a posição do cursor no alvo (aliado / todo grupo)
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      # Se o alcance for outro senão um aliado
      else
        # Se o ID do evento comum for inválido
        if @item.common_event_id > 0
          # Chamar evento comum da reserva
          $game_temp.common_event_id = @item.common_event_id
          # Reproduzir SE do Item
          $game_system.se_play(@item.menu_se)
          # Se for consumível
          if @item.consumable
            # Diminui 1 Item da quantidade total
            $game_party.lose_item(@item.id, 1)
            # Desenhar o Item
            @item_window.draw_item(@item_window.index)
          end
          # Alternar para a tela do Mapa
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    # - Animação do Menu
    return if @item_window.animation?
    if Input.press?(Input::UP) or  Input.press?(Input::LEFT)
    $game_system.se_play($data_system.cursor_se)
    @item_window.setup_move_move(Window_Ring_Item::MODE_MOVEL)
    return
    end

    if Input.press?(Input::DOWN) or  Input.press?(Input::RIGHT)
    $game_system.se_play($data_system.cursor_se)
    @item_window.setup_move_move(Window_Ring_Item::MODE_MOVER)
    return
    end
  end
 
  #--------------------------------------------------------------------------
  # - Atualização do Frame (Quando a janela alvo estiver Ativa)
  #--------------------------------------------------------------------------
 
  def update_target
    # Se o botão B for pressionado
    if Input.trigger?(Input::B)
      # Reproduzir SE de cancelamento
      $game_system.se_play($data_system.cancel_se)
      # Se for impossível utilizar porque o Item não existe mais
      unless $game_party.item_can_use?(@item.id)
        # Recriar os conteúdos da janela de ìtens
        @item_window.refresh
      end
      # Apagar a janela alvo
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # Se o botão C for pressionado
    if Input.trigger?(Input::C)
      # Se chegar ao número 0 da quantidade de Itens
      if $game_party.item_number(@item.id) == 0
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Se o alvo for todos o Grupo
      if @target_window.index == -1
        # Os efeitos serão aplicados a todos
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # Se for apenas um aliado o alvo
      if @target_window.index >= 0
        # Aplicar os efeitos apenas no Herói alvo
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # Se o Item for usado
      if used
        # Reproduzir SE do Item
        $game_system.se_play(@item.menu_se)
        # Se for consumível
        if @item.consumable
          # Diminui 1 item da quantidade total
          $game_party.lose_item(@item.id, 1)
        end
        # Recriar os conteúdos da janela alvo
        @target_window.refresh
        # Se todos no Grupo de Heróis estiverm mortos
        if $game_party.all_dead?
          # Alternar para a tela de Game Over
          $scene = Scene_Gameover.new
          return
        end
        # Se o ID do evento comum for válido
        if @item.common_event_id > 0
          # Chamar o evento comum da reserva
          $game_temp.common_event_id = @item.common_event_id
          # Alternar para a tela do Mapa
          $scene = Scene_Map.new
          return
        end
      end
      # Se o Item não for usado
      unless used
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

Flws... Wink
X-Auron
X-Auron
Moderador
Moderador

Masculino
Número de Mensagens : 13
Idade : 28
Data de inscrição : 10/06/2008

Ficha do personagem
Reputação:
[Script]Ring Menu Left_bar_bleue19/300[Script]Ring Menu Empty_bar_bleue  (19/300)

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos