Partagez
Aller en bas
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Apprendre un sort via un objet Empty Apprendre un sort via un objet

le Sam 4 Sep 2010 - 0:36
Apprendre un sort via un objet


Auteur : Blockade
Date : 04/09/2010
Niveau : Facile
Version : 1.0

Marre de passer 3 ans à configurer les évents commun pour apprendre un sort à chaque héros qu'on peut contrôler ? Ce script est fait pour vous ! Il permet une configuration rapide dans la base de donnée, et affiche une fenêtre confirmant l'apprentissage du sort (optionnel).

Description du script :
- Permet d'apprendre à un héros un sort sans passer par en évent commun
- Affichage optionnel d'une petite fenêtre indiquant que le sort à été appris.


Screens :
Apprendre un sort via un objet 4287420415080_appris
Apprendre un sort via un objet 3453482547207_deja_appris


­S­cript :
Code:
#===============================================================================
# ▼ [VX] Apprendre des sorts via les objets
#------------------------------------------------------------------------
# Blockade Script Library - Apprendre des sorts via les objets
# Date : 04/09/2010
# Niveau : Facile
# Version : 1.0
# Forum d'origine : http://rpg-maker-vx.bbactif.com/forum.htm
#
#  Marre de passer 3 ans à configurer les évents commun pour apprendre un sort à chaque
# héros qu'on peut contrôler ? Ce script est fait pour vous ! Il permet une configuration rapide
# dans la base de donnée, et affiche une fenêtre confirmant l'apprentissage du sort (optionnel).
#=======================================================================
# ▼ Mises à jour
# -------------------------------------------------------------------------
# ¤ 04/09/2010 -  Version 1.0 - Création du script
#=======================================================================
# ▼ Fonctionnalités
# -------------------------------------------------------------------------
#  - Permet d'apprendre à un héros un sort sans passer par en évent commun
#  - Affichage optionnel d'une petite fenêtre indiquant que le sort à été appris.
#=======================================================================
# ▼ Installation
# --------------------------------------------------------------------------
#  Placez le au dessus de main, et en dessous de tout les scripts modifiant l'inventaire
# ou autres.
#=======================================================================
# ▼ Utilisation
# --------------------------------------------------------------------------
#  Il suffit de mettre dans la note de votre objet :
#  <sort appris x>
# Où x est l'ID du sort que vous voulez apprendre. Jetez un coup d'œil à la configuration
# du module pour personnaliser la fenêtre qui s'affiche.
#=======================================================================
# ▼ Alias et compatibilité
# --------------------------------------------------------------------------
# ► Alias méthodes  :
#  > Scene_Item : start
#  > Scene_Item : update
#  > Scene_Item : determine_target
#  > Scene_Item : terminate
#===============================================================================
module BSL
  module LSO
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # AFFICHER_FENETRE - Afficher la fenêtre de confirmation
    #-------------------------------------------------
    # Niveau : Facile
    # Mettez true si vous voulez faire apparaitre une fenêtre qui confirmera l'apprentissage du
    # sort. Si vous n'en voulez pas mettez juste false.
    #  /!\ Attention : Il est inutile de modifier les autres constantes si vous n'utilisez pas la
    # fenêtre.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    AFFICHER_FENETRE = true
   
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # SOUND_X - Le son quand un sort est appris
    #-------------------------------------------------
    # Niveau : Facile
    # Vous pouvez modifier le son, qui est joué lorsqu'un nouveau sort est appris, ainsi
    # que son tempo, et son volume.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Le chemin d'accès au son (Défaut : Audio/SE/Chime2)
    SOUND_PATH = "Audio/SE/Chime2"
    # Le volume du son joué (Défaut : 80)
    SOUND_VOLUME = 80
    # Le tempo du son joué (Défaut : 100)
    SOUND_TEMPO = 100
   
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # TAILLE_FENETRE_X - La taille de la fenêtre
    #-------------------------------------------------
    # Niveau : Moyen
    # La fenêtre s'adapte automatiquement à la taille du texte. Si par hasard vous trouvez
    # qu'elle est trop petite vous pouvez modifier les valeurs suivantes.
    # La formule pour la taille de la fenêtre est :
    #  (nombre de caractères * TAILLE_FENETRE_GROS) + TAILLE_FENETRE_PETIT
    # TAILLE_FENETRE_GROS modifiera clairement la taille, tandis que
    # TAILLE_FENETRE_PETIT permettra un réglage plus précis.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Modifier cette valeur pour un réglage grossier (Défaut : 9)
    TAILLE_FENETRE_GROS = 9
    # Modifier cette valeur pour un réglage précis (Défaut : 10)
    TAILLE_FENETRE_PETIT = 10
   
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # TIME_WAIT - Le temps d'affichage de la fenêtre
    #-------------------------------------------------
    # Niveau : Facile
    # C'est le temps en frame (rapel : 60 frames = 1 seconde), que la fenêtre restera
    # affichée. Le décompte se fait quand la fenêtre est pleinement affichée, et donc
    # ne tiens pas en compte l'animation de transparence. Quand il est fini, l'animation
    # de disparition se met en place.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Le temps d'affichage de la fenêtre (Défaut : 60)
    TIME_WAIT = 60
   
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # TEXT_X - Les textes affichés
    #-------------------------------------------------
    # Niveau : Facile
    # Ce sont les textes affichés dans la fenêtre. Vous pouvez utilisez des tag particuliers
    # pour faire apparaitre certaines données :
    #    /cible : affiche le nom du héros ciblé par l'objet
    #    /sort : affiche le nom du sort que l'objet apprend
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Texte qui s'affiche si la cible à appris le sort (Défaut : "/cible à appris /sort !")
    TEXT_APPRIS = "/cible à appris /sort !"
    # Texte qui s'affiche si la cible à déjà appris le sort (Défaut : "/cible connaît déjà /sort.")
    TEXT_DEJA_APPRIS = "/cible connaît déjà /sort."
   
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # VITESSE_TRANSPARENCE - La vitesse de l'appartion/disparition de la fênetre
    #-------------------------------------------------
    # Niveau : Facile
    # Pour l'affichage de la fenêtre, il part de 0, puis ajoute VITESSE_TRANSPARENCE
    # toute les frames. Une fois arrivé à 255 ou plus, il s'arrête et la fenêtre est affichée.
    # Alors le compte à rebours commence (TIME_WAIT), et à la fin ce celui-ci il retire
    # VITESSE_TRANSPARENCE à 255, et une fois arrivé à 0 la fenêtre à disparu.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # La vitesse d'affichage (Défaut : 15)
    VITESSE_TRANSPARENCE = 15
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # TAG_X
    #-------------------------------------------------
    # /!\ Ne touchez qu'a cette section si vous êtes familiers avec les regxp
    # Niveau : Avancé
    # Ici vous pourrez changer les tags qui récupèrent les données dans la partie note
    # de l'armure. Je vous déconseille vivement de modifier cette partie.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Tag pour détecter que c'est un objet qui apprend un sort. (Défaut :  /<(?:sort appris)[ ]*(\d+)>/i)
    TAG_SORT =  /<(?:sort appris)[ ]*(\d+)>/i
  end
end

#==============================================================================
# ** Scene_Item
#------------------------------------------------------------------------------
#  Cette class gère le menu d'inventaire.
#==============================================================================
class Scene_Item < Scene_Base
  include BSL::LSO

  #--------------------------------------------------------------------------
  # * alias_method : start
  #--------------------------------------------------------------------------
  alias bsl_lso_start start
  def start
    @info_skill_window = Window_InfoSkill_LSO.new
    bsl_lso_start
  end

  #--------------------------------------------------------------------------
  # * alias_method : terminate
  #--------------------------------------------------------------------------
  alias bsl_lso_terminate terminate
  def terminate
      bsl_lso_terminate
      @info_skill_window.dispose
  end

  #--------------------------------------------------------------------------
  # * alias_method : update
  #--------------------------------------------------------------------------
  alias bsl_lso_update update
  def update
    if @info_skill_window.visible && AFFICHER_FENETRE # Si on décide d'afficher la fenêtre et que le sort est appris
      @info_skill_window.update
      @timer -= 1 unless @timer.nil?
      if @info_skill_window.opacity != 255 && @timer.nil?
        @info_skill_window.opacity += VITESSE_TRANSPARENCE
        @info_skill_window.contents_opacity  += VITESSE_TRANSPARENCE
        @timer = TIME_WAIT if @info_skill_window.opacity == 255
      end
      if @info_skill_window.opacity != 0 && !@timer.nil? && @timer < 0
        @info_skill_window.opacity -= VITESSE_TRANSPARENCE
        @info_skill_window.contents_opacity  -= VITESSE_TRANSPARENCE
        if @info_skill_window.opacity == 0
          @info_skill_window.visible = false
          @timer = nil
        end
      end
    else # Sinon on update normalement.
    bsl_lso_update
    end
  end
 
  #--------------------------------------------------------------------------
  # * alias_method : determine_target
  #--------------------------------------------------------------------------
  alias bsl_lso_determine_target determine_target
  def determine_target
    #Si l'item apprend un sort
    if @item.id_skill != 0
      target = $game_party.members[@target_window.index]
      sort = $data_skills[@item.id_skill]
      unless target.skills.include?(sort) # S'il ne connait déjà pas le sort
        $game_party.consume_item(@item)
        @item_window.draw_item(@item_window.index)
        target.learn_skill(@item.id_skill)
        text = TEXT_APPRIS
        Audio.se_play(SOUND_PATH, SOUND_VOLUME, SOUND_TEMPO)
      else
        text = TEXT_DEJA_APPRIS
        Sound.play_buzzer
      end
      # On affiche le texte si on affiche la fenêtre
      if AFFICHER_FENETRE
        text = text.sub("/cible",target.name)
        text = text.sub("/sort",sort.name)
        @info_skill_window.width = (text.length * TAILLE_FENETRE_GROS) + TAILLE_FENETRE_PETIT
        @info_skill_window.create_contents
        @info_skill_window.set_text(text)
        @info_skill_window.visible = true
      end
    else
      bsl_lso_determine_target
    end #end alias
  end # End determine_target
end # End Class


#==============================================================================
# **Window_InfoSkill_LSO
#------------------------------------------------------------------------------
# Gère la fenêtre d'information d'apprentissage du sort.
#==============================================================================
class Window_InfoSkill_LSO < Window_Base
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0,0,300,56)
    self.x = (Graphics.width - self.width) / 2
    self.y = (Graphics.height - self.height) / 2
    self.visible = false
    self.opacity = 0
    self.contents_opacity  =0
    self.z = 100000
  end
  #--------------------------------------------------------------------------
  # * Affiche du texte dans la fenêtre, en centré
  #--------------------------------------------------------------------------
  def set_text(text)
    self.contents.draw_text(0,0,contents.width,WLH,text,1)
  end
end

#==============================================================================
# **RPG::Item
#------------------------------------------------------------------------------
# Gère toute la BBD, les objets en particuliers
#==============================================================================
  class RPG::Item
    include BSL::LSO
  #--------------------------------------------------------------------------
  # * Renvoie l'ID du sort appris
  #--------------------------------------------------------------------------
  def id_skill
    id_sort = 0
    @note.split(/[\r\n]+/).each { |line|
      case line
        when TAG_SORT
          id_sort = $1.to_i
      end}
      return id_sort
    end
  end

Installation :
Placez le au dessus de main, et en dessous de tout les scripts modifiant l'inventaire ou autres.

Utilisation :
Code:
Il suffit de mettre dans la note de votre objet :
#  <sort appris x>
# Où x est l'ID du sort que vous voulez apprendre. Jetez un coup d'œil à la configuration
# du module pour personnaliser la fenêtre qui s'affiche.

Enjoy =)


Dernière édition par Blockade le Sam 4 Sep 2010 - 11:46, édité 1 fois
Shadow of Life
Shadow of Life
Membre

Nombre de messages : 870
Age : 23
Localisation : Joyeux. Comment ça c'est pas la bonne case ?
Distinction : Artiste de la flagornerie.
Porte parole du Ô grand Voilà voilà.
Président du club des masochistes du forum
Fake Gentleman

Soumis ^^
Date d'inscription : 13/09/2009

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 11:15
Wahooo !

Et personne ne l'a vu celui-là ? Oo

C'est un petit bijou !

Si il marche bien évidemment ...

Merci pour ce script Blockade ! =D
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 28
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 11:39
très joli p'tit script
bien jouer Blockade
mais j'ai trouver un bug^^
Blocade a écrit:
Code:
  #--------------------------------------------------------------------------
  # * alias_method : terminate
  #--------------------------------------------------------------------------
  alias bsl_lso_terminate terminate
  def terminate
      @info_skill_window.dispose
  end

tu as oublier de mettre ton alias dans la méthode
Code:
  #--------------------------------------------------------------------------
  # * alias_method : terminate
  #--------------------------------------------------------------------------
  alias bsl_lso_terminate terminate
  def terminate
      bsl_lso_terminat
      @info_skill_window.dispose
  end
comme ça c'est pas mieux? ^^
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 11:44
Oh m***e la c***e xD
Merci ! =)
Jess
Jess
Staffeux retraité

Nombre de messages : 855
Age : 28
Localisation : Ma drums ou mon ordi !
Distinction : Dieu de Kipatord


Date d'inscription : 04/05/2008

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 12:15
Bah justement je sais pas si tu as testé Kipatord au temps où la demo était encore dispo, mais j'ai eu beaucoup de joueurs/testeurs qui m'ont rapporté des bugs par apport au système d'apprentissage de compétence.

Parce que c'est vrai qu'à la longue, tout configurer soi-même ça plombe grave le temps et le projet au final ! Donc merci beaucoup pour cette création et son partage ! S'il était arrivé plus tôt j'aurais déjà fini mon projet si ça s'trouve. XD

Merci Wink
Black'
Black'
Membre

Nombre de messages : 351
Localisation : Far, far away
Distinction : aucune
Date d'inscription : 19/04/2010

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 13:00
Superbe script !! Justement ce qu'il fallait à Kirby !! Merci du partage,
Skillo
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 30
Localisation : Rennes
Distinction : J'aime ce gars :P
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' Very Happy]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Sam 4 Sep 2010 - 22:45
J'adore c'est vraiment pratique et ça me fais pensé qu'un jour faudrait que j'apprenne a faire ce genre d'expression :

@note.split(/[\r\n]+/).each { |line|
case line
when TAG_SORT
id_sort = $1.to_i
end}

Car avec les notes on peut faire vraiment plein de choses.
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Apprendre un sort via un objet Empty Re: Apprendre un sort via un objet

le Dim 5 Sep 2010 - 14:58
Ouais mais y'a plus simple pour récupérer les infos de la note ! (Regarde dans mon script d'invocations v2 par exemple !) Mais ca marche que pour récuperer une info/ligne, après ca deviens le bordel.

Sinon pour apprendre les regxp j'ai ca qui traine dans mes marques-pages :

http://rpgmakervx.1fr1.net/problemes-resolus-et-problemes-inactifs-f53/résolu-aide-pour-comprendre-ruby-t7668.htm

J'ai appris comme ca et en regardant les script de KGC et Yanfly =) Bon courage !
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum