Visitez notre partenaire RPG Maker VX/VXAce - La Communauté - v4 !
sam. 01 juin 2013 - 22h18
Voilà le problème j'ai trouvé ce script sur Internet permettant de scanner les monstres mais lorsqu'on veut scanner un montre si on a un adversaire là ça fonctionne bien mais si il y a plusieurs adversaires, il ne scanne que le dernier même en sélectionnant un ennemi. Exemple on a un fantome et un basilique, il scanne le fantome mais comme le basilique est le dernier monstre ce sont les caractéristiques du basilique qui apparaissent. Et j'ai cherché pendant des heures et rien n'a marché. De plus l'interface est moche, j'avais déjà rajouté les stat de dextérité, force.. Ca c'était la partie facile. Si quequ'un après l'avoir réparé pouvait me réduire la fenêtre en haut pour pas prendre trop de place voir rajouter des icones à piocher dans l'iconset à côté des stats. Merci. Voici à quoi ça ressemble. Là j'ai scanné le fantome : [img]http://img99.xooimage.com/files/2/6/3/scan-3ea00de.png[/img] Voilà le script : [code]#=============================== #===================================== class Scan < Window_Base def initialize # Set Window Attributes x = 0 y = 0 width = 640 height = 320 opacity = 0 # Setup Window super(x, y, width, height) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize self.back_opacity = opacity # Refresh refresh end def refresh # Clear Contents self.contents.clear # Get Enemy Info (Thanks, Dragonslayer) @item_max = $game_troop.enemies.size for i in 0...$game_troop.enemies.size enemy = $game_troop.enemies[i] end # Define Variables name = "Nom: " + enemy.name hp = "HP: " + enemy.hp.to_s + "/" + enemy.base_maxhp.to_s sp = "MP: " + enemy.sp.to_s + "/" + enemy.base_maxsp.to_s atk = "Attaque: " + enemy.base_atk.to_s pdef = "Defense physique: " + enemy.base_pdef.to_s mdef = "Defense magique: " + enemy.base_mdef.to_s str = "Force: " + enemy.base_str.to_s agi = "Agilité: " + enemy.base_agi.to_s dex = "Dextérité: " + enemy.base_dex.to_s int = "Intelligence: " + enemy.base_int.to_s # Draw Enemy Stats draw_stat(name,0) draw_stat(hp,1) draw_stat(sp,2) draw_stat(atk,3) draw_stat(pdef,4) draw_stat(mdef,5) draw_stat(str,6) draw_stat(agi,7) draw_stat(dex,8) draw_stat(int,9) # Update while 1 Input.update Graphics.update break if Input.trigger?(Input::C) end # Play Sound Effect $game_system.se_play($data_system.decision_se) # Dispose self.dispose end def draw_stat(text,line) # Draw Individual Stat width = self.contents.text_size(text).width height = self.contents.text_size(text).height self.contents.draw_text(0, height * line, width, height, text) end end[/code] Créer une compétence ou un objet allant chercher un événement commun scan avec inserer le script suivant en appel [code]@scan = Scan.new[/code] Merci de votre aide.
sam. 01 juin 2013 - 23h53
Je ne sais pas qui a fait ça, mais... Sérieux, je crise devant tant... d'imbécilités (qui a mélangé tout ce qui était lié à la vue avec le controleur/modele ?????) Bref, je fais ça demain, en nettement plus propre et en plus optimisé.
dim. 02 juin 2013 - 01h06
Merci bien Cantarelle, j'ai trouvé ça sur le forum anglophone Neoseeker posté par un certain Mat710 mais je ne sais pas s'il en est l'auteur. Je savais le faire en event mais ça faisait beaucoup d'event à copier. C'est plus simple si c'est en script.
dim. 02 juin 2013 - 11h51
Par contre, je voudrai savoir... Comment comptes-tu utiliser la compétence ? Je veux dire, est-ce une compétence en magie ou est-ce une compétence particulière... Parce que dans les deux cas, ce n'est pas la même chose... [Edit] : j'ai presque terminé, j'ai juste un soucis de récupération d'ID (et je suis sûre que je me casse la tête pour rien alors que c'est simple)...
dim. 02 juin 2013 - 16h38
C'est une compétence en magie.
dim. 02 juin 2013 - 17h25
Bon, finalement, j'ai terminé. 5 choses à faire : 1 - Créer la compétence avec en attribut obligatoire un évent commun qui sera appelé à chaque fois 2 - Créer un event commun. Dedans, il faut utiliser la fonction : insérer un script. Et insérer ce code : [code] index = $scene.active_battler.current_action.target_index target = $game_troop.smooth_target_enemy(index) scan = Scene_Scan.new(target) [/code] 3 Insérer ces scripts (en respectant l'ordre, de préférence), entre Scene_Debug et Main. Premier script (à mettre avant les deux autres, de préférence) : [code] # ============================================================================== # ** Scene_Battle # ------------------------------------------------------------------------------ # Par Mikltov / Rutsuku Fushin / Cantarelle # ------------------------------------------------------------------------------ # Cette extention permet de mettre en lecture l'attribut active_battler, # nessessaire pour le scan. # ATTENTION : A mettre avant Scene_Scan et Window_Scan! # ============================================================================== class Scene_Battle attr_reader :active_battler end [/code] Deuxième script : [code] # ============================================================================== # ** Scene_Scan # ------------------------------------------------------------------------------ # Par Mikltov / Rutsuku Fushin / Cantarelle # ------------------------------------------------------------------------------ # Un script pour montrer le resultat des scans en combat. Ceci n'est que la # partie modele / controleur. # ============================================================================== class Scene_Scan < Window_Base # ---------------------------------------------------------------------------- # def initialize # ---------------------------------------------------------------------------- def initialize(enemy) @scan_window = Window_Scan.new(enemy) @affichage = true Graphics.transition loop do Graphics.update Input.update update if @affichage == false break end end @scan_window.dispose end # ---------------------------------------------------------------------------- # def update # ---------------------------------------------------------------------------- def update if Input.trigger?(Input::B) update_command return end end # ---------------------------------------------------------------------------- # def update_command # ---------------------------------------------------------------------------- def update_command $game_system.se_play($data_system.cancel_se) @affichage = false end # ============================================================================== # end class # ============================================================================== end [/code] Troisième script (qui est la vue, donc, tout ce qui est lié aux graphismes) du scan : [code] # ============================================================================== # ** Window_Scan # ------------------------------------------------------------------------------ # Par Mikltov / Rutsuku Fushin / Cantarelle # ------------------------------------------------------------------------------ # Un script pour montrer le resultat des scans en combat. Ceci n'est que la # partie visuelle. # ============================================================================== class Window_Scan < Window_Base # ---------------------------------------------------------------------------- # def update # ---------------------------------------------------------------------------- def initialize(enemy) # -------------------------------------------------------------------------- # 4 valeurs obligatoires dans le super # - position du x de depart # - position du y de depart # - position de x a l'arrivee # - position de y a l'arrivee # -------------------------------------------------------------------------- super(20, 10, 300, 350) self.contents = Bitmap.new(width - 32, height - 32) # -------------------------------------------------------------------------- # definition de la police et de sa taille # -------------------------------------------------------------------------- self.contents.font.name = $fontface self.contents.font.size = $fontsize # -------------------------------------------------------------------------- # definit l'opacite de la boite de dialogue # -------------------------------------------------------------------------- self.back_opacity = 255 refresh(enemy) end # ---------------------------------------------------------------------------- # def refresh # ---------------------------------------------------------------------------- def refresh(enemy) self.contents.clear self.contents.draw_text(0, 0, 450, 28, "name : " + enemy.name.to_s) self.contents.draw_text(0, 32, 450, 28, "hp : " + enemy.base_maxhp.to_s) self.contents.draw_text(0, 64, 450, 28, "sp : " + enemy.base_maxsp.to_s) self.contents.draw_text(0, 96, 450, 28, "atk : " + enemy.base_atk.to_s) self.contents.draw_text(0, 128, 450, 28, "pdf : " + enemy.base_pdef.to_s) self.contents.draw_text(0, 160, 450, 28, "mdf : " + enemy.base_mdef.to_s) self.contents.draw_text(0, 192, 450, 28, "str : " + enemy.base_str.to_s) self.contents.draw_text(0, 224, 450, 28, "agi : " + enemy.base_agi.to_s) self.contents.draw_text(0, 256, 450, 28, "dex : " + enemy.base_dex.to_s) self.contents.draw_text(0, 288, 450, 28, "int : " + enemy.base_int.to_s) end # ============================================================================== # end class # ============================================================================== end [/code] Normalement, c'est testé et fonctionnel (je n'ai fait que des combats test, pas des combats normaux). Il n'y a qu'un seul détail qui est embêtant, mais ce n'est pas trop gênant. Normalement, ça devrait se régler avec le paramétrage de la compétence.
dim. 02 juin 2013 - 17h29
Sincèrement je te remercie. Je ne pourrai pas le tester dans l'immédiat. J'essayerai de faire ça ce soir. Je te donnerai le retour bien entendu. Je te rajoute déjà des points.
dim. 02 juin 2013 - 17h32
Et moi je déplace.
dim. 02 juin 2013 - 21h07
Ca fonctionne parfaitement, j'ai juste à modifier l'aspect de la window et c'est bon. Un grand merci.
dim. 02 juin 2013 - 21h41
C'est concept de faire hériter une Scene de Window_Base, juste pour la forme :P
dim. 02 juin 2013 - 21h50
ZEF : J'avais pas envie de me casser la tête avec ça (tout ce qui est Window, ça m'emme***) Et sérieux, mes scripts, j'en fais une simple base. Après, c'est aux utilisateurs de l'adapter. Et j'essaye d'en faire une base pour qu'il soit simple de vérifier le fond et la forme.
dim. 02 juin 2013 - 21h51
Je comprend, par contre je comprend moins bien le rôle du return dans update.
dim. 02 juin 2013 - 22h04
Dans le cas où il veut ajouter autre chose dans la condition... J'ai préféré pendre les devants. Et aussi parce que j'ai pris une de mes classes update et que j'ai pas modifé ce truc... Ce qui n'est pas gênant en soit. Je préfère encore mieux avoir ce return et d'être sûre que ça me renvoie bien une modification de l'attribut @affichage que de ne pas l'avoir et que l'update fait encore du n'importe quoi (j'avais eu le cas une fois).