AccueilAccueil  PortailPortail  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  ConnexionConnexion  




Partagez | 
 

 ADD-ON GTBS : Competences evolutives

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Voyageur Lv.10
Voyageur Lv.10


Masculin Age : 35
Inscrit le : 04/12/2008
Messages : 383

MessageSujet: ADD-ON GTBS : Competences evolutives   Ven 5 Déc 2008 - 10:40

Nom : ADD-ON GTBS : Competences evolutives
Auteur : ASHKA
Info : Un script à ajouter, une modification à faire et un peu de configuration ... :mrgreen:

A chaque utilisation d'une competence par un héros, celui-ci reçoit de l'experience.
A terme, cette experience fait augmenter le niveau de la competence.
Ce qui joue sur la portée, la zone d'effet, le cout MP ou le taux d'effet de la competence.
En combat tactique, lors de la selection des competences, les touches Q/W permettent de changer le niveau
de la competence pour pouvoir utiliser celui qui convient le mieux à la situation.

Ajoutez ce script dans "Materials" au dessous des autres scripts du GTBS :

Code:
###################################
#
#                      ADD-ON GTBS
#            Competences evolutives
#
###################################
=begin                                                      MODE D'EMPLOI
A chaque utilisation d'une competence par un héros, celui-ci reçoit de l'experience.
A terme, cette experience fait augmenter le niveau de la competence.
Ce qui joue sur la portée, la zone d'effet, le cout MP ou le taux d'effet de la competence.
Pour distinguer une competence evolutive des autres, il suffit d'inscrire      EVOL        dans la note de la competence.
Plutôt que de definir individuellement l'evolution de chaque competence, on defini un type d'evolution.
Si rien n'est precisé, le type par defaut sera utilisé.
Il existe deux codes :
      TEX      => type d'experience ( la façon dont le niveau de la competence evoluera )
Pour le definir, inscriver    TEX=1  dans la note de la competence ( tout doit etre collé )
      EVT      => type d'evolution ( la façon dont les caracteristiques de la competence evolueront )
Pour le definir, inscriver    EVT=1  dans la note de la competence ( tout doit etre collé )
En combat tactique, lors de la selection des competences, les touches Q/W permettent de changer le niveau
de la competence pour pouvoir utiliser celui qui convient le mieux à la situation.
=end
module GTBS_HK_evoskill
# Indiquer le montant d'experience que l'on reçoit à chaque utilisation de la competence.
  Use_exp = 5
# Indiquer le TEX par defaut qui sera utilisé si rien n'est spécifié dans la base de donnée
# ( et que la competence est bien une competence evolutive )
  Defaut_TEX = 1
# Indiquer le EVT par defaut qui sera utilisé si rien n'est spécifié dans la base de donnée
# ( et que la competence est bien une competence evolutive )
  Defaut_EVT = 1
# Configurer la table d'experience qui determinera le changement de niveau de la competence.
# A chaque type ( le TEX de la base de donnée ) correspond une table d'experience spécifique.
# Le premier nombre de la liste est toujours un 0
# Attention, il s'agit de la quantité d'experience necessaire pour evoluer !!
# Donc, pour le type 1, passer au niveau 3 demande : 25 + 75 = 100
#                  TEX        Exp necessaire
  Tab_exp = { 1 => [0, 25, 75, 250, 500],
                        2 => [0, 25, 50, 75, 100, 125, 150, 175, 200],
                        3 => [0, 100, 200, 300, 400, 500] }
                       
# Configurer la table d'evolution :
# Le niveau 1 est defini normalement ( GTBS_Move/Weapon/Skill et base de donnée )
# Range fonctionne comme celui du GTBS qu'il remplacera
# MP+, c'est l'augmentation du cout MP pour ce niveau.
# De 2 MP niveau 1, on passera à 8 MP niveau 3 ( 2 + 2 + 4 )
# Base_damage+, c'est l'augmentation du taux d'effet pour ce niveau.
# De 1 au niveau 1, on passera à 11 au niveau 3 ( 1 + 5 + 5 )
  Tab_evol = {}
#              EVT    LV              Range        MP+/Base_damage+ 
  Tab_evol[1] = { 2 => [[2, 1, false, true], 2,              5],
                              3 => [[2, 2, false, true], 4,              5],
                              4 => [[3, 2, false, true], 2,              5],
                              5 => [[3, 3, false, true], 4,              5],
                              6 => [[4, 3, false, true], 2,              5],
                              7 => [[4, 4, false, true], 4,              5],
                              8 => [[5, 4, false, true], 2,              5],
                              }
end
###################################
module GTBS
  def self.test_evol(skill_id)
    if $scene.active_battler != nil
      if $scene.active_battler.is_a?(Game_Actor) and $data_skills[skill_id].evol?
        $game_temp.range = $scene.active_battler.check_new_range(skill_id)
      end
    end
  end
end
###################################
class String
  def decoupe
    bloc = []
    self.split(/[\r\n]+/).each { |line| bloc.push(line) }
    return bloc
  end
end
###################################
class Game_Battler
  alias hk_evoskill_make_dmg make_obj_damage_value
  def make_obj_damage_value(user, obj)
    hk_evoskill_make_dmg(user, obj)
    if user.is_a?(Game_Actor) and obj.is_a?(RPG::Skill) and obj.evol?
      user.exp_skill_up(obj.id)
    end
  end
end
###################################
class Scene_Battle_TBS < Scene_Base
  attr_reader :active_battler
  alias hk_evol_skill_phase1 tbs_phase_1
  def tbs_phase_1
    hk_evol_skill_phase1
    if Input.trigger?(Input::R) and @windows["skill"].active
      @spell = @windows["skill"].skill
      return unless @spell.evol?
      if @active_battler.lv_skill[@spell.id] < @active_battler.get_lv_skill(@spell.id)
        Sound.play_cursor
        @active_battler.lv_skill[@spell.id] += 1
        @windows["skill"].refresh(@active_battler)
      else
        Sound.play_buzzer
      end
    end
    if Input.trigger?(Input::L) and @windows["skill"].active
      @spell = @windows["skill"].skill
      return unless @spell.evol?
      if @active_battler.lv_skill[@spell.id] > 1
        Sound.play_cursor
        @active_battler.lv_skill[@spell.id] -= 1
        @windows["skill"].refresh(@active_battler)
      else
        Sound.play_buzzer
      end
    end
  end
end
###################################
class Scene_Skill < Scene_Base
  def active_battler
    return @actor
  end
end
###################################
class Game_Temp
  attr_accessor :range
  alias hk_evoskill_init initialize
  def initialize
    hk_evoskill_init
    @range = nil
  end
end
###################################
module RPG
  class Skill < UsableItem
    def name
      if $scene.is_a?(Scene_Battle_TBS) or $scene.is_a?(Scene_Skill)
        actor = $scene.active_battler
        if actor.is_a?(Game_Actor) and evol?
          return @name + actor.check_new_name(@id)
        end
      end
      return @name
    end
    def mp_cost
      if $scene.is_a?(Scene_Battle_TBS) or $scene.is_a?(Scene_Skill)
        actor = $scene.active_battler
        if actor.is_a?(Game_Actor) and evol?
          return @mp_cost + actor.check_new_mp_cost(@id)
        end
      end
      return @mp_cost
    end
    def base_damage
      if $scene.is_a?(Scene_Battle_TBS) or $scene.is_a?(Scene_Skill)
        actor = $scene.active_battler
        if actor.is_a?(Game_Actor) and evol?
          return @base_damage + actor.check_new_base_damage(@id)
        end
      end
      return @base_damage
    end
    def evol?
      tab = @note.decoupe
      for line in tab
        if line.include?("EVOL")
          return true
        end
      end
      return false
    end
    def type_exp
      tab = @note.decoupe
      for line in tab
        if line.include?("TEX=")
          num = line.delete("TEX=")
          return num.to_i
        end
      end
      if evol?
        return GTBS_HK_evoskill::Defaut_TEX
      else
        return 0
      end
    end
    def evo_type
      tab = @note.decoupe
      for line in tab
        if line.include?("EVT=")
          num = line.delete("EVT=")
          return num.to_i
        end
      end
      if evol?
        return GTBS_HK_evoskill::Defaut_EVT
      else
        return 0
      end
    end
  end
end
###################################
class Game_Actor < Game_Battler
  attr_accessor :lv_skill
  alias hk_evoskill_setup setup
  def setup(actor_id)
    hk_evoskill_setup(actor_id)
    @exp_skill = Hash.new(0)
    @lv_skill = Hash.new(1)
  end
  def exp_skill_up(skill_id)
    @exp_skill[skill_id] += GTBS_HK_evoskill::Use_exp
  end
  def get_exp_skill(skill_id)
    return @exp_skill[skill_id]
  end
  def get_lv_skill(skill_id)
    return get_number(skill_id, "lv")
  end
  def get_next_lv_skill(skill_id)
    return get_number(skill_id, "next_lv")
  end
  def get_til_next_lv_skill(skill_id)
    return get_number(skill_id, "til_next_lv")
  end
  def get_number(skill_id, type)
    exp = @exp_skill[skill_id]
    ref = GTBS_HK_evoskill::Tab_exp[$data_skills[skill_id].type_exp]
    lv = 1
    num = ref[lv]
    while exp >= num
      exp -= num
      break if lv == ref.size
      lv += 1
      num = ref[lv]
    end   
    case type
    when "lv"
      return lv
    when "next_lv"
      return num
    when "til_next_lv"
      return num - exp
    end
  end
  def check_new_name(skill_id)
    return " Lv #{@lv_skill[skill_id]} / #{get_lv_skill(skill_id)}"
  end
  def check_new_base_damage(skill_id)
    num = 0
    for x in 1..@lv_skill[skill_id]
      num += check_evol(skill_id, "dmg", x)
    end
    return num
  end
  def check_new_mp_cost(skill_id)
    num = 0
    for x in 1..@lv_skill[skill_id]
      num += check_evol(skill_id, "mp", x)
    end
    return num
  end
  def check_new_range(skill_id)
    return check_evol(skill_id, "range")
  end
  def check_evol(skill_id, type, lv = 0)
    lv = @lv_skill[skill_id] if lv == 0
    skill = $data_skills[skill_id]
    ref = GTBS_HK_evoskill::Tab_evol[skill.evo_type]
    tab = ref[lv]
    case type
    when "range"
      if lv == 1
        return nil
      else
        return tab[0]
      end
    when "mp"
      if lv == 1
        return 0
      else
        return tab[1]
      end
    when "dmg"
      if lv == 1
        return 0
      else
        return tab[2]
      end
    end
  end
end
###################################

Et ajoutez ces lignes dans le script "GTBS_Move/Weapon/Skill" :

Code:
    $game_temp.range = nil
    test_evol(skill_id)
    return $game_temp.range if $game_temp.range != nil



Lisez bien le debut du script, il y a quelques reglages à faire !!

ASHKA
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 

ADD-ON GTBS : Competences evolutives

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX - RGSS2 :: Systèmes complets :: VX - GubiD TBS-
Créer un forum | © phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit