- TiroflanMembre
- Nombre de messages : 14
Age : 34
Distinction : aucune
Date d'inscription : 03/01/2012
Déplacement aléatoire/ Poursuite restreinte
Mar 3 Jan 2012 - 19:07
Bon, j'ai vu qu'il y avait une traduction d'un code de Yanfly qui a une fonctionnalité similaire, mais je poste quand même, parce que celui ci est un peu différent (et en plus, c'est de moi :waouh:).
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.
Contrairement au code de Yanfly, l'event ne se déplace que si la case d'arrivée est dans la zone (donc vous dessinez les zones passables, et non pas les bordures)
Effet : permet qu'un event ait un mouvement aléatoire, tout en restant dans la zone choisie. Si l'event est en déplacement aléatoire, il ne sortira pas de la zone. S'il est en mode 'suit le joueur', alors il ne suivra le joueur que si celui-ci est dans la zone, ou s'il est assez proche de l'event. L'event ne sortira pour autant jamais de la zone (ça permet de faire comme si on semait un montre, en sortant de la zone, mais celui-ci nous voit encore et reste le plus proche possible de vous). Quand on sort de l'aire de poursuite, l'event reprend un déplacement aléatoire.
Utilisation : Code à mettre au dessus de main. Dans la page de l'event concerné, insérez un commentaire avec marqué :
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" ("random"), ou bien "suite le jour" ("approach"), et le commentaire est à renouveler sur chaque page de l'event où vous voulez que la limitation prenne effet. Pour la distance où un event continuera à vous suivre, elle est à configurer dans le code même. (je pense qu'il n'est pas nécessaire d'appliquer une distance de poursuite adaptable à chaque event, mais on peut toujours la modifier en appelant le module in-game avec appel de script.
Exemple :
Remerciements à vincentmhd, à qui je récupère l'idée initiale.
+5 pts de participation
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.
Contrairement au code de Yanfly, l'event ne se déplace que si la case d'arrivée est dans la zone (donc vous dessinez les zones passables, et non pas les bordures)
Effet : permet qu'un event ait un mouvement aléatoire, tout en restant dans la zone choisie. Si l'event est en déplacement aléatoire, il ne sortira pas de la zone. S'il est en mode 'suit le joueur', alors il ne suivra le joueur que si celui-ci est dans la zone, ou s'il est assez proche de l'event. L'event ne sortira pour autant jamais de la zone (ça permet de faire comme si on semait un montre, en sortant de la zone, mais celui-ci nous voit encore et reste le plus proche possible de vous). Quand on sort de l'aire de poursuite, l'event reprend un déplacement aléatoire.
Utilisation : Code à mettre au dessus de main. Dans la page de l'event concerné, 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)
L'event doit bien sur avoir l'option de déplacement "aléatoire" ("random"), ou bien "suite le jour" ("approach"), et le commentaire est à renouveler sur chaque page de l'event où vous voulez que la limitation prenne effet. Pour la distance où un event continuera à vous suivre, elle est à configurer dans le code même. (je pense qu'il n'est pas nécessaire d'appliquer une distance de poursuite adaptable à chaque event, mais on peut toujours la modifier en appelant le module in-game avec appel de script.
Exemple :
Remerciements à vincentmhd, à qui je récupère l'idée initiale.
- 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
+5 pts de participation
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
Re: Déplacement aléatoire/ Poursuite restreinte
Mar 3 Jan 2012 - 19:24
Ça va me servir, merci
Re: Déplacement aléatoire/ Poursuite restreinte
Mar 3 Jan 2012 - 19:28
Merci beaucoup de ton partage, Tiroflan, il me sera très utile par la suite !
Et si je comprends bien le script :
1) Tu crées une carte
2) Tu dessines une zone de x*x dans laquelle se promènent les PNJs et les animaux
3) Les PNJs et les animaux ne peuvent pas sortir de cette zone, même s'ils suivent le héros
4)Quand à l'autre script, il ne fallait pas dessiner la zone concernée, mais les bordures ?
Et si je comprends bien le script :
1) Tu crées une carte
2) Tu dessines une zone de x*x dans laquelle se promènent les PNJs et les animaux
3) Les PNJs et les animaux ne peuvent pas sortir de cette zone, même s'ils suivent le héros
4)Quand à l'autre script, il ne fallait pas dessiner la zone concernée, mais les bordures ?
- TiroflanMembre
- Nombre de messages : 14
Age : 34
Distinction : aucune
Date d'inscription : 03/01/2012
Re: Déplacement aléatoire/ Poursuite restreinte
Mar 3 Jan 2012 - 19:33
Tout à fait ça XtremeViper !
Mais attention, seuls les events qui ont un commentaire sont concernés, et j'ai mis une seule zone de restriction par event, mais je pense que c'est logique. (alors que j'ai l'impression que l'autre script permet un blocage systématique, quel que soit l'event)
Mais attention, seuls les events qui ont un commentaire sont concernés, et j'ai mis une seule zone de restriction par event, mais je pense que c'est logique. (alors que j'ai l'impression que l'autre script permet un blocage systématique, quel que soit l'event)
- UltimaSasukeMembre
- Nombre de messages : 88
Age : 29
Localisation : France, 05
Distinction : aucune
Date d'inscription : 27/07/2011
Re: Déplacement aléatoire/ Poursuite restreinte
Mar 3 Jan 2012 - 19:35
Effectivement se script à l'air plus facile d'utilisation que le script de Yanfly. Merci du partage =)
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 1:57
C'est normale que chez moi le script est en HTML ?
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 2:35
Chez moi il est normal et fonctionnel, Tatie :\
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 9:26
Ok, problème réglé. Ce post à était écrit en HTML par l'auteur et non en BB code. ET dans mon profil, j'avais l'option :
Autorisé HTML : Sur off. Donc le text 'était brute et non transformé en un truc lisible pour moi.
Autorisé HTML : Sur off. Donc le text 'était brute et non transformé en un truc lisible pour moi.
- AdrezoMembre
- Nombre de messages : 233
Age : 36
Distinction : aucune
Date d'inscription : 29/01/2008
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 9:28
Irzyka-Monos a écrit:C'est normale que chez moi le script est en HTML ?
Chez moi aussi.
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 9:35
Sur cette page, "Toujours autoriser le HTML" -> Oui.
- AdrezoMembre
- Nombre de messages : 233
Age : 36
Distinction : aucune
Date d'inscription : 29/01/2008
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 10:38
T.inky a écrit:Sur cette page, "Toujours autoriser le HTML" -> Oui.
C'est tout bon merci.
- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 11:38
J'avais fait un script trés semblable sous VX (que j'avais appelé AREA plus) . Mais sans la poursuite (bonne idée!) .
Le gros probleme de ton script est que la zone doit absolument etre carrée .
J'avais résolu ce soucis en me basant sur le nom de la zone et pas son numéro . ainsi , je peux faire plusieurs zones avec le mm nom et mon perso peux se promener dans une zone non carrée . Je pense que tu pourrais faire pareil .
Et toujours en passant , ton script ne fonctionnera pas pour la zone 10
Le gros probleme de ton script est que la zone doit absolument etre carrée .
J'avais résolu ce soucis en me basant sur le nom de la zone et pas son numéro . ainsi , je peux faire plusieurs zones avec le mm nom et mon perso peux se promener dans une zone non carrée . Je pense que tu pourrais faire pareil .
Et toujours en passant , ton script ne fonctionnera pas pour la zone 10
- TiroflanMembre
- Nombre de messages : 14
Age : 34
Distinction : aucune
Date d'inscription : 03/01/2012
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 13:16
Euh, si, ça marche totalement pour des zones à plusieurs chiffres et non carrées :O
Pour lire le numéro, j'utilise "split" sur le commentaire, donc le chiffre 10 est conservé tel quel (pas d'espace entre le 1 et le 0)
Le test effectué consiste simplement à voir si tu es dans la zone ou pas, donc aucun souci au niveau de la forme non plus.
Edit : Ah, oui, je pige xD Les zones sont modifiées sous ACE et permettent de faire tout ça, mais bien sur ce n'est pas du tout aussi pratique avec le rgss2, si tu fais la comparaison avec vx.
Désolé pour Irzyka-Monos, comme j'ai collé le post depuis un autre forum, j'ai pris en html, je change ça de suite.
Pour lire le numéro, j'utilise "split" sur le commentaire, donc le chiffre 10 est conservé tel quel (pas d'espace entre le 1 et le 0)
Le test effectué consiste simplement à voir si tu es dans la zone ou pas, donc aucun souci au niveau de la forme non plus.
Edit : Ah, oui, je pige xD Les zones sont modifiées sous ACE et permettent de faire tout ça, mais bien sur ce n'est pas du tout aussi pratique avec le rgss2, si tu fais la comparaison avec vx.
Désolé pour Irzyka-Monos, comme j'ai collé le post depuis un autre forum, j'ai pris en html, je change ça de suite.
- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Re: Déplacement aléatoire/ Poursuite restreinte
Mer 4 Jan 2012 - 13:44
Roooh ... ouais , je viens de voir comment ça marche les zones sous VXace . enormissime . je découvre encore .
- arkobalenoMembre
- Nombre de messages : 24
Distinction : aucune
Date d'inscription : 16/09/2011
Re: Déplacement aléatoire/ Poursuite restreinte
Mar 10 Jan 2012 - 10:31
Je te remercie de ce scripte très utile.
- FanrpgMembre
- Nombre de messages : 16
Distinction : aucune
Date d'inscription : 19/06/2014
Re: Déplacement aléatoire/ Poursuite restreinte
Sam 21 Juin 2014 - 3:58
Il faudrait d'avantage de script utile comme ça, merci il marche nickel ! ^^
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum