Partagez
Aller en bas
Tiroflan
Tiroflan
Membre

Nombre de messages : 14
Age : 29
Distinction : aucune
Date d'inscription : 03/01/2012

Déplacement aléatoire/ Poursuite restreinte Empty Déplacement aléatoire/ Poursuite restreinte

le 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é :
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 :
Déplacement aléatoire/ Poursuite restreinte Sans_t12

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



Dernière édition par Tiroflan le Mer 4 Jan 2012 - 13:20, édité 1 fois
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
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
https://www.rpgmakervx-fr.com/

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mar 3 Jan 2012 - 19:24
Ça va me servir, merci Smile
Ewaldar
Ewaldar
Membre

Nombre de messages : 1387
Age : 26
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le 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 ?
Tiroflan
Tiroflan
Membre

Nombre de messages : 14
Age : 29
Distinction : aucune
Date d'inscription : 03/01/2012

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le 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)
UltimaSasuke
UltimaSasuke
Membre

Nombre de messages : 88
Age : 24
Localisation : France, 05
Distinction : aucune
Date d'inscription : 27/07/2011

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mar 3 Jan 2012 - 19:35
Effectivement se script à l'air plus facile d'utilisation que le script de Yanfly. Merci du partage =)
Irzyka-Monos
Irzyka-Monos
Membre

Nombre de messages : 440
Age : 35
Localisation : Reims (51)
Distinction : aucune
Date d'inscription : 11/01/2008
http://offgame.org/site/

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 1:57
C'est normale que chez moi le script est en HTML ?
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
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
https://www.rpgmakervx-fr.com/

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 2:35
Chez moi il est normal et fonctionnel, Tatie :\
Irzyka-Monos
Irzyka-Monos
Membre

Nombre de messages : 440
Age : 35
Localisation : Reims (51)
Distinction : aucune
Date d'inscription : 11/01/2008
http://offgame.org/site/

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le 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.

avatar
Adrezo
Membre

Nombre de messages : 233
Age : 31
Distinction : aucune
Date d'inscription : 29/01/2008

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 9:28
@Irzyka-Monos a écrit:C'est normale que chez moi le script est en HTML ?

Chez moi aussi.
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
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
https://www.rpgmakervx-fr.com/

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 9:35
Sur cette page, "Toujours autoriser le HTML" -> Oui. Wink
avatar
Adrezo
Membre

Nombre de messages : 233
Age : 31
Distinction : aucune
Date d'inscription : 29/01/2008

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 10:38
T.inky a écrit:Sur cette page, "Toujours autoriser le HTML" -> Oui. Wink

C'est tout bon merci.
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le 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 Wink
Tiroflan
Tiroflan
Membre

Nombre de messages : 14
Age : 29
Distinction : aucune
Date d'inscription : 03/01/2012

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le 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.
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mer 4 Jan 2012 - 13:44
Roooh ... ouais , je viens de voir comment ça marche les zones sous VXace . enormissime . je découvre encore .
arkobaleno
arkobaleno
Membre

Nombre de messages : 24
Distinction : aucune
Date d'inscription : 16/09/2011

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Mar 10 Jan 2012 - 10:31
Je te remercie de ce scripte très utile.
Fanrpg
Fanrpg
Membre

Nombre de messages : 16
Distinction : aucune
Date d'inscription : 19/06/2014

Déplacement aléatoire/ Poursuite restreinte Empty Re: Déplacement aléatoire/ Poursuite restreinte

le Sam 21 Juin 2014 - 3:58
Il faudrait d'avantage de script utile comme ça, merci il marche nickel ! ^^
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum