[Script] Problème avec le switcheur de héros in-map [Résolu]
Auteur
Message
Nusenism
Age : 33 Inscrit le : 02/02/2010 Messages : 4692
Sujet: [Script] Problème avec le switcheur de héros in-map [Résolu] Jeu 7 Oct 2010 - 9:51
Problème avec le switcheur de héros in-map de Sihn
Voici déjà le code du script tel que je l'utilise:
Code:
#============================================================================= # Switcheur de héros #----------------------------------------------------------------------------- # Créé par Sihn, à partir du menu tournant de MakirouAru # Conçu pour RMVX # Version 2.4 #=============================================================================
# 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 = 40
# 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 = 84
# 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
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(item.width / 3, 0, item.width / 3, item.height / 4) opa = @index == i ? 255 : 128 self.contents.blt(x - item.width / 3, y - item.height / 4, item, rect, opa) else index = $game_party.members[i].character_index rect = Rect.new((item.width / 4) * (index % 4) + (item.width / 12), (item.height / 2) * (index / 4 % 2), item.width / 12, item.height / 8) 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
Le problème:
J'utilise aussi le script de formation de KGC, qui fait en sorte que j'ai 3 personnages dans l'équipe de "combat" et 4 ou 5 autres (maxi) dans la réserve. Même avec le Partyform de KGC, le script de Sihn est fonctionnel. Le problème est qu'il me bousille toute la formation en déplaçant les personnages lors du changement de leader.
Ce que je voudrais: une petite modification du code si possible, pour que lors du changement de leader, le nouveau leader et l'ancien ne fassent qu'échanger leur place dans la formation, sans la chambouler.
J'ignore si c'est faisable facilement, et je m'en remet donc aux scripteurs du fofo. EDIT: bon, apparemment... non. xD
Merci d'avance. ^^
Dernière édition par Nusenism le Lun 1 Nov 2010 - 21:57, édité 1 fois
Pouet
Ex-Grand Œil des projets
Age : 39 Inscrit le : 10/06/2009 Messages : 1137
Sujet: Re: [Script] Problème avec le switcheur de héros in-map [Résolu] Sam 23 Oct 2010 - 13:22
Up
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [Script] Problème avec le switcheur de héros in-map [Résolu] Sam 23 Oct 2010 - 13:25
Nus' devait fournir des informations supplémentaires afin que je m'occupe de son problème, je n'ai pas eu de retour...
Sihn
Voyageur Lv.10
Age : 36 Inscrit le : 24/04/2009 Messages : 407
Sujet: Re: [Script] Problème avec le switcheur de héros in-map [Résolu] Ven 29 Oct 2010 - 20:46
Je me permet un petit up... Pour moi, ça me semble assez facile à faire comme modif, à première vue... (après, n'ayant pas RMVX sous la main, je ne peux pas confirmer que ça marche... même si le contraire m'étonnerais, vu la taille de la modif) Voila une version modifié de mon script qui fait ce que tu demandes (échanger la place du nouveau leader et de l'ancien) :
Code:
#============================================================================= # Switcheur de héros #----------------------------------------------------------------------------- # Créé par Sihn, à partir du menu tournant de MakirouAru # Conçu pour RMVX # Version 2.4.2 #----------------------------------------------------------------------------- # Version modifiée pour Nusenism #=============================================================================
# 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 = 40
# 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 = 84
# 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
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(item.width / 3, 0, item.width / 3, item.height / 4) opa = @index == i ? 255 : 128 self.contents.blt(x - item.width / 3, y - item.height / 4, item, rect, opa) else index = $game_party.members[i].character_index rect = Rect.new((item.width / 4) * (index % 4) + (item.width / 12), (item.height / 2) * (index / 4 % 2), item.width / 12, item.height / 8) 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 #-------------------------------------- # Partie modifiée du script d'origine # #-------------------------------------- # 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 mem = $game_party.actors[@switcheur_window.index] $game_party.actors[@switcheur_window.index] = $game_party.actors[0] $game_party.actors[0] = mem #-------------------------------------- $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
Nusenism
Age : 33 Inscrit le : 02/02/2010 Messages : 4692
Sujet: Re: [Script] Problème avec le switcheur de héros in-map [Résolu] Lun 1 Nov 2010 - 21:55
J'avais loupé le message! oo' Testé et fonctionnel Sihn! Merci beaucoup! =)
Contenu sponsorisé
Sujet: Re: [Script] Problème avec le switcheur de héros in-map [Résolu]
[Script] Problème avec le switcheur de héros in-map [Résolu]