Partagez
Aller en bas
avatar
UltimaSasuke
Membre

Nombre de messages : 88
Age : 23
Localisation : France, 05
Distinction : aucune
Date d'inscription : 27/07/2011

MOG Chain Commands

le Lun 2 Jan 2012 - 18:59
Bon, bah déjà je propose se script car il n'étais présent que dans les demandes de script, mais personne ne l'as mis ici.
Et ensuite étant portugais j'en ais profité pour le traduire en 1 minute ^^ (Plus facile que les scripts anglais je trouve =P)

Donc que fait se script, et bien il permet de faire une combinaison de touches (boutons) pour, si vous réussissez, d'activer un interrupteur. Toutes les instructions sont dans le script.

Voici le script seul pour ceux qui l'avait déjà utilisé avant (donc qui on les images) :


Code:
#===============================================================================
# +++ MOG - Chain Commands (v1.0) +++
#===============================================================================
# Par Moghunter                                                               
# http://www.atelier-rgss.com                     
#===============================================================================
# Système de boutons pour activer des interrupteurs.
#
# Ce script utilise les images suivante : (Graphics/System)
#
# Cursor.png
# Chain_Command.png
# Chain_Layout.png
# Chain_Timer_Layout.png
# Chain_Timer_Meter.png
#
#===============================================================================
#
# Pour appeller le script, utilisez la commande suivant : 
#
# chain_commands(ID)
#
# ID - ID de l'interrupteur.
#
#===============================================================================
module MOG_CHAIN_COMMANDS
 #==============================================================================
 # CHAIN_COMMAND = { INTERRUPTEUR_ID => [COMMANDE] }
 #
 # INTERRUPTEUR_ID = ID de l'Interrupteur
 # COMMANDES = Définie ici la séquence de bontons.
 #            (Pour faire cette séquence utilise les commandes du dessous) 
 # 
 # "Down" ,"Up" ,"Left" ,"Right" ,"Shift" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W"
 #
 # Exemple d'utilisation :
 #
 # CHAIN_SWITCH_COMMAND = {
 # 25=>["Down","D","S","Right"],
 # 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"],
 # 80=>["Shift","D"]
 # }
 #==============================================================================
 CHAIN_SWITCH_COMMAND = {
 5=>["X","Right","Left","Z","Z"],
 6=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S",
      "Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"]
 }
 #Durée pour faire la séquence. (La durée est multiplié par le nombres de
 #commandes) *60 = 1 sec
 CHAIN_INPUT_DURATION = 30
 #Si la séquence est bien faite, utilise l'effet :
 CHAIN_RIGHT_SE = "Chime1"
 #Sinon, si elle est fause utilisé :
 CHAIN_WRONG_SE = "Buzzer1"
 #Interrupteur que le mode active automatiquement :
 CHAIN_AUTOMATIC_MODE_SWITCH_ID = 20
end


#===============================================================================
# ■ Chain Commands
#===============================================================================
class Chain_Commands
  include MOG_CHAIN_COMMANDS
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------     
  def initialize
      @action_id = $game_temp.chain_switch_id
      @chain_command = CHAIN_SWITCH_COMMAND[@action_id]
      @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 = [[60 / duration, 10].max, 60].min
      @change_time = 0
      if $game_switches[CHAIN_AUTOMATIC_MODE_SWITCH_ID]
        @auto = true
      else
        @auto = false
      end
      @com = 0 
  end   
 
 #--------------------------------------------------------------------------
 # ● Main
 #--------------------------------------------------------------------------   
 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 SceneManager.scene != self
    end
    pre_dispose
    Graphics.freeze
    dispose
 end 
     
 #--------------------------------------------------------------------------
 # ● Create Cursor
 #--------------------------------------------------------------------------           
 def create_cusrsor
    @fy_time = 0
    @fy = 0
    @com_index = 0
    @cursor = Sprite.new
    @cursor.bitmap = Cache.system("Cursor")
    @cursor.z = 4
    @cursor_space = ((@bitmap_cw + 5) * @chain_command.size) / 2
    if @chain_command.size <= 20
        @cursor.x = (544 / 2) - @cursor_space + @cursor_space * @com_index
    else 
        @cursor.x = (544 / 2)
    end 
    @cursor.y = (416 / 2) + 30   
 end
 
 #--------------------------------------------------------------------------
 # ● Create Chain Command
 #--------------------------------------------------------------------------     
 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 <= 15
        @sprite.x = (544 / 2) - ((@bitmap_cw + 5) * @chain_command.size) / 2
        @new_x = 0
    else 
        @sprite.x = (544 / 2)
        @new_x = @sprite.x
    end 
    @sprite.y = (416 / 2) + 30  - @bitmap_ch  - 15
    @sprite.z = 3
    @sprite.zoom_x = 1.5
    @sprite.zoom_y = 1.5
 end
 
 #--------------------------------------------------------------------------
 # * create_layout
 #-------------------------------------------------------------------------- 
 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 = 160
    @layout.y = 150
  end

 #--------------------------------------------------------------------------
 # * create_meter
 #-------------------------------------------------------------------------- 
 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 = 220
    @meter_sprite.y = 159
    update_flow
 end 
 
 #--------------------------------------------------------------------------
 # ● Create Text
 #--------------------------------------------------------------------------       
 def create_text
    @text = Sprite.new
    @text.bitmap = Bitmap.new(200,32)
    @text.z = 2
    @text.bitmap.font.name = "Georgia"
    @text.bitmap.font.size = 25
    @text.bitmap.font.bold = true
    @text.bitmap.font.italic = true
    @text.bitmap.font.color.set(255, 255, 255,220)
    @text.x = 230
    @text.y = 100
 end
 
 #--------------------------------------------------------------------------
 # ● Create Number
 #--------------------------------------------------------------------------       
 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, "Ready",1)       
    @number.x = 30
    @number.y = 100
 end
 
 #--------------------------------------------------------------------------
 # ● Pre Dispose
 #--------------------------------------------------------------------------     
 def pre_dispose
    for i in 0..35
      @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 < 15 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
 
 #--------------------------------------------------------------------------
 # ● Dispose
 #--------------------------------------------------------------------------     
 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
 
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------     
 def update
    update_command
    update_cursor_slide
    update_flow
    update_change_time
    @spriteset.update
 end
 
 #--------------------------------------------------------------------------
 # ● Change_Time
 #--------------------------------------------------------------------------       
 def update_change_time
    return unless @auto
    @change_time += 1
    check_command(-1) if @change_time >= CHAIN_INPUT_DURATION - 1
 end
 
 #--------------------------------------------------------------------------
 # ● Update Flow
 #--------------------------------------------------------------------------     
 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 
 
 #--------------------------------------------------------------------------
 # ● Update Command
 #--------------------------------------------------------------------------     
 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(8)
    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 
 
 #--------------------------------------------------------------------------
 # ● command_list_check
 #--------------------------------------------------------------------------     
 def command_list_check(command)
    case command
        when "A"
            @com = 0 
        when "D"
            @com = 1 
        when "S"
            @com = 2
        when "Shift"
            @com = 3
        when "Z"
            @com = 4
        when "X"
            @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 
 
 #--------------------------------------------------------------------------
 # ● check_command
 #--------------------------------------------------------------------------           
 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 
 
 #--------------------------------------------------------------------------
 # ● Next Command
 #--------------------------------------------------------------------------           
 def next_command 
    @com_index += 1 
    Audio.se_play("Audio/SE/" + CHAIN_RIGHT_SE, 100, 100)
    if @com_index == @chain_command.size
        $game_switches[@action_id] = true
        SceneManager.call(Scene_Map)
        $game_map.need_refresh = true
    end 
    refresh_command
    refresh_text(0)
 end   
 
 #--------------------------------------------------------------------------
 # ● wrong_command
 #--------------------------------------------------------------------------             
 def wrong_command
    Audio.se_play("Audio/SE/" + CHAIN_WRONG_SE, 100, 100)
    refresh_text(1)
    SceneManager.call(Scene_Map)
    $game_player.jump(0,0)
 end
 
 #--------------------------------------------------------------------------
 # ● Refresh Command
 #--------------------------------------------------------------------------               
 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 > 15 
        @new_x = (544 / 2) - ((@bitmap_cw + 5) * @com_index)
    else 
        @cursor.x = (544 / 2) - @cursor_space + ((@bitmap_cw + 5) * @com_index)
    end
 end 
 
 #--------------------------------------------------------------------------
 # ● Refresh Text
 #--------------------------------------------------------------------------             
 def refresh_text(type)
    @text.bitmap.clear
    if type == 0
        if @com_index == @chain_command.size
          @text.bitmap.font.color.set(55, 255, 55,220)
          @text.bitmap.draw_text(0, 0, 200, 32, "Perfect!",1)             
        else 
          @text.bitmap.font.color.set(55, 155, 255,220)
          @text.bitmap.draw_text(0, 0, 200, 32, "Success!",1)             
        end
    else
        @text.bitmap.font.color.set(255, 155, 55,220)
        if @timer == 0
          @text.bitmap.draw_text(0, 0, 200, 32, "Time Limit!",1) 
        else 
          @text.bitmap.draw_text(0, 0, 200, 32, "Fail!",1) 
        end
    end 
    @text.x = 230 
    @text.opacity = 255
 end
 
 #--------------------------------------------------------------------------
 # ● Refresh Number
 #--------------------------------------------------------------------------             
 def refresh_number
    @combo += 1
    @number.bitmap.clear
    @number.bitmap.font.size = 34
    @number.bitmap.draw_text(0, 0, 200, 32, @combo.to_s,1)         
    @number.opacity = 255
    @number.zoom_x = 2
    @number.zoom_y = 2
 end
 
 #--------------------------------------------------------------------------
 # ● Update Cursor Slide
 #--------------------------------------------------------------------------         
 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 > 210
    @text.opacity -= 5 if @text.opacity > 0
    @sprite.x -= @slide_time if @sprite.x > @new_x and @chain_command.size > 15
    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

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

 attr_accessor :chain_switch_id
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------       
  alias mog_chain_commands_initialize initialize
  def initialize
      @chain_switch_id = 0
      mog_chain_commands_initialize
  end 
   
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
 
 #--------------------------------------------------------------------------
 # ● Chain Commands
 #--------------------------------------------------------------------------         
  def chain_commands(switch_id = 0)
      return if switch_id <= 0
      $game_temp.chain_switch_id = switch_id
      SceneManager.call(Chain_Commands)
      wait(1)
  end
 
end

$mog_rgss3_chain_commands = true

Et voici la démo de Moghunter avec les images, et le script traduit : Démo

Et si quelqu'un a les images mais en FR sa serais sympa de partager =)

avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: MOG Chain Commands

le Lun 2 Jan 2012 - 19:01
Merci pour la trad, + 1 pt de participation Smile
avatar
Xsoul
Membre

Nombre de messages : 237
Distinction : aucune
Date d'inscription : 05/03/2013

Re: MOG Chain Commands

le Dim 18 Aoû 2013 - 14:16
Bonjour, j'ai un problème avec ce script et j'aurais beaucoup aimé un petit coup de pouce.

J'en aurai besoin pour mon projet.

Voici mon problème : quand le script se finit le coffre ne s'ouvre pas et il faut relancer l'event, j'ai mis une branche conditionnelle pour le cas où on réussit et le cas où on rate.
Si j'ai compris lorsque l'on gagne un switch ID s'active automatiquement, dans l'exemple ici c'est 20, j'ai changé pour mettre 183 et je vous link ma page d'event.

" />

Ma variable coffre correspond simplement à compter pour un événement commun qui informe le nombre de coffres découverts avec des textes en fonction. Les pictures sont simplement des PNG par dessus ma map en parallax.

Si quelqu'un peut me dire ce que je fais mal ça m'arrangerait beaucoup!

Merci d'avance
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: MOG Chain Commands

le Dim 18 Aoû 2013 - 14:34
Je pense que l'interrupteur dans ta condition est mauvais essaie avec l'id "5" qui correspond à chain_commands(5)
avatar
Xsoul
Membre

Nombre de messages : 237
Distinction : aucune
Date d'inscription : 05/03/2013

Re: MOG Chain Commands

le Dim 18 Aoû 2013 - 15:00
omg ça marche xD

merci beaucoup (j'ai tant cherché et c'était pourtant si évident :o)
Contenu sponsorisé

Re: MOG Chain Commands

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum