Auteur: Berka
Au dessus de main, a nommer comme vous le sentez.
Utilisation:
Pour augmenter la faim ou la soif on crée un objet dans la base de donné nommé par exemple pomme, eau, alcool...il faut le faire de la même façon qu'un autre item curatif, sauf que cet item au lieu d'augmenter les points de vie, il augmente soit la faim ou la soif. Dans l'item il faut appeler un événement commun comme ceci: $game_faim.recuperer(24) (bien sûr on l'écrit dans l'onglet des événements commun et on l'appel sur l'item désiré.
On peut mettre un nombre négatif pour diminuer la soif ou la faim aussi. On peut également modifier le niveau de soif et de faim si on est dans un désert, par exemple on aura soif plus vite.
Voilà pour l'explication de se script des plus pratique si on veux des héros plus réalistes.
J'espère que vous l'avez compris.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Game_Faim
# par berka
#
# http:\\www.rpgmakerxp.frbb.net
#
# Editer par MirainoHikari pour la soif
# http://rpg-maker-vx.bbactif.com
#--------------------------------------------------------------
# compatible RGSS2, RMvx
# gestion de la faim, selon l'allure du heros, et du temps
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
COUL_FAIM_1 = Color.new(255, 0, 0, 200) # couleur barre a gauche
COUL_FAIM_2 = Color.new(0, 255, 0, 255) # couleur barre a droite
COUL_SOIF_1 = Color.new(0, 0, 255, 200) # couleur barre a gauche
COUL_SOIF_2 = Color.new(0, 125, 125, 255) # couleur barre a droite
POS_X_BARRE = 32 # position horizontale de la barre
POS_Y_BARRE = 32 # position verticale de la barre
LONG_BARRE = 200 # longueur de la barre
HAUT_BARRE = 5 # hauteur de la barre
POLICE = 14 # taille de la police
TEXT = true # affiche le pourcentage de famine ^^
FAIM = 100 # "quantité de faim" disponible (dur a expliquer)
SOIF = 100 # "quantité de soif" disponible
RAPIDITE_FAIM = 0.05 # rapidité d'augmentation de la faim
RAPIDITE_SOIF = 0.10 # rapidité d'augmentation de la soif
# message quand notre cher heros se tord de douleur, affamé...
CREVE_FAIM = "Je suis mort de faim..."
CREVE_SOIF = "Je suis mort déshydraté"
# en cas de mal-bouffe... \x00 pour un saut de ligne, \x03 pour une pause
PLUS_FAIM = "blurps...\x00je crois que j'ai trop mangé..."
MESSAGES = true # activer ou non les messages si dessus
ID_EVENT_COM_CREVE = 2 # id de l'event commun declenché en cas de mort de faim
ID_MASQUER = 4 # id de l'interrupteur a activer pour masquer les barre
# utilisation
# -> pour fixer la jauge selon un pourcentage: ex 50% : $game_faim.fixer(50)
# -> pour recuperer un certain pourcentage: ex +24% : $game_faim.recuperer(24)
# -> pour modifier en jeu, la rapidité de faim (apres lvl up): baisser de 0.01: $game_faim.rapidte -= 0.01
# -> creez un event commun en appel, qui ssera appelé lorsque la jauge sera completement vide
# -> creez un objet pomme, qui declenchera un event commun avec $game_faim.recuperer(24) dedans
# pour toutes questions, suggestions n'hésitez pas a me contacter...
class Game_Faim
attr_accessor :faim, :rapidite_faim
def initialize
@faim, @rapidite = FAIM, RAPIDITE_FAIM
end
def update
if @faim > 0 and @faim <= FAIM
if $game_player.moving? == true
if $game_player.dash? == true
@faim -= @rapidite.to_f #si course
elsif $game_player.in_vehicle? == true
@faim -= (@rapidite/6).to_f #si dans vehicule
end
@faim -= (@rapidite/4).to_f #si mouvement simple
else
@faim -= (@rapidite/10).to_f # si immobile
end
creve if @faim <= 0
plus_faim if @faim > FAIM
end
end
def plus_faim
@faim = FAIM
if MESSAGES == true
$game_message.new_page; $game_message.texts.push(PLUS_FAIM)
end
end
def creve
if MESSAGES == true
$game_message.new_page; $game_message.texts.push(CREVE_FAIM)
end
$game_temp.common_event_id = ID_EVENT_COM_CREVE
end
def fixer(pourcent)
@faim = (FAIM* pourcent.to_f)/100
end
def recuperer(pourcent)
if @faim + (FAIM* pourcent.to_f)/100 > FAIM
@faim = FAIM
else
@faim += (FAIM* pourcent.to_f)/100
end
end
end
class Game_Soif
attr_accessor :soif, :rapidite
def initialize
@soif, @rapidite = SOIF, RAPIDITE_SOIF
end
def update
if @soif > 0 and @soif <= SOIF
if $game_player.moving? == true
if $game_player.dash? == true
@soif -= @rapidite.to_f #si course
elsif $game_player.in_vehicle? == true
@soif -= (@rapidite/6).to_f #si dans vehicule
end
@soif -= (@rapidite/4).to_f #si mouvement simple
else
@soif -= (@rapidite/10).to_f # si immobile
end
creve if @soif <= 0
plus_soif if @soif > SOIF
end
end
def plus_soif
@soif = SOIF
if MESSAGES == true
$game_message.new_page; $game_message.texts.push(PLUS_SOIF)
end
end
def creve
if MESSAGES == true
$game_message.new_page; $game_message.texts.push(CREVE_SOIF)
end
$game_temp.common_event_id = ID_EVENT_COM_CREVE
end
def fixer(pourcent)
@soif = (SOIF* pourcent.to_f)/100
end
def recuperer(pourcent)
if @soif + (SOIF* pourcent.to_f)/100 > SOIF
@soif = SOIF
else
@soif += (SOIF* pourcent.to_f)/100
end
end
end
class Scene_Title
alias berka1 create_game_objects
def create_game_objects
berka1
$game_faim = Game_Faim.new
$game_soif = Game_Soif.new
end
end
class Scene_Map
alias berka1 update
alias berka2 start
alias berka3 terminate
def start
berka2
@faim_soif = Window_Faim.new(-32,-32,608,480)
end
def terminate
@faim_soif.dispose
berka3
end
def update
$game_faim.update
$game_soif.update
@faim_soif.visible = true
@faim_soif.visible = false if $game_switches[ID_MASQUER] == true
@faim_soif.update
berka1
end
end
class Window_Faim < Window_Base
def initialize(x, y, w, h)
super(x, y, w, h)
self.opacity = 0
refresh
end
def refresh
self.contents.clear
b1 = LONG_BARRE * ($game_faim.faim/FAIM)
p1 = b1.to_f/LONG_BARRE*100
b2 = LONG_BARRE * ($game_soif.soif/SOIF)
p2 = b2.to_f/LONG_BARRE*100
self.contents.font.size = POLICE
texte1 = "faim: #{p1.to_i.to_s}%"
texte2 = "soif: #{p2.to_i.to_s}%"
cx1 = contents.text_size(texte1).width
cx2 = contents.text_size(texte2).width
#dessiner barre de faim
self.contents.fill_rect(POS_X_BARRE-1, POS_Y_BARRE-1, LONG_BARRE+2, HAUT_BARRE+2, Color.new(0, 0, 0, 75))
self.contents.gradient_fill_rect(POS_X_BARRE, POS_Y_BARRE, b1, HAUT_BARRE, COUL_FAIM_1, COUL_FAIM_2)
self.contents.draw_text(POS_X_BARRE+(LONG_BARRE - cx1)/2, POS_Y_BARRE-5, cx1, WLH, texte1) if TEXT == true
#dessiner barre de soif
self.contents.fill_rect(POS_X_BARRE-1, POS_Y_BARRE-1+32, LONG_BARRE+2, HAUT_BARRE+2, Color.new(0, 0, 0, 75))
self.contents.gradient_fill_rect(POS_X_BARRE, POS_Y_BARRE+32, b2, HAUT_BARRE, COUL_SOIF_1, COUL_SOIF_2)
self.contents.draw_text(POS_X_BARRE+(LONG_BARRE - cx2)/2, POS_Y_BARRE-5+32, cx2, WLH, texte2) if TEXT == true
end
def update
refresh
end
end
class Scene_File < Scene_Base
alias berka1 write_save_data
alias berka2 read_save_data
def write_save_data(file)
berka1(file)
Marshal.dump($game_faim, file)
Marshal.dump($game_soif, file)
end
def read_save_data(file)
berka2(file)
$game_faim = Marshal.load(file)
$game_soif = Marshal.load(file)
end
end