Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
| Sujet: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 13:37 | |
| Mouvements aléatoires restreints -IntroductionJ'avais déjà tenté quelque chose du genre lors du concours des 5 thèmes. Cependant en event, c'est assez moche à faire! Maintenant que je script, je vous donne mon petit script correspondant. Il est tout petit, tout mimi! ^^ -DescriptionCe script permet de laisser un event libre de ses mouvements, tout en le gardant dans une zone confinée. Parfois par logique ou seulement par nécéssité, il normal de vouloir éviter qu'un event vienne s'incruster dans un endroit inapproprié de la map. Ou juste pour faire moins désordre. -Le script - Code:
-
#============================================================================== # # # Mvt Aléa Limité.v2 # # #=============================================================================== # #By Vincentmhd #http://vincentmhdmaker.canalblog.com/ # #01/09/2009 #25/09/2009 .v2 ajout des zones relatives... # # # #=====================================NOTE====================================== # # #------------------------------------------------------------------------------- # #Ce script permet de mettre un event en déplacement aléatoire sans pour autant #le lâcher sur toute la carte, il est limité à un rectangle sur la map défini #par vos soins. #Pour le faire, il y a 2 méthodes: par coordonnées absolues et par relatives # #Pour les absolues c'est simple: il suffit d'inserer: #move_random_in(bottom, left, right, top) #Les arguments correspondent directement aux coordonnées de l'espace marchage #sur la map. # #Pour les relatives: il faut d'inserer: #-move_random_around(bottom, left, right, top) #Les arguments correspondent directement aux coordonnées de l'espace marchable #par rapport à la position "initiale". Celle-ci peut être réinitialisée, #manuellement, et automatiquement. #La méthode manuelle est la suivante: Set_center( x, y) #La méthode automatique est activée par défaut, elle s'active et se désactive #comme ceci: #Set_follow(bool) #Automatisme consiste à appeler Set_center(), dès que l'event est déplacé #artifitiellement. #=============================================================================== class Game_Character attr_accessor :init_x, :init_y, :init_move alias alea_initialize initialize def initialize @init_move = true alea_initialize @init_x = 0 @init_y = 0 end #-------------------------------------------------------------------------- # * Move at Random in map coord #-------------------------------------------------------------------------- def move_random_in(bottom, left, right, top) case rand(4) when 0 if !(@y+1 > bottom) move_down(false) end when 1 if !(@x-1 < left) move_left(false) end when 2 if !(@x+1 > right) move_right(false) end when 3 if !(@y-1 < top) move_up(false) end end end #-------------------------------------------------------------------------- # * Move at Random in relative rect centre sur l'event #-------------------------------------------------------------------------- #Cette méthode est variante de la première elle permet de #délimiter le rectangle relativement. #Ce rectangle est centré sur la position initiale du perso. def move_random_around(bottom, left, right, top) if (@init_move!= nil)&&(@init_move == true) Set_center() @init_move = false end case rand(4) when 0 if !(@y+1 > (@init_y + bottom)) move_down(false) end when 1 if !(@x-1 < (@init_x - left)) move_left(false) end when 2 if !(@x+1 > (@init_x + right)) move_right(false) end when 3 if !(@y-1 < (@init_y - top)) move_up(false) end end end #-------------------------------------------------------------------------- # * Change the center of the square #-------------------------------------------------------------------------- #Cette méthode permet de modifier le centre du rectangle. def Set_center( x =@x, y =@y) @init_x = x @init_y = y if @init_move != nil @init_move = false end end #-------------------------------------------------------------------------- # * Move Type : Custom #-------------------------------------------------------------------------- #Permet de faire suivre le rect si le perso est déplacé artificiellement alias alea_move_type_custom move_type_custom def move_type_custom if stopping? command = @move_route.list[@move_route_index] @move_failed = false if command.code != 0 if (command.code < 14)&&(@init_move != nil) @init_move = true end end alea_move_type_custom end end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- #Permet de faire dire si le rect doit suivre le perso si il est déplacé #artifitiellement def Set_follow(bool) if bool @init_move = true else @init_move = nil end end end
class Game_Event #-------------------------------------------------------------------------- # * Object Initialization # map_id : map ID # event : event (RPG::Event) #-------------------------------------------------------------------------- alias alea_event_initialize initialize def initialize(map_id, event) alea_event_initialize(map_id, event) Set_center() end end
-InstallationCe script n'échappe pas à la régle du "copiez en dessous de material". Il n'a pas de nécéssité particulière. Compatibilité optimale, puis que ce n'est que l'ajout d'une méthode... -UtilisationTout les appels de script qui suivent se font dans la commande "déplacer un événement/ un héros".Il y a 2 méthodes: la méthode utilisant les coordonnées absolues, et l'autre les relatives. Coordonnées AbsoluesIl suffit d'appeler un script dans la trajectoire à définir par votre personnage: -move_random_in(bottom, left, right, top)La zone est rectangulaire. Bottom, left, right, top correspondent aux coordonnées sur la map des côtés du rectangle, respectivement, le bas, la gauche, la droite, puis le haut. Un screen: Coordonnées Relativesil faut d'inserer comme pour la méthode absolue: -move_random_around(bottom, left, right, top)Les arguments correspondent aux coordonnées de l'espace marchable par rapport à la position "initiale" de l'event. Elle prend que des entiers positifs. Par exemple move_random_around(1, 1, 1, 1) Laissera un event libre dans un carré de 3 côtés par rapport à sa position initiale, centré sur celle-ci. Elle peut être réinitialisée, manuellement, et automatiquement, au cas où vous avez besoin de déplacer l'event. La méthode manuelle est la suivante: Set_center( x, y) La méthode automatique est activée par défaut, elle s'active et se désactive comme ceci: Set_follow(bool) L'automatisme consiste à appeler Set_center(), dès que l'event est déplacé autrement que par le script. -DémoUne toute petite démo: DémoLa démo n'existe plus depuis belle lurette! Un autre projet pour remplacer : Télécharger Déplacements.rar -Crédit optionnel: Vincentmhd [Edit: 3Sept2009] : ajout du crédit et ajout d'explications[Edit: 26Sept2009] :v2 ajout de la méthode relative
Dernière édition par vincentmhd le Jeu 9 Aoû 2012 - 12:31, édité 13 fois |
|
Doyen
Age : 46 Inscrit le : 20/08/2008 Messages : 2485
| Sujet: Re: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 13:53 | |
| Excellent ce truc, ca pourra me servir pour mes gardes qui patrouillent! Ca pourra aussi servir à ceux qui veulent faire des poissons qui bougent dans des lacs de façon aléatoire |
|
Poulet trizo Lv.3
Age : 26 Inscrit le : 08/08/2009 Messages : 30
| Sujet: Re: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 14:14 | |
| Petit script, mais efficace. Merci, ça m'aidera dans mes cours de scripts. Il est très facile a comprendre. |
|
Mage Lv.11
Age : 27 Inscrit le : 02/03/2009 Messages : 513
| Sujet: Re: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 14:43 | |
| bonjour, c'est super mais j'ai un problème ^^
move_random_in(bottom, left, right, top)
Pas du tout compris par quoi il faut remplacer bottom left right et top ^^
merci pour le script et merci d'avance pour la réponse
Ciao
Sylfurion |
|
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 14:49 | |
| @Sylfurion > Tu remplace bottom, top, left, right par tes limites de déplacement. Ainsi move_random_in(2, 5, 10, 1) fera bouger aléatoirement ton NPC d'au plus 2 cases vers le bas, 5 vers la gauche, 10 vers la droite et 1 vers le haut.
@vincentmhd > Simple, mais efficace. Je sens que les participant au concours de septembre 2009 pour la partie event vont s'arracher ton script. Voyons voir s'ils penseront te donner les droits qui te reviennent.
Merci du partage.
Hors sujet : L'image de ta signature est un bel exemple de ce que le cerveau perçoit par "habitude". Regardez la chute. Le cerveau analyse que l'eau va vers le bas, car pour lui, c'est ce qui est le plus logique selon ce qu'il connait. Cependant, obliger à votre cerveau à oublier ce qu'il connait de la gravité afin de voir différemment. En fait, la chute d'eau monte et ne descend pas... |
|
Mage Lv.11
Age : 27 Inscrit le : 02/03/2009 Messages : 513
| Sujet: Re: [VX] Mouvements aléatoires restreints Jeu 3 Sep 2009 - 15:18 | |
| Ah merci beaucoup ! - MirainoHikari a écrit:
- Hors sujet : L'image de ta signature est un bel exemple de ce que le cerveau perçoit par "habitude". Regardez la chute. Le cerveau analyse que l'eau va vers le bas, car pour lui, c'est ce qui est le plus logique selon ce qu'il connait. Cependant, obliger à votre cerveau à oublier ce qu'il connait de la gravité afin de voir différemment. En fait, la chute d'eau monte et ne descend pas...
O_o, mais c'est que c'est vrai en plus !! Ciao Sylfurion |
|
Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
| Sujet: Re: [VX] Mouvements aléatoires restreints Sam 26 Sep 2009 - 2:54 | |
| Nouvelle version ! Ajout d'une méthode Relative, moins prise de tête pour les coordonnées à compter sur la map. |
|
Mage Lv.11
Age : 27 Inscrit le : 02/03/2009 Messages : 513
| Sujet: Re: [VX] Mouvements aléatoires restreints Dim 27 Sep 2009 - 12:21 | |
| Tu as modifier ton premier post ? |
|
Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
| Sujet: Re: [VX] Mouvements aléatoires restreints Dim 27 Sep 2009 - 12:46 | |
| Oui le script est passé en .v2
Et Sous le screen, j'ai ajouté une mini explication pour les coordonnées relatives car dans la pratique ce n'est pas vraiment différent de l'absolue, mais je vais l'étofer un peu.
Par contre la démo n'est pas encore à jour... |
|
| Sujet: Re: [VX] Mouvements aléatoires restreints | |
| |
|