Le Deal du moment : -17%
Casque de réalité virtuelle Meta Quest 2 ...
Voir le deal
249.99 €

Aller en bas
tim
tim
Membre

Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015

Auberge de Tim Empty Auberge de Tim

Sam 19 Nov 2016 - 11:37
EDIT : Vous trouverez la version 3 à jour plus bas dans les messages


Après 2 semaines de dur apprentissage du RGSS3, j'ai voulu me lancer dans un premier script tout en continuant mon projet, et ça tombait bien car, comme je l'avais indiqué dans la description de mon projet , je voulais faire une auberge façon baldur gate 2 et j'ai beau cherché partout sur internet, je n'ai rien trouvé, et pour une fois, les events ne me plaisait pas (et pourtant j'adore tout faire en events).

Donc, je met à disposition mon premier script totalement fonctionnel et en très grand partie personnalisable.

Désole, je n'ai pas de capture d'écran, je verrai pour en faire une plus tard.

Donc sans plus attendre, dévoilement de mon oeuvre Wink

Code:
=begin
--------------------------------------------------------------------------------

                                ***********
                                * ------- *
                                * AUBERGE *
                                * ------- *
                                ***********
                                  
AUTEUR : Tim
VERSION : 1
DATE : 15/11/2016

--------------------------------------------------------------------------------

Objectif : creer une auberge personnalisable avec la possibilite de choisir
4 types de chambres differentes avec chacune leur prix et leur catégorie de soin,
des valeurs sont deja indiquee par defaut

--------------------------------------------------------------------------------

Utilisation :
  _ Copier le script dans l'onglet materials
  _ Choisir une variable IG temporaire qui permettra de renvoyer une valeur en sortie de script
  _ Personnaliser les constantes presentes dans le module Module_Auberge
  _ Faites un appel de script a partir d'un evenement du jeu
  _ Le script renvoi à la fin du jeu une valeur stocker dans la variable IG que vous aurait precise
    _ Renvoi 0 si 0 en cas d'annulation
    _ Renvoi 1 en cas de nuitee dans la chambre 1
    _ Renvoi 2 en cas de nuitee dans la chambre 2
    _ Renvoi 3 en cas de nuitee dans la chambre 3
    _ Renvoi 4 en cas de nuitee dans la chambre 4
  _ Effectuer les actions de teleportation, son, dialogue ou ce que vous voulez en fonction de la valeur renvoyee a la suite de l'evenement qui a appele le script (facultatif)

--------------------------------------------------------------------------------

Personnalisations supplementaires en modifiant le script manuellement:
  _ Avoir plusieurs auberges differentes :
    Copier le script et le renommer
    Modifier le nom de la classe de scene au 4)
    Modifier les parametres de la nouvelle auberge
    Modifier le nouvel appel de script en mettant le nouveau nom de la classe de scene
  _ Supprimer une chambre
    Supprimer dans liste_commande 3)4) la ligne qui correspond a la chambre a supprimer
    Supprimer dans creation_fenetre_auberge 4) la ligne qui correspond a la chambre a supprimer
  _ Modifier le vocable prix et description
    Remplacer les termes a modifier dans 3)3) auberge_chambre_selectionnee(chambre) sur chaque ligne ou il apparait
  _ Modifier le vocable sortir de l'auberge
    Remplacer la phrase a modifier dans liste_commande 3)4)
  _ Modifier le vocable je dors ici et annuler
    Remplacer les phrases a modifier dans liste_commande 3)5)
  
    
--------------------------------------------------------------------------------

Restrictions :
  _ resolution native 544*416 (pour passer outre il vous faudra manuellement redimenssionner toutes les fenetres)
  _ verifier les restrictions concernant les nombre de caracteres dans les parametres
  _ tous les nombres doivent etre des entiers sans unite et sans signe
  _ vous devez obligatoirement dediee une variable IG pour le script tout du moins temporairement, attention cette variable sera ecrasee a chaque debut d'appel de script

--------------------------------------------------------------------------------

Appel de script : SceneManager.call(Tim_Scene_Auberge)

--------------------------------------------------------------------------------

Descriptif des constantes personnalisables :

auberge_nom                        == nom de l'auberge ( 21 caracteres maximum)

auberge_prix_chambre_1             == prix de la chambre 1 (mettre le prix sans l'unité 10 PO/gils/euros s'ecrit 10 le script utilise la monnaie inscrite dans votre vocab)
auberge_prix_chambre_2             == prix de la chambre 2
auberge_prix_chambre_3             == prix de la chambre 3
auberge_prix_chambre_4             == prix de la chambre 4

auberge_recup_1                    == pourcentage de sante et magie recuperee dans la chambre 1 10% s'ecrit 10
auberge_recup_2                    == pourcentage de sante et magie recuperee dans la chambre 2
auberge_recup_3                    == pourcentage de sante et magie recuperee dans la chambre 3
auberge_recup_4                    == pourcentage de sante et magie recuperee dans la chambre 4

auberge_chambre_1                  == nom de la chambre 1 (40 caracteres maximum)
auberge_chambre_2                  == nom de la chambre 2
auberge_chambre_3                  == nom de la chambre 3
auberge_chambre_4                  == nom de la chambre 4

auberge_description_chambre_1_L1   == description de la chambre 1 première ligne (39 caractères maximum par ligne)
auberge_description_chambre_1_L2   == description de la chambre 1 deuxième ligne (39 caractères maximum par ligne)
auberge_description_chambre_2_L1   == description de la chambre 2
auberge_description_chambre_2_L2   == description de la chambre 2
auberge_description_chambre_3_L1   == description de la chambre 3
auberge_description_chambre_3_L2   == description de la chambre 3
auberge_description_chambre_4_L1   == description de la chambre 4
auberge_description_chambre_4_L2   == description de la chambre 4

nbr_heros                          == nombre de heros maximum dans votre jeu

index_temp                         == numero d'une variable IG qui servira de variable temporaire

--------------------------------------------------------------------------------

Squelette du script :
  1) Introduction
    1) Titre - Auteur - Version - Date de creation
    2) Objectif
    3) Utilisation
    4) Personnalisation supplementaires dans le corps du script
    5) Restrictions
    6) Appel de script
    7) Descritif des variables
     Squelette du script
  2) Creation du module contenant toutes les constantes personnalisable
  3) Creation des classes de fenetres
    1) Classe creation fenetre pour le nom de l'auberge
    2) Classe creation fenetre pour afficher l'or possedee
    3) Classe creation fenetre pour la description de la chambre
    4) Classe creation fenetre pour le choix de la chambre
    5) Classe creation fenetre pour valider ou annuler la nuitee
  4) Creation de la scene qui gere auberge
  
--------------------------------------------------------------------------------
=end
#-------------------------------------------------------------------------------
#
# 2) Creation du module contenant tous les parametres personnalisables
#
#-------------------------------------------------------------------------------

module Module_Auberge
  
  AUBERGE_NOM                       = "Nom de l'auberge" # 21 caracteres maximum    
  AUBERGE_PRIX_CHAMBRE_1            = 100 # entier uniquement sans le symbole de la monnaie (100 correspond a 10O PO,gil,euros,... )
  AUBERGE_PRIX_CHAMBRE_2            = 150
  AUBERGE_PRIX_CHAMBRE_3            = 200
  AUBERGE_PRIX_CHAMBRE_4            = 250
  AUBERGE_RECUP_1                   = 25 # entier uniquement, pourcentage compris entre 1 et 100 sans le symbole % ( 25 correspond a 25% )
  AUBERGE_RECUP_2                   = 50
  AUBERGE_RECUP_3                   = 75
  AUBERGE_RECUP_4                   = 100
  AUBERGE_CHAMBRE_1                 = "chambre 1" # 40 caracteres maximum
  AUBERGE_CHAMBRE_2                 = "chambre 2"
  AUBERGE_CHAMBRE_3                 = "chambre 3"
  AUBERGE_CHAMBRE_4                 = "chambre 4"
  AUBERGE_DESCRIPTION_CHAMBRE_1_L1  = "description chambre 1 ligne 1" # 39 caractères maximum par ligne
  AUBERGE_DESCRIPTION_CHAMBRE_1_L2  = "description chambre 1 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_2_L1  = "description chambre 2 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_2_L2  = "description chambre 2 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_3_L1  = "description chambre 3 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_3_L2  = "description chambre 3 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_4_L1  = "description chambre 4 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_4_L2  = "description chambre 4 ligne 2"
  AUBERGE_NOMBRE_HEROS              = 8 # entier uniquement
  AUBERGE_INDEX_TEMP                = 1 # entier uniquement qui correspond au numero d'index de la variable IG
  
end

#-------------------------------------------------------------------------------
#
# 3) Creation des classes pour les differentes fenetres de l'auberge (resolution 544*416)
#
#-------------------------------------------------------------------------------
# 3)  1) Classe creation fenetre pour le nom de l'auberge
#-------------------------------------------------------------------------------

class Window_Nom_Auberge < Window_Base

  def initialize
    
    super(0, 0, 363, 83) # x, y, largeur, hauteur
    auberge_titre
  
  end
  
  def auberge_titre
    
    contents.clear
    contents.draw_text(116, 10, 130, 42, Module_Auberge::AUBERGE_NOM) # x, y ,largeur du texte, hauteur, texte a afficher)
    
  end

end

#-------------------------------------------------------------------------------
# 3)  2) Classe creation fenetre pour afficher l'or possedee
#-------------------------------------------------------------------------------

class Window_Auberge_Gold < Window_Base

# Initialise la class
  def initialize
    
    super(363, 0, 181, 83)
    contents.clear # Supprime le contenu
    draw_currency_value(value, currency_unit, 4, 16, contents.width -  # affiche l'or detenu
    
  end

# Renvoie l'or detenu
  def value
    
    $game_party.gold
    
  end

# Utilise le vocable pour les PO
  def currency_unit
    Vocab::currency_unit
  end

end
  
#-------------------------------------------------------------------------------
# 3)  3) Classe creation fenetre pour la description de la chambre
#-------------------------------------------------------------------------------

class Window_Description_Auberge < Window_Base

# Initialise la class avec le parametre chambre qui permet de savoir quelle chambre a ete selectionnee
  def initialize(chambre)
        
    super(272, 83, 272, 249) # (x, y, largeur, hauteur)
    auberge_chambre_selectionnee(chambre)
      
  end
  
# Affiche le prix et la description en fonction de la chambre selectionnee
  def auberge_chambre_selectionnee(chambre)
    
    contents.clear
    
    case chambre
      when 1 # Cas ou c'est la chambre 1 de selectionnee
        contents.draw_text(10, 10, 130, 42, "Prix : " + Module_Auberge::AUBERGE_PRIX_CHAMBRE_1.to_s + " " +Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
        contents.draw_text(10, 62, 130, 42, "Description :")
        contents.draw_text(10, 108, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L1)
        contents.draw_text(10, 150, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L2)
      when 2 # Cas ou c'est la chambre 2 de selectionnee
        contents.draw_text(10, 10, 130, 42, "Prix : " + Module_Auberge::AUBERGE_PRIX_CHAMBRE_2.to_s + " " +Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
        contents.draw_text(10, 62, 130, 42, "Description :")
        contents.draw_text(10, 108, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L1)
        contents.draw_text(10, 150, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L2)
      when 3 # Cas ou c'est la chambre 3 de selectionnee
        contents.draw_text(10, 10, 130, 42, "Prix : " + Module_Auberge::AUBERGE_PRIX_CHAMBRE_3.to_s + " " +Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
        contents.draw_text(10, 62, 130, 42, "Description :")
        contents.draw_text(10, 108, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L1)
        contents.draw_text(10, 150, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L2)
      when 4 # Cas ou c'est la chambre 4 de selectionnee
        contents.draw_text(10, 10, 130, 42, "Prix : " + Module_Auberge::AUBERGE_PRIX_CHAMBRE_4.to_s + " " +Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
        contents.draw_text(10, 62, 130, 42, "Description :")
        contents.draw_text(10, 108, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L1)
        contents.draw_text(10, 150, 252, 42, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L2)
      
    end
      
  end

end

#-------------------------------------------------------------------------------
# 3)  4) Classe creation fenetre pour le choix de la chambre
#-------------------------------------------------------------------------------

class Window_Chambre_Auberge < Window_Command

# Initialise la classe
  def initialize
    
    super(0, 83) # (x, y)
    
  end

# Definis la largeur de la fenetre
  def window_width
  
    return 272
    
  end

# Definis la hauteur de la fenetre
  def window_height
    
    return 333
    
  end

# Lance l'execution de liste_commande
  def make_command_list
  
    liste_commande
    
  end
  
# Cree la liste de choix
  def liste_commande
    

    add_command(Module_Auberge::AUBERGE_CHAMBRE_1, :auberge_chambre_1)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_2, :auberge_chambre_2)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_3, :auberge_chambre_3)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_4, :auberge_chambre_4)
    add_command("Sortir de l'auberge", :auberge_sortir)
    
  end
  
end

#-------------------------------------------------------------------------------
# 3)  5) Classe creation fenetre pour valider ou annuler la nuitee
#-------------------------------------------------------------------------------

class Window_Validation_Nuitee_Auberge < Window_Command

# Initialise la classe
  def initialize
    
    super(272, 332) # (x, y)
    
  end

# Definis la largeur de la fenetre
  def window_width
  
    return 272
    
  end

# Definis la hauteur de la fenetre
  def window_height
    
    return 84
    
  end

# Lance l'execution de liste_commande
  def make_command_list
  
    liste_commande
    
  end
  
# Cree la liste de choix
  def liste_commande
    
    add_command("Je dors ici", :auberge_nuitee_validee)
    add_command("Annuler", :auberge_nuitee_annulee)
    
  end
  
end

#-------------------------------------------------------------------------------
#
# 4) Creation de la scene qui gere auberge
#
#-------------------------------------------------------------------------------

class Tim_Scene_Auberge < Scene_MenuBase

# Initialise la scene
  def start
  
    super
    $game_variables[Module_Auberge::AUBERGE_INDEX_TEMP] = 0 # Ne pas toucher, initialise la valeur de la variable IG
    @variable_de_calcul = 0 # Ne pas toucher, permet de savoir quelle chambre a ete selectionnee
    creation_fenetre_auberge
    
  end

# Cree les fenetres de l'auberge
  def creation_fenetre_auberge
    
    @fenetre_nom_auberge          = Window_Nom_Auberge.new
    @fenetre_or_possede           = Window_Auberge_Gold.new
    @fenetre_chambre              = Window_Chambre_Auberge.new
    @fenetre_chambre.set_handler(:auberge_chambre_1,      method(:command_auberge_chambre_1))
    @fenetre_chambre.set_handler(:auberge_chambre_2,      method(:command_auberge_chambre_2))
    @fenetre_chambre.set_handler(:auberge_chambre_3,      method(:command_auberge_chambre_3))
    @fenetre_chambre.set_handler(:auberge_chambre_4,      method(:command_auberge_chambre_4))
    @fenetre_chambre.set_handler(:auberge_sortir,         method(:command_auberge_sortir))

  end

# Permet de quitter l'auberge
  def command_auberge_sortir
    return_scene
  end

# Cree les actions en cas de choix de la chambre 1
  def command_auberge_chambre_1
    
    @variable_de_calcul = 1 # Ne pas toucher, permet de savoir quelle chambre a ete selectionnee
    @fenetre_description_auberge  = Window_Description_Auberge.new(1) # Fais apparaitre un descriptif et le prix de la chambre
    @fenetre_validation_auberge   = Window_Validation_Nuitee_Auberge.new  # Fais apparaitre la fenetre pour valider la nuitee
    demande_validation_nuitee # Execulte la methode pour valider ou non le paiement de la nuitee
    
  end
  
# Creer les actions en cas de choix de la chambre 2
  def command_auberge_chambre_2
    
    @variable_de_calcul = 2
    @fenetre_description_auberge  = Window_Description_Auberge.new(2)
    @fenetre_validation_auberge   = Window_Validation_Nuitee_Auberge.new
    demande_validation_nuitee
    
  end

# Creer les actions en cas de choix de la chambre 3
  def command_auberge_chambre_3
    
    @variable_de_calcul = 3
    @fenetre_description_auberge  = Window_Description_Auberge.new(3)
    @fenetre_validation_auberge   = Window_Validation_Nuitee_Auberge.new
    demande_validation_nuitee
    
  end
  
# Creer les actions en cas de choix de la chambre 4
  def command_auberge_chambre_4
    
    @variable_de_calcul = 4
    @fenetre_description_auberge  = Window_Description_Auberge.new(4)
    @fenetre_validation_auberge   = Window_Validation_Nuitee_Auberge.new
    demande_validation_nuitee
    
  end
  
# Demande une confirmation pour validee ou pas la nuitee
  def demande_validation_nuitee
    
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_validee,      method(:command_auberge_nuitee_validee))
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_annulee,      method(:command_auberge_nuitee_annulee))

  end
  
# Fais la verification de l'or, execute les soin et quitte le menu auberge    
  def command_auberge_nuitee_validee
    
    if verification_or_possede
      modification_variable_retour_IG
      paiement_chambre
      restauration_hp_mp
      return_scene
    else
      command_auberge_nuitee_annulee
    end
    
  end
      
# Ferme toutes les fenetres et lance la reinitialisation de la scene
  def command_auberge_nuitee_annulee
    
    @fenetre_validation_auberge.close
    @fenetre_description_auberge.close
    @fenetre_chambre.close
    @fenetre_nom_auberge.close
    start
    
  end

# Verifie si suffisament d'or pour payer la nuitee
  def verification_or_possede
    
    case @variable_de_calcul
      when 1
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_1
      when 2
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_2
      when 3
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_3
      when 4
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_4
    end
      
  end
    
# Modifie la variable IG temporaire
  def modification_variable_retour_IG
    
    $game_variables[Module_Auberge::AUBERGE_INDEX_TEMP] = @variable_de_calcul
    
  end
  
# Fais payer la chambre
  def paiement_chambre
    
    case @variable_de_calcul
      when 1
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_1)
      when 2
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_2)
      when 3
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_3)
      when 4
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_4)
    end
      
  end
        
# Restauration HP et MP en fonction du HP max du groupe et du MP max du groupe et de la chambre choisi  
  def restauration_hp_mp
    
    local = 1 # Ne pas toucher, c'est une variable de calcul qui initialise la boucle while
    @max_hp = 1 # Ne pas toucher, c'est une variable de calcul qui initialise les HP a recuperer
    @max_mp = 1 # Ne pas toucher, c'est une variable de calcul qui initialise les MP a recuperer
    while ( local <= Module_Auberge::AUBERGE_NOMBRE_HEROS) # boucle permettant de connaitre le hp et le mp le plus eleve des heros
      if @max_hp < $game_actors[local].mhp
        @max_hp = $game_actors[local].mhp
      end
      if @max_mp < $game_actors[local].mmp
        @max_mp = $game_actors[local].mmp
      end
      local +=1 # Ne pas toucher, c'est une variable qui permet de sortir de la boucle while
    end
    local = 1 # Ne pas toucher, c'est une variable de calcul qui initialise la boucle while
    while ( local <= Module_Auberge::AUBERGE_NOMBRE_HEROS) # boucle qui permet de restaurer tous les heros
      case @variable_de_calcul
        when 1
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_1 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_1 / 100 # rajoute les MP
        when 2
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_2 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_2 / 100 # rajoute les MP
        when 3
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_3 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_3 / 100 # rajoute les MP
        when 4
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_4 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_4 / 100 # rajoute les MP
      end
      local += 1 # Ne pas toucher, c'est une variable qui permet de sortir de la boucle while
    end
    
  end
  
end


Comme je suis un débutant, il n'est pas forcement très optimisé, mais il est hyper documenté comme ça tout le monde peut très facilement tout comprendre.


DESCRIPTION :
Comme son nom l'indique, il permet de créer un menu d'auberge avec 4 chambres différentes.
Par défaut, la première chambre soigne 25% des dégâts, la 2ème 50, la 3ème 75 et la dernier totalement mais le pourcentage est complètement paramétrable.
Chaque chambre à son propre nom, sa propre description et bien sûr un prix différent et tout cela paramétrable à souhait.

UTILISATION :
Il suffit de créer un personnage en event qui dira un message d'accueil de bienvenu et fera un appel de script.
Le script se charge de présenter les 4 chambre, de vérifier et de faire payer les héros, de les soigner selon la chambre choisie et il renvoi une valeur stockée dans une variable IG.
A la suite de l'appel de script, il vous faudra dans l'evenement créer une chaine si, sinon pour vérifier la valeur renvoyé, si c'est =0 faite un message d'au revoir, si c'est =1, ca veut dire qu'il ont choisi, payer et soigne en 1, vous n'avez qu'à jouer votre musique d'auberge, faire un fondu ou les téleporter directement dans une chambre en fonction de votre jeu, de même pour 2, 3 et 4.

ACTION POUR FAIRE FONCTIONNER LE SCRIPT :
Le copier dans la partie scripts > matérial
Modifier les constantes de la partie module auberge

EXEMPLE  CALCUL DE SOIN :
Héros 1 à 150/800 HP et 50MP/100 et héros 2 à 200/1200HP et 50/200 MP, ils choisissent la chambre 1 qui soigne 25%, après une nuit moyenne car c'est la plus mauvaise chambre, il se retrouveront avec H1 550HP/100MP et H2 600HP/100MP car c'est sur le plus puissant des héros que le calcul se fait, j'espère que cet exemple ne vous a pas embrouillé.

En cas de doute, tout est expliqué dans le script et vous pouvez me poser des questions ici.

J'espère que ce script vous aidera dans votre projet, je compte de toute façon l'améliorer et je vous ferai part des nouveauté.

EDIT : Vous trouverez la version 3 à jour plus bas dans les messages




PS : Rien à voir mais si quelqu'un pouvait m'aider en MP je souhaiterez dans un appel de script créer des paramètres du style SceneManager.call(Scene_XXX(param1, param2)) mais je n'arrive pas à comprendre comment faire l'appel de script et surtout comment les récuperer dans le script, merci


Dernière édition par tim le Mer 3 Juin 2020 - 15:11, édité 1 fois
tonyryu
tonyryu
Membre

Nombre de messages : 902
Age : 43
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Auberge de Tim Empty Re: Auberge de Tim

Sam 19 Nov 2016 - 12:57
J'ai regardé la partie technique du script et je te propose quelques améliorations de confort :

- La dimension des fenêtres doit pouvoir s'adapter aux différentes résolutions des projets sans toucher au script, pour cela utilise les dimensions de @viewport de la classe scene_base qui correspond à la taille de l'écran, après il s'agit que de mathématique simple avec quelque max(), min() est pourcentage pour que tes fenêtres s'adapte toute seule au dimension de l'écran.

- Window_Nom_Auberge.auberge_titre, par convention on nomme cette méthode 'refresh'

- Window_Auberge_Gold :
Code:
class Window_Auberge_Gold < Window_Base

# Initialise la class
  def initialize
    super(363, 0, 181, 83)
   refresh
  end

# Renvoie l'or detenu
  def refresh
    contents.clear # Supprime le contenu
    draw_currency_value($game_party.gold, Vocab::currency_unit, 4, 16, contents.width -  # affiche l'or detenu
  end
end

- Window_Description_Auberge, bon là par contre, ya un peu de chose à dire, car son utilisation dans la scene n'est pas optimisé, en effet, elle est recréé en fonction de l'option de chambre choisi, et il faut l'éviter. De plus l'initialize des Window, par convention, ne doivent contenir que des coordonnées de la fenêtre.

Du coup, je partirai sur un truc plutot dans ce style :
Code:
class Window_Description_Auberge < Window_Base

  # Initialise la class avec le parametre chambre qui permet de savoir quelle chambre a ete selectionnee
  def initialize
    super(272, 83, 272, 249) # (x, y, largeur, hauteur)
    self.visible = false
    @chambre = 0
  end
 
  # Affiche le prix et la description en fonction de la chambre selectionnee
  def auberge_chambre_selectionnee(chambre)
    @chambre = chambre
    refresh
  end
 
  def refresh
    contents.clear
    tabDescription = []
    tabDescription[0] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_1.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L2]
    tabDescription[1] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_2.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L2]
    tabDescription[2] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_3.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L2]
    tabDescription[3] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_4.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L2]
   
    if @chambre > 0 && @chambre < 5
      contents.draw_text(10, 10, 130, 42, "Prix : " + tabDescription[@chambre - 1][0] + " " +Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
      contents.draw_text(10, 62, 130, 42, "Description :")
      contents.draw_text(10, 108, 252, 42, tabDescription[@chambre - 1][1])
      contents.draw_text(10, 150, 252, 42, tabDescription[@chambre - 1][2])
    end
  end

  def getChambre
    return @chambre
  end
end

Et du coup, dans la scene
Code:
# Cree les fenetres de l'auberge
  def creation_fenetre_auberge
   
    @fenetre_nom_auberge          = Window_Nom_Auberge.new
    @fenetre_or_possede          = Window_Auberge_Gold.new
    @fenetre_chambre              = Window_Chambre_Auberge.new
    @fenetre_chambre.set_handler(:auberge_chambre_1,      method(:command_auberge_chambre_1))
    @fenetre_chambre.set_handler(:auberge_chambre_2,      method(:command_auberge_chambre_2))
    @fenetre_chambre.set_handler(:auberge_chambre_3,      method(:command_auberge_chambre_3))
    @fenetre_chambre.set_handler(:auberge_chambre_4,      method(:command_auberge_chambre_4))
    @fenetre_chambre.set_handler(:auberge_sortir,        method(:command_auberge_sortir))
    @fenetre_validation_auberge  = Window_Validation_Nuitee_Auberge.new
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_validee,      method(:command_auberge_nuitee_validee))
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_annulee,      method(:command_auberge_nuitee_annulee))
  end

Code:
# Cree les actions en cas de choix de la chambre 1
  def command_auberge_chambre_1
    @fenetre_description_auberge.auberge_chambre_selectionnee(1)
    @fenetre_validation_auberge.show
  end


@variable_de_calcul à remplacer par @fenetre_description_auberge.getChambre

Pour le reste tu pourras adapter en fonction des préconisations ci-dessus.


Réponse au PS :

Dans la nouvelle classe Scene, tu définis une méthode avec les paramètres que tu désires transmettre et dans l'appel de script, tu fait comme ceci :
Code:
SceneManager.call(Tim_Scene_Auberge)
SceneManager.scene.ta_nouvelle_méthode(param1, param2, paramN)

Cependant attention, a ce niveau, seul l'initialize a été réalisé sur la Scene.
tim
tim
Membre

Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015

Auberge de Tim Empty Re: Auberge de Tim

Jeu 24 Nov 2016 - 22:13
Je te remercie pour tes remarques techniques.
Ça m'a permit de m'améliorer en ruby.
Maintenant je comprend pourquoi je vois la méthode refresh partout.
Pour l'idée du tableau je pense que je réutiliserai car ça simplifié bien la gestion du script.
J'ai un peu modifie tes propositions pour les adapter à l'évolution de mon script.
Pour l appel de script avec paramètre j'ai pas eut le temps de tester donc je verrai ça plus tard et une fois que je maîtriser ai je ferai ça dans ma prochaine idée de script.
tibluedream
tibluedream
Membre

Nombre de messages : 944
Age : 35
Localisation : France, Rueil, près de Paris
Distinction : Poisson 2017 [Amal]
Poisson 2018 [Amal']
Date d'inscription : 05/09/2016

Auberge de Tim Empty Re: Auberge de Tim

Jeu 24 Nov 2016 - 22:36
Ça a l'air sympas tout ça, moi aussi j'adore la série des baldur's, visuellement il est très agréable et le gameplay est plaisant, je te souhaite un bon apprentissage et une bonne continuation pour la suite. ^^
tim
tim
Membre

Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015

Auberge de Tim Empty Re: Auberge de Tim

Jeu 24 Nov 2016 - 22:42
Merci.
Pour l'instant c'est surtout du concept des auberge à multiple chambre que j'essaye de m'approcher des baldur gates parce que niveau graphisme je suis une catastrophe.

Et puis ça change de la chambre de auberge ou tu payés et hop tu es totalement régénéré.
Avec mon script plus tu es faible plus tu as besoin de te reposer et du coup tu choisi la catégorie de chambre en fonction de ton état ou de ton ego pour les joueurs qui veulent dormir que dans le luxe
tim
tim
Membre

Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015

Auberge de Tim Empty Re: Auberge de Tim

Sam 21 Jan 2017 - 18:54
Après plusieurs modifications, j'ai oublié de poster la version 1.1 de mon script.

Du coup, je poste directement la version 2

Code:
=begin
--------------------------------------------------------------------------------

                                ***********
                                * ------- *
                                * AUBERGE *
                                * ------- *
                                ***********
                                 
AUTEUR : Tim
VERSION : 2
DATE : 04/12/2016

--------------------------------------------------------------------------------

Objectif : creer une auberge personnalisable avec la possibilite de choisir
4 types de chambres differentes avec chacune leur prix et leur catégorie de soin,
des valeurs sont deja indiquees par defaut

--------------------------------------------------------------------------------

Utilisation :
  _ Copier le script dans l'onglet materials
  _ Choisir une variable IG temporaire qui permettra de renvoyer une valeur en sortie de script
  _ Personnaliser les constantes presentes dans le module Module_Auberge
  _ Faites un appel de script a partir d'un evenement du jeu pour l'auberge avec toutes les chambres d'activees
    SceneManager.call(Tim_Scene_Auberge)
  _ Si vous souhaitez désactiver pour une auberge donnee une ou plusieurs chambres, faire l'appel de script suivant en mettant false pour les chambres a desactiver
    SceneManager.call(Tim_Scene_Auberge)
    SceneManager.scene.chambre_dispo(true, true, true, true)   
  _ Le script renvoi à la fin du jeu une valeur stockee dans la variable IG que vous aurez precise
    _ Renvoi 0 en cas d'annulation
    _ Renvoi 1 en cas de nuitee dans la chambre 1
    _ Renvoi 2 en cas de nuitee dans la chambre 2
    _ Renvoi 3 en cas de nuitee dans la chambre 3
    _ Renvoi 4 en cas de nuitee dans la chambre 4
  _ Effectuer les actions de teleportation, son, dialogue ou ce que vous voulez en fonction de la valeur renvoyee a la suite de l'evenement qui a appele le script (facultatif)

--------------------------------------------------------------------------------

Personnalisations supplementaires en modifiant le script manuellement:
  _ Avoir plusieurs auberges differentes :
    > Copier le script et le renommer
    > Modifier le nom de la classe de scene au 4)
    > Modifier les parametres de la nouvelle auberge
    > Modifier le nouvel appel de script en mettant le nouveau nom de la classe de scene
  _ Modifier le vocable prix et description
    > Remplacer les termes a modifier dans 3)3) auberge_chambre_selectionnee(chambre) sur chaque ligne ou il apparait
  _ Modifier le vocable sortir de l'auberge
    > Remplacer la phrase a modifier dans liste_commande 3)4)
  _ Modifier le vocable je dors ici et annuler
    > Remplacer les phrases a modifier dans liste_commande 3)5)
 
   
--------------------------------------------------------------------------------

Restrictions :
  _ resolution native 544*416
  _ verifier les restrictions concernant les nombres de caracteres dans les parametres
  _ tous les nombres doivent etre des entiers sans unite et sans signe
  _ vous devez obligatoirement dediee une variable IG pour le script tout du moins temporairement, attention cette variable sera ecrasee a chaque debut d'appel de script

--------------------------------------------------------------------------------

Appels de script :
SceneManager.call(Tim_Scene_Auberge)
SceneManager.scene.chambre_dispo(true, true, true, true) # facultatif

--------------------------------------------------------------------------------

Descriptif des constantes personnalisables :

auberge_nom                        == nom de l'auberge ( 21 caracteres maximum)

auberge_prix_chambre_1            == prix de la chambre 1 (mettre le prix sans l'unité 10 PO/gils/euros s'ecrit 10 le script utilise la monnaie inscrite dans votre vocab)
auberge_prix_chambre_2            == prix de la chambre 2
auberge_prix_chambre_3            == prix de la chambre 3
auberge_prix_chambre_4            == prix de la chambre 4

auberge_recup_1                    == pourcentage de sante et magie recuperee dans la chambre 1 10% s'ecrit 10
auberge_recup_2                    == pourcentage de sante et magie recuperee dans la chambre 2
auberge_recup_3                    == pourcentage de sante et magie recuperee dans la chambre 3
auberge_recup_4                    == pourcentage de sante et magie recuperee dans la chambre 4

auberge_chambre_1                  == nom de la chambre 1 (40 caracteres maximum)
auberge_chambre_2                  == nom de la chambre 2
auberge_chambre_3                  == nom de la chambre 3
auberge_chambre_4                  == nom de la chambre 4

auberge_description_chambre_1_L1  == description de la chambre 1 première ligne (39 caractères maximum par ligne)
auberge_description_chambre_1_L2  == description de la chambre 1 deuxième ligne (39 caractères maximum par ligne)
auberge_description_chambre_2_L1  == description de la chambre 2
auberge_description_chambre_2_L2  == description de la chambre 2
auberge_description_chambre_3_L1  == description de la chambre 3
auberge_description_chambre_3_L2  == description de la chambre 3
auberge_description_chambre_4_L1  == description de la chambre 4
auberge_description_chambre_4_L2  == description de la chambre 4

nbr_heros                          == nombre de heros maximum dans votre jeu

index_temp                        == numero d'une variable IG qui servira de variable temporaire

--------------------------------------------------------------------------------

Version 1.1 (remerciement a tonyryu):
  _ Optimisation : class Window_Auberge_Gold avec la methode refresh
  _ Optimisation : class Window_Description_Auberge avec la methode refresh
  _ Optimisation : scene Tim_Scene_Auberge
  _ Remplacement d'une variable par un appel de method getChambe
Version 2
  _ Nouvelle foctionnalité : desactivation des chambres dans l'appel de script
  _ Optimisation : class Window_Chambre_Auberge suppression method liste_commande
  _ Optimisation : class Window_Validation_Nuitee_Auberge suppression method liste_commande
  _ Correction orthographique
 
--------------------------------------------------------------------------------

Squelette du script :
  1) Introduction
    1) Titre - Auteur - Version - Date de creation
    2) Objectif
    3) Utilisation
    4) Personnalisations supplementaires dans le corps du script
    5) Restrictions
    6) Appel de script
    7) Descritif des variables
    8) Historique des versions
    9) Squelette du script
  2) Creation du module contenant toutes les constantes personnalisable
  3) Creation des classes de fenetres
    1) Classe creation fenetre pour le nom de l'auberge
    2) Classe creation fenetre pour afficher l'or possedee
    3) Classe creation fenetre pour la description de la chambre
    4) Classe creation fenetre pour le choix de la chambre
    5) Classe creation fenetre pour valider ou annuler la nuitee
  4) Creation de la scene qui gere auberge
 
--------------------------------------------------------------------------------
=end
#-------------------------------------------------------------------------------
#
# 2) Creation du module contenant tous les parametres personnalisables
#
#-------------------------------------------------------------------------------

module Module_Auberge
 
  AUBERGE_NOM                      = "Nom de l'auberge" # 21 caracteres maximum   
  AUBERGE_PRIX_CHAMBRE_1            = 100 # entier uniquement sans le symbole de la monnaie (100 correspond a 10O PO,gil,euros,... )
  AUBERGE_PRIX_CHAMBRE_2            = 150
  AUBERGE_PRIX_CHAMBRE_3            = 200
  AUBERGE_PRIX_CHAMBRE_4            = 250
  AUBERGE_RECUP_1                  = 25 # entier uniquement, pourcentage compris entre 1 et 100 sans le symbole % ( 25 correspond a 25% )
  AUBERGE_RECUP_2                  = 50
  AUBERGE_RECUP_3                  = 75
  AUBERGE_RECUP_4                  = 100
  AUBERGE_CHAMBRE_1                = "chambre 1" # 40 caracteres maximum
  AUBERGE_CHAMBRE_2                = "chambre 2"
  AUBERGE_CHAMBRE_3                = "chambre 3"
  AUBERGE_CHAMBRE_4                = "chambre 4"
  AUBERGE_DESCRIPTION_CHAMBRE_1_L1  = "description chambre 1 ligne 1" # 39 caractères maximum par ligne
  AUBERGE_DESCRIPTION_CHAMBRE_1_L2  = "description chambre 1 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_2_L1  = "description chambre 2 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_2_L2  = "description chambre 2 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_3_L1  = "description chambre 3 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_3_L2  = "description chambre 3 ligne 2"
  AUBERGE_DESCRIPTION_CHAMBRE_4_L1  = "description chambre 4 ligne 1"
  AUBERGE_DESCRIPTION_CHAMBRE_4_L2  = "description chambre 4 ligne 2"
  AUBERGE_NOMBRE_HEROS              = 8 # entier uniquement
  AUBERGE_INDEX_TEMP                = 1 # entier uniquement qui correspond au numero d'index de la variable IG
 
end

#-------------------------------------------------------------------------------
#
# 3) Creation des classes pour les differentes fenetres de l'auberge (resolution 544*416)
#
#-------------------------------------------------------------------------------
# 3)  1) Classe creation fenetre pour le nom de l'auberge
#-------------------------------------------------------------------------------

class Window_Nom_Auberge < Window_Base

  def initialize
   
    super(0, 0, 363, 83) # x, y, largeur, hauteur
    auberge_titre
 
  end
 
  def auberge_titre
   
    contents.clear
    contents.draw_text(116, 10, 130, 42, Module_Auberge::AUBERGE_NOM) # x, y ,largeur du texte, hauteur, texte a afficher)
   
  end

end

#-------------------------------------------------------------------------------
# 3)  2) Classe creation fenetre pour afficher l'or possedee
#-------------------------------------------------------------------------------

class Window_Auberge_Gold < Window_Base

# Initialise la class
  def initialize
   
    super(363, 0, 181, 83)
    refresh
  end
 
# Renvoi l'or detenu
  def refresh
   
    contents.clear # Supprime le contenu
    draw_currency_value($game_party.gold , Vocab::currency_unit, 4, 16, contents.width - 8) # affiche l'or detenu
   
  end

# Utilise le vocable pour les PO
  def currency_unit
    Vocab::currency_unit
  end

end
 
#-------------------------------------------------------------------------------
# 3)  3) Classe creation fenetre pour la description de la chambre
#-------------------------------------------------------------------------------

class Window_Description_Auberge < Window_Base

# Initialise la class avec le parametre chambre qui permet de savoir quelle chambre a ete selectionnee
  def initialize
       
    super(272, 83, 272, 249) # (x, y, largeur, hauteur)
    self.visible = false # Rend invisible la fenetre de description
    @chambre = 0 # Initialise le numero de la chambre choisie
       
  end
 
# Affiche le prix et la description en fonction de la chambre selectionnee
  def auberge_chambre_selectionnee(chambre)
   
    @chambre = chambre # Affecte le numero de la chambre choisie
    refresh
 
  end

 
  def refresh
   
    contents.clear
    self.visible = true # Rend invisible la fenetre de description apres selection de la chambre
    tabDescription = [] # creer un tableau vide qui contiendra la description complete des chambres
    tabDescription[0] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_1.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L2] # Description complete de la chambre 1
    tabDescription[1] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_2.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L2] # Description complete de la chambre 2
    tabDescription[2] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_3.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L2] # Description complete de la chambre 3
    tabDescription[3] = [Module_Auberge::AUBERGE_PRIX_CHAMBRE_4.to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L1, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L2] # Description complete de la chambre 4
    contents.draw_text(10, 10, 130, 42, "Prix : " + tabDescription[(@chambre - 1)][0] + " " + Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher (afiche le prix de la chambre selectionnee)
    contents.draw_text(10, 62, 130, 42, "Description : ") # x, y ,largeur du texte, hauteur, texte a afficher
    contents.draw_text(10, 108, 252, 42, tabDescription[@chambre - 1][1]) # x, y ,largeur du texte, hauteur, texte a afficher ( premiere ligne description)
    contents.draw_text(10, 150, 252, 42, tabDescription[@chambre - 1][2]) # x, y ,largeur du texte, hauteur, texte a afficher ( deuxieme ligne description)
   
  end

# Retourne la chambre selectionnee ou 0 si aucune chambre selectionnee
  def getChambre
   
    return @chambre
   
  end
   
end

#-------------------------------------------------------------------------------
# 3)  4) Classe creation fenetre pour le choix de la chambre
#-------------------------------------------------------------------------------

class Window_Chambre_Auberge < Window_Command

# Initialise la classe
  def initialize(chambre1_dispo, chambre2_dispo, chambre3_dispo, chambre4_dispo)
   
    @chambre1_dispo = chambre1_dispo
    @chambre2_dispo = chambre2_dispo
    @chambre3_dispo = chambre3_dispo
    @chambre4_dispo = chambre4_dispo
    super(0, 83) # (x, y)
 
    end

# Definis la largeur de la fenetre
  def window_width
 
    return 272
   
  end

# Definis la hauteur de la fenetre
  def window_height
   
    return 333
   
  end

# Active ou desactive les chambre dans le menu
  def make_command_list
 
    add_command(Module_Auberge::AUBERGE_CHAMBRE_1, :auberge_chambre_1, @chambre1_dispo)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_2, :auberge_chambre_2, @chambre2_dispo)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_3, :auberge_chambre_3, @chambre3_dispo)
    add_command(Module_Auberge::AUBERGE_CHAMBRE_4, :auberge_chambre_4, @chambre4_dispo)
    add_command("Sortir de l'auberge", :auberge_sortir)
   
  end
 
end

#-------------------------------------------------------------------------------
# 3)  5) Classe creation fenetre pour valider ou annuler la nuitee
#-------------------------------------------------------------------------------

class Window_Validation_Nuitee_Auberge < Window_Command

# Initialise la classe
  def initialize
   
    super(272, 332) # (x, y)
   
  end

# Definis la largeur de la fenetre
  def window_width
 
    return 272
   
  end

# Definis la hauteur de la fenetre
  def window_height
   
    return 84
   
  end

# Menu de confirmation
  def make_command_list
 
    add_command("Je dors ici", :auberge_nuitee_validee)
    add_command("Annuler", :auberge_nuitee_annulee)
   
  end
 
end

#-------------------------------------------------------------------------------
#
# 4) Creation de la scene qui gere auberge
#
#-------------------------------------------------------------------------------

class Tim_Scene_Auberge < Scene_MenuBase

# Initialise la scene
  def start
 
    super
    $game_variables[Module_Auberge::AUBERGE_INDEX_TEMP] = 0 # Ne pas toucher, initialise la valeur de la variable IG
    creation_fenetre_auberge
   
  end
 
# Verifie les chambres disponibles, par defaut toutes les chambres sont disponibles 
  def chambre_dispo(chambre1 =true, chambre2 =true, chambre3 =true, chambre4 =true)
   
    @chambre1_dispo = chambre1
    @chambre2_dispo = chambre2
    @chambre3_dispo = chambre3
    @chambre4_dispo = chambre4
 
  end

# Cree les fenetres de l'auberge
  def creation_fenetre_auberge
   
    @fenetre_nom_auberge          = Window_Nom_Auberge.new
    @fenetre_or_possede          = Window_Auberge_Gold.new
    @fenetre_chambre              = Window_Chambre_Auberge.new(@chambre1_dispo, @chambre2_dispo, @chambre3_dispo, @chambre4_dispo)
    @fenetre_chambre.set_handler(:auberge_chambre_1,                      method(:command_auberge_chambre_1))
    @fenetre_chambre.set_handler(:auberge_chambre_2,                      method(:command_auberge_chambre_2))
    @fenetre_chambre.set_handler(:auberge_chambre_3,                      method(:command_auberge_chambre_3))
    @fenetre_chambre.set_handler(:auberge_chambre_4,                      method(:command_auberge_chambre_4))
    @fenetre_chambre.set_handler(:auberge_sortir,                        method(:command_auberge_sortir))
    @fenetre_description_auberge  = Window_Description_Auberge.new
    @fenetre_validation_auberge  = Window_Validation_Nuitee_Auberge.new
    @fenetre_validation_auberge.hide
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_validee,      method(:command_auberge_nuitee_validee))
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_annulee,      method(:command_auberge_nuitee_annulee))

  end

# Permet de quitter l'auberge
  def command_auberge_sortir
    return_scene
  end

# Cree les actions en cas de choix de la chambre 1
  def command_auberge_chambre_1
   
    @fenetre_description_auberge.auberge_chambre_selectionnee(1)
    @fenetre_validation_auberge.show
       
  end
 
# Creer les actions en cas de choix de la chambre 2
  def command_auberge_chambre_2
   
    @fenetre_description_auberge.auberge_chambre_selectionnee(2)
    @fenetre_validation_auberge.show
   
  end

# Creer les actions en cas de choix de la chambre 3
  def command_auberge_chambre_3
   
    @fenetre_description_auberge.auberge_chambre_selectionnee(3)
    @fenetre_validation_auberge.show
   
  end
 
# Creer les actions en cas de choix de la chambre 4
  def command_auberge_chambre_4
   
    @fenetre_description_auberge.auberge_chambre_selectionnee(4)
    @fenetre_validation_auberge.show
   
  end
 
# Demande une confirmation pour validee ou pas la nuitee
  def demande_validation_nuitee
   
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_validee,      method(:command_auberge_nuitee_validee))
    @fenetre_validation_auberge.set_handler(:auberge_nuitee_annulee,      method(:command_auberge_nuitee_annulee))

  end
 
# Fais la verification de l'or, execute les soin et quitte le menu auberge   
  def command_auberge_nuitee_validee
   
    if verification_or_possede
      modification_variable_retour_IG
      paiement_chambre
      restauration_hp_mp
      return_scene
    else
      command_auberge_nuitee_annulee
    end
   
  end
     
# Ferme toutes les fenetres et lance la reinitialisation de la scene
  def command_auberge_nuitee_annulee
   
    @fenetre_validation_auberge.dispose
    @fenetre_description_auberge.dispose
    @fenetre_chambre.dispose
    @fenetre_nom_auberge.dispose
    start
   
  end

# Verifie si suffisament d'or pour payer la nuitee
  def verification_or_possede
   
    case @fenetre_description_auberge.getChambre
      when 1
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_1
      when 2
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_2
      when 3
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_3
      when 4
        return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_4
    end
     
  end
   
# Modifie la variable IG temporaire
  def modification_variable_retour_IG
   
    $game_variables[Module_Auberge::AUBERGE_INDEX_TEMP] = @fenetre_description_auberge.getChambre
   
  end
 
# Fais payer la chambre
  def paiement_chambre
   
    case @fenetre_description_auberge.getChambre
      when 1
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_1)
      when 2
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_2)
      when 3
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_3)
      when 4
        $game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_4)
    end
     
  end
       
# Restauration HP et MP en fonction du HP max du groupe et du MP max du groupe et de la chambre choisi 
  def restauration_hp_mp
   
    local = 1 # Ne pas toucher, c'est une variable de calcul qui initialise la boucle while
    @max_hp = 1 # Ne pas toucher, c'est une variable de calcul qui initialise les HP a recuperer
    @max_mp = 1 # Ne pas toucher, c'est une variable de calcul qui initialise les MP a recuperer
    while ( local <= Module_Auberge::AUBERGE_NOMBRE_HEROS) # boucle permettant de connaitre le hp et le mp le plus eleve des heros
      if @max_hp < $game_actors[local].mhp
        @max_hp = $game_actors[local].mhp
      end
      if @max_mp < $game_actors[local].mmp
        @max_mp = $game_actors[local].mmp
      end
      local +=1 # Ne pas toucher, c'est une variable qui permet de sortir de la boucle while
    end
    local = 1 # Ne pas toucher, c'est une variable de calcul qui initialise la boucle while
    while ( local <= Module_Auberge::AUBERGE_NOMBRE_HEROS) # boucle qui permet de restaurer tous les heros
      case @fenetre_description_auberge.getChambre
        when 1
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_1 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_1 / 100 # rajoute les MP
        when 2
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_2 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_2 / 100 # rajoute les MP
        when 3
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_3 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_3 / 100 # rajoute les MP
        when 4
          $game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_4 / 100 # rajoute les HP
          $game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_4 / 100 # rajoute les MP
      end
      local += 1 # Ne pas toucher, c'est une variable qui permet de sortir de la boucle while
    end
   
  end
 
end

Vous trouverez toujours toutes les versions de mon script à cet endroit ICI !

La différence vient principalement sur l'optimisation du code, merci Tony de m'avoir conseillé et surtout, de la possibilité de pouvoir choisir quelles chambres dispose l'auberge.

Je compte encore un peu l'améliorer, mais comme pour l'instant je me suis mis à fond dans le système de professions et de crafting de mon projet, je laisse un peu de côté les scripts.
tim
tim
Membre

Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015

Auberge de Tim Empty Re: Auberge de Tim

Mer 3 Juin 2020 - 15:05
EDIT : Version 3 à jour ci dessous

Après quelques années voici la mise à jour de mon script car je me suis lancé dans un nouveau projet.

Je viens de le passé en version 3.

Principale nouveauté : la possibilité de créer autant d'auberge personnalisée que l'on souhaite avec un seul et même script.

Il est encore optimisable mais j'en suis plutôt fier.

Spoiler:
Contenu sponsorisé

Auberge de Tim Empty Re: Auberge de Tim

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