[Script]Ring Menu
Página 1 de 1
[Script]Ring Menu
Um Ring Menu, criado por Momomo, e editado por AntiCasper
Flws...
- 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...
X-Auron- Moderador
-
Número de Mensagens : 13
Idade : 28
Data de inscrição : 10/06/2008
Ficha do personagem
Reputação:
(19/300)
Tópicos semelhantes
» [Script+Demo] Mog Menu Status Aya V 1.0
» Novo menu para o VX
» [Script] HUD
» [Script] Mk Vx DeadlyDan_MessageSound
» Novo menu para o VX
» [Script] HUD
» [Script] Mk Vx DeadlyDan_MessageSound
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos