[VX] Spawner d'évents

Voir le sujet précédent Voir le sujet suivant Aller en bas

[VX] Spawner d'évents

Message par Zangther le Lun 25 Juil - 19:28

Salut tout le monde.

Voila mon dernier petit script, il s'agit tout simplement d'un système permettant de copier des évents et de les faire apparaitre sur la map actuelle.
Attention, si vous changez de map les évents ainsi créés seront perdus.

Niveau instructions c'est indiqué dans le script : utilisez un appel de script avec la commande indiquée.

Code:
#____________________________________________________________________________________________
#
# ** Générateur de copie d'évènements
# Par Zangther
#------------------------------------------------------------------------------
#  Via la commande : spawn_event(...) vous allez pouvoir dupliquer des évents sur une map.
# Voici le prototype de la fonction :
#                  spawn_event(id_event, coord = [], id_map = @map_id)
#                        - id_event      : l'id de l'évent à copier
#                        - coord          : tableau de longeur 2 contenant les nouvelles coordonées de l'évent,
#                                                      par défaut se sont les coord de base de l'évent sur sa map d'origine
#                                                      mettez rien ou nil pour avoir un placement par défaut.
#                        - id_map      :  l'id de la map d'origine de l'évent à copier. Par défaut ce sera la map actuelle.
#
#      Exemples d'appels :
#            spawn_event(5,[15,10])      => Copie de l'évent 5 de la map actuelle aux coordonées ( 15 ; 10 )
#            spawn_event(7)                    => Copie de l'évent 7 de la map actuelle aux coordonées par défaut de l'évent
#            spawn_event(10, nil, 2)                    => Copie de l'évent 7 de la map 2 aux coordonées par défaut de l'évent
#____________________________________________________________________________________________
#
#  Ce script modifie les classes suivantes :
#                            Game_Map
#                            Game_Interpreter
#                            Spriteset_Map
#                            Scene_Map
#                           
#  Ce script crée la classe suivante :
#                            Game_Event_Spawn < Game_Event
#____________________________________________________________________________________________


#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Cette classe gère les cartes du jeu. Elle inclus le défilement et la définition de la passabilité.
# Cette classe est instanciée dans la variable $game_map.
#
# Methodes aliasées :
#                  setup                      : Ajout de l'initialisation de @event_spawn
#                  update_events      : Ajout de l'update des évents spawnés 
#                  refresh                    : Ajout du refesh des évents spawnés
# Methodes créées :
#                  get_spawn_id      : Génération de l'id du futur évent
#                  spawn_event        : Génération d'une copie d'un évent sur la map
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Attributs publics de la classe
  #--------------------------------------------------------------------------
  attr_reader  :events_spawn    # Tableau contenant tous les évents générés
  #--------------------------------------------------------------------------
  # * Methodes aliassées
  #--------------------------------------------------------------------------
  alias real_setup                      setup
  alias real_update_events    update_events
  alias real_refresh                  refresh
  alias real_events_xy              events_xy
  #--------------------------------------------------------------------------
  # * Setup
  #    map_id : Identifiant numérique de la map
  # Methode aliasée : real_setup
  #--------------------------------------------------------------------------
  def setup(map_id)
    real_setup(map_id)
    @events_spawn = {}
  end
  #--------------------------------------------------------------------------
  # * Update Events
  # Methode aliasée : real_update_events
  #--------------------------------------------------------------------------
  def update_events
    real_update_events
    for event in @events_spawn.values
      event.update
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  # Methode aliasée : real_refresh
  #--------------------------------------------------------------------------
  def refresh
    if @map_id > 0
      for event in @events_spawn.values
        event.refresh
      end
    end
    real_refresh
  end
  #--------------------------------------------------------------------------
  # * Get array of event at designated coordinates
  #    x : x-coordinate
  #    y : y-coordinate
  # Methode aliasée : real_events_xy
  #--------------------------------------------------------------------------
  def events_xy(x, y)
    result = []
    for event in @events_spawn.values
      result.push(event) if event.pos?(x, y)
    end
    return result + real_events_xy(x, y)
  end
  #--------------------------------------------------------------------------
  # * Get Spawn ID
  # Récupère l'id du prochain évent à spawner
  #--------------------------------------------------------------------------
  def get_spawn_id
    if @events_spawn.empty?
      return 0
    else
      return @events_spawn.keys.size
    end
  end
  #--------------------------------------------------------------------------
  # * Spawn Events
  #      id_event : Identififant numérique de l'évent
  #      coord : Tableau contenant les coordonées x et y du futur évent
  #      id_map : Identififant numérique de la map
  #--------------------------------------------------------------------------
  def spawn_event(id_event, coord = [], id_map = @map_id)
    map = load_data(sprintf("Data/Map%03d.rvdata", id_map))
    new_id = get_spawn_id
    @events_spawn[new_id] = Game_Event_Spawn.new(id_event, map.events[id_event], new_id)
    if coord != nil
      if coord[0] != nil and coord[1] != nil
      @events_spawn[new_id].moveto(coord[0], coord[1])
      end
    end
    $scene.create_new_sprite
  end
 
end # Fin Game_Map

#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  Un interpreteur pour executer les commandes d'évents. Cette classe est utilisée au sein
# des classes Game_Map, Game_Troop, et Game_Event.
#
# Methodes aliasées :
#                  setup                                      : Ajout de l'initialisation de @spawn_id
#                  setup_starting_event          : Ajout du setup des évents spawnés
#                  command_end                    : Ajout de l'unlock de la direction pour les évents spawnés
# Methodes créées :
#                  spawn_event      : Raccourci pour atteindre $game_map.spawn_event
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Methodes aliassées
  #--------------------------------------------------------------------------
  alias real_setup                                  setup
  alias real_setup_starting_event      setup_starting_event
  alias real_command_end                  command_end
  #--------------------------------------------------------------------------
  # * Event Setup
  #    list    : list of event commands
  #    event_id : event ID
  # Methode aliasée : real_setup
  #--------------------------------------------------------------------------
  def setup(list, event_id = 0, spawn_id = -1)
    real_setup(list, event_id)
    @spawn_id = spawn_id
  end
  #--------------------------------------------------------------------------
  # * Starting Event Setup
  # Methode aliasée : real_setup_starting_event
  #--------------------------------------------------------------------------
  def setup_starting_event
    for event in $game_map.events_spawn.values  # Map event
      if event.starting                  # If a starting event is found
        event.clear_starting              # Clear starting flag
        setup(event.list, event.id, event.spawn_id)      # Set up event
        return
      end
    end
    real_setup_starting_event
  end
  #--------------------------------------------------------------------------
  # * End Event
  # Methode aliasée : real_command_end
  #--------------------------------------------------------------------------
  def command_end
    real_command_end
    if @main and @spawn_id >= 0      # If main map event
      $game_map.events_spawn[@spawn_id].unlock    # Clear spawn event lock
    end
  end
  #--------------------------------------------------------------------------
  # * Spawn Event
  # Raccourci pour atteindre la methode du même nom
  #  dans $game_map
  #--------------------------------------------------------------------------
  def spawn_event(id_event, coord = [], id_map = 0)
    if id_map > 0
      $game_map.spawn_event(id_event, coord, id_map)
    else
      $game_map.spawn_event(id_event, coord)
    end
  end
   
end # End Game_Interpreter

#==============================================================================
# ** Game_Event_Spawn
#------------------------------------------------------------------------------
#  Classe fille de Game_Event, permet de leur attribuer un ID de spawn en plus des caractèristiques
# de base d'un évent.
#==============================================================================

class Game_Event_Spawn < Game_Event
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader  :spawn_id                  # ID de spawn de l'évent
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    map_id : map ID
  #    event  : event (RPG::Event)
  #    spawn_id  : nombre entier
  #--------------------------------------------------------------------------
  def initialize(map_id, event, spawn_id)
    @spawn_id = spawn_id
    super(map_id, event)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    check_event_trigger_auto                    # Check autorun event
    if @interpreter != nil                      # Now parallel processing?
      unless @interpreter.running?              # Not running
        @interpreter.setup(@list, @event.id, @spawn_id)    # Set up
      end
      @interpreter.update                      # Update interpreter
    end
  end
end

#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  Cette classe amène ensemble les This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#
# Methodes aliasées :
#                  create_characters              : Ajout de la création de l'apparence des évents spawnés
#                  dispose_characters            : Ajout de l'initialisation de @spawn_id
#                  update_characters              : Ajout de l'initialisation de @spawn_id
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Methodes aliassées
  #--------------------------------------------------------------------------
  alias real_create_characters create_characters
  alias real_dispose_characters dispose_characters
  alias real_update_characters update_characters
  #--------------------------------------------------------------------------
  # * Create Character Sprite
  # Methode aliasée : real_create_characters
  #--------------------------------------------------------------------------
  def create_characters
    real_create_characters
    @spawn_events_sprites = []
    for event in $game_map.events_spawn.values
      sprite = Sprite_Character.new(@viewport1, event)
      @spawn_events_sprites.push(sprite)
    end
  end
  #--------------------------------------------------------------------------
  # * Dispose of Character Sprite
  # Methode aliasée : real_dispose_characters
  #--------------------------------------------------------------------------
  def dispose_characters
    real_dispose_characters
    for sprite in @spawn_events_sprites
      sprite.dispose
    end
  end
  #--------------------------------------------------------------------------
  # * Update Character Sprite
  # Methode aliasée : real_update_characters
  #--------------------------------------------------------------------------
  def update_characters
    real_update_characters
    for sprite in @spawn_events_sprites
      sprite.update
    end
  end
 
end # Fin Spriteset_Map

#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs the map screen processing.
# Methodes créées :
#                  create_new_sprite      : Recrée les sprites pour la map.
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # * Renew Character Sprite
  #--------------------------------------------------------------------------
  def create_new_sprite
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
  end
 
end # Fin Scene_Map

Amusez vous bien.

Zangther
Villageois Lv.11
Villageois Lv.11

Messages : 128
Age : 24

Fiche
Palmarès: 1
Spécialité: N/A
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par garsim le Mar 26 Juil - 7:47

Merci pour le partage. Smile
Pourrais-tu cependant préciser dans ton post si c'est un script pour rmXP ou pour rmVX ? Bien que j'ai quelques toutes petites bases en ruby/RGSS, je n'ai pas trouvé de quelle version de RM il s'agissait.

_________________
Plop(py).

garsim
Régent Lv.Zero
Régent Lv.Zero

Messages : 893
Age : 25

Fiche
Palmarès: 3
Spécialité: Rédaction, programmation (un peu)
Avertissements: Aucun

Voir le profil de l'utilisateur http://landigo.over-blog.com

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Slup le Mar 26 Juil - 9:17

C'est pour Vx garsym. ^^

Slup
User Maudit TrizoPink Lv.23
User Maudit TrizoPink Lv.23

Messages : 1612
Age : 20

Fiche
Palmarès: 4
Spécialité:
Avertissements: Aucun

Voir le profil de l'utilisateur http://www.rpg-maker.detente.com

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par garsim le Mar 26 Juil - 10:11

Ah, ok. Je vais le préciser dans le premier post de Zangther alors.
(au passage j'ai édité mon pseudo depuis un moment...)

_________________
Plop(py).

garsim
Régent Lv.Zero
Régent Lv.Zero

Messages : 893
Age : 25

Fiche
Palmarès: 3
Spécialité: Rédaction, programmation (un peu)
Avertissements: Aucun

Voir le profil de l'utilisateur http://landigo.over-blog.com

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Slup le Mar 26 Juil - 11:10

(C'est pour perdurer la pryvate Joke ! Ni!).

Slup
User Maudit TrizoPink Lv.23
User Maudit TrizoPink Lv.23

Messages : 1612
Age : 20

Fiche
Palmarès: 4
Spécialité:
Avertissements: Aucun

Voir le profil de l'utilisateur http://www.rpg-maker.detente.com

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Zangther le Mar 26 Juil - 16:15

AH okay pas de problème, j'y penserais la prochaine fois.

Zangther
Villageois Lv.11
Villageois Lv.11

Messages : 128
Age : 24

Fiche
Palmarès: 1
Spécialité: N/A
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Metroid_Prime le Mer 27 Juil - 11:19

Désolé mais j'ai pas du tout compris l'utilité du script Oo. Tu peux ré expliquer pour que mon maigre cerveau puisse comprendre Laughing

Metroid_Prime
Noobzor Lv.5
Noobzor Lv.5

Messages : 34

Fiche
Palmarès: Aucun
Spécialité: N/A
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Siegfried le Mer 27 Juil - 11:54

Imagine que tu es sur une map avec des monstres qui se dupliquent.
Tu crées un event seulement, puis tu le dupliques.

C'est du bon boulot, quand j'avais essayé de créer des events en script, j'avais oublié la moitié des précautions prises ici (notamment attribuer un ID ou régler le sprite de l'event pour qu'il subisse les brouillards).

Siegfried
Noobzor Lv.5
Noobzor Lv.5

Messages : 32
Age : 29

Fiche
Palmarès: Aucun
Spécialité: N/A
Avertissements: Aucun

Voir le profil de l'utilisateur http://amk.servhome.org

Revenir en haut Aller en bas

Re: [VX] Spawner d'évents

Message par Contenu sponsorisé Aujourd'hui à 6:00


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum