Partagez
Aller en bas
avatar
playyes
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 14/06/2008

Script de cristaux de compétences

le Ven 20 Juin 2008 - 7:52
Nom : Script pour avoir des accessoires permettant d'utiliser des competences
Nombre de script : 1 script (en 2 partit)
Info : Ce script permet d'avoir des " cristaux de competences " plus ou moins inspiré des oeufs Mana de Grandia ...
Il s'agit d'accessoire qui, une fois equipé, confere au porteur l'usage d'une competence.
Plus le porteur gagne de combat, plus le cristal se " remplit " d'energie/mana/exp/...
Ce " remplissage " permet au porteur d'utiliser de plus en plus de competence !!!
Le cristal " possede " les competences, pas le héros.
( Du moins pas avec ce script là ... [img]http://www.[j'aime faire de la pub].com/forum/images/smilies/icon_wink.gif[/img] )
C'est-a-dire qu'en changeant de cristal, il perd les competences.
Si un autre porteur utilise un cristal déjà " plein ", il beneficie de toutes les competences déjà acquises.
( Le temps où il portera le cristal evidement !! )

Les cristaux sont des exemplaires uniques !!
Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de données.
( Chacun d'eux devra alors etre " remplit " ... )

Configuration en debut de script ...


Créer un nouveau script dans " materials " et collez y ceci :

Spoiler:
#===============================================================
#
# www.rpgmakervx-fr.com
#
#===============================================================
# Avoir des accessoires permettant d'utiliser des competences

# Un accessoire, une fois equipé permet au porteur d'utiliser certaines competences.
# Le nombre de competence augmente plus le porteur combat avec l'accessoire equipé.
# Une fois déséquipé, il perd l'usage des competences.
# Les competences " debloqué " par un porteur sont transmise au second porteur.
# Ces accessoires sont des exemplaires unique.
# Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de donnée.
# Chacun devra alors etre porté pour debloqué toute les competences qu'il contient.
################################################################################
module Cskill
# Ce tableau stocke l'ID de tout les " cristals "
ID_CRISTAL = [32, 33, 34, 35, 36, 37]
# Ce tableau contient les competences qu'apprend chaque " cristals "
# A l'interieure des crochets, chaque blocs de crochets represente un cristal
# dont l'ordre correspond à celui du tableau precedent !!
SKILL = [[nil, 59, 60, 61, 62], [63, 64, 65, 66], [75, 76], [67, 68, 69, 70], [77, 78], [79, 80]]
# Exp gagné par combat remporter ( si equipé )
EXP = 5
# reference = ID du héros de labase de donnée dont les stats servent de base à la courbe d'exp du " cristal "
REF = 10
# chaque type correspond à une courbe de stats du héros de reference
# 1 = hp / 2 = mp / 3 = force / 4 = defense / 5 = intelligence / 6 = agilité
# distribuer vos cristaux entre ces 6 types d'evolutions
TYPE1 = [32]
TYPE2 = [33]
TYPE3 = [34]
TYPE4 = [35]
TYPE5 = [36]
TYPE6 = [37]
end
################################################################################
class Window_Status < Window_Base
def draw_equipments(x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, WLH, Vocab::equip)
for i in 0..4
draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1))
end
acc = @actor.equips[4].id
if Cskill::ID_CRISTAL.include?(acc)
test = $cristal_skill[acc]
lv = 0
####
ref = $data_actors[CskillREF]
if Cskill::TYPE1.include?(acc)
type = 0
elsif Cskill::TYPE2.include?(acc)
type = 1
elsif Cskill::TYPE3.include?(acc)
type = 2
elsif Cskill::TYPE4.include?(acc)
type = 3
elsif Cskill::TYPE5.include?(acc)
type = 4
elsif Cskill::TYPE6.include?(acc)
type = 5
end
need_exp = ref.parameters[type, (lv + 1)]
while test >= need_exp
test -= need_exp
lv += 1
need_exp = ref.parameters[type, (lv + 1)]
end
####
num = Cskill::ID_CRISTAL.index(acc)
max = Cskill::SKILL[num].size
if Cskill::SKILL[num][0] != nil
lv += 1
end
self.contents.draw_text( x + 16, y + WLH * 5 + 20, 150, 32, "Apprentissage : ")
if lv < max
self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, lv.to_s + " / " + max.to_s)
else
self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, "MAX")
end
end
end
end
################################################################################
class Scene_Equip < Scene_Base
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
elsif Input.trigger?(Input::C)
Sound.play_equip
last_item = @actor.equips[@equip_window.index]
@actor.change_equip(@equip_window.index, @item_window.item)
if Cskill::ID_CRISTAL.include?(last_item.id)
num = Cskill::ID_CRISTAL.index(last_item.id)
for x in 0..(Cskill::SKILL[num].size - 1)
id = Cskill::SKILL[num][x]
if id != nil #
@actor.forget_skill(id)
end #
end
end
if @equip_window.index == 4
item_id = @item_window.item.id
if Cskill::ID_CRISTAL.include?(item_id)
test = $cristal_skill[item_id]
lv = 0
####
ref = $data_actors[CskillREF]
if Cskill::TYPE1.include?(item_id)
type = 0
elsif Cskill::TYPE2.include?(item_id)
type = 1
elsif Cskill::TYPE3.include?(item_id)
type = 2
elsif Cskill::TYPE4.include?(item_id)
type = 3
elsif Cskill::TYPE5.include?(item_id)
type = 4
elsif Cskill::TYPE6.include?(item_id)
type = 5
end
need_exp = ref.parameters[type, (lv + 1)]
while test >= need_exp
test -= need_exp
lv += 1
need_exp = ref.parameters[type, (lv + 1)]
end
####
for i in 0..lv
num = Cskill::ID_CRISTAL.index(item_id)
unless i >= Cskill::SKILL[num].size
skill_id = Cskill::SKILL[num][i]
if skill_id != nil #
@actor.learn_skill(skill_id)
end #
end
end
end
end
@equip_window.active = true
@item_window.active = false
@item_window.index = -1
@equip_window.refresh
for item_window in @item_windows
item_window.refresh
end
end
end
end

2éme partit a coller juste en dessous la 1ére partit:

Spoiler:

################################################################################
class Scene_Battle < Scene_Base
def process_victory
@info_viewport.visible = false
@message_window.visible = true
RPG::BGM.stop
$game_system.battle_end_me.play
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
display_exp_and_gold
display_drop_items
display_level_up
for actor in $game_party.existing_members
if Cskill::ID_CRISTAL.include?(actor.armor4_id)
$cristal_skill[actor.armor4_id] += Cskill::EXP
end
end
for actor in $game_party.members
if Cskill::ID_CRISTAL.include?(actor.armor4_id)
test = $cristal_skill[actor.armor4_id]
lv = 0
####
ref = $data_actors[CskillREF]
if Cskill::TYPE1.include?(actor.armor4_id)
type = 0
elsif Cskill::TYPE2.include?(actor.armor4_id)
type = 1
elsif Cskill::TYPE3.include?(actor.armor4_id)
type = 2
elsif Cskill::TYPE4.include?(actor.armor4_id)
type = 3
elsif Cskill::TYPE5.include?(actor.armor4_id)
type = 4
elsif Cskill::TYPE6.include?(actor.armor4_id)
type = 5
end
need_exp = ref.parameters[type, (lv + 1)]
while test >= need_exp
test -= need_exp
lv += 1
need_exp = ref.parameters[type, (lv + 1)]
end
####
for i in 0..lv
num = Cskill::ID_CRISTAL.index(actor.armor4_id)
unless i >= Cskill::SKILL[num].size
skill_id = Cskill::SKILL[num][i]
if skill_id != nil #
actor.learn_skill(skill_id)
end #
end
end
end
end
battle_end(0)
end
end
################################################################################
class Scene_Title < Scene_Base
def start
super
$cristal_skill = Hash.new(0)
load_database # Load database
create_game_objects # Create game objects
check_continue # Determine if continue is enabled
create_title_graphic # Create title graphic
create_command_window # Create command window
play_title_music # Play title screen music
end
def command_new_game
confirm_player_location
Sound.play_decision
for id in Cskill::ID_CRISTAL
$cristal_skill[id] = 0
end
$game_party.setup_starting_members # Initial party
$game_map.setup($data_system.start_map_id) # Initial map position
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$scene = Scene_Map.new
RPG::BGM.fade(1500)
close_command_window
Graphics.fadeout(60)
Graphics.wait(40)
Graphics.frame_count = 0
RPG::BGM.stop
$game_map.autoplay
end
end
################################################################################
class Scene_File < Scene_Base
def write_save_data(file)
characters = []
for actor in $game_party.members
characters.push([actor.character_name, actor.character_index])
end
$game_system.save_count += 1
$game_system.version_id = $data_system.version_id
@last_bgm = RPG::BGM::last
@last_bgs = RPG::BGS::last
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
Marshal.dump(@last_bgm, file)
Marshal.dump(@last_bgs, file)
Marshal.dump($game_system, file)
Marshal.dump($game_message, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
Marshal.dump($cristal_skill, file)
end
def read_save_data(file)
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
@last_bgm = Marshal.load(file)
@last_bgs = Marshal.load(file)
$game_system = Marshal.load(file)
$game_message = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
$cristal_skill = Marshal.load(file)
if $game_system.version_id != $data_system.version_id
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
end
end
avatar
playyes
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 14/06/2008

Re: Script de cristaux de compétences

le Ven 20 Juin 2008 - 7:54
Nouvelle Version :
[ L'auteur du pos original est ASHKA ]
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 ... :( ).
- Plus de possibilité de configuration.
- Peu de risque d'incompatibilité.
- Deux scripts en un !!

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" :



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

ASHKA
avatar
Lhyro
Membre

Nombre de messages : 47
Age : 26
Localisation : Belgique
Distinction : aucune
Date d'inscription : 04/05/2008

Re: Script de cristaux de compétences

le Ven 20 Juin 2008 - 9:49
tu ne pourrait pas nous envoyer une image comme exemple s'il te plaît ? Car je ne comprend pas le systeme ^^
avatar
playyes
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 14/06/2008

Re: Script de cristaux de compétences

le Sam 21 Juin 2008 - 16:59
Désolé mais je ne arrive pas a placer le script correctement , je vais demander a son créateur , je vous tient au courant !
avatar
Lhyro
Membre

Nombre de messages : 47
Age : 26
Localisation : Belgique
Distinction : aucune
Date d'inscription : 04/05/2008

Re: Script de cristaux de compétences

le Sam 21 Juin 2008 - 17:24
A propos de l'auteur il faudrait citer son nom^^
avatar
fabY
Membre

Nombre de messages : 229
Distinction : aucune
Date d'inscription : 29/01/2008
http://rpg-maker-vx.bbactif.com/index.htm

Re: Script de cristaux de compétences

le Mar 24 Juin 2008 - 15:53
C'est bête d'avoir fait ce script. On aurai bien pu le faire en évent.
avatar
Widowan
Fondateur
Nombre de messages : 1435
Age : 35
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
http://www.rpgmakervx-fr.com

Re: Script de cristaux de compétences

le Mar 24 Juin 2008 - 16:15
Il n'empêche que si tu ne donne pas le nom de l'auteur, je serais obligé de supprimer ce topic.
Dépèche toi, je te laisse un peu de temps !

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
avatar
©SD-Arius
Membre

Nombre de messages : 495
Age : 42
Localisation : Khelonys...
Distinction :
Graphiste surdoué
Pieuvre multi-fonctions
Créateur hyperactif

Date d'inscription : 03/03/2008
http://www.sd-arius.over-blogcom/

Script de cristaux de compétences

le Jeu 26 Juin 2008 - 22:55
Pour vous éclairer, ce script est d' ASHKA .
avatar
Widowan
Fondateur
Nombre de messages : 1435
Age : 35
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
http://www.rpgmakervx-fr.com

Re: Script de cristaux de compétences

le Jeu 26 Juin 2008 - 23:12
Merci de l'info Arius !

playyes : La prochaine fois que tu poste un script, pense à mettre le nom de l'auteur, ou il sera effacé sur le champ...

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
avatar
pinguino21v
Membre

Nombre de messages : 199
Age : 28
Localisation : Vous êtes ici
Distinction : aucune
Date d'inscription : 22/07/2008

Re: Script de cristaux de compétences

le Mar 19 Aoû 2008 - 23:59
J'aimerai me servir de ce système mais auparavant, y'a-t-il moyen qu'un chef en script le modifie afin de choisir l'experience obtenu pour chaque ennemi? Je souhaiterai que chaque monstre offre 1 ou 2 points et les boss plus. J'ai essayé de modifier mais la seule chose que j'ai réussi à faire est de planter le jeu.
avatar
ASHKA
Membre

Nombre de messages : 242
Age : 35
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

[MAJ] Competences via accessoires

le Mer 3 Déc 2008 - 19:55
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 !!

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" :



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

ASHKA
avatar
Elscorto
Membre

Nombre de messages : 486
Age : 33
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Re: Script de cristaux de compétences

le Jeu 4 Déc 2008 - 9:17
Pourquoi tu mets qu'on ne l'utilisera pas,ton script m'a bien l'air sympatoche.

Merci de ton travail
avatar
ASHKA
Membre

Nombre de messages : 242
Age : 35
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Re: Script de cristaux de compétences

le Jeu 4 Déc 2008 - 10:05
Non, tu as mal compris !!

Voila le fichier pour les "étoiles" :
[...]
Je le mets pour montrer le placement mais quelque chose me dit que vous ne l'utiliserais pas !!

Je parle juste des icones toutes moches, qu'il faudra refaire selon vos gouts. Laughing
Enfin, pour les etoiles comme pour le script, vous faites ce que vous voulez !!

ASHKA
avatar
Widowan
Fondateur
Nombre de messages : 1435
Age : 35
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
http://www.rpgmakervx-fr.com

Re: Script de cristaux de compétences

le Jeu 4 Déc 2008 - 16:34
Je viens faire mes courses, hein, faites pas attention à moi ...... Suspect







Merci ASHKA !!!! x)

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
avatar
Muteo
Membre

Nombre de messages : 89
Distinction : aucune
Date d'inscription : 18/11/2008

Re: Script de cristaux de compétences

le Mer 4 Nov 2009 - 17:26
UP petit problème : ça ne marche pas !
Jai lu le script à 100%, lorsque je tu un monstre, je ne gagne pas d'exp de cristal.
Je pense que cela vient du cristal lui-même. Comment devons-nous le configurer ?
avatar
Muteo
Membre

Nombre de messages : 89
Distinction : aucune
Date d'inscription : 18/11/2008

Re: Script de cristaux de compétences

le Ven 6 Nov 2009 - 19:27
UP
avatar
ASHKA
Membre

Nombre de messages : 242
Age : 35
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Re: Script de cristaux de compétences

le Sam 7 Nov 2009 - 9:30
Je viens de tester et ça fonctionne parfaitement.

Il y a au minimum deux choses à faire :
- Configurer les accessoires dans l'entête du script.
( En partant du principe qu'ils existent déjà dans la BDD evidement ).
- Equiper le/les héros avec ces accessoires avant d'aller combattre.

En ce qui concerne la configuration :

# 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]]
}

Le nombre avant le symbole "=>" represente l'ID des accessoires.
Ensuite, ils y a plusieurs blocs entre crochets.
Chaques blocs representent une competence "accessible".
Le premier nombre est l'experience necessaire à l'acquisition, le second, l'ID de la competence à acquerir.

Donc, ici, si j'equipe l'accessoire d'ID 33, je pourrais directement utiliser la competence d'ID 63 ( car 0 exp necessaire ).
Par contre, si j'equipe l'accessoire 32, il faudra que je combatte un peu avant de pouvoir utiliser la competence d'ID 59.
( Le nombre d'exp obtenu par defaut etant fixé à 2, je devrait tuer au moins 5 ennemis avant "d'apprendre" cette competence. )
avatar
Muteo
Membre

Nombre de messages : 89
Distinction : aucune
Date d'inscription : 18/11/2008

Re: Script de cristaux de compétences

le Sam 7 Nov 2009 - 13:06
Oui j'ai compris mais merci quand même !
Sauf que je n'arrive pas à gagner d'expérience avec les script ! Mon experience de cristal reste à Zero !
Edit : même pour les compétences qui requiert 0 exp, je ne les ai pas, bien que mon cristal montre que je suis au niveau 2 !
avatar
Muteo
Membre

Nombre de messages : 89
Distinction : aucune
Date d'inscription : 18/11/2008

Re: Script de cristaux de compétences

le Mar 10 Nov 2009 - 22:01
UP
Contenu sponsorisé

Re: Script de cristaux de compétences

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