Partagez
Aller en bas
tim
tim
Membre

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

RPG Maker VX Ace Banque de Tim

le Dim 14 Juin 2020 - 16:01
Bonjour tout le monde !!!

Voici un petit script perso pour créer une banque.

Actuellement la première version du script permet de créer une banque un compte épargne où on peut déposer et retirer de l'argent.

Le compte permet aussi d'avoir des intérêts automatiquement ajoutés en fonction de la durée de jeu, pas besoin d'avoir un système de gestion du temps, le script fonctionne en autonomie de ce côté là.

Et bien entendu, j'ai rajouté la possibilité d'avoir des frais bancaires lors de chaque dépôt.

Je suis preneur de toutes remarques ou suggestions d'amélioration sachant que j'ai déjà quelques petites idées pour créer une nouvelle version.

script de banque:
=begin
--------------------------------------------------------------------------------
***********
* ------- *
* BANQUE  *
* ------- *
***********
AUTEUR : Tim
VERSION : 1
DATE : 13/06/2020
--------------------------------------------------------------------------------
Objectif :
Créer une banque personnalisable qui permet le dépôt (avec ou sans frais bancaire), le retrait d'espèces et le calcul d'intêret autmotique à chaque passage à la banque en fonction du temps de jeu
--------------------------------------------------------------------------------
Utilisation :
_ Copier le script dans l'onglet materials
_ Initiliser les variables $banque_or_possede $banque_derniere_visite $banque_interets_totaux à zéro avant le premier lancement de la scène
_ Personnaliser les constantes presentes dans le module Module_Banque
_ Faites un appel de script a partir d'un evenement du jeu
SceneManager.call(Tim_Scene_Banque)
--------------------------------------------------------------------------------
Personnalisations supplementaires en modifiant le script manuellement :
_ Modifier le vocable
> Remplacer les termes a modifier dans 3)3) "Taux d'intérêt horaire : ", "Frais bancaire : " et " % par dépôt"
> Remplacer les termes a modifier dans 3)4) "En dépôt : " et "Intérêts totaux : "
> Remplacer les termes a modifier dans 3)5) "Déposer", "Retirer" et "Sortir"
--------------------------------------------------------------------------------
Restrictions :
_ resolution native 544*416
_ rendre obligatoirement persistante les variables $banque_or_possede $banque_derniere_visite et $banque_interets_totaux en les intégrant à la sauvegarde du jeu
_ usage de 4 variables globales $banque_montant et $banque_or_possede $banque_derniere_visite $banque_interets_totaux
--------------------------------------------------------------------------------
Appels de script :
SceneManager.call(Tim_Scene_Banque)
--------------------------------------------------------------------------------
Descriptif des constantes personnalisables :
BANQUE_NOM == nom de la banque identique pour toutes les agences (40 caractères maximum)
BANQUE_NOM_COMPTE == nom du compte bancaire unique (20 caractères maximum)
BANQUE_TAUX == taux d'intérêt fourni toutes les heures - 0 signifie aucun intérêt  
BANQUE_FRAIS == pourcentage des frais prélevé sur chaque dépôt
--------------------------------------------------------------------------------
Version 1
_ Script d'origine
--------------------------------------------------------------------------------
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
Cool 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 la banque
2) Classe creation fenetre pour afficher l'or possede sur soi
3) Classe creation fenetre pour afficher le nom de compte et le taux d'interet horaire
4) Classe creation fenetre pour afficher l'or en dépôt et les intérêts accumulés
5) Classe creation fenetre pour déposer ou retirer de l'or et quitter
6) Classe creation fenetre pour choisir le montant
4) Creation de la scene qui gere la banque
--------------------------------------------------------------------------------
=end
#-------------------------------------------------------------------------------
#
# 2) Creation du module contenant tous les parametres personnalisables
#
#-------------------------------------------------------------------------------
module Module_Banque

BANQUE_NOM = "Nom de la banque" # 40 caracteres maximum
BANQUE_NOM_COMPTE = "Nom du compte bancaire" # 20 caracteres maximum
BANQUE_TAUX = 3 # pourcentage sans le signe %
BANQUE_FRAIS = 1 # pourcentage sans le signe % (doit être strictement inférieur à 100)

end
#-------------------------------------------------------------------------------
#
# 3) Creation des classes pour les differentes fenetres de la banque (resolution 544*416)
#
#-------------------------------------------------------------------------------
# 3) 1) Classe creation fenetre pour le nom de la banque
#-------------------------------------------------------------------------------
class Window_Banque_Nom < Window_Base
def initialize
super(0, 0, 544, 100) # x, y, largeur, hauteur
nom_banque
end

def nom_banque
contents.clear
contents.draw_text(100, 0, 374, 80, Module_Banque::BANQUE_NOM) # x, y ,largeur du texte, hauteur, texte a afficher)
end
end
#-------------------------------------------------------------------------------
# 3) 2) Classe creation fenetre pour afficher l'or possede sur soi
#-------------------------------------------------------------------------------
class Window_Banque_Gold < Window_Base
# Initialise la class
def initialize
super(272, 316, 272, 100) # x, y, largeur, hauteur
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 - 90) # 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 afficher le nom de compte et le taux d'interet horaire
#-------------------------------------------------------------------------------
class Window_Banque_Compte_courant < Window_Base
# Initialise la class
def initialize
super(0, 100, 272, 216) # x, y, largeur, hauteur
refresh
end
#Renvoi l'affichage textuel
def refresh
contents.clear # Supprime le contenu
contents.draw_text(27, 0, 218, 72, Module_Banque::BANQUE_NOM_COMPTE) # x, y ,largeur du texte, hauteur, texte a afficher)
contents.draw_text(27, 72, 218, 72, "Taux d'intérêt horaire : " + Module_Banque::BANQUE_TAUX.to_s + " %")
   contents.draw_text(27, 144, 218, 72, "Frais bancaire : " + Module_Banque::BANQUE_FRAIS.to_s + " % par dépôt")
end
end
#-------------------------------------------------------------------------------
# 3) 4) Classe creation fenetre pour afficher l'or en dépôt et les intérêts accumulés
#-------------------------------------------------------------------------------
class Window_Banque_Description_Avoirs < Window_Base
# Initialise la class
def initialize
super(272, 100, 272, 216) # x, y, largeur, hauteur
refresh
end
# Renvoi l'affichage textuel
def refresh
arrondir_affichage
contents.clear # Supprime le contenu
contents.draw_text(27, 0, 218, 108, "En dépôt : " + @banque_or_possede.to_s + " " + Vocab::currency_unit) # x, y ,largeur du texte, hauteur, texte a afficher)
contents.draw_text(27, 108, 218, 108, "Intérêts totaux : " + @banque_interets_totaux.to_s + " " + Vocab::currency_unit)
end
# Permet d'arrondir les valeur uniquement pour l'affichage mais maintien les valeurs réelles en mémoire
def arrondir_affichage
@banque_or_possede = $banque_or_possede.round
@banque_interets_totaux = $banque_interets_totaux.round
end
end
#-------------------------------------------------------------------------------
# 3) 5) Classe creation fenetre pour déposer ou retirer de l'or et quitter
#-------------------------------------------------------------------------------
class Window_Banque_choix < Window_Command
# Initialise la classe
def initialize
super(0, 316) # (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 100
end
# Menu de confirmation
def make_command_list
add_command("Déposer", :banque_dépôt)
add_command("Retirer", :banque_retrait)
add_command("Sortir", :banque_sortir)
end
end
#-------------------------------------------------------------------------------
# 3) 6) Classe creation fenetre pour choisir le montant
#-------------------------------------------------------------------------------
class Windows_Banque_montant < Window_Selectable
# Initialise la classe
def initialize(montant_max)
super(0, 316,272,100)
@montant_max = montant_max
$banque_montant = @montant_max / 2
$banque_montant = $banque_montant.round
refresh
end
def update
super
refresh
end
def refresh
contents.clear
contents.draw_text(50, 0, 136, 100, $banque_montant,1)
$banque_montant = $banque_montant + 1 if Input.trigger?(:UP) && $banque_montant < @montant_max
$banque_montant = $banque_montant - 1 if Input.trigger?(:DOWN) && $banque_montant > 0
$banque_montant = $banque_montant - 100 if Input.trigger?(:LEFT) && $banque_montant > 100
$banque_montant = $banque_montant + 100 if Input.trigger?(:RIGHT) && $banque_montant < (@montant_max - 99)
end
end
#-------------------------------------------------------------------------------
#
# 4) Creation de la scene qui gere la banque
#
#-------------------------------------------------------------------------------
class Tim_Scene_Banque < Scene_MenuBase
# Initialise la scene
def start
super
ajout_interet
creation_fenetre_banque
end
# Calcule et ajoute les interets
def ajout_interet
@duree_ecoulee = $game_system.playtime - $banque_derniere_visite
@interet = $banque_or_possede * @duree_ecoulee / 3600 * Module_Banque::BANQUE_TAUX / 100
$banque_or_possede += @interet
$banque_interets_totaux += @interet
$banque_derniere_visite = $game_system.playtime
end
# Cree les fenetres de la banque
def creation_fenetre_banque
@fenetre_nom_banque = Window_Banque_Nom.new
@fenetre_or_possede = Window_Banque_Gold.new
@fenetre_compte = Window_Banque_Compte_courant.new
@fenetre_avoirs = Window_Banque_Description_Avoirs.new
@fenetre_choix = Window_Banque_choix.new
@fenetre_choix.set_handler(:banque_dépôt, method(:command_banque_depot))
@fenetre_choix.set_handler(:banque_retrait, method(:command_banque_retrait))
@fenetre_choix.set_handler(:banque_sortir, method(:command_banque_sortir))

end
# Permet de quitter la banque
def command_banque_sortir
return_scene
end
# Cree les actions en cas de choix de faire un dépôt
def command_banque_depot
@fenetre_montant = Windows_Banque_montant.new($game_party.gold)
@fenetre_montant.viewport = @viewport
@fenetre_montant.set_handler(:ok, method(:depot))
@fenetre_montant.set_handler(:cancel, method(:return_scene))
@fenetre_montant.activate

end
# Creer les action après avoir validé le montant du dépot
def depot
@fenetre_montant.close
$banque_or_possede = $banque_or_possede + $banque_montant * ( 1 - Module_Banque::BANQUE_FRAIS / 100)
$game_party.lose_gold($banque_montant)
command_banque_sortir
end
# Cree les actions en cas de choix de faire un retrait
def command_banque_retrait
@fenetre_montant = Windows_Banque_montant.new($banque_or_possede)
@fenetre_montant.viewport = @viewport
@fenetre_montant.set_handler(:ok, method(:retrait))
@fenetre_montant.set_handler(:cancel, method(:return_scene))
@fenetre_montant.activate

end
# Creer les action après avoir validé le montant du retrait
def retrait
@fenetre_montant.close
$banque_or_possede -= $banque_montant
$game_party.gain_gold($banque_montant)
command_banque_sortir
end

end

Il vous faudra aussi un petit script pour rendre persistantes et sauvegardables certaines variables.
Je vous laisse ci-dessous un script qui permet d'ajouter des variables à vos sauvegardes

script données persistantes:
module DataManager
#--------------------------------------------------------------------------
# * Create Game Objects
#--------------------------------------------------------------------------
class << self
alias create_game_objects_tablelist_base create_game_objects
end
def self.create_game_objects
create_game_objects_tablelist_base
$banque_or_possede
$banque_derniere_visite
$banque_interets_totaux
end
#--------------------------------------------------------------------------
# * Create Save Contents
#--------------------------------------------------------------------------
class << self
alias make_save_contents_tablelist_base make_save_contents
end
def self.make_save_contents
contents = make_save_contents_tablelist_base
contents[0] = $banque_or_possede
contents[1] = $banque_derniere_visite
contents[2] = $banque_interets_totaux
contents
end
#--------------------------------------------------------------------------
# * Extract Save Contents
#--------------------------------------------------------------------------
class << self
alias extract_save_contents_tablelist_base extract_save_contents
end
def self.extract_save_contents(contents)
extract_save_contents_tablelist_base(contents)
$banque_or_possede = contents[0]
$banque_derniere_visite = contents[1]
$banque_interets_totaux = contents[2]
end
end
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum