Partagez
Aller en bas
Dishi
Dishi
Membre

Nombre de messages : 632
Age : 21
Localisation : Marseille
Distinction : Alias Dichie
Aussi alias Sherifa Luna de la commu' (je suis dichie et d'ailleurs )

Co-créateur du Nyan Xak
[Tétété]

Apprenti Pedobear
[Mémé nova]

Keupiteur de ponctuation.
[un sombre inconnu.]
Date d'inscription : 07/07/2011
https://github.com/paul-roman

[Mini Tuto]Rajouter des choix au script de GO à choix Empty [Mini Tuto]Rajouter des choix au script de GO à choix

le Lun 19 Déc 2011 - 11:24
Bonjour à tous !
Comme promis, voici un pitit tuto pour rajouter des choix dans le script de Game Over avec choix et surement dans les scripts Ace en général.
Avant de commencer ce tuto, munissez-vous du script de GO à choix de regendo.
On commence donc par étudier le texte :

Code:
 add_command("Réessayer le combat", :tryagain) if SceneManager.scene.is_defeat?
 add_command("Charger une partie", :load, load_enabled)
 add_command(Vocab::to_title, :to_title)
 add_command(Vocab::shutdown, :shutdown)

Etudions donc ensemble : 4 fois, intervint la même ligne, du moins 4 lignes avec la même structure :
Code:
add_command("Texte affiché", :commande)
Dans la 1ère ligne, on remarque également une suite. Si vous parlez un minimum anglais, vous comprendrez que le choix appelé par cette ligne n'apparait que si vous avez un Game Over suite à une défaite.

Ok, on a étudié la commande qui permet d'appeler des objets.
Si vous avez un peu suivi, il ne vous sera pas trop dur de créer votre propre ligne. On va, par exemple, permettre au joueur de sauvegarder lors du Game Over.
On va donc rajouter cette ligne :
Code:
add_command("Sauvegarder", :save)
Et on va l'intégrer :

Code:
add_command("Réessayer le combat", :tryagain) if SceneManager.scene.is_defeat?
add_command("Sauvegarder", :save)
add_command("Charger une partie", :load, load_enabled)
add_command(Vocab::to_title, :to_title)
add_command(Vocab::shutdown, :shutdown)

Voila, on a fini la première partie, soit celle où on lance l'appel de commande. Maintenant, on va étudier puis éditer le code où l'on crée la fenêtre :

Code:
        def create_command_window
                @command_window = Window_GameOver.new
                @command_window.set_handler(:tryagain, method(:command_retry)) if is_defeat?
                @command_window.set_handler(:load, method(:command_load))
                @command_window.set_handler(:to_title, method(:goto_title))
                @command_window.set_handler(:shutdown, method(:command_shutdown))
        end

Ici aussi, c'est pas dur à comprendre.
On créé une fonction qui va créer la fenêtre "command_window" qui, elle même, va créer les "objets" qui permettrons de réessayer le combat, de charger, de revenir à l'écran titre et de quitter.
Il nous faut désormais créer une nouvelle ligne car, vous l'avez remarqué, les 4 dernières lignes ont elles aussi la même structure.
On veut donc que le joueur puisse sauvegarder lorsque le Game Over apparait. Rajoutons donc notre ligne, à l'aide des termes ":save" et ":command_save" :
Code:
 @command_window.set_handler(:save, method(:command_save))
Et intégrons notre ligne au code !

Code:
        def create_command_window
                @command_window = Window_GameOver.new
                @command_window.set_handler(:tryagain, method(:command_retry)) if is_defeat?
                @command_window.set_handler(:save, method(:command_save))
                @command_window.set_handler(:load, method(:command_load))
                @command_window.set_handler(:to_title, method(:goto_title))
                @command_window.set_handler(:shutdown, method(:command_shutdown))
        end

Voila, ceci est fait !
Seulement, la commande :command_save doit renvoyer à des instructions, qu'il faut donner au préalable !

Explorons la suite du code...

Nous trouvons ceci :

Code:
def close_command_window
                @command_window.close if @command_window
                update until @command_window.close?
        end
       
        def command_load
                close_command_window
                fadeout_all
                SceneManager.call(Scene_Load)
        end
       
        def goto_title
                close_command_window
                fadeout_all
                SceneManager.goto(Scene_Title)
        end
       
        def command_shutdown
                close_command_window
                fadeout_all
                SceneManager.exit
        end
 

Ces petits paragraphes représentent les instructions que chaque commande doit donner. Il faut donc en créer un pour notre commande "command_save" !
Code:
        def command_save
                close_command_window
                fadeout_all
                SceneManager.call(Scene_Save)
        end
Insérez ce code à la suite de celui cité précedément et nous pouvons désormais sauvegarder pendant un Game Over !

Voici donc le code que vous devez avoir à la fin :

Spoiler:
Code:
# Par bStefan aka. regendo
# Traduit par Dishi
# Donnez les crédits si vous utilisez ce script (pas forcément au traducteur hein,
# bien que tout passage dans les crédits soit évidemment bienvenue)
# A utiliser avec RPG Maker VX Ace

#============================================
# Game Over avec des choix
#============================================
# Ajoute 4 choix à Scene_Gameover:
# Réessayer le combat(si vous perdez un combat)
# Charger une sauvegarde (s'il y en a une)
# Retourner à l'écran titre
# Quitter
#============================================
# A placer au dessus de Main
#============================================

class Window_GameOver < Window_Command
        def initialize
                super(0, 0)
                update_placement
                self.openness = 0
                open
        end
       
        def window_width
                return 225
        end
       
        def update_placement
                self.x = (Graphics.width - width) / 2
                self.y = (Graphics.height - height) / 1.1
        end
       
        def make_command_list
                add_command("Réessayer le combat", :tryagain) if SceneManager.scene.is_defeat?
                add_command("Sauvegarder", :save)
                add_command("Charger une partie", :load, load_enabled)
                add_command(Vocab::to_title, :to_title)
                add_command(Vocab::shutdown, :shutdown
        end
       
        def load_enabled
                DataManager.save_file_exists?
        end
end

class Scene_Gameover < Scene_Base
        alias start_old start
        def start
                start_old
                create_command_window
        end
       
        def pre_terminate
                super
                close_command_window
        end
       
        def update
                super
        end
       
        def create_command_window
                @command_window = Window_GameOver.new
                @command_window.set_handler(:tryagain, method(:command_retry)) if is_defeat?
                @command_window.set_handler(:save, method(:command_save))
                @command_window.set_handler(:load, method(:command_load))
                @command_window.set_handler(:to_title, method(:goto_title))
                @command_window.set_handler(:shutdown, method(:command_shutdown))
        end
       
        def close_command_window
                @command_window.close if @command_window
                update until @command_window.close?
        end
       
        def command_load
                close_command_window
                fadeout_all
                SceneManager.call(Scene_Load)
        end
             
        def command_save
                close_command_window
                fadeout_all
                SceneManager.call(Scene_Save)
        end
       
        def goto_title
                close_command_window
                fadeout_all
                SceneManager.goto(Scene_Title)
        end
       
        def command_shutdown
                close_command_window
                fadeout_all
                SceneManager.exit
        end
 
  def command_retry
    SceneManager.goto(Scene_Battle)
    BattleManager.setup(@troop_id, @can_escape, @can_lose)
    $game_party.members.each do |actor|
      actor.recover_all
    end
    $game_troop.members.each do |enemy|
      enemy.recover_all
    end
    BattleManager.bmgs_by_regendo(@map_bgm, @map_bgs)
  end
 
  def is_defeat (b = true)
    @defeat = b
  end
 
  def is_defeat?
    @defeat
  end
 
  def battle_setup (troop_id, can_escape = true, can_lose = false)
    @troop_id = troop_id
    @can_escape = can_escape
    @can_lose = can_lose
  end
 
  def bgms_setup(map_bgm, map_bgs)
    @map_bgm = map_bgm
    @map_bgs = map_bgs
  end
end

module BattleManager
  class << self
    alias_method :setup_old, :setup
  end
  def self.setup(troop_id, can_escape = true, can_lose = false)
    self.setup_old(troop_id, can_escape = true, can_lose = false)
    @troop_id = troop_id
  end
 
  def self.bmgs_by_regendo(map_bgm, map_bgs)
    @map_bgm = map_bgm
    @map_bgs = map_bgs
  end
 
  def self.process_defeat
    $game_message.add(sprintf(Vocab::Defeat, $game_party.name))
    wait_for_message
    if @can_lose
      revive_battle_members
      replay_bgm_and_bgs
      SceneManager.return
    else
      SceneManager.goto(Scene_Gameover)
      SceneManager.scene.is_defeat #Ceci est nouveau
      SceneManager.scene.battle_setup(@troop_id, @can_escape, @can_lose) #Cela aussi
      SceneManager.scene.bgms_setup(@map_bgm, @map_bgs) #et ça
    end
    battle_end(2)
    return true
  end
end

Bien entendu, ce tuto est purement théorique, car nous ne pouvons en aucun cas vérifier de potentielles erreurs ([Mini Tuto]Rajouter des choix au script de GO à choix 522164).

Sur ce, je vous laisse, en espérant vous avoir aidé,
Dishi



Coco' : +5 points :3
MrD2rk
MrD2rk
Membre

Nombre de messages : 148
Age : 21
Localisation : Dans un tiroir (Aie)
Distinction : aucune
Date d'inscription : 24/10/2011

[Mini Tuto]Rajouter des choix au script de GO à choix Empty Re: [Mini Tuto]Rajouter des choix au script de GO à choix

le Lun 19 Déc 2011 - 11:47
Thank's Smile
Coco'
Coco'
Staffeux retraité

Nombre de messages : 6577
Age : 26
Localisation : Nord/Douai
Distinction : EL DICTATOR COCO'
Coco-Dieu en puissance

[Mini Tuto]Rajouter des choix au script de GO à choix Magikarpe Grand gourou suppléant de la secte des MAGIKARP
Leader charismatique des 2beStaffieux

N°1 du forum
Président, vice-présidents et membres honoraires de la cour suprême du forum
Président de l'association des grosses distinctions CMB
Date d'inscription : 02/07/2008
https://www.rpgmakervx-fr.com

[Mini Tuto]Rajouter des choix au script de GO à choix Empty Re: [Mini Tuto]Rajouter des choix au script de GO à choix

le Lun 19 Déc 2011 - 16:55
Merci du tuto' Dichie, +5 Wink
Ezekiel Koening
Ezekiel Koening
Membre

Nombre de messages : 413
Age : 21
Localisation : Nantes
Distinction : aucune
Date d'inscription : 17/12/2011

[Mini Tuto]Rajouter des choix au script de GO à choix Empty Re: [Mini Tuto]Rajouter des choix au script de GO à choix

le Lun 19 Déc 2011 - 20:33
Toujours aussi bien ^^ ! Merci Wink !
Dishi
Dishi
Membre

Nombre de messages : 632
Age : 21
Localisation : Marseille
Distinction : Alias Dichie
Aussi alias Sherifa Luna de la commu' (je suis dichie et d'ailleurs )

Co-créateur du Nyan Xak
[Tétété]

Apprenti Pedobear
[Mémé nova]

Keupiteur de ponctuation.
[un sombre inconnu.]
Date d'inscription : 07/07/2011
https://github.com/paul-roman

[Mini Tuto]Rajouter des choix au script de GO à choix Empty Re: [Mini Tuto]Rajouter des choix au script de GO à choix

le Lun 19 Déc 2011 - 21:16
Cataclysm a écrit:Toujours aussi bien ^^ ! Merci Wink !

Toujours aussi bien que...
J'ai jamais fait de tuto ^^'
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum