- EudyMembre
- Nombre de messages : 14
Age : 34
Distinction : aucune
Date d'inscription : 19/10/2012
[VXACE] Changer de leader sur la carte
Dim 21 Oct 2012 - 17:18
J'ai réalisé ce script suite à la demande suivante :
https://rpgmakervx.1fr1.net/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 :
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
Vous devez le placer au dessus du 1er.
+5 pts de participation
https://rpgmakervx.1fr1.net/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
- BalbereithStaffeux retraité
- Nombre de messages : 4129
Age : 32
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 ) [Coco' ]
Date d'inscription : 13/05/2009
Re: [VXACE] Changer de leader sur la carte
Dim 21 Oct 2012 - 17:26
Erci pour le script, +5pts de participation ^^
- BrandobscureMembre
- Nombre de messages : 528
Age : 28
Localisation : Belgique
Distinction : aucune
Date d'inscription : 03/01/2011
Re: [VXACE] Changer de leader sur la carte
Dim 21 Oct 2012 - 17:31
Excellent, c'est exactement se que je voulais,
merci beaucoup encore une fois !
merci beaucoup encore une fois !
- LightNoxMembre
- Nombre de messages : 1759
Age : 34
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008
Re: [VXACE] Changer de leader sur la carte
Dim 21 Oct 2012 - 19:41
Merci du partage Eudy ^^
- CoeurdematMembre
- Nombre de messages : 16
Age : 27
Localisation : Pas loin de Loudéac
Distinction : aucune
Date d'inscription : 09/05/2013
Re: [VXACE] Changer de leader sur la carte
Dim 12 Mai 2013 - 14:26
C'est génial, mersci pour ce script de ouf.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum