Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


 
AccueilSiteDernières imagesRechercherS'enregistrerConnexion
Le Deal du moment :
Jeux, jouets et Lego : le deuxième à ...
Voir le deal

 

 Gestions d'abilités passives (FF9-like)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Auteur Message
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Gestions d''abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:14

Gestions d'abilités passives (FF9-like)




Auteur : Sh4k4


Description

Permet d'attribuer à chaque classe un arbre d'abilités qui seront ainsi disponibles et activables avec des CP que l'on gagne à chaque niveau.
On peut les activer et les désactiver (on récupère alors les CP pour les réattribuer ailleurs)

Effets possibles des abilités :
1 : ATK + x
2 : FORCE + x
3 : INTELLIGENCE + x
4 : DEXTERITE + x
5 : AGILITE + x
6 : DEF PHYSIQUE + x
7 : DEF MAGIQUE + x
8 : PV + x
9 : PM + x
10 : EVA + x
11 : AUTO STATUT x

Interdiction de diffusion ailleurs sans mon accord, merci.

En cas de problèmes ou bugs, merci de me contacter directement par MP.

NB : Pour chaque script, vous pouvez utiliser le lien vers mon Ftp ou le spoiler, (mais pas les deux) .

Sommaire

1.Script Optionnel (Menu)
2.Script Abilités partie 1
2.Script Abilités partie 2
3.Explications
4.Screenshots


Dernière édition par Sh4k4 le Lun 11 Aoû 2008 - 22:15, édité 7 fois
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:17

1. scripts


Le script n'a besoin d'aucun autre script, il est indépendant.

Si vous utilisez le menu de Base vous pouvez ajouter ce script au dessus de Main, il intègrera le choix Abilités au menu de base.

Si vous utilisez un Custom Menu System event, vous n'en aurez pas besoin.

Si vous avez un autre menu en script passez par Event ou bien editez le menu vous même.

SCRIPT OPTIONNEL modif menu base
Les balises codent font des décalages avec les espaces bizarrement.

Script posté en fichier txt depuis mon FTP :

Lien Script OPTIONNEL MENU

Script posté sur le forum :
Code:
class Scene_Menu

  def initialize(menu_index = 0)
    @menu_index = menu_index
  end

  def main
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "État"
    s7 = "Abilités"
    s5 = "Sauvegarder"
    s6 = "Quitter"
    @command_window = Window_Command2.new(160, [s1, s2, s3, s4, s7, s5, s6])
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_system.save_disabled
      @command_window.disable_item(4)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end

  def update
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    if @command_window.active
      update_command
      return
    end
    if @status_window.active
      update_status
      return
    end
  end

  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.actors.size == 0 and @command_window.index < 4
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @command_window.index
      when 0  # ????
        # ??  SE ???
        $game_system.se_play($data_system.decision_se)
        # ???????????
        $scene = Scene_Item.new
      when 1 
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # ??
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # ?????
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
        when 4  # ?????
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 5  # ???
        if $game_system.save_disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when 6  # ?????
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end

  def update_status
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 1  # ???
        if $game_party.actors[@status_window.index].restriction >= 2
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # ??
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # ?????
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Status.new(@status_window.index)
      when 4
        $scene = Scene_Ability.new(@status_window.index)
      end
      return
    end
  end
end

class Scene_Save < Scene_File
 def on_cancel
    $game_system.se_play($data_system.cancel_se)
    if $game_temp.save_calling
      $game_temp.save_calling = false
      $scene = Scene_Map.new
      return
    end
    $scene = Scene_Menu.new(5)
  end
end

class Scene_End
  def update
    @command_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(6)
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        command_to_title
      when 1
        command_shutdown
      when 2
        command_cancel
      end
      return
    end
  end
  end


class Window_Command2 < Window_Selectable

  def initialize(width, commands)

    super(0, 0, width, commands.size * 32 + 32 - 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
    self.index = 0
  end

  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end

  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end

  def disable_item(index)
    draw_item(index, disabled_color)
  end
end


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 17:51, édité 1 fois
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:19

2. script Abilités Partie 1

Les balises codent fotn des décalages avec les espaces bizarrement.

Script posté en fichier txt depuis mon FTP :

Lien Script Abilités partie 1

Script posté sur le forum :

Code:
# Défini si le menu est entièrement transparent où non, utile pour ceux qui font des Custom Menu System en event.
TRANSPARENT = false

# Défini l'endroit où l'on retourne en sortant.
# RETOUR = 0 signifie que l'on retourne sur le menu.
# RETOUR = 1 signifie que l'on retourne sur la map directement, pour ceux qui font des Custom Menu System event
RETOUR = 0

# Nombre de Points gagné du niveau 1 à 10.
POINTS_PAR_NIVEAU = 1
# A partir du niveau 20, ces points sont doublés, au niveau 30, ils sont triplés, etc...



#===============================================================================
# ¦ Gestions d'abilités passives (FF9-like)
#-------------------------------------------------------------------------------
# Auteur  : Sh4k4
# Version : 1.0
# Logiciel : RMXP
# Date    : 27/06/2008
#-------------------------------------------------------------------------------
# Permet d'attribuer à chaque classe un arbre d'abilités qui seront ainsi disponibles et activables
# avec des CP que l'on gagne à chaque niveau.
# On peut les activer et les désactiver (on récupère alors les CP pour les réattribuer ailleurs)

# ¤INSTALLATION
# Il suffit de copier coller ce script au dessus de Main.
#
#
# ¤UTILISATION
#
# Si vous utilisez un Custom Menu System en event, utilisez $scene = Scene_Ability.new(0) pour ouvrir le menu des abilités.
# On remplace 0 par l'index du héros du groupe.
# 0 = héros 1 du groupe, 1 = 2eme héros du groupe, etc
#
# Il faut simplement que vous créeiez la listes des abilités pour chaque classe.
# Pour cela, regarder un peu plus bas.

# On peut modifier les variables tout en haut du script pour régler à sa guise.





#========================================================================
# Gestion des listes d'abilités de chaque classe.
#========================================================================

class Scene_Title
  alias init5 main
  def main
    init5
    $game_abilities = []
    for i in 1...$data_classes.size
      $game_abilities[i] = []
    end

#========================================================================
# IMPORTANT !!!
# C'est ici que vous allez créer vos listes d'abilités pour chaque classe.
#========================================================================
# Voici comment cela fonctionne :
#
# $game_abilities[ID CLASSE].push(Ability.new("NOM ABILITE", Niveau requit, Points requits, [N° Effet, Valeur d'effet], "Description de l'abilité"))

# ID CLASSE            doit être remplacé par l'ID de la classze à qui on attribue l'abilité.

# "NOM ABILITE"      doit être remplacé par le nom de l'abilité entre guillemets.

# Niveau requit            correspond au niveau à partir duquel l'abilité devient disponible.
#                                  on ne peut voir l'abilité dans le menu qu'une fois le niveau atteint.                               

# Points requits          correspond au nombre de CP nécessaire pour activer l'abilité.

# N° Effet                      à remplacer par un N° Effet pour choisir l'effet de l'abilité, voir plus bas.

# Valeur d'effet            valeur qui va avec le N° Effet, elle indique le nombre voulu.  Par exemple
#                                    si le N° Effet correspond à un ajout de Force, la Valeur d'effet sert à
#                                    indiquer le nombre de Force ajouté. Pour un statut ajouté, ça signifiera
#                                    l'ID du statut que l'on souhaite ajouter.
#
# Description de l'abilité            correspond à la description qui s'affichera.
#
#
#
=begin

N° Effets :

1 : ATK + x
2 : FORCE + x
3 : INTELLIGENCE + x
4 : DEXTERITE + x
5 : AGILITE + x
6 : DEF PHYSIQUE + x
7 : DEF MAGIQUE + x
8 : PV + x
9 : PM + x
10 : EVA
11 : AUTO STATUT x
x correspond à la Valeur d'effet, spécifiée juste après le N° Effet.

Donc, prenons un exemple.
On veut attribuer une abilité qui ajoute 5 de Force disponible au niveau 5 pour
la classe Combatant et qui requiert l'attribution de 2 CP.

On procède ainsi :

$game_abilities[1].push(Ability.new("Force brute", 5, 2, [2,5], "Augmente la force de 5."))

On veut maintenant attribuer un statut Autor-barrière disponible au niveau 10, pour la classe
Combattant, et qui requiert 5 CP.

$game_abilities[1].push(Ability.new("Auto-Barrière", 10, 5, [11,14], "Confère automatiquement le statut Barrière."))

(note: 14 correspond à l'ID du statut Barrière)
Si le statut a une durée définie sur un nombre de tour, il se terminera après le nombre de tour
et ne se remettra pas automatiquement. Si vous voulez un auto-Barrière avec un statut Barrière
qui dure tout le combat il faut alors retirer les durées au statut (après copié collé Barrière par exemple)

Vous pouvez attribuer autant d'abilités que vous voulez, et aux classes que vous voulez.
=end
#----------------------------------------------------------------------------------------------
# Début de la gestion des listes d'abilités.
#----------------------------------------------------------------------------------------------
    $game_abilities[1].push(Ability.new("Force brute", 5, 2, [2,5], "Augmente la force de 5."))
    $game_abilities[1].push(Ability.new("Auto-Barrière", 10, 5, [11,14], "Confère automatiquement le statut Barrière."))
    $game_abilities[1].push(Ability.new("Maîtrise d'arme", 8, 8, [1,10], "Augmente l'attaque de 10."))
    $game_abilities[2].push(Ability.new("Santé", 5, 2, [8,50], "Augmente les PV max de 50."))
 
    # à vous ........
   
#----------------------------------------------------------------------------------------------
# Fin de la gestion des listes d'abilités.
#----------------------------------------------------------------------------------------------
  end
end









#========================================================================
# Modification des modules RPG
#========================================================================
module RPG
  class Skill
    attr_accessor:ap
  end
end

module RPG
  class Weapon
    attr_reader:skills
    def skills
      @skills = [] if @skills == nil
      return @skills
    end
  end
end


#========================================================================
# Modification de Game_Actor pour gérer des ajouts de stats et les points d'abilités.
#========================================================================
class Game_Actor < Game_Battler
 
  attr_accessor :ability_cp
  attr_accessor :add_atk
  attr_accessor :add_str
  attr_accessor :add_int
  attr_accessor :add_dex
  attr_accessor :add_agi
  attr_accessor :add_maxhp
  attr_accessor :add_maxsp
  attr_accessor :add_pdef
  attr_accessor :add_mdef
  attr_accessor :add_hit
  attr_accessor :add_eva
  attr_accessor :autostate

  alias init4 setup
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @ability_cp = 0
    @add_atk = 0
    @add_str = 0
    @add_int = 0
    @add_dex = 0
    @add_agi = 0
    @add_maxhp = 0
    @add_maxsp = 0
    @add_pdef = 0
    @add_mdef = 0
    @add_hit = 0
    @add_eva = 0
    @autostate = []
    @level = actor.initial_level
    @table = []
    for i in 1...99
      u = i - 1
      @table[u] = 1 if i == 1
      @table[i] = @table[u] + POINTS_PAR_NIVEAU + POINTS_PAR_NIVEAU * (i/10)
      end
    @ability_cp = @table[actor.initial_level]
    init4(actor_id)
  end
 
  def base_maxhp
    return $data_actors[@actor_id].parameters[0, @level] + @add_maxhp
  end
 
  def base_maxsp
    return $data_actors[@actor_id].parameters[1, @level] + @add_maxsp
  end
 
  def base_str
    n = $data_actors[@actor_id].parameters[2, @level]  + @add_str
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.str_plus : 0
    n += armor1 != nil ? armor1.str_plus : 0
    n += armor2 != nil ? armor2.str_plus : 0
    n += armor3 != nil ? armor3.str_plus : 0
    n += armor4 != nil ? armor4.str_plus : 0
    return [[n, 1].max, 999].min
  end
 
  def base_dex
    n = $data_actors[@actor_id].parameters[3, @level]  + @add_dex
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.dex_plus : 0
    n += armor1 != nil ? armor1.dex_plus : 0
    n += armor2 != nil ? armor2.dex_plus : 0
    n += armor3 != nil ? armor3.dex_plus : 0
    n += armor4 != nil ? armor4.dex_plus : 0
    return [[n, 1].max, 999].min
  end
 
  def base_agi
    n = $data_actors[@actor_id].parameters[4, @level]  + @add_agi
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.agi_plus : 0
    n += armor1 != nil ? armor1.agi_plus : 0
    n += armor2 != nil ? armor2.agi_plus : 0
    n += armor3 != nil ? armor3.agi_plus : 0
    n += armor4 != nil ? armor4.agi_plus : 0
    return [[n, 1].max, 999].min
  end
 
  def base_int
    n = $data_actors[@actor_id].parameters[5, @level] + @add_int
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.int_plus : 0
    n += armor1 != nil ? armor1.int_plus : 0
    n += armor2 != nil ? armor2.int_plus : 0
    n += armor3 != nil ? armor3.int_plus : 0
    n += armor4 != nil ? armor4.int_plus : 0
    return [[n, 1].max, 999].min
  end
 
  def base_atk
    weapon = $data_weapons[@weapon_id]
    return weapon != nil ? weapon.atk + @add_atk: 0
  end
 
  def base_pdef
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    pdef1 = weapon != nil ? weapon.pdef : 0
    pdef2 = armor1 != nil ? armor1.pdef : 0
    pdef3 = armor2 != nil ? armor2.pdef : 0
    pdef4 = armor3 != nil ? armor3.pdef : 0
    pdef5 = armor4 != nil ? armor4.pdef : 0
    return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + @add_pdef
  end
 
  def base_mdef
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    mdef1 = weapon != nil ? weapon.mdef : 0
    mdef2 = armor1 != nil ? armor1.mdef : 0
    mdef3 = armor2 != nil ? armor2.mdef : 0
    mdef4 = armor3 != nil ? armor3.mdef : 0
    mdef5 = armor4 != nil ? armor4.mdef : 0
    return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + @add_mdef
  end
 
  def base_eva
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    eva1 = armor1 != nil ? armor1.eva : 0
    eva2 = armor2 != nil ? armor2.eva : 0
    eva3 = armor3 != nil ? armor3.eva : 0
    eva4 = armor4 != nil ? armor4.eva : 0
    return eva1 + eva2 + eva3 + eva4  + @add_eva
  end

  def exp=(exp)
    @exp = [[exp, 9999999].min, 0].max
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      @ability_cp += POINTS_PAR_NIVEAU + POINTS_PAR_NIVEAU * (@level / 10)
      for j in $data_classes[@class_id].learnings
        if j.level == @level
          learn_skill(j.skill_id)
        end
      end
    end
    while @exp < @exp_list[@level]
      @level -= 1
    end
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
 
end


#========================================================================
# La classe objet des abilités.
#========================================================================
class Ability
  attr_accessor :active
  def initialize(name,level,points,effect,description="")
    @name = name
    @level = level
    @points = points
    @effect = effect
    @description = description
  end
  def name
    return @name
  end
  def level
    return @level
  end
  def points
    return @points
  end
  def effect_number
    return @effect unless @effect.class == Array
    return @effect[0]
  end
  def effect_intensity
    return nil unless @effect.class == Array
    return @effect[1]
  end
  def description
    return @description
  end
end


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 17:48, édité 4 fois
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:19

Script posté en fichier txt depuis mon FTP :

Lien Script Abilités partie 2

Script posté sur le forum :

Code:
#========================================================================
# Modification de Scene_Battle pour les Auto-status
#========================================================================
class Scene_Battle
  alias init3 main
  def main
    for actor in $game_party.actors
      for state in actor.autostate
        actor.add_state(state)
      end
    end
    init3
  end
end



#========================================================================
# Modification de la fenêtre de SkillStatus pour afficher les CP du héros.
#========================================================================
class Window_SkillStatus < Window_Base
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, -4)
    draw_actor_state(@actor, 140, 0)
    draw_actor_hp(@actor, 284, 0)
    draw_actor_sp(@actor, 460, 0)
    cx = self.contents.text_size(@actor.name).width / 2
    self.contents.font.size = 12
    tex = "CP:  " + @actor.ability_cp.to_s
    cx -= self.contents.text_size(tex).width / 2
    self.contents.draw_text(4+cx,12,60,32,tex)
    self.contents.font.size = $fontsize
  end
end



#========================================================================
# La fenêtre où sont affichés les abilités.
#========================================================================
class Window_Ability < Window_Selectable
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 2
refresh
self.index = 0
if $game_temp.in_battle
  self.y = 64
  self.height = 256
  self.back_opacity = 160
end
end
def ability
return @data[self.index]
end
def refresh
if self.contents != nil
  self.contents.dispose
  self.contents = nil
end
@data = []
for i in 0...$game_abilities[@actor.class_id].size
  ability = $game_abilities[@actor.class_id][i]
  if ability != nil
    @data.push(ability) if @actor.level >= ability.level
  end
end
@item_max = @data.size
if @item_max > 0
  self.contents = Bitmap.new(width - 32, row_max * 32)
  self.contents.font.name = $fontface
  self.contents.font.size = $fontsize
  for i in 0...@item_max
    draw_item(i)
  end
end
end

def draw_item(index)
ability = @data[index]
self.contents.font.color = normal_color
self.contents.font.color = disabled_color unless ability.active    unless @actor.ability_cp >= ability.points
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon("036-Item05")
if ability.active == true
  opacity = 255
else
  opacity = 40
end
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, ability.name, 0)
self.contents.draw_text(x + 232-15, y, 48, 32, "CP :  " + ability.points.to_s, 2)
end
def update_help
@help_window.set_text(self.ability == nil ? "" : self.ability.description)
end
end

#========================================================================
# La Scene qui correspond au menu où l'ont gère les abilités.
#========================================================================
class Scene_Ability
 
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
  end
 
  def main
    @actor = $game_party.actors[@actor_index]
    @spriteset = Spriteset_Map.new  if TRANSPARENT == true
    @help_window = Window_Help.new
    @status_window = Window_SkillStatus.new(@actor)
    @skill_window = Window_Ability.new(@actor)
    @help_window.opacity = 0 if TRANSPARENT == true
    @status_window.opacity = 0 if TRANSPARENT == true
    @skill_window.opacity = 0 if TRANSPARENT == true
    @skill_window.help_window = @help_window
    Graphics.transition
    loop do
    Graphics.update
    Input.update
    update
    if $scene != self
      break
    end
  end
  Graphics.freeze
  @help_window.dispose
  @status_window.dispose
  @skill_window.dispose
  @spriteset.dispose  if TRANSPARENT == true
end
def update
  @help_window.update
  @status_window.update
  @skill_window.update
  if @skill_window.active
    update_skill
    return
  end
end
def update_skill
  if Input.trigger?(Input::B)
    $game_system.se_play($data_system.cancel_se)
    $scene = Scene_Menu.new(0) if RETOUR == 0
    $scene = Scene_Map.new if RETOUR == 1
    return
  end
  if Input.trigger?(Input::C)
    @skill = @skill_window.ability
    if @skill == nil or (@actor.ability_cp < @skill.points and not @skill.active)
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    if @skill.active != true
      Audio.se_play("Audio/SE/005-System05")
      @actor.ability_cp -= @skill.points
      check_effect(@skill, @actor, 1)
      @skill.active = true
      @skill_window.refresh
      @status_window.refresh
    else
      Audio.se_play("Audio/SE/005-System05",100,50)
      @actor.ability_cp += @skill.points
      check_effect(@skill, @actor, 0)
      @skill.active = false
      @skill_window.refresh
      @status_window.refresh
    end
    return
  end
  if Input.trigger?(Input::R)
    $game_system.se_play($data_system.cursor_se)
    @actor_index += 1
    @actor_index %= $game_party.actors.size
    $scene = Scene_Ability.new(@actor_index)
    return
  end
  if Input.trigger?(Input::L)
    $game_system.se_play($data_system.cursor_se)
    @actor_index += $game_party.actors.size - 1
    @actor_index %= $game_party.actors.size
    $scene = Scene_Ability.new(@actor_index)
    return
  end
end
def check_effect(skill, actor, type)
  @ability = skill
  @actor = $game_actors[actor.id]
  @type = type
 
  case @skill.effect_number
  when 1
  @actor.add_atk += @skill.effect_intensity if @type == 1
  @actor.add_atk -= @skill.effect_intensity if @type == 0
  when 2
  @actor.add_str += @skill.effect_intensity  if @type == 1
  @actor.add_str -= @skill.effect_intensity  if @type == 0
  when 3
  @actor.add_int += @skill.effect_intensity  if @type == 1
  @actor.add_int -= @skill.effect_intensity  if @type == 0
  when 4
  @actor.add_dex += @skill.effect_intensity  if @type == 1
  @actor.add_dex -= @skill.effect_intensity  if @type == 0
  when 5
  @actor.add_agi += @skill.effect_intensity  if @type == 1
  @actor.add_agi -= @skill.effect_intensity  if @type == 0
  when 6
  @actor.add_pdef += @skill.effect_intensity  if @type == 1
  @actor.add_pdef -= @skill.effect_intensity  if @type == 0
  when 7
  @actor.add_mdef += @skill.effect_intensity  if @type == 1
  @actor.add_mdef -= @skill.effect_intensity  if @type == 0
  when 8
  @actor.add_maxhp += @skill.effect_intensity  if @type == 1
  @actor.add_maxhp -= @skill.effect_intensity  if @type == 0
  when 9
  @actor.add_maxsp += @skill.effect_intensity  if @type == 1
  @actor.add_maxsp -= @skill.effect_intensity  if @type == 0
  when 10
  @actor.add_eva += @skill.effect_intensity  if @type == 1
  @actor.add_eva -= @skill.effect_intensity  if @type == 0
  when 11
  @actor.autostate.push(@skill.effect_intensity) if @type == 1
  @actor.add_state(@skill.effect_intensity)
  if @type == 0
    for state in @actor.autostate
      @actor.autostate.delete(state) if state == @skill.effect_intensity
    end
  end
end
end


end



#=============================================================================
# Sauvegarde des abilités.
#=============================================================================
class Scene_Save < Scene_File
  alias save2 write_save_data
  def write_save_data(file)
    save2(file)
    Marshal.dump($game_abilities, file)
  end
end

class Scene_Load < Scene_File
  alias read2 read_save_data 
  def read_save_data(file)
    read2(file)
    $game_abilities  = Marshal.load(file)
  end
end


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 17:48, édité 1 fois
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:22

3.Explication

¤INSTALLATION
Il suffit de copier coller ce script au dessus de Main.


¤UTILISATION

Si vous utilisez un Custom Menu System en event, utilisez $scene = Scene_Ability.new(0) pour ouvrir le menu des abilités.
On remplace 0 par l'index du héros du groupe.
0 = héros 1 du groupe, 1 = 2eme héros du groupe, etc

Il faut simplement que vous créeiez la listes des abilités pour chaque classe.
Pour cela, regarder un peu plus bas.

On peut modifier les variables tout en haut du script pour régler certaines options comme la transparance à sa guise.

Repérez ce passage dans le script :

#=========================================================
# IMPORTANT !!!
# C'est ici que vous allez créer vos listes d'abilités pour chaque classe.
#=========================================================

Vous devrez établir vos listes d'abilités à partir de cet endroit, tout y est expliqué dans le script, voilà un copié collé :

Citation :
# Voici comment cela fonctionne :
#
# $game_abilities[ID CLASSE].push(Ability.new("NOM ABILITE", Niveau requit, Points requits, [N° Effet, Valeur d'effet], "Description de l'abilité"))

# ID CLASSE doit être remplacé par l'ID de la classze à qui on attribue l'abilité.

# "NOM ABILITE" doit être remplacé par le nom de l'abilité entre guillemets.

# Niveau requit correspond au niveau à partir duquel l'abilité devient disponible.
# on ne peut voir l'abilité dans le menu qu'une fois le niveau atteint.

# Points requits correspond au nombre de CP nécessaire pour activer l'abilité.

# N° Effet à remplacer par un N° Effet pour choisir l'effet de l'abilité, voir plus bas.

# Valeur d'effet valeur qui va avec le N° Effet, elle indique le nombre voulu. Par exemple
# si le N° Effet correspond à un ajout de Force, la Valeur d'effet sert à
# indiquer le nombre de Force ajouté. Pour un statut ajouté, ça signifiera
# l'ID du statut que l'on souhaite ajouter.
#
# Description de l'abilité correspond à la description qui s'affichera.
#
#
#
=begin

N° Effets :

1 : ATK + x
2 : FORCE + x
3 : INTELLIGENCE + x
4 : DEXTERITE + x
5 : AGILITE + x
6 : DEF PHYSIQUE + x
7 : DEF MAGIQUE + x
8 : PV + x
9 : PM + x
10 : EVA
11 : AUTO STATUT x
x correspond à la Valeur d'effet, spécifiée juste après le N° Effet.

Donc, prenons un exemple.
On veut attribuer une abilité qui ajoute 5 de Force disponible au niveau 5 pour
la classe Combatant et qui requiert l'attribution de 2 CP.

On procède ainsi :

$game_abilities[1].push(Ability.new("Force brute", 5, 2, [2,5], "Augmente la force de 5."))

On veut maintenant attribuer un statut Autor-barrière disponible au niveau 10, pour la classe
Combattant, et qui requiert 5 CP.

$game_abilities[1].push(Ability.new("Auto-Barrière", 10, 5, [11,14], "Confère automatiquement le statut Barrière."))

(note: 14 correspond à l'ID du statut Barrière)
Si le statut a une durée définie sur un nombre de tour, il se terminera après le nombre de tour
et ne se remettra pas automatiquement. Si vous voulez un auto-Barrière avec un statut Barrière
qui dure tout le combat il faut alors retirer les durées au statut (après copié collé Barrière par exemple)

Vous pouvez attribuer autant d'abilités que vous voulez, et aux classes que vous voulez.
=end
#----------------------------------------------------------------------------------------------
# Début de la gestion des listes d'abilités.
#----------------------------------------------------------------------------------------------
$game_abilities[1].push(Ability.new("Force brute", 5, 2, [2,5], "Augmente la force de 5."))
$game_abilities[1].push(Ability.new("Auto-Barrière", 10, 5, [11,14], "Confère automatiquement le statut Barrière."))
$game_abilities[1].push(Ability.new("Maîtrise d'arme", 8, 8, [1,10], "Augmente l'attaque de 10."))
$game_abilities[2].push(Ability.new("Santé", 5, 2, [8,50], "Augmente les PV max de 50."))

# à vous ........

#----------------------------------------------------------------------------------------------
# Fin de la gestion des listes d'abilités.
#----------------------------------------------------------------------------------------------


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 22:28, édité 1 fois
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 17:22

4. Screenshot

Gestions d'abilités passives (FF9-like) Abil1
Revenir en haut Aller en bas
harvox
Membre royal très actif
Membre royal très actif
harvox

Masculin Nombre de messages : 1187
Point(s) Fort(s) : Event/mapping
Point(s) Faible(s) : ruby ?
Niveau RPG Maker : Malgrès mes questions je connais pas mal le logiciel, je dirais 7/10
Date d'inscription : 05/04/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 18:29

Je le trouve excellent, cependant tu devrais (suggestion juste hein Wink ) peut-être faire le même du style moghunter non ? Vu que c'est un des menu les plus utilisé...Enfin ce serais cool, ne serais-ce même rien que pour moi ^^.

Enfin par exemple on parle à un gars qui nous propose de modifier nos habilités avec un fond en mouvement et tout serait géré par des pictures sauf les îcones.

Vla pour ma suggestion Wink
Revenir en haut Aller en bas
http://teamrpgmakerxp.forumactif.com/
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 18:32

Le problème avec le moghunter c'est que tout le monde le personnalise à sa façon donc c'est pas evident d'en faire un pour tous.

PS: ya une option TRANSPARENT pour que le menu soit transparent avec la map derrière, et les images faites en event sont alors visibles pour que ceux qui veulent faire l'accès en event puissent coller un fond.


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 18:34, édité 1 fois
Revenir en haut Aller en bas
Azerty
Villageois (Nv 2)
Villageois (Nv 2)
Azerty

Nombre de messages : 36
Date d'inscription : 11/08/2006

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 18:34

Tout ça en 2 heures n18
Sinon ton calcul des cp du hero ne prend pas en compte son niveau de depart, si un personnage rejoint l'equipe en cours du jeu, qu'il est disons lvl 50, il aura quand meme 0 cp alors que le reste de l'equipe en aura beacoup ^^
Sinon je suis encore eblouie par la vitesse à laquelle tu travaille nb7

~Azerty
Revenir en haut Aller en bas
Sh4k4
Chevalier d'or
Chevalier d'or
Sh4k4

Masculin Nombre de messages : 2836
Age : 36
Point(s) Fort(s) : Scripteur, Event-Maker, Aide
Point(s) Faible(s) : Athéna
Niveau RPG Maker : Elevé
Logiciel préféré : RMXP
Date d'inscription : 06/01/2007

Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitimeVen 27 Juin 2008 - 18:44

Azerty a écrit:
Tout ça en 2 heures n18
Sinon ton calcul des cp du hero ne prend pas en compte son niveau de depart, si un personnage rejoint l'equipe en cours du jeu, qu'il est disons lvl 50, il aura quand meme 0 cp alors que le reste de l'equipe en aura beacoup ^^
Sinon je suis encore eblouie par la vitesse à laquelle tu travaille nb7

~Azerty

Merci j'avais pas pensé à ce truc.

edit: j'avais oublié de le préciser mais ça a été corrigé


Dernière édition par Sh4k4 le Ven 27 Juin 2008 - 22:52, édité 1 fois
Revenir en haut Aller en bas
Contenu sponsorisé




Gestions d'abilités passives (FF9-like) Vide
MessageSujet: Re: Gestions d'abilités passives (FF9-like)   Gestions d'abilités passives (FF9-like) Icon_minitime

Revenir en haut Aller en bas
 

Gestions d'abilités passives (FF9-like)

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
 :: Partage de scripts :: Systèmes -
|
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit