rascasse Chevalier (niveau 2)
Messages postés : 82 Date d'inscription : 13/03/2009 Jauge LPC :
| Sujet: [vx]switcher de héros Mer 24 Juin 2009 - 13:54 | |
| Voilà un script qui permet de changer de héros par Créé par Kablue/Sihn, à partir du menu tournant de MakirouAru. - Citation :
- #=============================================================================
# Switcheur de héros #----------------------------------------------------------------------------- # Créé par Kablue/Sihn, à partir du menu tournant de MakirouAru # Conçu pour RMVX # Version 2.1 #=============================================================================
# Touche d'activation (Changez uniquement le Y) SWITCHEUR_KEY = Input::Y
# Son lors de l'apparition du switcheur SE_START = "Decision2"
# Animation à jouer sur le héros si changement de celui-ci ID_ANIMATION = 41
# Durée en frame de l'apparition du switcheur TRANS_FRAMES = 15
# Durée en frame de la rotation entre deux héros du switcheur MOVING_FRAMES = 10
# Rayon en pixel RAYON = 64
# true : En forme d'élipse / false : En forme de cercle ELIPSE = true
# true : Appuyez sur le bouton / false : Maintenez le bouton AUTO_KEY = true
#============================================================================= # Game_Temp #============================================================================= class Game_Temp attr_accessor :switcheur_result alias initialize_switcheur_result initialize def initialize initialize_switcheur_result @switcheur_result = false end end
#============================================================================= # Game_Party #============================================================================= class Game_Party attr_accessor :actors end
#============================================================================= # Window_Switcheur #============================================================================= class Window_Switcheur < Window_Base attr_accessor :index def initialize super(-16, -16, 576, 448) self.contents = Bitmap.new(width-32, height-32) self.contents.font.name = "Arial" self.opacity = 0 self.back_opacity = 0 @commands = [] @items = [] for actor in $game_party.members @commands.push(actor.name) @items.push(Cache.character(actor.character_name)) end @item_max = @commands.size @index = 0 @cx = $game_player.screen_x + 16 @cy = $game_player.screen_y - 8 setup_move_start refresh end def update super if @mode < 5 if Input.trigger?(Input::UP) or Input.trigger?(Input::LEFT) Sound.play_cursor ELIPSE ? setup_move_move(3) : setup_move_move(4) return elsif Input.trigger?(Input::DOWN) or Input.trigger?(Input::RIGHT) Sound.play_cursor ELIPSE ? setup_move_move(4) : setup_move_move(3) return elsif Input.trigger?(Input::B) and AUTO_KEY Sound.play_cancel $game_temp.switcheur_result = false setup_move_end return elsif AUTO_KEY if Input.trigger?(Input::C) or Input.trigger?(SWITCHEUR_KEY) Sound.play_decision $game_temp.switcheur_result = true setup_move_end return end else unless Input.press?(SWITCHEUR_KEY) Sound.play_decision $game_temp.switcheur_result = true setup_move_end return end end end refresh end def refresh self.contents.clear case @mode when 1 refresh_start when 2 refresh_wait when 3 refresh_move(1) when 4 refresh_move(0) when 5 refresh_end end if @mode != 6 cy = ELIPSE ? 32 : 0 rect = Rect.new(@cx - 272, @cy + cy, self.contents.width - 32, 32) self.contents.draw_text(rect, @commands[@index], 1) else dispose end end def refresh_start d1 = 2.0 * Math::PI / @item_max d2 = 1.0 * Math::PI / TRANS_FRAMES r = RAYON - 1.0 * RAYON * @steps / TRANS_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 / elipse) draw_item(x, y, i) end @steps -= 1 if @steps < 1 @mode = 2 end end def refresh_wait d = 2.0 * Math::PI / @item_max for i in 0...@item_max j = i - @index x = @cx + (RAYON * Math.sin(d * j)).to_i y = @cy - ((RAYON * Math.cos(d * j)).to_i / elipse) 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 + (RAYON * Math.sin(d)).to_i y = @cy - ((RAYON * Math.cos(d)).to_i / elipse) draw_item(x, y, i) end @steps -= 1 if @steps < 1 @mode = 2 end end def refresh_end d1 = 2.0 * Math::PI / @item_max d2 = 1.0 * Math::PI / TRANS_FRAMES r = RAYON - 1.0 * RAYON * @steps / TRANS_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 / elipse) draw_item(x, y, i) end @steps += 1 if @steps > TRANS_FRAMES @mode = 6 end end def draw_item(x, y, i) item = @items[i] if $game_party.members[i].character_name.include?("$") rect = Rect.new(0, 0, item.width / 3, item.height / 4) opa = @index == i ? 255 : 128 self.contents.blt(x - item.width / 6, y - item.height / 8, item, rect, opa) else index = $game_party.members[i].character_index rect = Rect.new((item.width / 4) * (index % 4), (item.height / 2) * (index / 3 % 2), item.width / 12, item.height / opa = @index == i ? 255 : 128 self.contents.blt(x - item.width / 12, y - item.height / 8, item, rect, opa) end end def setup_move_start @mode = 1 @steps = TRANS_FRAMES end def setup_move_move(mode) return if $game_party.actors.size < 2 if mode == 3 @index -= 1 @index = @items.size - 1 if @index < 0 elsif mode == 4 @index += 1 @index = 0 if @index >= @items.size else return end @mode = mode @steps = MOVING_FRAMES end def setup_move_end @mode = 5 @steps = 0 end def elipse return ELIPSE ? -2 : 1 end end
#============================================================================= # Scene_Map #============================================================================= class Scene_Map alias ring_system_update update def update if @switcheur_window != nil if @switcheur_window.disposed? if $game_temp.switcheur_result and @switcheur_window.index != 0 target_actor = $game_party.actors[@switcheur_window.index] while $game_party.actors[0] != target_actor actor = $game_party.actors[0] $game_party.actors.delete_at(0) $game_party.actors.push(actor) end $game_player.animation_id = ID_ANIMATION $game_player.refresh end $game_temp.switcheur_result = false @switcheur_window = nil else @switcheur_window.update end return end if Input.press?(SWITCHEUR_KEY) and $game_party.actors.size > 0 if SE_START != nil and SE_START != "" Audio.se_play("Audio/SE/" + SE_START, 80, 100) end @switcheur_window = Window_Switcheur.new end ring_system_update end end |
|
Elekami Fondateur
Messages postés : 19071 Date d'inscription : 19/07/2008 Jauge LPC :
| Sujet: Re: [vx]switcher de héros Ven 26 Juin 2009 - 14:22 | |
| Okay très bon script merci de ton aide. |
|