no0ony Paladin (niveau 3)
Messages postés : 618 Date d'inscription : 18/11/2013 Jauge LPC :
| Sujet: [VX] Script QTE - problème Mar 3 Déc 2013 - 13:04 | |
| Bonjour, j'ai une bonne connaissance qui fait m'a fait un script du système QTE, il fonctionne parfaitement, cependant, étant donné que j'utilise l'overlay mapping, lorsque la scène QTE apparaît, tout mon overlay disparaît pendant la scène, ce qui rend la map hideuse vu qu'elle est vide donc j'aimerais savoir comment peut-on justement régler ce problème. Personnellement j'ai pensé à supprimer l'apparition de l'image "Chain Layout" qui prend l'intégralité de l'écran et qui pourrait justement supprimer l'affichage de l'overlay. Si quelqu'un peut m'aider je lui serais entièrement reconnaissant. (Je précise que la personne m'ayant fait ce script n'a plus internet et donc pu de contact avec) Voici le script : - Citation :
- #===============================================================================
# +++ QTE (22 / 08 / 13) #=============================================================================== # Script original de Moghunter # Traduit et adapté pour VX par brikou #=============================================================================== # Système de QTE utilisable seulement sur les maps. # # # Images nécessaires (Graphics/System) : # # Cursor.png # Chain_Command.png # Chain_Layout.png # Chain_Timer_Layout.png # Chain_Timer_Meter.png # #=============================================================================== # # Pour lancer un QTE faîtes "appeler un script" # # $scene = Chain_Commands.new(ID) # # ID = ID de l'interrupteur de la chaîne de commandes choisie. # # Quand le QTE sera gagné l'interrupteur correspondant sera activé; # Voici donc un exemple d'évènement QTE : # # Appeler le script : "$scene = Chain_Commands.new(28)" # Attendre 1 frame (important) # Condition : Si l'interrupteur 28 est activé : # message : Vous avez gagné. # Interrupteur 28 désactivé # Sinon # message : Vous avez perdu. # Fin Condition
#=============================================================================== module MOG_CHAIN_COMMANDS #============================================================================== # # Pour créer une chaîne de comandes : # #CHAIN_COMMAND = { SWITCH_ID => [COMMAND] } # # SWITCH_ID = ID ID de l'interrupteur # COMMANDS = Touches sur lesquelles il faudra appuyer : # "Down" ,"Up" ,"Left" ,"Right" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W" # #--------------------# # # # exemple : # # CHAIN_SWITCH_COMMAND = { # 25=>["Down","D","S","Right"], # 59=>["Down","Up","Left","Right","D","S","A","Z","X","Q","W"], # 80=>["Z","D"] # } #============================================================================== CHAIN_SWITCH_COMMAND = { 26=>["X","Right","Left","Z","Right","Left","Right","Left","Right","Left",], 27=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S", "Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"], 28=>["Left","Up","Right","Down", "Left","Up","Right","Down", "Left","Up", "Right","Down"], 29=>["Right","Right","Right","Right","Right","Right","Right","Right","Right","Right"], 30=>["Left","Down","Right","Up","Left","Down","Right","Up","Right","Right","Left","Left", "Right","Right","Left","Left","Right","Right","Left","Left","Right","Right","Left","Left", "Right","Right","Left","Left"] }
CHAIN_ACTION_COMMAND = { } #En dessous c'est le temps maximum appuyer sur une touche. #Changez la valeur selon la difficulté que vous voulez : CHAIN_INPUT_DURATION = 50
# Interrupteur pour rendre un QTE automatique : CHAIN_AUTOMATIC_MODE_SWITCH_ID = 25 end
class Chain_Commands include MOG_CHAIN_COMMANDS def initialize(action_id,xas = false) @xas = xas @action_id = action_id if @xas $game_temp.chain_action_id = 0 $game_temp.chain_active = false @chain_command = CHAIN_ACTION_COMMAND[@action_id] else @chain_command = CHAIN_SWITCH_COMMAND[@action_id] end @chain_command = ["?"] if @chain_command == nil duration = [[CHAIN_INPUT_DURATION, 1].max, 9999].min @timer_max = duration * @chain_command.size @timer = @timer_max @slide_time = [[40 / duration, 5].max, 40].min @change_time = 0 if $game_switches[CHAIN_AUTOMATIC_MODE_SWITCH_ID] @auto = true else @auto = false end @com = 0 end def main @spriteset = Spriteset_Map.new create_chain_command create_cusrsor create_layout create_meter create_text create_number Graphics.transition loop do Graphics.update Input.update update break if $scene != self end pre_dispose Graphics.freeze dispose end def create_cusrsor @fy_time = 0 @fy = 0 @com_index = 0 @cursor = Sprite.new @cursor.bitmap = Cache.system("Cursors") @cursor.z = 4 @cursor_space = ((@bitmap_cw + 5) * @chain_command.size) / 2 if @chain_command.size <= 20 @cursor.x = (640 / 2) - @cursor_space + @cursor_space * @com_index else @cursor.x = (640 / 2) end @cursor.y = 480 / 2 end def create_chain_command @image = Cache.system("Chain_Command") width_max = ((@image.width / 13) + 5) * @chain_command.size @bitmap = Bitmap.new(width_max,@image.height * 2) @bitmap_cw = @image.width / 13 @bitmap_ch = @image.height index = 0 for i in @chain_command command_list_check(i) bitmap_src_rect = Rect.new(@com * @bitmap_cw, 0, @bitmap_cw, @bitmap_ch) if index == 0 @bitmap.blt(index * (@bitmap_cw + 5) , 0, @image, bitmap_src_rect) else @bitmap.blt(index * (@bitmap_cw + 5) , @bitmap_ch, @image, bitmap_src_rect) end index += 1 end @sprite = Sprite.new @sprite.bitmap = @bitmap if @chain_command.size <= 20 @sprite.x = (640 / 2) - ((@bitmap_cw + 5) * @chain_command.size) / 2 @new_x = 0 else @sprite.x = (640 / 2) @new_x = @sprite.x end @sprite.y = (480 / 2) - @bitmap_ch - 15 @sprite.z = 3 @sprite.zoom_x = 1.5 @sprite.zoom_y = 1.5 end def create_layout @back = Plane.new @back.bitmap = Cache.system("Chain_Layout") @back.z = 0 @layout = Sprite.new @layout.bitmap = Cache.system("Chain_Timer_Layout") @layout.z = 1 @layout.x = 180 @layout.y = 150 end
def create_meter @meter_flow = 0 @meter_image = Cache.system("Chain_Timer_Meter") @meter_bitmap = Bitmap.new(@meter_image.width,@meter_image.height) @meter_range = @meter_image.width / 3 @meter_width = @meter_range * @timer / @timer_max @meter_height = @meter_image.height @meter_src_rect = Rect.new(@meter_range, 0, @meter_width, @meter_height) @meter_bitmap.blt(0,0, @meter_image, @meter_src_rect) @meter_sprite = Sprite.new @meter_sprite.bitmap = @meter_bitmap @meter_sprite.z = 2 @meter_sprite.x = 240 @meter_sprite.y = 159 update_flow end def create_text @text = Sprite.new @text.bitmap = Bitmap.new(200,32) @text.z = 2 @text.bitmap.font.name = "Georgia" @text.bitmap.font.size = 30 @text.bitmap.font.bold = true @text.bitmap.font.italic = true @text.x = 240 @text.y = 100 end def create_number @combo = 0 @number = Sprite.new @number.bitmap = Bitmap.new(200,64) @number.z = 2 @number.bitmap.font.name = "Arial" @number.bitmap.font.size = 24 @number.bitmap.font.bold = true @number.bitmap.font.color.set(0, 255, 255,200) @number.bitmap.draw_text(0, 0, 200, 32, "",1) @number.x = 40 @number.y = 120 end def pre_dispose for i in 0..25 @sprite.x += 5 @sprite.opacity -= 25 @layout.x -= 5 @meter_sprite.x -= 5 @layout.opacity -= 25 @meter_sprite.opacity -= 25 @text.x -= 2 if i < 10 and @text.zoom_x < 1.5 @text.zoom_x += 0.1 @text.zoom_y += 0.1 end @cursor.visible = false if @number.zoom_x > 1 @number.zoom_x -= 0.1 @number.zoom_y -= 0.1 end Graphics.update end end def dispose @spriteset.dispose @bitmap.dispose @sprite.bitmap.dispose @sprite.dispose @cursor.bitmap.dispose @cursor.dispose @meter_image.dispose @meter_bitmap.dispose @meter_sprite.bitmap.dispose @meter_sprite.dispose @layout.bitmap.dispose @layout.dispose @back.bitmap.dispose @back.dispose @text.bitmap.dispose @text.dispose @number.bitmap.dispose @number.dispose @image.dispose end def update update_command update_cursor_slide update_flow update_change_time end def update_change_time return unless @auto @change_time += 1 check_command(-1) if @change_time >= CHAIN_INPUT_DURATION - 1 end def update_flow @timer -= 1 @meter_sprite.bitmap.clear @meter_width = @meter_range * @timer / @timer_max @meter_src_rect = Rect.new(@meter_flow, 0, @meter_width, @meter_height) @meter_bitmap.blt(0,0, @meter_image, @meter_src_rect) @meter_flow += 20 @meter_flow = 0 if @meter_flow >= @meter_image.width - @meter_range wrong_command if @timer == 0 and @auto == false end def update_command return if @auto if Input.trigger?(Input::X) check_command(0) elsif Input.trigger?(Input::Z) check_command(1) elsif Input.trigger?(Input::Y) check_command(2) elsif Input.trigger?(Input::A) check_command(3) elsif Input.trigger?(Input::C) check_command(4) elsif Input.trigger?(Input::B) check_command(5) elsif Input.trigger?(Input::L) check_command(6) elsif Input.trigger?(Input::R) check_command(7) elsif Input.trigger?(Input::RIGHT) check_command( elsif Input.trigger?(Input::LEFT) check_command(9) elsif Input.trigger?(Input::DOWN) check_command(10) elsif Input.trigger?(Input::UP) check_command(11) end end def command_list_check(command) case command when "A" @com = 0 when "D" @com = 1 when "S" @com = 2 when "Y" @com = 3 when "Z" @com = 4 when "Z" @com = 5 when "Q" @com = 6 when "W" @com = 7 when "Right" @com = 8 when "Left" @com = 9 when "Down" @com = 10 when "Up" @com = 11 else @com = 12 end end def check_command(com) index = 0 if com != -1 right_input = false for i in @chain_command if index == @com_index command_list_check(i) right_input = true if @com == com end index += 1 end else command_list_check(@com_index) @change_time = 0 right_input = true end if right_input refresh_number next_command else wrong_command end end def next_command @com_index += 1 Sound.play_decision if @com_index == @chain_command.size if @xas $game_temp.chain_active = true $game_temp.chain_action_id = @action_id else $game_switches[@action_id] = true end $scene = Scene_Map.new $game_map.need_refresh = true end refresh_command refresh_text(0) end def wrong_command Sound.play_buzzer if @xas $game_temp.chain_action_id = 0 $game_temp.chain_active = false end refresh_text(1) $scene = Scene_Map.new $game_player.jump(0,0) end def refresh_command @sprite.bitmap.clear index = 0 for i in @chain_command command_list_check(i) bitmap_src_rect = Rect.new(@com * @bitmap_cw, 0, @bitmap_cw, @bitmap_ch) if @com_index == index @bitmap.blt(index * (@bitmap_cw + 5) , 0, @image, bitmap_src_rect) else @bitmap.blt(index * (@bitmap_cw + 5) , @bitmap_ch, @image, bitmap_src_rect) end index += 1 end if @chain_command.size > 20 @new_x = (640 / 2) - ((@bitmap_cw + 5) * @com_index) else @cursor.x = (640 / 2) - @cursor_space + ((@bitmap_cw + 5) * @com_index) end end def refresh_text(type) @text.bitmap.clear if type == 0 @text.bitmap.font.color.set(255, 255, 255,255) if @com_index == @chain_command.size @text.bitmap.draw_text(0, 0, 200, 32, "Gagné!",1) else @text.bitmap.draw_text(0, 0, 200, 32, "OK!",1) end else @text.bitmap.font.color.set(255, 155, 55,255) if @timer == 0 @text.bitmap.draw_text(0, 0, 200, 32, "Temps écoulé!",1) else @text.bitmap.draw_text(0, 0, 200, 32, "Raté!",1) end end @text.x = 240 @text.opacity = 255 end def refresh_number @combo += 1 @number.bitmap.clear @number.bitmap.font.size = 38 @number.bitmap.font.color.set(255, 255, 255,200) @number.bitmap.draw_text(0, 0, 200, 32, @combo.to_s,1) @number.opacity = 255 @number.zoom_x = 2 @number.zoom_y = 2 end def update_cursor_slide @sprite.zoom_x -= 0.1 if @sprite.zoom_x > 1 @sprite.zoom_y -= 0.1 if @sprite.zoom_y > 1 @text.x -= 2 if @text.x > 220 @text.opacity -= 4 if @text.opacity > 0 @sprite.x -= @slide_time if @sprite.x > @new_x and @chain_command.size > 20 if @number.zoom_x > 1 @number.zoom_x -= 0.1 @number.zoom_y -= 0.1 end if @fy_time > 15 @fy += 1 elsif @fy_time > 0 @fy -= 1 else @fy = 0 @fy_time = 30 end @fy_time -= 1 @cursor.oy = @fy end end
if $xrxs_xas != nil
class Game_Temp attr_accessor :chain_active attr_accessor :chain_action_id alias chain_command_initialize initialize def initialize chain_command_initialize @chain_active = false @chain_action_id = 0 end end
module XAS_ACTION
alias mog_chain_command_can_shoot can_shoot? def can_shoot?(action_id,skill) if self.battler.is_a?(Game_Actor) if MOG_CHAIN_COMMANDS::CHAIN_ACTION_COMMAND.include?(action_id) and $game_temp.chain_active == false $scene = Chain_Commands.new(action_id,true) return true end end $game_temp.chain_active = false mog_chain_command_can_shoot(action_id,skill) end end
class Game_Player < Game_Character
alias chain_command_update_force_action update_force_action def update_force_action chain_command_update_force_action if $game_temp.chain_action_id != 0 and not (self.knockbacking? or @actor.state_sleep or @actor.stop) if seal_state?(0) seal_text return false end action_id = $game_temp.chain_action_id self.shoot(action_id) $game_temp.chain_action_id = 0 end end end
end
$mog_rgss_chain_commands = true |
|