- timMembre
- Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015
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
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
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
- 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
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 :
- 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 :
Et du coup, dans la scene
@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 :
Cependant attention, a ce niveau, seul l'initialize a été réalisé sur la Scene.
- 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.
- timMembre
- Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015
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.
Ç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.
- tibluedreamMembre
- 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
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. ^^
- timMembre
- Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015
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
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
- timMembre
- Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015
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
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.
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.
- timMembre
- Nombre de messages : 40
Distinction : aucune
Date d'inscription : 11/12/2015
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.
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:
=begin
--------------------------------------------------------------------------------
***********
* ------- *
* AUBERGE *
* ------- *
***********
AUTEUR : Tim
VERSION : 3
DATE : 29/05/2020
--------------------------------------------------------------------------------
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 index_auberge correspond au rang de votre auberge dans le tableau des auberge (attention commence par 0)
SceneManager.call(Tim_Scene_Auberge)
SceneManager.scene.indexation_auberge(index_auberge)
_ 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 :
> Créer une entré supplémentaire dans chaque tableau du module auberge en 2)
_ 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.indexation_auberge(index_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
nombre_heros == nombre de heros maximum dans votre jeu
index_temp == numero d'une variable IG qui servira de variable temporaire
--------------------------------------------------------------------------------
Version 1
_ Scirpt d'origine
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
Version 2.1
_ Correction mise en page
Version 3
_ Nouvelle fonctionnalité : Création de plusieurs auberges différentes dans le même script
--------------------------------------------------------------------------------
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
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 = ["Auberge du soleil", "Auberge de la lune"] #"Nom de l'auberge" # 21 caracteres maximum
AUBERGE_PRIX_CHAMBRE_1 = [100, 1000] # entier uniquement sans le symbole de la monnaie (100 correspond a 10O PO,gil,euros,... )
AUBERGE_PRIX_CHAMBRE_2 = [150, 1500]
AUBERGE_PRIX_CHAMBRE_3 = [200, 2000]
AUBERGE_PRIX_CHAMBRE_4 = [250, 2500]
AUBERGE_RECUP_1 = [0, 70] # entier uniquement, pourcentage compris entre 1 et 100 sans le symbole % ( 25 correspond a 25% ) - 0 signifie chambre non disponible
AUBERGE_RECUP_2 = [50, 80]
AUBERGE_RECUP_3 = [75, 90]
AUBERGE_RECUP_4 = [100, 100]
AUBERGE_CHAMBRE_1 = ["chambre 1", "chambre test1"] # 40 caracteres maximum
AUBERGE_CHAMBRE_2 = ["chambre 2", "chambre test2"]
AUBERGE_CHAMBRE_3 = ["chambre 3", "chambre test3"]
AUBERGE_CHAMBRE_4 = ["chambre 4", "chambre test4"]
AUBERGE_DESCRIPTION_CHAMBRE_1_L1 = ["description chambre 1 ligne 1","description chambre 1 ligne 1"] # 39 caractères maximum par ligne
AUBERGE_DESCRIPTION_CHAMBRE_1_L2 = ["description chambre 1 ligne 2","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_2_L1 = ["description chambre 2 ligne 1","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_2_L2 = ["description chambre 2 ligne 2","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_3_L1 = ["description chambre 3 ligne 1","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_3_L2 = ["description chambre 3 ligne 2","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_4_L1 = ["description chambre 4 ligne 1","description chambre 1 ligne 1"]
AUBERGE_DESCRIPTION_CHAMBRE_4_L2 = ["description chambre 4 ligne 2","description chambre 1 ligne 1"]
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(index_auberge)
super(0, 0, 363, 83) # x, y, largeur, hauteur
@index_auberge = index_auberge
auberge_titre
end
def auberge_titre
contents.clear
contents.draw_text(116, 10, 130, 42, Module_Auberge::AUBERGE_NOM[@index_auberge]) # 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 - # 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(index_auberge)
@index_auberge = index_auberge
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_AubergeAUBERGE_PRIX_CHAMBRE_1[@index_auberge].to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L1[@index_auberge], Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_1_L2[@index_auberge]] # Description complete de la chambre 1
tabDescription[1] = [Module_AubergeAUBERGE_PRIX_CHAMBRE_2[@index_auberge].to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L1[@index_auberge], Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_2_L2[@index_auberge]] # Description complete de la chambre 2
tabDescription[2] = [Module_AubergeAUBERGE_PRIX_CHAMBRE_3[@index_auberge].to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L1[@index_auberge], Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_3_L2[@index_auberge]] # Description complete de la chambre 3
tabDescription[3] = [Module_AubergeAUBERGE_PRIX_CHAMBRE_4[@index_auberge].to_s, Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L1[@index_auberge], Module_Auberge::AUBERGE_DESCRIPTION_CHAMBRE_4_L2[@index_auberge]] # 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(index_auberge)
@index_auberge = index_auberge
verifiaction_chambre_dispo(index_auberge)
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
# Vérifie si la chambre est disponible dans l'auberge
def verifiaction_chambre_dispo(index_auberge)
if Module_Auberge::AUBERGE_RECUP_1[index_auberge] > 0
@chambre1_dispo = true
else
@chambre1_dispo = false
end
if Module_Auberge::AUBERGE_RECUP_2[index_auberge] > 0
@chambre2_dispo = true
else
@chambre2_dispo = false
end
if Module_Auberge::AUBERGE_RECUP_3[index_auberge] > 0
@chambre3_dispo = true
else
@chambre3_dispo = false
end
if Module_Auberge::AUBERGE_RECUP_4[index_auberge] > 0
@chambre4_dispo = true
else
@chambre4_dispo = false
end
end
# Active ou desactive les chambre dans le menu
def make_command_list
add_command(Module_Auberge::AUBERGE_CHAMBRE_1[@index_auberge], :auberge_chambre_1, @chambre1_dispo)
add_command(Module_Auberge::AUBERGE_CHAMBRE_2[@index_auberge], :auberge_chambre_2, @chambre2_dispo)
add_command(Module_Auberge::AUBERGE_CHAMBRE_3[@index_auberge], :auberge_chambre_3, @chambre3_dispo)
add_command(Module_Auberge::AUBERGE_CHAMBRE_4[@index_auberge], :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_AubergeAUBERGE_INDEX_TEMP] = 0 # Ne pas toucher, initialise la valeur de la variable IG
creation_fenetre_auberge
end
#Attribution de l'index pour choisir l'auberge
def indexation_auberge(index_auberge)
@index_auberge = index_auberge
end
# Cree les fenetres de l'auberge
def creation_fenetre_auberge
@fenetre_nom_auberge = Window_Nom_Auberge.new(@index_auberge)
@fenetre_or_possede = Window_Auberge_Gold.new
@fenetre_chambre = Window_Chambre_Auberge.new(@index_auberge)
@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(@index_auberge)
@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[@index_auberge]
when 2
return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_2[@index_auberge]
when 3
return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_3[@index_auberge]
when 4
return $game_party.gold >= Module_Auberge::AUBERGE_PRIX_CHAMBRE_4[@index_auberge]
end
end
# Modifie la variable IG temporaire
def modification_variable_retour_IG
$game_variables[Module_AubergeAUBERGE_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[@index_auberge])
when 2
$game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_2[@index_auberge])
when 3
$game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_3[@index_auberge])
when 4
$game_party.lose_gold(Module_Auberge::AUBERGE_PRIX_CHAMBRE_4[@index_auberge])
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[@index_auberge] / 100 # rajoute les HP
$game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_1[@index_auberge] / 100 # rajoute les MP
when 2
$game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_2[@index_auberge] / 100 # rajoute les HP
$game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_2[@index_auberge] / 100 # rajoute les MP
when 3
$game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_3[@index_auberge] / 100 # rajoute les HP
$game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_3[@index_auberge] / 100 # rajoute les MP
when 4
$game_actors[local].hp += @max_hp * Module_Auberge::AUBERGE_RECUP_4[@index_auberge] / 100 # rajoute les HP
$game_actors[local].mp += @max_mp * Module_Auberge::AUBERGE_RECUP_4[@index_auberge] / 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
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|