Vagabond Lv.5
Age : 33 Avertissements : 3 Inscrit le : 30/05/2009 Messages : 82
| Sujet: [VX] Menu tournant pour combat Mer 28 Oct 2009 - 11:35 | |
| Bonjour ! J'ai un nouveau script ! Auteur : Batalha Nom : Menu Oval de Batalha 1.01 Screen : Informations : Image à mettre dans le dosier Graphic/System et à nommer : Spin40 script : - Code:
-
#============================================================================== # Menu Oval de Batalha # Criado por ziifee #============================================================================== #============================== # # www.rpgmakervx-fr.com # #==============================
module Zii # Número identificador do ícone (Vertical x 16 + Horizontal - 1) FIGHT = 132 # Lutar ESCAPE = 143 # Fugir ATTACK = 1 # Atacar GUARD = 52 # Defender SKILL = 128 # Habilidades ITEM = 144 # Itens # Direção da rotação (Esquerda ou Direita) TURN = "Direita" # Usar faces no menu? ("Faces" para usar e "" para nada) STATUS_FACE = "Faces" # Mostrar nome dos heróis no menu? ("Nomes" para usar e "" para nada) STATUS_LINE = "Nomes" # Tamanho das linhas (Padrão: 20) LINE_SIZE = 14 #-------------------------------------------------------------------------- # Configuração de direção da rotação #-------------------------------------------------------------------------- def self.turn_normal? return false if TURN == "Esquerda" return true if TURN == "Direita" return true end #-------------------------------------------------------------------------- # Configuração de exibição #-------------------------------------------------------------------------- def self.battle_face? return true if STATUS_FACE == "Faces" return false end #-------------------------------------------------------------------------- # Configuração de exibição #-------------------------------------------------------------------------- def self.line_name? return true if STATUS_LINE == "Nomes" return false end end
#============================================================================== # Window_Base #==============================================================================
class Window_Base
def draw_face(face_name, face_index, x, y, size = 96, opacity = 255) bitmap = Cache.face(face_name) rect = Rect.new(0, 0, 0, 0) rect.x = face_index % 4 * 96 + (96 - size) / 2 rect.y = face_index / 4 * 96 + (96 - size) / 2 rect.width = size rect.height = size self.contents.blt(x, y, bitmap, rect, opacity) bitmap.dispose end
def draw_actor_face(actor, x, y, size = 96, opacity = 255) draw_face(actor.face_name, actor.face_index, x, y, size, opacity) end end
#============================================================================== # Window_SpinCommand #------------------------------------------------------------------------------ # Esta classe comanda a rotação do menu #==============================================================================
class Window_SpinCommand < Window_Base attr_reader :index attr_reader :help_window
def initialize(cx, cy, commands, setting = {}) @radius = setting.has_key?("R") ? setting["R"] : 40 @speed = setting.has_key?("S") ? setting["S"] : 36 @spin_back = setting.has_key?("G") ? setting["G"] : "" @spin_line = setting.has_key?("L") ? setting["L"] : nil x, y = cx - @radius - 28, cy - @radius - 28 width = height = @radius * 2 + 56 super(x, y, width, height) self.opacity = 0 @index = 0 @commands = commands @spin_right = true @spin_count = 0 update_cursor end
def draw_spin_graphic(i, cx, cy) case command_kind(i) when "icon" draw_icon(command_pull(i), cx - 12, cy - 12, command_enabled?(i))
end end
def refresh set_spin end
def draw_item(index, enabled = true) @commands[index][3] = enabled set_spin end def command_name(index = @index) return "" if index < 0 name = @commands[index][0] return name != nil ? name : "" end def command_kind(index) result = @commands[index][1] return result != nil ? result : "" end def command_pull(index) result = @commands[index][2] return result != nil ? result : "" end def command_enabled?(index) result = @commands[index][3] return result != nil ? result : true end def set_index(name) n = -1 for i in 0...@commands.size n = i if @commands[i][0] == name end @index = n if n >= 0 update_cursor call_update_help set_spin end def index=(index) @index = index update_cursor call_update_help set_spin end def center_x return contents.width / 2 end
def center_y return contents.height / 2 end
def item_max return @commands.size end
def set_background return if @spin_back == "" bitmap = Cache.system(@spin_back) rect = Rect.new(0, 0, bitmap.width, bitmap.height) self.contents.blt(12, 12, bitmap, rect) end
def set_text return if @spin_line == nil y = center_y - WLH / 2 + @spin_line self.contents.draw_text(center_x - 48, y, 96, WLH, command_name, 1) end
def angle_size return (Math::PI * 2 / item_max) end
def set_spin_count @spin_count = angle_size * 360 / @speed set_spin(true) end
def set_spin(spin = false) self.contents.clear set_background angle = spin ? @speed * @spin_count / 360 : 0 angle = @spin_right ? angle : -angle for i in 0...item_max n = (i - @index) * angle_size + angle cx = @radius * Math.sin(n) + center_x cy = - @radius * Math.cos(n) + center_y draw_spin_graphic(i, cx, cy) end set_text end
def update super update_cursor if @spin_count > 0 @spin_count -= 1 set_spin(@spin_count >= 1) return end update_command end
def command_movable? return false if @spin_count > 0 return false if (not visible or not active) return false if (index < 0 or index > item_max or item_max == 0) return false if (@opening or @closing) return true end
def command_right @index = (@index + 1) % item_max @spin_right = true set_spin_count end
def command_left @index = (@index - 1 + item_max) % item_max @spin_right = false set_spin_count end
def update_command if command_movable? if Input.press?(Input::RIGHT) Sound.play_cursor Zii.turn_normal? ? command_right : command_left end if Input.press?(Input::LEFT) Sound.play_cursor Zii.turn_normal? ? command_left : command_right end end call_update_help end
def update_cursor if @index < 0 self.cursor_rect.empty else rect = Rect.new(0, 0, 24, 24) rect.x = center_x - rect.width / 2 rect.y = center_y - rect.height / 2 - @radius self.cursor_rect = rect end end
def help_window=(help_window) @help_window = help_window call_update_help end
def call_update_help if self.active and @help_window != nil update_help end end
def update_help end end
#============================================================================== # Window_LineHelp #==============================================================================
class Window_LineHelp < Window_Base
def initialize super(-16, 0, 576, WLH + 32) self.opacity = 0 end
def set_text(text, align = 0) if text != @text or align != @align self.contents.clear back_color = Color.new(0, 0, 0, 80) self.contents.fill_rect(0, y = 12, contents.width, WLH - y, back_color) self.contents.font.color = normal_color self.contents.draw_text(20, 0, self.width - 72, WLH, text, align) @text = text @align = align end end end
#============================================================================== # Window_PartyCommand #==============================================================================
class Window_PartyCommand < Window_SpinCommand def initialize s1 = [Vocab::fight, "icon", Zii::FIGHT, true] s2 = [Vocab::escape, "icon", Zii::ESCAPE, $game_troop.can_escape] setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12} super(72, 356, [s1, s2], setting) self.active = false set_spin end end
#============================================================================== # Window_ActorCommand #==============================================================================
class Window_ActorCommand < Window_SpinCommand
def initialize s1 = [Vocab::attack, "icon", Zii::ATTACK, true] s2 = [Vocab::skill, "icon", Zii::SKILL, true] s3 = [Vocab::guard, "icon", Zii::GUARD, true] s4 = [Vocab::item, "icon", Zii::ITEM, true] setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12} super(72, 356, [s1, s2, s3, s4], setting) self.active = false set_spin end
def setup(actor) @commands[0][2] = Zii::ATTACK @commands[1][0] = Vocab::skill if actor.weapons[0] != nil n = actor.weapons[0].icon_index @commands[0][2] = n if n > 0 end @commands[1][0] = actor.class.skill_name if actor.class.skill_name_valid self.index = 0 set_spin end end
#============================================================================== # Window_BattleStatus #==============================================================================
class Window_BattleStatus < Window_Selectable
def initialize super(128, 288, 416, 128) @column_max = 4 refresh self.active = false self.opacity = 0 end
def draw_neomemo7_back @neomemo7_clear = false for index in 0...@item_max x = index * 96 self.contents.clear_rect(x + 72, WLH * 3, 24, 24) next unless Zii.battle_face? actor = $game_party.members[index] next if actor.hp <= 0 bitmap = Cache.face(actor.face_name) rect = Rect.new(0, 0, 22, 22) rect.x = actor.face_index % 4 * 96 + 72 rect.y = actor.face_index / 4 * 96 + 72 self.contents.blt(x + 72, WLH * 3, bitmap, rect, 192) end end
def draw_item(index) x = index * 96 rect = Rect.new(x, 0, 96, 96) self.contents.clear_rect(rect) self.contents.font.color = normal_color actor = $game_party.members[index] draw_actor_face(actor, x + 2, 2, 92, 192) if actor.hp > 0 and Zii.battle_face? draw_actor_state(actor, x + 72, WLH * 3) if Zii.line_name? self.contents.font.color = hp_color(actor) size = Zii::LINE_SIZE self.contents.font.size = size self.contents.draw_text(x, WLH * 1 + 20 - size, 80, WLH, actor.name) self.contents.font.size = 20 end draw_actor_hp(actor, x, WLH * 2, 80) draw_actor_mp(actor, x, WLH * 3, 70) end def update_cursor if @index < 0 self.cursor_rect.empty else rect = Rect.new(index * 96, 0, 96, 96) self.cursor_rect = rect end end end
#============================================================================== # Scene_Battle #==============================================================================
class Scene_Battle < Scene_Base
alias :neomemo13_create_info_viewport :create_info_viewport def create_info_viewport neomemo13_create_info_viewport @info_viewport.rect.set(0, 0, 544, 416) @status_window.x = 128 @actor_command_window.x = 4 end
alias :neomemo13_update_info_viewport :update_info_viewport def update_info_viewport ox = @info_viewport.ox neomemo13_update_info_viewport @info_viewport.ox = ox end
alias :neomemo13_start_party_command_selection :start_party_command_selection def start_party_command_selection if $game_temp.in_battle @party_command_window.visible = true @actor_command_window.visible = false end neomemo13_start_party_command_selection end
alias :neomemo13_update_party_command_selection :update_party_command_selection def update_party_command_selection return unless @party_command_window.command_movable? neomemo13_update_party_command_selection end
alias :neomemo13_start_actor_command_selection :start_actor_command_selection def start_actor_command_selection neomemo13_start_actor_command_selection @party_command_window.visible = false @actor_command_window.visible = true end
alias :neomemo13_update_actor_command_selection :update_actor_command_selection def update_actor_command_selection return unless @actor_command_window.command_movable? neomemo13_update_actor_command_selection end
alias :neomemo13_start_target_enemy_selection :start_target_enemy_selection def start_target_enemy_selection x = @info_viewport.rect.x ox = @info_viewport.ox neomemo13_start_target_enemy_selection @info_viewport.rect.x = x @info_viewport.ox = ox @target_enemy_window.x = 544 - @target_enemy_window.width @target_enemy_window.y = 288 @info_viewport.rect.width -= @target_enemy_window.width end
alias :neomemo13_end_target_enemy_selection :end_target_enemy_selection def end_target_enemy_selection x = @info_viewport.rect.x ox = @info_viewport.ox @info_viewport.rect.width += @target_enemy_window.width neomemo13_end_target_enemy_selection @info_viewport.rect.x = x @info_viewport.ox = ox end
alias :neomemo13_start_target_actor_selection :start_target_actor_selection def start_target_actor_selection x = @info_viewport.rect.x ox = @info_viewport.ox neomemo13_start_target_actor_selection @target_actor_window.y = 288 @info_viewport.rect.x = x @info_viewport.ox = ox @info_viewport.rect.width -= @target_actor_window.width end
alias :neomemo13_end_target_actor_selection :end_target_actor_selection def end_target_actor_selection x = @info_viewport.rect.x ox = @info_viewport.ox @info_viewport.rect.width += @target_actor_window.width neomemo13_end_target_actor_selection @info_viewport.rect.x = x @info_viewport.ox = ox end
alias :neomemo13_start_skill_selection :start_skill_selection def start_skill_selection neomemo13_start_skill_selection @skill_window.dispose if @skill_window != nil @help_window.dispose if @help_window != nil @help_window = Window_LineHelp.new @skill_window = Window_Skill.new(8, 64, 528, 216, @active_battler) @skill_window.help_window = @help_window end
alias :neomemo13_start_item_selection :start_item_selection def start_item_selection neomemo13_start_item_selection @item_window.dispose if @item_window != nil @help_window.dispose if @help_window != nil @help_window = Window_LineHelp.new @item_window = Window_Item.new(8, 64, 528, 216) @item_window.help_window = @help_window end end
Voila xD =) ! Cordialement,Hababam |
|
Age : 33 Inscrit le : 27/06/2008 Messages : 10881
| Sujet: Re: [VX] Menu tournant pour combat Mer 28 Oct 2009 - 11:58 | |
| Exact, incompatible avec le SBS, dommage ( je viens de tester au cas où, mais j'ai un message d'erreur ).
Merci du partage, même si le script n'est pas traduit et qu'on ne dispose pas des explications pour le modifier *snif* |
|