RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: [Rmxp] Visible Equipment
MessagePublié: 25 Avr 2009, 22:46 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 24 Juin 2008, 00:00
Messages: 476
Logiciel(s) préféré(s): Scintilla based
Point(s) Fort(s): Rubyismes
Points d'aide: 60/60

Créations :

- [Rmxp] Vocab

- [Rmxp] Visible Equipment

- [Rmxp] Animated Title

- [XP/VX] Cache Extension


Voir ses créations

Visible Equipment


Auteur : Wawower

Dépendance : Database Management

Mise en place : Installer le Database Management puis le script plus en dessous, le tout au-dessus de main et de préférence en dessous des scripts de base.

Lancer une première fois le test de votre projet. Des dossiers "Visible_Weapons Data","Visible_Armors Data", "Exceptions Visible Data" et "Equipments" (ce dernier dans Graphics) sont ainsi crées

Note : Refonte en cours

Explications :
Pour assigner un chara d'equipement à une arme/un équipement, copier coller le template se trouvant respectivement dans "Visible_Weapons Data"/"Visible_Armors Data" puis remplissez les champs

Code: Tout sélectionner
Database::Visible_Armors
id: 5
chara_name: "chapeau"
pos_z: 0
exceptions_id: [1,2,3]


- id : l'id de l'arme/de l'équipment dans la base de donnée,
- chara_name : le nom du chara placé dans "Equipements" qui correspond à cet arme.
- pos_z : la priorité de superposition sur le chara, sachant que l'équipement dont la priorité assignée est la plus grande est placé au dessus des autres. (Des priorités par défaut peuvent-être defini au lignes 10 et 11 du script, évitant ainsi de rentrer toujours les mêmes valeurs.)
- exceptions_id : l'ensemble des id des exceptions renvoyant aux fichiers du dossier.
"Exceptions Visible Data".

Pour gerer une exception, il vous faut remplir copier/coller le template dans "Exceptions Visible Data" :
Code: Tout sélectionner
Database::Visible_Exceptions
id: 1
character: "002-Fighter02"
equipment: "chapeau2"


id : l'id renseigné dans 'exceptions_id' plus haut
character : le nom du character pour lequel il faut cette exception.
equipment : le nom du chara d'equipment se trouvant dans "Equipment" qui va être utilisé dans ce cas.

Script :
Code: Tout sélectionner
#===============================================================================
# *** Visible Equipment
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Auteur  : Wawower
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Ce script permet d'afficher les equipements d'un personnage sur son character.
#===============================================================================
 
  # Coordonnées z par defauts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   weapons_default_z = 1
   armors_default_z = 0
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Création des tables de la database.
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Database.create_table('Visible_Weapons') { |t|
          t.column(:id, :integer)
          t.column(:chara_name, :string)
          t.column(:pos_z, :integer, weapons_default_z)
          t.column(:exceptions_id, :array)
    }
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Database.create_table('Visible_Armors') { |t|
          t.column(:id, :integer)
          t.column(:chara_name, :string)
          t.column(:pos_z, :integer, armors_default_z)
          t.column(:exceptions_id, :array)
    }
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Database.create_table('Visible_Exceptions') { |t|
        t.column(:id, :integer)
        t.column(:character, :string)
        t.column(:equipment, :string)
    }
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
  #==============================================================================
  # ** Game Actor
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # Modifications de la classe Game_Actor qui gére maintenant les characters des
  # equipements à ajouter au character du perso.
  #============================================================================== 
  class Game_Actor
      # Accesseurs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      attr_accessor :sprite_need_update, :equip_chara_names
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # * Aliases des méthodes essentiels dans la gestion des equipements
      # et du character avec ajout de l'appel de la methode refresh_visible_equip.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      alias visible_equip_initialize initialize
      def initialize(*args)
          visible_equip_initialize(*args)
          refresh_visible_equip
        end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       
      alias visible_equip_equip equip
      def equip(*args)
          visible_equip_equip(*args)
          refresh_visible_equip
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
      alias visible_equip_set_graphic set_graphic
      def set_graphic(*args)
          visible_equip_set_graphic(*args)
          refresh_visible_equip       
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # * Game_Actor#refresh_visible_equip
      # ------------------------------
      # Méthode qui répertorie selon les id des equipements les images qui doivent
      # être ajouter au chara du personnage dans l'array : @equip_chara_names.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      def refresh_visible_equip
          @equip_chara_names = []
          data = Database::Visible_Weapons.find {|a| a.id==@weapon_id }
          unless data.nil?
                exceptions = Database::Visible_Exceptions.find_all {  |exception|
                        data.exceptions_id.include?(exception.id)  }
                str = data.chara_name
                except = exceptions.find { |exception|
                        exception.character==@character_name }
                str = except.equipment if !except.nil?
                  @equip_chara_names[data.pos_z] = [] if @equip_chara_names[data.pos_z].nil?
                @equip_chara_names[data.pos_z].push(str)
          end
          [@armor1_id,@armor2_id,@armor3_id,@armor4_id].each { |armor_id|
              data = Database::Visible_Armors.find {|a| a.id==armor_id }
              next if data.nil? or data.id==0
                exceptions = Database::Visible_Exceptions.find_all {  |exception|
                        data.exceptions_id.include?(exception.id)  }
                str = data.chara_name
                except = exceptions.find { |exception|
                        exception.character==@character_name }
                str = except.equipment if !except.nil?
                  @equip_chara_names[data.pos_z] = [] if @equip_chara_names[data.pos_z].nil?
                @equip_chara_names[data.pos_z].push(str)
          }
          @equip_chara_names.compact!
          @sprite_need_update = true
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  end
 
  #==============================================================================
  # ** Game Actors
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # Ajout à la classe Game_Actors d'une méthode qui permet d'dentifier si un
  # character est utilisé par un personnage.
  #============================================================================== 
  class Game_Actors
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      def chara_owned_by_actor(chara_name)
          @data.each {|actor|
              next if actor.nil?
              return actor if actor.character_name==chara_name
          }
          return nil
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  end
 
  #==============================================================================
  # ** Sprite_Character
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # Modifications de la classe Sprite_Character qui gére maintenant le
  # rafraichissement en cas de changement d'équipement
  #============================================================================== 
  class Sprite_Character < RPG::Sprite
      # Alias de l'initialize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      alias visible_equipment_initialize initialize
      def initialize(*args)
            @chara_actor_id = nil
            visible_equipment_initialize(*args)
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # * Sprite_Character#update
      # ------------------------------
      # Redéfinition de la méthode update qui rafraichit maintenant le
      # character du sprite si c'est un character de perso et si au
      # moins un des équipement de celui-ci a changé
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      def update
          super
          bool = false
          bool = $game_actors[@chara_actor_id].sprite_need_update if !@chara_actor_id.nil?
          if bool or @tile_id != @character.tile_id or    # ajout de la condition sur bool
           @character_name != @character.character_name or
           @character_hue != @character.character_hue
                @tile_id = @character.tile_id
                @character_name = @character.character_name
                @character_hue = @character.character_hue
                if @tile_id >= 384
                    self.bitmap = RPG::Cache.tile($game_map.tileset_name,
                      @tile_id, @character.character_hue)
                    self.src_rect.set(0, 0, 32, 32)
                    self.ox = 16
                    self.oy = 32
                    @chara_actor_id = nil
                  else
                    self.bitmap = RPG::Cache.character(@character.character_name,
                      @character.character_hue)
                    @cw = bitmap.width / 4
                    @ch = bitmap.height / 4
                    self.ox = @cw / 2
                    self.oy = @ch
                    actor = $game_actors.chara_owned_by_actor(@character_name)
                    @chara_actor_id = actor.nil? ? nil : actor.id
                    actor.sprite_need_update = false if !actor.nil?
                end
          end
          self.visible = (not @character.transparent)
          if @tile_id == 0
                sx = @character.pattern * @cw
                sy = (@character.direction - 2) / 2 * @ch
                self.src_rect.set(sx, sy, @cw, @ch)
          end
          self.x = @character.screen_x
          self.y = @character.screen_y
          self.z = @character.screen_z(@ch)
          self.opacity = @character.opacity
          self.blend_type = @character.blend_type
          self.bush_depth = @character.bush_depth
          if @character.animation_id != 0
                animation = $data_animations[@character.animation_id]
                animation(animation, true)
                @character.animation_id = 0
          end
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  end
 
  #==============================================================================
  # ** RPG::Cache
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # Modification des méthodes du Cache afin d'afficher les équipements.
  #============================================================================== 
  module RPG; module Cache
      # Création du dossier Equipments dans Graphics ~~~~~~~~~~~~~~~~
      Dir.mkdir("Graphics/Equipments") rescue nil
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # * RPG::Cache.character
      # ------------------------------
      # Reprise de la methode de mise en cache 'load_bitmap' avec ajout de la
      # gestion des équipements blittés.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      def self.character(filename, hue)
          path = "Graphics/Characters/" + filename
          if not @cache.include?(path) or @cache[path].disposed?
              if filename != ""
                    @cache[path] = Bitmap.new(path)
                else
                    @cache[path] = Bitmap.new(32, 32)
              end
          end
          if hue == 0
              bmp = @cache[path]
            else
              key = [path, hue]
              if not @cache.include?(key) or @cache[key].disposed?
                  @cache[key] = @cache[path].clone
                  @cache[key].hue_change(hue)
              end
              bmp = @cache[key]
          end
          actor = $game_actors.chara_owned_by_actor(filename)
          return bmp if actor.nil?
          rect = Rect.new(0,0,bmp.width,bmp.height)
          equip_key = [path, hue, actor.equip_chara_names]
          if not @cache.include?(equip_key) or @cache[equip_key].disposed?
              @cache[equip_key] = bmp.clone
              actor.equip_chara_names.each { |charas| charas.each { |chara|
                    @cache[equip_key].blt(0,0,RPG::Cache.equipment(chara,hue),rect)
              }  }
          end
          return @cache[equip_key]
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # * RPG::Cache.equipment
      # ------------------------------
      # Mode de récuperation des characters des équipements dans leur dossier.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
      def self.equipment(filename, hue)
          self.load_bitmap("Graphics/Equipments/", filename, hue)
      end
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  end; end


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728