Partagez
Aller en bas
Eudy
Eudy
Membre

Nombre de messages : 14
Age : 28
Distinction : aucune
Date d'inscription : 19/10/2012

[VXACE] Changer de leader sur la carte Empty [VXACE] Changer de leader sur la carte

le Dim 21 Oct 2012 - 17:18
J'ai réalisé ce script suite à la demande suivante :
http://www.rpgmakervx-fr.com/t13097-vx-aceswitcher-les-heros

Comme on m'a demandé d'apporter certaines modifications :
- pouvoir jouer un effet sonore
- avoir un délai d'attente avant le changement
J'ai fais une nouvelle version.

J'ai pris la liberté de corriger un bug :
- désormais impossible de changer de personnage en pleine discussion avec un PNJ

J'ai ajouté une fonctionnalité non demandée :
- possibilité de jouer une animation lors du changement de personnage

Les instructions de configuration se trouvent au début du script.
Voici le script en question :

Code:
#==============================================================================
# Eudy_SwapOnMap
#------------------------------------------------------------------------------
# Permet de permuter sur la carte les membres de l'équipe en utilisant une
# touche spécifique (par défaut W)
#------------------------------------------------------------------------------
# Version 1.1 - 21/10/2012
#------------------------------------------------------------------------------

$imported = {} if $imported.nil?
$imported["EUDY-SWAPONMAP"] = 1.1

#------------------------------------------------------------------------------
# Modes de permutation
#------------------------------------------------------------------------------
# Par défaut le mode chenille (1) effectue le déroulement suivant :
# ORDRE DES PERSONNAGES :
# AVANT=> APRES
# 1 2 3 4 => 2 3 4 1
#------------------------------------------------------------------------------
# Le mode échange (2) effectue le déroulement suivant :
# ORDRE DES PERSONNAGES :
# AVANT=> APRES
# 1 2 3 4 => 2 1 3 4
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# Ce script nécessite le script Input par OriginalWij et Yanfly
# pour la gestion des touches avancées (W)
# Si vous voulez utiliser une touche par défaut prise en charge par RPG Maker
# ce script deviens facultif, il suffit alors de changer SWAP_KEY
# ex: SWAP_KEY = :C
# Correspond à la touche Entrée/Espace par défaut de RPG Maker
#------------------------------------------------------------------------------

# CONFIGURATION
module EUDY
  module SWAP_ON_MAP
    # Touche de permutation
    SWAP_KEY    = Input::LETTERS['W']
    # Mode de permutation
    # 1 chenille
    # 2 échange
    SWAP_MODE  = 1
    # Effet sonore avant délai de changement (nil si aucune)
    SWAP_SE = "Evasion2"
    # Délai avant changement
    SWAP_DELAY = 20
    # Animation avant délai de changement (nil si aucune)
    SWAP_ANIM = 109
  end
end

#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
 
  #--------------------------------------------------------------------------
  # * Frame Update
  #    main:  Interpreter update flag
  #--------------------------------------------------------------------------
  alias eudy_swaponmap_update update
  def update(main = false)
    eudy_swaponmap_update
    update_swap
  end

  #--------------------------------------------------------------------------
  def can_switch?
    return !$game_message.busy? && !$game_message.visible && $game_party.members.size > 1
  end
 
  #--------------------------------------------------------------------------
  def update_swap
    if(Input.trigger?(EUDY::SWAP_ON_MAP::SWAP_KEY) && can_switch?)
      if(EUDY::SWAP_ON_MAP::SWAP_MODE==1)
        Audio.se_play("Audio/SE/"+EUDY::SWAP_ON_MAP::SWAP_SE,70,100) if EUDY::SWAP_ON_MAP::SWAP_SE != nil
        $game_player.animation_id = EUDY::SWAP_ON_MAP::SWAP_ANIM if EUDY::SWAP_ON_MAP::SWAP_ANIM != nil
        for i in 0...($game_party.members.size-1)
          loop do
            break if (Graphics.frame_count%EUDY::SWAP_ON_MAP::SWAP_DELAY==0)
            update
          end
          $game_party.swap_order(i,i+1)
        end
      elsif(EUDY::SWAP_ON_MAP::SWAP_MODE==2)
          $game_party.swap_order(0,1)
      end
    end
  end
 
end

Pour la gestion avancée du clavier et notamment de W (touche par défaut) il vous faudra également le script créé par OriginalWij and Yanfly :

PS : Ce script est facultatif si vous utilisez une touche conventionnelle

Code:
#==============================================================================
# ■ Input
#==============================================================================

module Input

  #--------------------------------------------------------------------------
  # constants - Created by OriginalWij and Yanfly
  #--------------------------------------------------------------------------
  DEFAULT = [:DOWN, :LEFT, :RIGHT, :UP, :A, :B, :C, :X, :Y, :Z, :L, :R,
        :SHIFT, :CTRL, :ALT, :F5, :F6, :F7, :F8, :F9]

  LETTERS = {}
  LETTERS['A'] = 65; LETTERS['B'] = 66; LETTERS['C'] = 67; LETTERS['D'] = 68
  LETTERS['E'] = 69; LETTERS['F'] = 70; LETTERS['G'] = 71; LETTERS['H'] = 72
  LETTERS['I'] = 73; LETTERS['J'] = 74; LETTERS['K'] = 75; LETTERS['L'] = 76
  LETTERS['M'] = 77; LETTERS['N'] = 78; LETTERS['O'] = 79; LETTERS['P'] = 80
  LETTERS['Q'] = 81; LETTERS['R'] = 82; LETTERS['S'] = 83; LETTERS['T'] = 84
  LETTERS['U'] = 85; LETTERS['V'] = 86; LETTERS['W'] = 87; LETTERS['X'] = 88
  LETTERS['Y'] = 89; LETTERS['Z'] = 90

  NUMBERS = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57]
  NUMPAD = [96, 97, 98, 99, 100, 101, 102, 103, 104, 105]

  BACK  = 138; ENTER  = 143; SPACE  = 32;  SCOLON = 186; ESC  = 157
  QUOTE  = 222; EQUALS = 187; COMMA  = 188; USCORE = 189; PERIOD = 190
  SLASH  = 191; LBRACE = 219; RBRACE = 221; BSLASH = 220; TILDE  = 192
  F10  = 121; F11      = 122; CAPS  = 20;  NMUL  = 106; NPLUS  = 107
  NSEP  = 108; NMINUS = 109; NDECI  = 110; NDIV  = 111;

  Extras = [USCORE, EQUALS, LBRACE, RBRACE, BSLASH, SCOLON, QUOTE, COMMA,
  PERIOD, SLASH, NMUL, NPLUS, NSEP, NMINUS, NDECI, NDIV]

  #--------------------------------------------------------------------------
  # initial module settings - Created by OriginalWij and Yanfly
  #--------------------------------------------------------------------------
  GetKeyState = Win32API.new("user32", "GetAsyncKeyState", "i", "i")
  GetCapState = Win32API.new("user32", "GetKeyState", "i", "i")
  KeyRepeatCounter = {}

  module_function
  #--------------------------------------------------------------------------
  # alias method: update - Created by OriginalWij
  #--------------------------------------------------------------------------
  class <<self; alias input_update_debug update; end
  def self.update
        input_update_debug
        for key in KeyRepeatCounter.keys
          if (GetKeyState.call(key).abs & 0x8000 == 0x8000)
                KeyRepeatCounter[key] += 1
          else
                KeyRepeatCounter.delete(key)
          end
        end
  end

  #--------------------------------------------------------------------------
  # alias method: press? - Created by OriginalWij
  #--------------------------------------------------------------------------
  class <<self; alias input_press_debug press?; end
  def self.press?(key)
        return input_press_debug(key) if default_key?(key)
        adjusted_key = adjust_key(key)
        return true unless KeyRepeatCounter[adjusted_key].nil?
        return key_pressed?(adjusted_key)
  end

  #--------------------------------------------------------------------------
  # alias method: trigger? - Created by OriginalWij
  #--------------------------------------------------------------------------
  class <<self; alias input_trigger_debug trigger?; end
  def self.trigger?(key)
        return input_trigger_debug(key) if default_key?(key)
        adjusted_key = adjust_key(key)
        count = KeyRepeatCounter[adjusted_key]
        return ((count == 0) || (count.nil? ? key_pressed?(adjusted_key) : false))
  end

  #--------------------------------------------------------------------------
  # alias method: repeat? - Created by OriginalWij
  #--------------------------------------------------------------------------
  class <<self; alias input_repeat_debug repeat?; end
  def self.repeat?(key)
        return input_repeat_debug(key) if default_key?(key)
        adjusted_key = adjust_key(key)
        count = KeyRepeatCounter[adjusted_key]
        return true if count == 0
        if count.nil?
          return key_pressed?(adjusted_key)
        else
          return (count >= 23 && (count - 23) % 6 == 0)
        end
  end

  #--------------------------------------------------------------------------
  # new method: default_key? - Created by Yanfly
  #--------------------------------------------------------------------------
  def self.default_key?(key)
        return true if key.is_a?(Integer) && key < 30
        return DEFAULT.include?(key)
  end

  #--------------------------------------------------------------------------
  # new method: adjust_key - Created by OriginalWij
  #--------------------------------------------------------------------------
  def self.adjust_key(key)
        key -= 130 if key.between?(130, 158)
        return key
  end

  #--------------------------------------------------------------------------
  # new method: key_pressed? - Created by OriginalWij
  #--------------------------------------------------------------------------
  def self.key_pressed?(key)
        if (GetKeyState.call(key).abs & 0x8000 == 0x8000)
          KeyRepeatCounter[key] = 0
          return true
        end
        return false
  end

  #--------------------------------------------------------------------------
  # new method: typing? - Created by Yanfly
  #--------------------------------------------------------------------------
  def self.typing?
        return true if repeat?(SPACE)
        for i in 'A'..'Z'
          return true if repeat?(LETTERS[i])
        end
        for i in 0...NUMBERS.size
          return true if repeat?(NUMBERS[i])
          return true if repeat?(NUMPAD[i])
        end
        for key in Extras
          return true if repeat?(key)
        end
        return false
  end

  #--------------------------------------------------------------------------
  # new method: key_type - Created by Yanfly
  #--------------------------------------------------------------------------
  def self.key_type
        return " " if repeat?(SPACE)
        for i in 'A'..'Z'
          next unless repeat?(LETTERS[i])
          return upcase? ? i.upcase : i.downcase
        end
        for i in 0...NUMBERS.size
          return i.to_s if repeat?(NUMPAD[i])
          if !press?(SHIFT)
                return i.to_s if repeat?(NUMBERS[i])
          elsif repeat?(NUMBERS[i])
                case i
                when 1; return "!"
                when 2; return "@"
                when 3; return "#"
                when 4; return "$"
                when 5; return "%"
                when 6; return "^"
                when 7; return "&"
                when 8; return "*"
                when 9; return "("
                when 0; return ")"
                end
          end
        end
        for key in Extras
          next unless repeat?(key)
          case key
          when USCORE; return press?(SHIFT) ? "_" : "-"
          when EQUALS; return press?(SHIFT) ? "+" : "="
          when LBRACE; return press?(SHIFT) ? "{" : "["
          when RBRACE; return press?(SHIFT) ? "}" : "]"
          when BSLASH; return press?(SHIFT) ? "|" : "\\"
          when SCOLON; return press?(SHIFT) ? ":" : ";"
          when QUOTE;  return press?(SHIFT) ? '"' : "'"
          when COMMA;  return press?(SHIFT) ? "<" : ","
          when PERIOD; return press?(SHIFT) ? ">" : "."
          when SLASH;  return press?(SHIFT) ? "?" : "/"
          when NMUL;  return "*"
          when NPLUS;  return "+"
          when NSEP;  return ","
          when NMINUS; return "-"
          when NDECI;  return "."
          when NDIV;  return "/"
          end
        end
        return ""
  end

  #--------------------------------------------------------------------------
  # new method: upcase? - Created by Yanfly
  #--------------------------------------------------------------------------
  def self.upcase?
        return !press?(SHIFT) if GetCapState.call(CAPS) == 1
        return true if press?(SHIFT)
        return false
  end

end # Input

Vous devez le placer au dessus du 1er.

+5 pts de participation


Dernière édition par Eudy le Dim 21 Oct 2012 - 23:21, édité 2 fois
Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 26
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires [VXACE] Changer de leader sur la carte 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

[VXACE] Changer de leader sur la carte Empty Re: [VXACE] Changer de leader sur la carte

le Dim 21 Oct 2012 - 17:26
Erci pour le script, +5pts de participation ^^
Brandobscure
Brandobscure
Membre

Nombre de messages : 531
Age : 23
Localisation : Belgique
Distinction : aucune
Date d'inscription : 03/01/2011

[VXACE] Changer de leader sur la carte Empty Re: [VXACE] Changer de leader sur la carte

le Dim 21 Oct 2012 - 17:31
Excellent, c'est exactement se que je voulais,
merci beaucoup encore une fois !
LightNox
LightNox
Membre

Nombre de messages : 1759
Age : 28
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008

[VXACE] Changer de leader sur la carte Empty Re: [VXACE] Changer de leader sur la carte

le Dim 21 Oct 2012 - 19:41
Merci du partage Eudy Wink ^^

Coeurdemat
Coeurdemat
Membre

Nombre de messages : 16
Age : 22
Localisation : Pas loin de Loudéac
Distinction : aucune
Date d'inscription : 09/05/2013

[VXACE] Changer de leader sur la carte Empty Re: [VXACE] Changer de leader sur la carte

le Dim 12 Mai 2013 - 14:26
C'est génial, mersci pour ce script de ouf.
Contenu sponsorisé

[VXACE] Changer de leader sur la carte Empty Re: [VXACE] Changer de leader sur la carte

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