Partagez
Aller en bas
Naasmar
Membre

Nombre de messages : 185
Age : 22
Distinction : aucune
Date d'inscription : 15/03/2008

Petit problème...

le Dim 12 Avr 2009 - 15:47
Bonjour ! J'ai un problème avec le script de ASHKA... enfin, plutôt comment mettre les ressources :

@ASHKA a écrit:Nom : Competences via accessoires
Auteur : ASHKA
Info : Ce script est à la fois une mise à jour et un regroupement de mes scripts "Cristaux de competences".

Au programme :
- Pas de bugs ( enfin, j'espere ... Sad ).
- Plus de possibilité de configuration.
- Peu de risque d'incompatibilité.
- Deux scripts en un !!

Spoiler:
Code:
###################################
#
#      Competences via accessoires
#                      ( Version 2.0 )
#
###################################
=begin        MODE D'EMPLOI
Ce script est à la fois une mise à jour et un regroupement des scripts :
- "Accessoires permettant d'acquerir des comptences"
- "Accessoires permettant d'utiliser des competences"
Dans le premier, à l'instar de FF9, les competences etaient toujours utilisables
même apres avoir retiré l'accessoire.
Dans le second, à l'instar de FF7 ( matéria ), les competences n'etaient plus utilisables
apres avoir retiré l'accessoire.
Dans ce script, il est possible d'avoir des accessoires des deux types.
Par defaut, les accessoires sont de type "FF9".
Pour avoir un accessoires de type "FF7", il suffit d'inscrire      USE_SLT      dans la note.
Les accessoires de type "FF7" doivent etre des exemplaires uniques !!
( Pour en avoir plusieurs identiques, créez en plusieurs dans la base de donnée )
Pour le reste, les deux types d'accessoires se configurent de la même façon.
L'experience accumulé par les accessoires depend des ennemis rencontrés.
Pour determiner le montant d'experience donné par un monstre, il suffit d'inscrire :
#        PSA=2      ( tout collé ) dans la note ( il donnera ici deux points ).
=end
###################################
module HK_skillacc
# Nom donné aux points d'experience pour accessoires.
  Name = "PC"
# Indiquer ici le montant de PSA par defaut ( si rien n'est indiqué dans la base de donnée )
# A noter : mettre PSA=0 dans la note n'entraine pas l'utilisation de la valeur par defaut !!
Defaut_PSA = 2
# Configurer ici les differents accessoires qui permettent d'obtenir des competences.
#                ID ACC  EXP/ID skill ...    EXP/ID skill
  Tab_skill = { 32 => [[10, 59], [25, 60], [50, 61], [100, 62]], 
                        33 => [[0, 63], [150, 64], [200, 65], [250, 66]],
# L'accessoire 33 offre directement 1 competences ( mais chez moi, il est de type USE_SLT )
                        34 => [[50, 67], [100, 68], [150, 69], [200, 70]],
                        35 => [[250, 71], [500, 72]]
                        }
# Inscrivez ici le message qui apparaitra à la fin des combats
  Battle_message = "Vous recevez" # la suite est le nombre et le nom des PSA obtenu
# Emplacement X/Y des informations complementaires de l'option "Status"
  Coord_win = [290, 305]
# Mettre sur "true" si vous voulez une barre pour indiquer l'exp plutôt qu'un simple affichage
  Barre = false # reglage des couleurs à la ligne 260
# Mettre sur "true" si vous voulez des icones pour indiquer le niveau plutôt qu'un simple affichage
  Icone = false
# Indiquez ici le nom du fichier où se trouve les icones
  Nom_icone = "etoile" # Repertoire system
end                              # Modif in script "Game_Actor" methode "skills" !!!
###################################
class String
  def decoupe
    bloc = []
    self.split(/[\r\n]+/).each { |line| bloc.push(line) }
    return bloc
  end
end
###################################
class Game_Troop < Game_Unit
  def total_psa
    num = 0
    for enemy in dead_members
      num += enemy.psa unless enemy.hidden
    end
    return num
  end
end
###################################
class Game_Party < Game_Unit
  attr_accessor :skillacc_exp
  alias hk_skillacc_init initialize
  def initialize
    hk_skillacc_init
    @skillacc_exp = Hash.new(0)
  end
end
###################################
class Game_Enemy < Game_Battler
  def psa
    return enemy.psa
  end
end
###################################
class Game_Actor < Game_Battler
  attr_accessor :skillacc_exp
  alias hk_skillacc_setup setup
  def setup(actor_id)
    @skillacc_exp = {}
    hk_skillacc_setup(actor_id)
    if @armor4_id != 0
      acc = $data_armors[@armor4_id]
      @skillacc_exp[@armor4_id] = 0 if acc.acquisition?
      if acc.utilisation?
        $game_party.skillacc_exp[@armor4_id] = 0
      end
    end
  end
  def add_skillacc
    result = []
    for id in @skillacc_exp.keys
      result |= get_skillacc(id, "skill", false)
    end
    acc = $data_armors[@armor4_id]
    if @armor4_id != 0 and acc.utilisation?
      result |= get_skillacc(@armor4_id, "skill", true)
    end
    return result
  end
  def get_skillacc(acc_id, type, use)
    if use
      exp = $game_party.skillacc_exp[acc_id]
    else
      exp = @skillacc_exp[acc_id]
    end
    tab = HK_skillacc::Tab_skill[acc_id]
    max_lv = tab.size - 1
    skill = []
    lv = 0
    ref = tab[lv]
    while exp >= ref[0]
      exp -= ref[0]
      skill.push($data_skills[ref[1]])
      break if lv == max_lv
      lv += 1
      ref = tab[lv]
    end
    case type
    when "lv"
      return lv + 1
    when "max_lv"
      return max_lv + 1
    when "skill"
      return skill
    when "exp"
      return exp
    when "next_lv"
      return ref[0]
    when "til_next_lv"
      return ref[0] - exp
    end
  end
  alias hk_skillacc_change_equip change_equip
  def change_equip(equip_type, item, test = false)
    hk_skillacc_change_equip(equip_type, item, test)
    if @armor4_id != 0 and not test
      acc = $data_armors[@armor4_id]
      if acc.utilisation?
        $game_party.skillacc_exp[@armor4_id] = 0 unless $game_party.skillacc_exp.keys.include?(@armor4_id)
      else
        @skillacc_exp[@armor4_id] = 0 unless @skillacc_exp.keys.include?(@armor4_id)
      end
    end
  end
  def skill_learn?(skill)
    return skills.include?(skill)
  end
end
###################################
class Scene_Battle < Scene_Base
  alias hk_skillacc_display_exp display_exp_and_gold
  def display_exp_and_gold
    hk_skillacc_display_exp
    psa = $game_troop.total_psa
    if psa > 0
      text = HK_skillacc::Battle_message + " #{psa} #{HK_skillacc::Name}."
      $game_message.texts.push('\.' + text)
      for actor in $game_party.existing_members
        if actor.armors[3] != nil
          if actor.armors[3].utilisation?
            $game_party.skillacc_exp[actor.armors[3].id] += psa
          else
            actor.skillacc_exp[actor.armors[3].id] += psa
          end
        end
      end
    end
    wait_for_message
  end
end
###################################
module RPG
  class Armor < BaseItem
    def utilisation?
      text = @note.decoupe
      for line in text
        return true if line.include?("USE_SLT")
      end
      return false
    end
    def acquisition?
      return false if utilisation?
      return true
    end
  end
  class Enemy
    def psa
      text = @note.decoupe
      for line in text
        if line.include?("PSA=")
          num = line.delete("PSA=")
          return num.to_i
        end
      end
      return HK_skillacc::Defaut_PSA
    end
  end
end
###################################
class Window_Skillacc < Window_Base
  def initialize(actor)
    x = HK_skillacc::Coord_win[0]
    y = HK_skillacc::Coord_win[1]
    super(x, y, 250, 2*24 + 32)
    @actor = actor
    refresh
  end
  def refresh
    self.contents.clear
    acc = @actor.armors[3]
    if acc != nil
      if acc.utilisation?
        draw_skillacc_info(true)
      else
        draw_skillacc_info(false)
      end
    end
  end
  def draw_skillacc_info(use)
    acc = @actor.armors[3]
    lv = @actor.get_skillacc(acc.id, "lv", use)
    max_lv = @actor.get_skillacc(acc.id, "max_lv", use)
    exp = @actor.get_skillacc(acc.id, "exp", use)
    til_next_lv = @actor.get_skillacc(acc.id, "til_next_lv", use)
    if HK_skillacc::Icone
      bitmap = Cache.system(HK_skillacc::Nom_icone)
      self.contents.draw_text(0, 0, 150, 24, "Nv.")
      for x in 0..(lv-1)
        self.contents.blt(50+x*24, 0, bitmap, Rect.new(0, 0, 24, 24))
      end
      if max_lv > lv
        for x in (lv-1)..(max_lv-1)
        self.contents.blt(50+x*24, 0, bitmap, Rect.new(24, 0, 24, 24))
        end
      end
    else
      text = "Nv. #{lv} / #{max_lv}"
      self.contents.draw_text(0, 0, self.width-32, 24, text, 1)
    end
    if HK_skillacc::Barre
      self.contents.draw_text(0, 24, self.width-32, 24, "Exp.")
      self.contents.fill_rect(50, 24, 154, 24, Color.new(0, 0, 0, 255))
      if lv != max_lv
        num = (exp * 150) / til_next_lv
      else
        num = 150
      end
      self.contents.gradient_fill_rect(52, 26, num, 20, Color.new(255, 255, 0, 255), Color.new(255, 0, 0, 255))
    else
      if lv != max_lv
        text = "Exp. : #{exp} / #{til_next_lv}"
      else
        text = "Exp. : -/-"
      end
      self.contents.draw_text(0, 24, self.width-32, 24, text, 1)
    end
  end
end
###################################
class Scene_Status < Scene_Base
  alias hk_skillacc_start start
  def start
    hk_skillacc_start
    @win_info = Window_Skillacc.new(@actor)
    @win_info.opacity = 0
  end
  alias hk_skillacc_terminate terminate
  def terminate
    hk_skillacc_terminate
    @win_info.dispose
  end
end
###################################

Il y a une petite modification à faire dans les scripts de base ( Game_Actor ) :

Code:
    result |= add_skillacc



Visuellement, pas grand chose à montrer ...
Juste une petite modification dans l'option "Status" :



Vous avez le choix : comme à gauche, comme à droite, ou mix des deux.

Voila le fichier pour les "étoiles" :

Celle-Là ressources ----->

Je le mets pour montrer le placement mais quelque chose me dit que vous ne l'utiliserais pas !! Laughing

ASHKA
Naasmar
Membre

Nombre de messages : 185
Age : 22
Distinction : aucune
Date d'inscription : 15/03/2008

Re: Petit problème...

le Mer 15 Avr 2009 - 19:15
UP !
avatar
DarKalimHero
Membre

Nombre de messages : 15
Distinction : aucune
Date d'inscription : 15/04/2009

Re: Petit problème...

le Mer 15 Avr 2009 - 20:37
Salut,

Quelque chose me dit que c'est par là :
Code:
    if HK_skillacc::Icone
      bitmap = Cache.system(HK_skillacc::Nom_icone)
Naasmar
Membre

Nombre de messages : 185
Age : 22
Distinction : aucune
Date d'inscription : 15/03/2008

Re: Petit problème...

le Sam 18 Avr 2009 - 9:42
Merci mais... c'est à quelle ligne ?
avatar
Mist'
Staffeux retraité

Nombre de messages : 3298
Age : 25
Localisation : France // Auvergne // Cantal
Distinction : Ours Barbu é_è [/Shamu']
Artiste de talent [Yama']
Date d'inscription : 22/12/2007
http://www.rpgmakervx-fr.com

Re: Petit problème...

le Sam 18 Avr 2009 - 9:52
Non, regarde, c'est juste dans l'entête du script, dans le module d'Ashka, dedans, tu devrais trouver ça :

Code:
# Mettre sur "true" si vous voulez des icones pour indiquer le niveau plutôt qu'un simple affichage
  Icone = false
# Indiquez ici le nom du fichier où se trouve les icones
  Nom_icone = "etoile" # Repertoire system

Remplace le par ça :

Code:
# Mettre sur "true" si vous voulez des icones pour indiquer le niveau plutôt qu'un simple affichage
  Icone = true
# Indiquez ici le nom du fichier où se trouve les icones
  Nom_icone = "NOM_DE_TON_ICONE" # Repertoire system

Tu l'auras lu, l'icône doit être dans le dossier "Graphics/System/" pour être reconnue Wink

_________________
Contenu sponsorisé

Re: Petit problème...

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