| [VXace] Déplacement aléatoire limité. | |
|
Auteur | Message |
---|
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: [VXace] Déplacement aléatoire limité. Jeu 29 Déc 2011 - 21:53 | |
| Voici une version RGSS3 du déplacement aléatoire limité à une zone particulière. Le code et l'utilisation sont plus simples que pour le script RGSS2, puisque les zones sont déjà mises en place. Effet : permet qu'un event ait un mouvement aléatoire, tout en restant dans la zone choisie. Utilisation : Code à mettre au dessus de main. Dans la page de l'event concerné, insérez un commentaire avec marqué : - Code:
-
ZONE X Où X est le numéro de la zone dans laquelle l'event peut bouger. (attention à bien mettre ZONE en majuscules) L'event doit bien sur avoir l'option de déplacement "aléatoire" (ou "random"), et le commentaire est à renouveler sur chaque page de l'event où vous voulez que la limitation prenne effet. Exemple :Remerciements à vincentmhd, à qui je récupère l'idée initiale. Le code : - Code:
-
#----------------------------------------# ####DEPLACEMENT ALEATOIRE LIMITE#### ##Le 29/12/11 par Tiroflan## ##Remerciements à vincentmhd pour l'idée## #----------------------------------------#
# Effet : permet qu'un event ait un mouvement aléatoire, # tout en restant dans la zone choisie.
#----------------------------------------# # Utilisation : Dans la page de l'event, insérez un commentaire # avec marqué : # ZONE X # # Où X est le numéro de la zone dans laquelle l'event peut bouger. (attention à bien mettre ZONE en majuscules)
#----------------------------------------#
# 3 méthodes ont été aliasées : # move_random et move_forward de Game_Character (aliasées dans Game_Event) # initialize de Game_Event
#----------------------------------------# class Game_Event < Game_Character
attr_reader :restricted_area # Contient l'id de la zone de limitation. #----------------------------------------# # Redéfinition des mouvements utilisés pour le déplacement aléatoire : # move_random et move_forward. #----------------------------------------# alias move_random_without_area move_random def move_random if @restricted_area == 0 move_random_without_area else move_random_in_selected_area end end alias move_forward_without_area move_forward def move_forward if @restricted_area == 0 move_forward_without_area else move_forward_in_selected_area end end def move_forward_in_selected_area if in_area?(@x, @y, @direction) move_straight(@direction) end end def move_random_in_selected_area direction = 2 + rand(4) * 2 if in_area?(@x, @y, direction) move_straight(direction, false) end end #Détermine si la case d'arrivée est dans la zone de déplacement. def in_area?(x, y, d) x2 = x + (d == 6 ? 1 : (d == 4 ? -1 : 0)) y2 = y + (d == 2 ? 1 : (d == 8 ? -1 : 0)) return $game_map.region_id(x2,y2) == @restricted_area end #----------------------------------------# #----------------------------------------# # Méthodes pour lire le commentaire et le stocker dans :restricted_area #----------------------------------------# alias initialize_with_areas initialize def initialize(map_id, event) initialize_with_areas(map_id, event) @restricted_area = 0 input_restricted_area end def input_restricted_area return if empty? for i in 0...@list.size if @list[i].code == 108 comment = @list[i].parameters[0].to_s info = comment.split if info[0] == "ZONE" @restricted_area = info[1].to_i end end end end #----------------------------------------# end
EDIT : Version un peu plus abs-like, avec une possibilité de se faire poursuivre par des events dans une zone limitée. - Code:
-
#----------------------------------------# ####DEPLACEMENT ALEATOIRE LIMITE#### ##Le 29/12/11 par Tiroflan## ##Remerciements à vincentmhd pour l'idée## #----------------------------------------#
# Effet : permet qu'un event ait un mouvement aléatoire, # tout en restant dans la zone choisie. # Permet aussi à un event de suivre le joueur dans une zone délimitée seulement. # L'event suit alors le joueur tant que celui-ci est dans la zone, ou qu'il est assez # proche de l'event (distance configurable, dans tous les cas l'event reste dans sa zone). # Il se déplace aléatoirement en dehors de ces conditions.
#----------------------------------------# # Utilisation : Dans la page de l'event, insérez un commentaire # avec marqué : # ZONE X # # Où X est le numéro de la zone dans laquelle l'event peut bouger. # Pour les events poursuiveurs, il faut aussi préciser la distance # entre l'event et le joueur à partir de laquelle l'event ne poursuit plus.
#----------------------------------------#
# CONFIGURATION : ici vous pouvez modifier # la distance nécessaire pour semer votre poursuivant : même en dehors de la zone, # le monstre est attiré si vous êtes trop près (mais il ne sortira jamais de la zone) module TIRO_POURSUITE DISTANCE_POURSUITE = 5 end #----------------------------------------#
# 3 méthodes ont été aliasées : # move_random et move_forward de Game_Character (aliasées dans Game_Event) # initialize de Game_Event
#----------------------------------------#
class Game_Event < Game_Character attr_reader :restricted_area # Contient l'id de la zone de limitation. #----------------------------------------# # Redéfinition des mouvements utilisés pour le déplacement aléatoire : # move_random et move_forward. #----------------------------------------# alias move_random_without_area move_random def move_random if @restricted_area == 0 move_random_without_area else move_random_in_selected_area end end alias move_forward_without_area move_forward def move_forward if @restricted_area == 0 move_forward_without_area else move_forward_in_selected_area end end alias move_toward_player_without_area move_toward_player def move_toward_player if @restricted_area == 0 move_toward_player_without_area else move_toward_player_in_selected_area end end def move_forward_in_selected_area if in_area?(@x, @y, @direction) move_straight(@direction) end end def move_random_in_selected_area direction = 2 + rand(4) * 2 if in_area?(@x, @y, direction) move_straight(direction, false) end end def move_toward_player_in_selected_area sx = distance_x_from($game_player.x) sy = distance_y_from($game_player.y) if sx.abs > sy.abs direction1 = (sx > 0 ? 4 : 6) move_straight(direction1) if in_area?(@x, @y, direction1) direction2 = (sy > 0 ? 8 : 2) move_straight(direction2) if (!@move_succeed || !in_area?(@x,@y,direction1)) && sy != 0 && in_area?(@x, @y, direction2) elsif sy != 0 direction1 = (sy > 0 ? 8 : 2) move_straight(direction1) if in_area?(@x, @y, direction1) direction2 = (sx > 0 ? 4 : 6) move_straight(direction2) if (!@move_succeed || !in_area?(@x,@y,direction1)) && sx != 0 && in_area?(@x, @y, direction2) end end alias area_move_type_toward_player move_type_toward_player def move_type_toward_player if (adjusted_near_the_player? || ($game_map.region_id($game_player.x,$game_player.y) == @restricted_area)) area_move_type_toward_player else move_random end end def adjusted_near_the_player? sx = distance_x_from($game_player.x).abs sy = distance_y_from($game_player.y).abs sx + sy < DISTANCE_POURSUITE end
#Détermine si la case d'arrivée est dans la zone de déplacement. def in_area?(x, y, d) x2 = x + (d == 6 ? 1 : (d == 4 ? -1 : 0)) y2 = y + (d == 2 ? 1 : (d == 8 ? -1 : 0)) return $game_map.region_id(x2,y2) == @restricted_area end #----------------------------------------# #----------------------------------------# # Méthodes pour lire le commentaire et le stocker dans :restricted_area #----------------------------------------# alias initialize_with_areas initialize def initialize(map_id, event) initialize_with_areas(map_id, event) @restricted_area = 0 input_restricted_area end def input_restricted_area return if empty? for i in 0...@list.size if @list[i].code == 108 comment = @list[i].parameters[0].to_s info = comment.split if info[0] == "ZONE" @restricted_area = info[1].to_i end end end end #----------------------------------------# include TIRO_POURSUITE end
Dernière édition par Tiroflan le Ven 30 Déc 2011 - 11:25, édité 3 fois |
|
| |
Age : 33 Inscrit le : 02/02/2010 Messages : 4692
| Sujet: Re: [VXace] Déplacement aléatoire limité. Jeu 29 Déc 2011 - 23:45 | |
| J'ai pas testé, mais un portage d'un des scripts les plus utiles qui existent sous VX pour Ace, ça vaut le coup. Merci Tiro'!
Et +3 points de participation parce que tu gères! o/ |
|
| |
Templier Lv.15
Age : 27 Inscrit le : 02/07/2009 Messages : 1169
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 10:16 | |
| Merci du partage !Je vais tester, et dire ce que j'en pense. |
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 11:23 | |
| Merci à vous deux ! J'ai eu une autre idée qui pourrait être utile pour créer des monstres dans des donjons sans combats aléatoires, faire en sorte que les monstres ne poursuivent le joueur que dans une zone précise, et repasse à un comportement aléatoire lorsque le joueur est en dehors de la zone et assez loin. Le deuxième code est utilisable de la même façon, il suffit de prendre le déplacement "suit le joueur" pour appliquer la poursuite, et aussi préciser la distance à partir de laquelle le monstre est attiré (si vous êtes en dehors de la zone du monstre, celui ci est quand même attiré, sans pour autant sortir de sa zone, si vous êtes trop près de lui) - Code:
-
#----------------------------------------# ####DEPLACEMENT ALEATOIRE LIMITE#### ##Le 29/12/11 par Tiroflan## ##Remerciements à vincentmhd pour l'idée## #----------------------------------------#
# Effet : permet qu'un event ait un mouvement aléatoire, # tout en restant dans la zone choisie. # Permet aussi à un event de suivre le joueur dans une zone délimitée seulement. # L'event suit alors le joueur tant que celui-ci est dans la zone, ou qu'il est assez # proche de l'event (distance configurable, dans tous les cas l'event reste dans sa zone). # Il se déplace aléatoirement en dehors de ces conditions.
#----------------------------------------# # Utilisation : Dans la page de l'event, insérez un commentaire # avec marqué : # ZONE X # # Où X est le numéro de la zone dans laquelle l'event peut bouger. # Pour les events poursuiveurs, il faut aussi préciser la distance # entre l'event et le joueur à partir de laquelle l'event ne poursuit plus.
#----------------------------------------#
# CONFIGURATION : ici vous pouvez modifier # la distance nécessaire pour semer votre poursuivant : même en dehors de la zone, # le monstre est attiré si vous êtes trop près (mais il ne sortira jamais de la zone) module TIRO_POURSUITE DISTANCE_POURSUITE = 5 end #----------------------------------------#
# 3 méthodes ont été aliasées : # move_random et move_forward de Game_Character (aliasées dans Game_Event) # initialize de Game_Event
#----------------------------------------#
class Game_Event < Game_Character attr_reader :restricted_area # Contient l'id de la zone de limitation. #----------------------------------------# # Redéfinition des mouvements utilisés pour le déplacement aléatoire : # move_random et move_forward. #----------------------------------------# alias move_random_without_area move_random def move_random if @restricted_area == 0 move_random_without_area else move_random_in_selected_area end end alias move_forward_without_area move_forward def move_forward if @restricted_area == 0 move_forward_without_area else move_forward_in_selected_area end end alias move_toward_player_without_area move_toward_player def move_toward_player if @restricted_area == 0 move_toward_player_without_area else move_toward_player_in_selected_area end end def move_forward_in_selected_area if in_area?(@x, @y, @direction) move_straight(@direction) end end def move_random_in_selected_area direction = 2 + rand(4) * 2 if in_area?(@x, @y, direction) move_straight(direction, false) end end def move_toward_player_in_selected_area sx = distance_x_from($game_player.x) sy = distance_y_from($game_player.y) if sx.abs > sy.abs direction1 = (sx > 0 ? 4 : 6) move_straight(direction1) if in_area?(@x, @y, direction1) direction2 = (sy > 0 ? 8 : 2) move_straight(direction2) if (!@move_succeed || !in_area?(@x,@y,direction1)) && sy != 0 && in_area?(@x, @y, direction2) elsif sy != 0 direction1 = (sy > 0 ? 8 : 2) move_straight(direction1) if in_area?(@x, @y, direction1) direction2 = (sx > 0 ? 4 : 6) move_straight(direction2) if (!@move_succeed || !in_area?(@x,@y,direction1)) && sx != 0 && in_area?(@x, @y, direction2) end end alias area_move_type_toward_player move_type_toward_player def move_type_toward_player if (adjusted_near_the_player? || ($game_map.region_id($game_player.x,$game_player.y) == @restricted_area)) area_move_type_toward_player else move_random end end def adjusted_near_the_player? sx = distance_x_from($game_player.x).abs sy = distance_y_from($game_player.y).abs sx + sy < DISTANCE_POURSUITE end
#Détermine si la case d'arrivée est dans la zone de déplacement. def in_area?(x, y, d) x2 = x + (d == 6 ? 1 : (d == 4 ? -1 : 0)) y2 = y + (d == 2 ? 1 : (d == 8 ? -1 : 0)) return $game_map.region_id(x2,y2) == @restricted_area end #----------------------------------------# #----------------------------------------# # Méthodes pour lire le commentaire et le stocker dans :restricted_area #----------------------------------------# alias initialize_with_areas initialize def initialize(map_id, event) initialize_with_areas(map_id, event) @restricted_area = 0 input_restricted_area end def input_restricted_area return if empty? for i in 0...@list.size if @list[i].code == 108 comment = @list[i].parameters[0].to_s info = comment.split if info[0] == "ZONE" @restricted_area = info[1].to_i end end end end #----------------------------------------# include TIRO_POURSUITE end
|
|
| |
Templier Lv.15
Age : 27 Inscrit le : 02/07/2009 Messages : 1169
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 13:07 | |
| Bizarrement, le premier script ne marche pas. L’évent ne bouge pas du tout. Je pense que c'est p'tet un bug via le DLL que j'ai pris. |
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 13:56 | |
| Quand est ce que tu l'as copié sur ton ordi ?
Quand je l'ai posté hier, j'avais supprimé des lignes pour simplifier, sans vérifier (et de fait l'event restait immobile), mais j'ai corrigé ça depuis. |
|
| |
Templier Lv.15
Age : 27 Inscrit le : 02/07/2009 Messages : 1169
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 14:10 | |
| Nan, j'ai bel et bien pris la version d'aujourd'hui. |
|
| |
Va-nu-pieds Lv.4
Inscrit le : 06/03/2011 Messages : 57
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 15:17 | |
| Black t'a bien délimité la zone et mis la bonne dans l'évent. Blodangan |
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 15:22 | |
| Ah, tout est ok blodagan, on a réglé ça par mp.
|
|
| |
Va-nu-pieds Lv.4
Inscrit le : 06/03/2011 Messages : 57
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 15:25 | |
| |
|
| |
Age : 30 Inscrit le : 22/11/2008 Messages : 3382
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 16:32 | |
| Bin au pire parlez-en aussi ici, ça aidera les autres s'ils ont le même problème non? |
|
| |
Templier Lv.15
Age : 27 Inscrit le : 02/07/2009 Messages : 1169
| Sujet: Re: [VXace] Déplacement aléatoire limité. Ven 30 Déc 2011 - 17:26 | |
| Ça marchait dans un nouveau projet, c'est pas vraiment un bug.
|
|
| |
Va-nu-pieds Lv.4
Age : 28 Inscrit le : 16/03/2010 Messages : 63
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mer 25 Avr 2012 - 14:53 | |
| Heu désolé de remonter ce topic, mais j'ai pas bien compris comment on utilisait le deuxième script ... (Celui avec la poursuite) |
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mer 25 Avr 2012 - 17:22 | |
| J'avoue, j'aurais du prendre un screen : Bon, voilà, le dragon a un déplacement limité à la zone du désert, il ne peut en aucun cas en sortir, et je lui ai mis l'option de déplacement suivre le joueur pour simuler un comportement agressif. De plus, j'ai mis la constante de poursuite (dans le module de configuration) à 3. Cela signifie que, en plus de te poursuivre systématiquement dans le désert, le dragon va avoir une vision de 3 autour de lui, et va donc faire semblant de te poursuivre si tu es en dehors du désert et à moins de 3 cases de lui. Dans le cadre de mon screen, le héros est à pile trois cases du dragon, même s'il est sorti de la zone de poursuite : le dragon "voit" le héros et essaie de le suivre, même s'il est limité à cause du désert. J'avais ajouté cette fonctionnalité pour que les monstres ne repartent pas directement en aléatoire lorsqu'on sort de leur zone de chasse, mais tu vois que ça reste anecdotique. |
|
| |
Va-nu-pieds Lv.4
Age : 28 Inscrit le : 16/03/2010 Messages : 63
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mer 25 Avr 2012 - 18:39 | |
| Et donc si on sort de la zone vert foncé, le dragon va repartir en déplacement aléatoire ? |
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mer 25 Avr 2012 - 18:47 | |
| Pas si on sort de la zone vert foncé, si on sort de sa vision et du désert. Tu peux être dans la zone vert foncé sans qu'il ne te voit, s'il est plus loin que 3 (par ex) cases de toi.
Quand il ne poursuit pas, c'est un déplacement aléatoire, ouais. |
|
| |
Va-nu-pieds Lv.4
Age : 28 Inscrit le : 16/03/2010 Messages : 63
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mer 25 Avr 2012 - 19:24 | |
| HA !! oui merci beaucoup. En fait sur la map de test que j'avais faite, on voyait pas bien la différence en l'aléatoire et le suivi du héros, mais mainteant ça y est, c'est clair !
Script simple mais utile et efficace !!!
Edit: Petite question : Peut on faire varier la vitesse vitesse de déplacement suivant si le monstre est en aléatoire ou en suivi (mob va plus vite quand il poursuit le héros que lorsqu'il fait sa ronde) |
|
| |
Poulet trizo Lv.3
Age : 30 Inscrit le : 10/06/2011 Messages : 37
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mar 7 Aoû 2012 - 14:03 | |
| J'ai un bug à la ligne 138: NoMehodError occurred undefined method 'empty?' for #
J'ai testé sur un nouveau projet, pareil :/
|
|
| |
Illusionniste Lv.12
Age : 34 Inscrit le : 14/02/2010 Messages : 796
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mar 7 Aoû 2012 - 14:45 | |
| Erf, je reprends la conversation là où elle en était sur l'autre post. Ton projet, c'est sur VX et pas Ace ? Si c'est le cas, vraiment désolé, je réagis en considérant que les projets récents sont en ace, et je t'ai envoyé vers mon script qui est fait pour ace. Si tu makes bien avec VX, je te renvoie vers celui de vincentmhd : https://rpg-maker-vx.bbactif.com/t5883-mouvements-aleatoires-restreints#81149 |
|
| |
Poulet trizo Lv.3
Age : 30 Inscrit le : 10/06/2011 Messages : 37
| Sujet: Re: [VXace] Déplacement aléatoire limité. Mar 7 Aoû 2012 - 18:34 | |
| Le projet n'est pas vraiment récent mais avance très lentement (j'suis tout seul dessus, personne ne m'aide vraiment, enfin bon c'est pas le sujet) donc oui, c'est pour VX. J'ai copié le script mais il apparait tout en vert (ce qui voudrait dire qu'il est "entre parenthèses"), c'est normal ?
PS : J'avais "continué" ici car je trouvais qu'on s'éloigner du sujet posté et puis c'était une question relative à ce script donc...
[Edit] Je ne comprends pas la différence entre les deux modes aussi :/ J'aurais bien voulu voir ça avec la démo mais avec la fermeture de MegaUpload, le lien n'est plus disponible. |
|
| |
| Sujet: Re: [VXace] Déplacement aléatoire limité. | |
| |
|
| |
| [VXace] Déplacement aléatoire limité. | |
|