Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Distribution de point de caractéristiques
MessagePublié: 01 Juin 2009, 18:47 
Roi
Roi
Avatar de l’utilisateur

Inscrit le: 13 Aoû 2006, 00:00
Messages: 2414
Localisation: Montréal, QC
Logiciel(s) préféré(s): RMXP, VS2008
Point(s) Fort(s): Script
Points d'aide: Illimité

Créations :

- Séparation d'inventaire

- Sprite_Text


Voir ses créations

[]Distribution de point de caractéristiques


Auteur: Krazplay

Installation: Copier le code au dessus de main. Le nom n'a pas d'importance.

Script:

Code: Tout sélectionner
#=======================================================================
# ■ Distribution de point de caractéristiques
# ■ Scene_caracplus v1.0 par Krazplay
#=======================================================================
# Ecrit par Krazplay, version la plus à jour disponible sur le forum du site rpgmakerxp.free.fr
# Nécessite : le scrîpt Window_caracplus
# Description :
# Permet de donner des points à distribuer à n'importe quel personnage de l'équipe entre ses
#  4 caractéristiques principales (force, agilité, dextérité et intelligence).
# Utilisation :
# A l'aide de la ligne de scrîpt suivante dans n'importe quel scrîpt ou évènement :
# $scene = Scene_caracplus.new(acteurs, points à distribuer)
# Attention, ces deux variables doivent être des arrays (tableaux).
# MAUVAIS exemples : acteurs = $game_party.actors[0]      points = 10
# BONS exemples : acteurs = [$game_party.actors[0]]          points = [10]
# Ainsi pour donner 8 point au premier héro de l'équipe et 5 points au troisième, la bonne commande sera :
# $scene = Scene_caracplus.new([$game_party.actors[0], $game_party.actors[2]], [8,5])
# Pour donner 10 points à toute l'équipe on écrirait :
# $scene = Scene_caracplus.new($game_party.actors, [10,10,10,10])
# Oui $game_party.actors est déjà un tableau donc il n'a pas besoin de crochets supplémentaires
# Eviter de distribuer 0 ou nil point, enlever plutôt l'acteur de la variable.
#=======================================================================
class Scene_caracplus
 
  def initialize(actors, pointgagnés, n=0)
    @n = n
    @actors = actors
    @pg = pointgagnés
    @pointgagnés = pointgagnés[n]
    @actor = actors[n]
    @confirmation = false
  end
 
  def main
    @caracplus_window = Window_Caracplus.new(@actor,@pointgagnés)
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update_command
      if $scene != self
        @caracplus_window.dispose
        Graphics.update
        if @actors.size > @n+1 and @pg[@n+1] != nil
          $scene = Scene_caracplus.new(@actors, @pg, @n+1)
        else if @actors.size > @n+2 and @pg[@n+2] != nil
                  $scene = Scene_caracplus.new(@actors, @pg, @n+2)
                else if @actors.size > @n+3 and @pg[@n+3] != nil
                          $scene = Scene_caracplus.new(@actors, @pg, @n+3)
                        end
                end
        end
        break
      end
    end
  end #main
 
  def update_command
    if Input.trigger?(Input::DOWN) and @confirmation != true
      @caracplus_window.ligneplusun
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::UP) and @confirmation != true
      @caracplus_window.lignemoinsun
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::LEFT) and @confirmation != true
      @caracplus_window.pointmoinsun
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::RIGHT) and @confirmation != true
      @caracplus_window.pointplusun
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::B) and @confirmation != true #Cancel
      @caracplus_window.pointazero
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::B) and @confirmation == true #Cancel
      @confirmation = false
      @confirmer_window.dispose
    end
    if Input.trigger?(Input::C) #Confirmer
      if @confirmation == true
        @confirmation = false
        @confirmer_window.dispose
        @caracplus_window.terminer
        $scene = Scene_Map.new
      else
        if @caracplus_window.toutestbon? == true and @confirmation != true
          @confirmer_window = Window_confirmer.new(450,20)
          @confirmation = true
        end
      end
    end
    if Input.trigger?(Input::X) #Touche A
      for i in 0..14
        @caracplus_window.pointmoinsun
      end
      @caracplus_window.refresh
    end
    if Input.trigger?(Input::A) #Touche Z
      for i in 0..14
        @caracplus_window.pointplusun
      end
      @caracplus_window.refresh
    end
  end
  
end
 
 
#=======================================================================
# ■ Distribution de point de caractéristiques
# ■ Window_caracplus v1.0 par Krazplay
#=======================================================================
# Ecrit par Krazplay, version la plus à jour disponible sur le forum du site rpgmakerxp.free.fr
# Nécessite : le scrîpt Scene_caracplus
# Description et Utilisation décris dans le scrîpt Scene_caraplus
#=======================================================================
class Window_Caracplus < Window_Base
 
  def initialize(actor,pointgagnés)
    super(5, 5, 630, 470)
    @ligne = 0
    @actor = actor
    @statplus = [0,0,0,0]
    @pointgagnés = pointgagnés
    @pointarépartir = pointgagnés
    self.contents = Bitmap.new(width-32, height-32)
    self.contents.font.name = "Arial"
    self.contents.font.size = 24
    self.contents.clear
    deséquipement
    @str = actor.str
    @dex = actor.dex
    @agi = actor.agi
    @int = actor.int
    @carac = [@str, @dex, @agi, @int]
    refresh
  end
 
 
  def refresh
    self.contents.clear
    self.cursor_rect.set(190, (240 + 30*@ligne), 175, 30)
    actor = @actor
    self.contents.font.name = "Arial"
    self.contents.font.color = normal_color
    self.draw_actor_battler(actor, 90, 270)
    self.draw_actor_graphic(actor, 80, 140)
    self.contents.font.size = 26
    longueur = contents.text_size(actor.name).width
    self.draw_actor_name(actor, self.width/2-longueur/2, 10)
    self.contents.font.size = 24
    self.contents.draw_text(0, 50, self.width, 32, actor.class_name.to_s+"    Lv  "+actor.level.to_s, 1)
    self.draw_actor_exp(actor, 200, 78)
    self.draw_actor_hp(actor, 200, 101, width = 144)
    self.draw_actor_sp(actor, 200, 124, width = 144)
    équiper
    self.draw_actor_parameter(actor, 200, 150, 0)
    self.draw_actor_parameter(actor, 200, 175, 1)
    self.draw_actor_parameter(actor, 200, 200, 2)
    deséquipement
    self.contents.font.color = system_color
    self.contents.draw_text(200, 240, 120, 32, $data_system.words.str)
    self.contents.draw_text(200, 270, 120, 32, $data_system.words.dex)
    self.contents.draw_text(200, 300, 120, 32, $data_system.words.agi)
    self.contents.draw_text(200, 330, 120, 32, $data_system.words.int)
    self.contents.font.color = normal_color
    self.contents.draw_text(320, 240, 36, 32, @str.to_s, 2)
    self.contents.draw_text(320, 270, 36, 32, @dex.to_s, 2)
    self.contents.draw_text(320, 300, 36, 32, @agi.to_s, 2)
    self.contents.draw_text(320, 330, 36, 32, @int.to_s, 2)
    for i in 0..3
      self.contents.font.color = Color.new(255, 155, 155, 255)
      self.contents.draw_text(370, 240+30*i, 36, 32, "+")
      self.contents.draw_text(390, 240+30*i, 36, 32, @statplus[i].to_s, 2)
      self.contents.font.color = Color.new(155, 255, 155, 255)
      self.contents.draw_text(450, 240+30*i, 36, 32, "=")
      stat = @carac[i] + @statplus[i]
      self.contents.draw_text(490, 240+30*i, 36, 32, stat.to_s, 2)
    end
    self.contents.font.color = normal_color
    self.contents.draw_text(50, 380, 320, 32, "Nombre de points à répartir :")
    self.contents.draw_text(330, 380, 36, 32, @pointarépartir.to_s, 2)
    self.contents.draw_text(430, 150, 108, 32, "[A/Z = (-15)/(+15)]")
    self.contents.draw_text(430, 175, 72, 32, "[X = Reset]")
  end
 
  def ligneplusun
    if @ligne<3
      @ligne += 1
    end
  end
 
  def lignemoinsun
    if @ligne>0
      @ligne -= 1
    end
  end
 
  def pointmoinsun
    i = @ligne
    if @statplus[i]-1 > -1
      @statplus[i] -= 1
      @pointarépartir += 1
    end
  end
 
  def pointplusun
    i = @ligne
    if @pointarépartir > 0 and @statplus[i]+@carac[i]+1 < 1000
      @statplus[i] += 1
      @pointarépartir -= 1
    end
  end
 
  def pointazero
      @statplus = [0,0,0,0]
      @pointarépartir = @pointgagnés
  end
  
  def toutestbon?
    if @pointarépartir == 0
      return true
    else
      return false
    end
  end
 
  def terminer
    $game_actors[@actor.id].str += @statplus[0]
    $game_actors[@actor.id].dex +=  @statplus[1]
    $game_actors[@actor.id].agi +=  @statplus[2]
    $game_actors[@actor.id].int += @statplus[3]
    @actor.equip(0, @weapon_id)
    @actor.equip(1, @armor1_id)
    @actor.equip(2, @armor2_id)
    @actor.equip(3, @armor3_id)
    @actor.equip(4, @armor4_id)
  end
 
  def équiper
    @actor.equip(0, @weapon_id)
    @actor.equip(1, @armor1_id)
    @actor.equip(2, @armor2_id)
    @actor.equip(3, @armor3_id)
    @actor.equip(4, @armor4_id)
  end
 
  def deséquipement
    @weapon_id = @actor.weapon_id
    @armor1_id = @actor.armor1_id
    @armor2_id = @actor.armor2_id
    @armor3_id = @actor.armor3_id
    @armor4_id = @actor.armor4_id
    @actor.equip(0, 0)
    @actor.equip(1, 0)
    @actor.equip(2, 0)
    @actor.equip(3, 0)
    @actor.equip(4, 0)
  end
 
  def draw_actor_battler(actor, x, y)
    bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw / 2, y - ch / 2, bitmap, src_rect)
  end
end  
 
 
class Window_confirmer < Window_Base
  def initialize(x,y)
    super(x, y, 150, 64)
    self.contents = Bitmap.new(width-32, height-32)
    self.contents.font.name = "Arial"
    self.contents.font.size = 24
    self.contents.draw_text(0, 0, 120, 32, "Confirmer ?")
  end
end


Utilisation:

A l'aide de la ligne de script suivante dans n'importe quel scrîpt ou évènement :
Code: Tout sélectionner
$scene = Scene_caracplus.new(acteurs, points à distribuer)


Attention, ces deux variables doivent être des arrays (tableaux).
MAUVAIS exemples : acteurs = $game_party.actors[0] points = 10
BONS exemples : acteurs = [$game_party.actors[0]] points = [10]

Ainsi pour donner 8 point au premier héro de l'équipe et 5 points au troisième, la bonne commande sera :
Code: Tout sélectionner
$scene = Scene_caracplus.new([$game_party.actors[0], $game_party.actors[2]], [8,5])

Pour donner 10 points à toute l'équipe on écrirait :
Code: Tout sélectionner
$scene = Scene_caracplus.new($game_party.actors, [10,10,10,10])

Oui $game_party.actors est déjà un tableau donc il n'a pas besoin de crochets supplémentaires
Eviter de distribuer 0 ou nil point, enlever plutôt l'acteur de la variable.

Illustration:
Image


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728