AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le deal à ne pas rater :
SSD interne Crucial BX500 2,5″ SATA – 500 Go à 29,99€
29.99 €
Voir le deal

Partagez
 

 [Script] Problème avec le switcheur de héros in-map [Résolu]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Nusenism
Nomimange'twa ♪
Nomimange'twa ♪
Nusenism


Masculin Age : 33
Inscrit le : 02/02/2010
Messages : 4692

[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: [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] Icon_minitimeJeu 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
 
  attr_accessor :index
 
  def initialize
    super(-16, -16, 576, 448)
    self.contents = Bitmap.new(width-32, height-32)
    self.contents.font.name = "Arial"
    self.opacity = 0
    self.back_opacity = 0
    @commands = []
    @items = []
    for actor in $game_party.members
      @commands.push(actor.name)
      @items.push(Cache.character(actor.character_name))
    end
    @item_max = @commands.size
    @index = 0
    @cx = $game_player.screen_x + 16
    @cy = $game_player.screen_y - 8
    setup_move_start
    refresh
  end
 
  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
Revenir en haut Aller en bas
http://imagin.jeunforum.com/portal.htm
Pouet
Ex-Grand Œil des projets
Ex-Grand Œil des projets
Pouet


Féminin Age : 39
Inscrit le : 10/06/2009
Messages : 1137

[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: 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] Icon_minitimeSam 23 Oct 2010 - 13:22

Up
Revenir en haut Aller en bas
Zangther
Maître des Duels
Maître des Duels
Zangther


Masculin Age : 32
Inscrit le : 29/07/2009
Messages : 7841

[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: 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] Icon_minitimeSam 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...
Revenir en haut Aller en bas
Sihn
Voyageur Lv.10
Voyageur Lv.10
Sihn


Masculin Age : 36
Inscrit le : 24/04/2009
Messages : 407

[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: 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] Icon_minitimeVen 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
 
  attr_accessor :index
 
  def initialize
    super(-16, -16, 576, 448)
    self.contents = Bitmap.new(width-32, height-32)
    self.contents.font.name = "Arial"
    self.opacity = 0
    self.back_opacity = 0
    @commands = []
    @items = []
    for actor in $game_party.members
      @commands.push(actor.name)
      @items.push(Cache.character(actor.character_name))
    end
    @item_max = @commands.size
    @index = 0
    @cx = $game_player.screen_x + 16
    @cy = $game_player.screen_y - 8
    setup_move_start
    refresh
  end
 
  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
Revenir en haut Aller en bas
http://www.google.fr/
Nusenism
Nomimange'twa ♪
Nomimange'twa ♪
Nusenism


Masculin Age : 33
Inscrit le : 02/02/2010
Messages : 4692

[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: 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] Icon_minitimeLun 1 Nov 2010 - 21:55

J'avais loupé le message! oo'
Testé et fonctionnel Sihn!
Merci beaucoup! =)
Revenir en haut Aller en bas
http://imagin.jeunforum.com/portal.htm
Contenu sponsorisé




[Script] Problème avec le switcheur de héros in-map [Résolu] Empty
MessageSujet: 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] Icon_minitime

Revenir en haut Aller en bas
 

[Script] Problème avec le switcheur de héros in-map [Résolu]

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» [Resolu]Probleme avec le script: SBS 2.6
» [Résolu] Problème contact avec le héros
» [Resolu]Problème avec "Entrer le nom du héros"
» RÉSOLU Probleme avec CATEGORY IDENTIFIER objet avec KGC script
» Problème de script avec le SBS[Résolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Problèmes et Solutions :: Résolu-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Cookies | Forum gratuit