Jordinateur Blob
Nombre de messages : 260 Localisation : Devant mon ordinateur !(enfin sa dépend, peut-être avec ma copine aussi ^^) Humeur/Caractère : Aller a l'école T_T Date d'inscription : 12/05/2006
| Sujet: Systeme d'affichage des stats augmenté après un gain d'exp. Dim 21 Mai - 0:38 | |
| Bien souvent, dans des aventures, une fois une quête réussie, la récompense vient en espèces sonnantes et trébuchantes et aussi en XP (points d'expérience). C'est bien et c'est... normal. Et en plus, c'est facile à faire ! Dans un event il suffit de choisir l'option "Ajouter des XP au groupe". Bien. Mais... si vous donnez un certain nombre de XP au groupe, peut-être voulez-vous savoir, en tant que joueur, si quelqu'un de votre équipe a passé un niveau,... comme à la fin de combats et savoir si une nouvelle technique a été apprise, etc... Eh bien, voici un petit script qui va permettre d'avoir cette information et qui va préciser, par la même occasion, le nombre de XP reçus. Et comme toujours, le script est très commenté. tout d'abord créez un nouveau script dans l'éditeur que vous nommerez "Passer Niveau" Collez-y le script suivant : - Code:
-
# Script créé par Corwin # http://www.pellnet.ch/9S # version 1 # 15.12.2005 # script optimisé pour un team de 1 à 5 compagnons # contact : yann@pellissier.ch # -------------------------------------------------------------------------- # # Ce script va afficher une fenêtre lorsque dans un event # on attribue des points d'expérience à l'équipe. # Si, avec ces nouveaux XP, l'un des membres de l'équipe passe # un ou des niveaux, c'est indiqué. # # par contre, il ne faut PAS passer par l'ajout de XP standard dans # l'event, sinon cette fenêtre ne va pas s'afficher. # # Il faut appeler la fonction ainsi dans un event : # --> Insérer un script : # <> call_XP(alpha) # # en remplaçant la variable "alpha" par le nombre de XP qu'il faut donner à l'équipe # # Attention, ce script donne des XP à TOUTE L'EQUIPE, sans distinction. # Donc, si vous souhaitez donner des XP à seulement 1 membre de l'équipe # il faut passer par l'attibution standard de XP et tant pis pour cette fenêtre d'info... # # Projet version 2 : préciser à qui on veut donner des XP
#-------------------------------------------------------------------------- class Scene_LvL_UP #--------------------------------------------------------------------------
def main
# lancement de la fenêtre d'info des XP @lvlup_window = Window_LvL_UP.new
# Boucle de transition, mise à jour graphique et entré clavier Graphics.transition # boucle
loop do # Mise à jour graphique Graphics.update # Mise à jour des entrées clavier
Input.update # Mise à jour de la class update
# Si la scene n'existe plus, alors sortir de la boucle if $scene != self break end end # figer les graphiques Graphics.freeze # destruction des objets if @lvlup_window.dispose != nil @lvlup_window.dispose end
end
#-------------------------------------------------------------------------- # ● update #-------------------------------------------------------------------------- def update
# Gestion des entrées clavier # Si B ou C est appuyé if Input.trigger?(Input::B) or Input.trigger?(Input::C) # jouer le son d'annulation $game_system.se_play($data_system.cancel_se) # Revenir à la carte $scene = Scene_Map.new
return end end end
# ---------------------------------------- # on définit la fonction à appeler, # avec la variable alpha qui représente les XP à donner # ---------------------------------------- def call_XP(alpha) if alpha != nil $XP_gained = alpha else $XP_gained = 1 end # on lance la scene en question $scene = Scene_LvL_UP.new
end
#-------------------------------------------------------------------------- class Window_LvL_UP < Window_Base #--------------------------------------------------------------------------
#-rajout images des battlers # attention, il faut avoir créé des icônes, images, visages # des personnages. Ces images devront se trouver dans le répertoire # adéquat (pictures) et se nommer avec le nom du personnage avec _small à la fin
# si vous ne souhaitez pas avoir ces images, supprimez simplement cette petite partie
def draw_actor_visage(actor, x, y) f_name = actor.battler_name + "_small.png" f_hue = actor.battler_hue bitmap = RPG::Cache.battler(f_name, f_hue) cw = 120; ch = 75 src_rect = Rect.new(-18, -18, cw, ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end
#- fin rajout images battlers
def initialize
super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.visible = true # self.back_opacity =0 self.opacity = 160
# calcul de la largeur du texte self.contents.font.name = $fontface self.contents.font.size = $fontsize+6 self.contents.font.color = system_color the_niveau_text = "Vous recevez #{$XP_gained} Points d'expérience" the_niveau = contents.text_size(the_niveau_text).width self.contents.font.size = $fontsize self.contents.font.color = normal_color self.contents.clear
self.contents.font.color = gold_color self.contents.font.name = $fontface self.contents.font.size = $fontsize+6 self.contents.draw_text(0, 0, the_niveau, 32, the_niveau_text, 2) team_levelup = 0 # variable qui va préciser si au moins un persg du team monte d'un niveau
for i in 0...$game_party.actors.size # on passe tous les persg en revue actor = $game_party.actors[i] class_id = actor.class_id # information de l'ID de la classe de chaque personnage actor_x = i * 125 + 4 # largeur des infos par persg y = 32 # hauteur standard de ligne old_level = actor.level # on variabilise le niveau du persg avant de donner les XP old_maxhp = actor.maxhp # max PV avant niveau old_maxsp = actor.maxsp # max MP avant niveau old_str = actor.str # force avant niveau old_dex = actor.dex # dextérité avant niveau old_agi = actor.agi # agilité avant niveau old_int = actor.int # intelligence avant niveau
# on attribue les XP au persg actor.exp += $XP_gained
new_level = actor.level # on variabilise le nouveau niveau du persg après lesXP new_maxhp = actor.maxhp # max PV après niveau new_maxsp = actor.maxsp # max MP après niveau new_str = actor.str # force après niveau new_dex = actor.dex # dextérité après niveau new_agi = actor.agi # agilité après niveau new_int = actor.int # intelligence après niveau # on calcul les valeurs ajoutées add_maxhp = new_maxhp - old_maxhp # différence des PV add_maxsp = new_maxsp - old_maxsp # différence des MP add_str = new_str - old_str # différence force add_dex = new_dex - old_dex # différence dextérité add_agi = new_agi - old_agi # différence agilité add_int = new_int - old_int # différence intelligence if new_level > old_level # le nouveau niveau est plus élevé que l'ancien niveau # donc le persg a pasé un niveau ! # on affiche, par persg les informations du nouveau niveau self.contents.font.color = normal_color self.contents.font.size = $fontsize draw_actor_visage(actor, actor_x+32, y*2+32) draw_actor_name(actor, actor_x, y*3) draw_actor_class(actor, actor_x,y*4) self.contents.font.color = green_color self.contents.font.size = $fontsize-2 self.contents.draw_text(actor_x, y*5, the_niveau, 32, "Niveau gagné !", 0) self.contents.font.size = $fontsize self.contents.draw_text(actor_x, y*6, the_niveau, 32, "De #{old_level} à #{new_level}", 0) self.contents.font.size = $fontsize-4 self.contents.font.color = system_color self.contents.draw_text(actor_x, y*7, the_niveau, 32, "#{$data_system.words.hp}: +#{add_maxhp}", 0) self.contents.draw_text(actor_x, y*7+16, the_niveau, 32, "#{$data_system.words.sp}: +#{add_maxsp}", 0) self.contents.draw_text(actor_x, y*8, the_niveau, 32, "#{$data_system.words.str[0,3]}: +#{add_str}", 0) self.contents.draw_text(actor_x, y*8+16, the_niveau, 32, "#{$data_system.words.dex[0,3]}: +#{add_dex}", 0) self.contents.draw_text(actor_x, y*9, the_niveau, 32, "#{$data_system.words.agi[0,3]}: +#{add_agi}", 0) self.contents.draw_text(actor_x, y*9+16, the_niveau, 32, "#{$data_system.words.int[0,3]}: + #{add_int}", 0) # on incrémente la variable team_levelup += 1 end # on checke si une nouvelle SKILL est apprise for i in 0...$data_classes[class_id].learnings.size # on passe en revue les skills des persg skill_lv = $data_classes[class_id].learnings[i].level if skill_lv > old_level and skill_lv <= new_level # on teste le niveau du la skill et du persg #skill obtenue, on l'affiche skill_nom = $data_skills[$data_classes[class_id].learnings[i].skill_id].name self.contents.font.name = $fontface self.contents.font.size = $fontsize-6 self.contents.font.color = normal_color self.contents.draw_text(actor_x, y*11, the_niveau, 32, "Technique apprise:") self.contents.draw_text(actor_x, y*11+16, the_niveau, 32, skill_nom) end end # ... end if team_levelup < 1 #personne ne monte de niveau
self.contents.font.color = red_color self.contents.font.size = $fontsize+2 self.contents.draw_text(-120, 80, self.width, 32,"malheureusement, personne ne monte de niveau.", 2) end end
end
A noter les points suivants : Attention, il faut avoir créé des icônes, images, visages des personnages. Ces images devront se trouver dans le répertoire adéquat (pictures) et se nommer avec le nom du personnage avec _small à la fin (détails dans le script) Pour appeler ce script, mettre dans l'event en question ceci : - Code:
-
Insérer un script : <> call_XP(alpha)
en remplaçant la variable "alpha" par le nombre de XP qu'il faut donner à l'équipe (détails dans le script). Et voici le résultat : http://img206.imageshack.us/my.php?image=niveaua3hq.jpg http://img206.imageshack.us/my.php?image=niveaub1tn.jpg Script V.1 by Corwin | |
|
Zelda_PL Blob Jaune
Nombre de messages : 797 Age : 31 Localisation : En train d'éliminé les deadras de Cyrodiil Date d'inscription : 09/05/2006
| |
Jordinateur Blob
Nombre de messages : 260 Localisation : Devant mon ordinateur !(enfin sa dépend, peut-être avec ma copine aussi ^^) Humeur/Caractère : Aller a l'école T_T Date d'inscription : 12/05/2006
| Sujet: Re: Systeme d'affichage des stats augmenté après un gain d'exp. Dim 21 Mai - 1:51 | |
| Merci, merci (j'ai du mal a croire ça...Sa ne serait pas de l'ironie par pur hasard ) | |
|