AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €

Partagez
 

 Aide pour script personnel

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Invité
Invité
avatar



Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 6:59

Bonsoir, voilà j'essaye de faire un système de quête pour m'exercer au rgss2, je voulais pas le poster avant qu'il soit fini mais là je ne voie pas Sad

Je vous explique le système, on créé un objet quête dans la BDD, la description de l'objet correspond au nom de la quête, dans les commentaires on a description,but et gain.
Quand l'objet est donné, cette quête passe en active, quand l'objet est perdu,la quête passe en fini. Voilà ensuite c'est juste un affichage banal.

J'ai d'abord essayé avec une BDD en script et ça fonctionne impec mais là, c'est pas bon.
Je tiens à dire que je suis parti à la base d'un script de Tonyryu, donc si vous trouvez des ressemblances,c'est normal, quand le script sera fini, je lui demanderai bien sûr l'autorisation.

Voilà le script en question
Code:

class String
 
  def decoupe
    bloc = []
    self.split(/[\r\n]+/).each { |line| bloc.push(line) }
    return bloc
  end
 
end

class Game_quete
  attr_accessor :tab_def_quete
 
  def initialize(item_id)
 
    @etat =  0
    @nom = $data_items[item_id].description
    @text = $data_items[item_id].note
    @commentaire = @text.decoupe
 
    for line in @commentaire
      if line.include?("DESC = ")
        @desc = line.gsub!("DESC = "," ")
      end
      if line.include?("BUT = ")
        @but = line.gsub!("BUT = "," ")
      end
      if line.include?("GAIN = ")
        @gain = line.gsub!("GAIN = "," ")
      end
    end
 
    @tab_def_quete = {"nom" => @nom,
                              "etat" => @etat,
                              "desc" => @commentaire,
                              "but" => @but,
                              "gain" => @gain}
    end
end


class Game_Party < Game_Unit
  attr_accessor :tab_quete
 
  alias quete_initialize initialize
  def initialize
    quete_initialize
    @tab_quete = []
  end
 
  def items
    result = []
    for i in @items.keys.sort
      if $data_items[i].name.include?("Quete")
        item = $data_items[i]
        @tab_quete.push(Game_quete.new(item.id))
      else
        result.push($data_items[i]) if @items[i] > 0
      end
    end
    for i in @weapons.keys.sort
      result.push($data_weapons[i]) if @weapons[i] > 0
    end
    for i in @armors.keys.sort
      result.push($data_armors[i]) if @armors[i] > 0
    end
    return result
  end
 
  #--------------------------------------------------------------------------
  # * Gain Items (or lose)
  #    item          : Item
  #    n            : Number
  #    include_equip : Include equipped items
  #--------------------------------------------------------------------------
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      for i in 0...@tab_quete.size
        if  @tab_quete[i] ==  item.id
          @tab_quete[i]["etat"] = 1
        end 
      end
      @items[item.id] = [[number + n, 0].max, 99].min
    when RPG::Weapon
      @weapons[item.id] = [[number + n, 0].max, 99].min
    when RPG::Armor
      @armors[item.id] = [[number + n, 0].max, 99].min
    end
    n += number
    if include_equip and n < 0
      for actor in members
        while n < 0 and actor.equips.include?(item)
          actor.discard_equip(item)
          n += 1
        end
      end
    end
  end
end

class Window_EtatQuete < Window_Selectable
  def initialize(x,y)
    super(x,y,544,75)
    @item_max = 2
    @column_max = 2
 
    self.index = 0
    refresh
  end
 
  def refresh
    self.contents.clear
 
    self.contents.draw_text(0,0,120,24,"Quête active",1)
    self.contents.draw_text(275,0,100,24,"Quête finie",1)
  end
 
  def update_cursor
    super
  end
 
end

class Window_ListeQuete < Window_Selectable
  WLH = 20
  def  initialize(x,y)
    super(x,y,200,341)
 
 
    @column_max = 1
    self.index = -1
    self.active = false
    refresh
  end
 
  def refresh(etat_quete = 1)
    self.contents.clear
    @tab_quete = []
    for i in 0...$game_party.tab_quete.size
      if $game_party.tab_quete[i]["etat"] == etat_quete
        @tab_quete.push(i)
      end
   
    end
    @item_max = @tab_quete.size
 
    if @item_max > 0
      for i in 0...@tab_quete.size
        id_quete = @tab_quete[i]
        self.contents.font.size = 16
        self.contents.draw_text(0, (i * 20) -2, 250, 20,$game_party.tab_quete[id_quete]["nom"])
      end
   
    end
 
 
  end
 
  def nb_quete
    return @tab_quete.size
  end
 
 
  def id_quete
    return @tab_quete[@index]
  end
 
  def item_rect(index)
    rect = Rect.new(0,0,0,0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = WLH
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * WLH
    return rect
  end
 
  def update_cursor
    super
  end

end

class Window_DetailQuete < Window_Base
  def initialize(x,y)
    super(x,y,344,341)
    refresh
  end
 
  def refresh(id_quete = -1)
    self.contents.clear
    return if id_quete == -1
    ligne = 0
 
    self.contents.font.italic = true
    self.contents.draw_text(20,ligne*20,100,20, "Description : ")
    self.contents.font.italic = false

    self.contents.draw_text(0,ligne*20,290,20,$game_party.tab_quete[id_quete]["desc"])
    ligne +=2
 
    self.contents.font.italic = true
    self.contents.draw_text(20,ligne*20,290,20,"But : ")
    self.contents.font.italic = false
    ligne +=1
    self.contents.font.size = 18
    self.contents.draw_text(0,ligne*20,290,20,$game_party.tab_quete[id_quete]["but"])
    ligne +=2
    self.contents.font.italic = true
    self.contents.draw_text(20,ligne *20,100,20,"Récompenses : ")
    self.contents.font.italic = false
 
    for i in 0...$game_party.tab_quete[id_quete]["gain"].size
      gain = $game_party.tab_quete[id_quete]["gain"][i]
      nbre = gain[1].to_s
   
      if gain[0] =="EXP"
        ligne +=1
        self.contents.draw_text(0,ligne*20,290,20,"Exp : " + nbre)
      elsif gain[0] =="ARGENT"
        ligne +=1
        self.contents.draw_text(0,ligne*20,290,20,"Argent : "+nbre+Vocab::gold)
      end
   
      if ["OBJ","ARME","ARMU"].include?(gain[0])
        case gain[0]
        when "OBJ"
          ligne +=1
          item = $data_items[gain[2]]
        draw_icon(item.icon_index,0,ligne*20)
        self.contents.draw_text(30,ligne*20,290,20,item.name + " * "+ nbre)
        when "ARME"
          ligne +=1
          item = $data_weapons[gain[2]]
          draw_icon(item.icon_index,0,ligne*20)
          self.contents.draw_text(30,ligne*20,290,20,item.name+ " * " + nbre)
        when "ARMU"
          ligne +=1
          item = $data_armors[gain[2]]
          draw_icon(item.icon_index,0,ligne*20)
          self.contents.draw_text(30,ligne*20,290,20,item.name+ " * " + nbre)
        end
      end
    end
  end
end


class Scene_Quete < Scene_Base
  def start
    create_menu_background
    @window_etat = Window_EtatQuete.new(0,0)
    @window_liste = Window_ListeQuete.new(0,75)
    @window_detail = Window_DetailQuete.new(200,75)
  end
 
  def  terminate
    dispose_menu_background
    @window_detail.dispose
    @window_liste.dispose
    @window_etat.dispose
    end
 
  def  update
    super
    update_menu_background
    @window_etat.update
    @window_liste.update
    @window_detail.update
 
    if  @window_etat.active
      gerer_etat
    elsif @window_liste.active
      gerer_liste
    end
  end
 
 
  def gerer_etat
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    end
   
    if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
      @window_liste.refresh(@window_etat.index + 1)
    end
   
    if Input.trigger?(Input::C)
      return if @window_liste.nb_quete == 0
      Sound.play_decision
      @window_etat.active = false
      @window_liste.active = true
      @window_liste.index = 0
      @window_detail.refresh(@window_liste.id_quete)
    end
   
  end
 
  def gerer_liste
    if Input.trigger?(Input::DOWN) or Input.trigger?(Input::UP)
      @window_detail.refresh(@window_liste.id_quete)
    end
 
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @window_liste.active = false
      @window_etat.active = true
      @window_liste.index = -1
      @window_detail.refresh
      return
    end
  end
 end

Attention, je ne tiens pas à ce qu'on me le fasse mais plutôt qu'on m'explique ce qui ne vas pas, ici en l'occurrence, mes quêtes ne s'affichent pas,ma question est pourquoi?
Merci à vous à l'attention que vous porterez à mon problème.
_________________________________________________________

*pleure tout seul dans son coin*

"méthode pratique de faire un petit up dans l'espoir de trouver un peu d'aide"
Merci
Revenir en haut Aller en bas
yamazaki
Illusionniste Lv.12
Illusionniste Lv.12
avatar


Masculin Age : 33
Inscrit le : 27/12/2008
Messages : 757

Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 11:55

ton code est trop long
peux tu me dire la partie que tu soupçonne qui ne fonctionne
pas?
Revenir en haut Aller en bas
http://mods-jeu-rpg.forumactif.org
Invité
Invité
avatar



Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 12:38

Mon code est trop long xD

Je pense que c'est dans le def gain_item,quand je fais le test de l'id de l'objet, j'ai essayé encore plein de chose hier soir,mais niet.

J'essaye d'une autre manière ce soir, mais si tu peux essayer de trouver ce qu'il ne vas pas,je t'en serai reconnaissant.Merci
Revenir en haut Aller en bas
La Meche
Flibustier Lv.21
Flibustier Lv.21
La Meche


Masculin Age : 30
Inscrit le : 24/05/2008
Messages : 3234

Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 13:00

J'ai pas très bien saisie à quoi cela servait...
Peux tu un peux mieux expliquer ?
Revenir en haut Aller en bas
yamazaki
Illusionniste Lv.12
Illusionniste Lv.12
avatar


Masculin Age : 33
Inscrit le : 27/12/2008
Messages : 757

Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 13:21

je ne comprends pas pourquoi
tu as fais ceci
Code:

  @tab_quete[i]["etat"] = 1
alors que ton tableau est définie ainsi @tab_quete = []
et non @tab_quete = [][]
Revenir en haut Aller en bas
http://mods-jeu-rpg.forumactif.org
Invité
Invité
avatar



Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 13:28

En fait, je cherchais un exercice de script, ASHKA m'a proposé un système de quête. Je me suis renseigné sur la chose,et remarqué que dans les scripts de quête,les quêtes devait soit être rajouté dans le script ou soit dans un .txt que le script créé.

Moi,j'ai voulu faire quelque chose de différent, et j'ai décidé de faire de cette manière, tu créé un objet quête dans la BDD, en nom tu mets "Quete" , en description le nom de ta quête, puis en commentaire
DESC = ta description
BUT = le but de la quête
GAIN = le gain de la quête.

Puis pour faire devenir cette quête active, il suffit juste d'ajouter un objet au joueur, pour qu'elle soit finie,je pense le mettre dans def loose_item,c'est à dire quand on te retire un objet.

Ce système en fait permettra au maker de créer ses quêtes,sans toucher aux scripts, idéal pour ceux qui ne comprennent pas ou pour les débutants.

Voilà le fonctonnement du script :
-Il vérifie si il y a des objets qui s'appelent quête
-Si oui,il stocke ces objets dans un tableau et créé un objet Game_quete
-Cette class récupère toutes les données compris dans la BDD
-Quand un objet quête est ajouté au joueur, l'état de la quête passe en active
-Quand l'objet quête est retiré au joueur,l'état de la quête passe en finie
-Après il y a un affichage des quêtes avec rafraichissement de la liste des quêtes selon l'état et du détail des quêtes selon la quête selectionnée.

Voilà,plus en détail ce que je souhaite faire, je suis parti à la base du script de Tonyryu sur XP, j'ai donc commencer comme lui avec une BDD de quête en script et ce week end,le système fonctionnait,je me suis donc attelé à la 2ème parti, le faire mais avec les objets de la BDD.

Merci.

@Yamazaki : pour accéder à état de Game_quete,mais je pense que j'ai tout faut sur la ligne là, il y a plusieurs chose à revoir.
Revenir en haut Aller en bas
La Meche
Flibustier Lv.21
Flibustier Lv.21
La Meche


Masculin Age : 30
Inscrit le : 24/05/2008
Messages : 3234

Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeJeu 5 Mar 2009 - 15:51

Donc là c'est quoi le probléme ?
Cela bug ou ?
Revenir en haut Aller en bas
Invité
Invité
avatar



Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitimeVen 6 Mar 2009 - 8:07

LaMeche : le problème ici est que rien ne s'affiche dans mon menu.

J'ai pas trop eu le temps hier soir,mais avec le peu de test que j'ai fait,j'ai remarqué que mon code ne passait pas dans cette boucle
Code:

when RPG::Item
      for i in 0...@tab_quete.size
        if  @tab_quete[i] ==  item.id
          @tab_quete[i]["etat"] = 1

J'ai essayé sans passé par une classe Game_quete pour essayer mais sans résultat.
J'y retourne ce soir, je vais bien trouver de toute façon Razz
Revenir en haut Aller en bas
Contenu sponsorisé




Aide pour script personnel Empty
MessageSujet: Re: Aide pour script personnel   Aide pour script personnel Icon_minitime

Revenir en haut Aller en bas
 

Aide pour script personnel

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

 Sujets similaires

-
» je demande de l'aide pour un script
» Aide pour Script (battlers)
» Demande d'aide pour script phone
» Aide pour modifier script SBS3.3
» [RESOLU]Aide pour appel de script

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Problèmes et Solutions :: Abandonné-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit