1 résultat trouvé pour Attribution
- Aujourd'hui
- le Mer 3 Juin 2020 - 15:05
- Rechercher dans: Ace
- Sujet: Auberge de Tim
- Réponses: 6
- Vues: 1176
Auberge de Tim
EDIT : Version 3 à jour ci dessousAprè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