RPG Maker XP Index du Forum
RPG Maker XP Index du ForumFAQRechercherS’enregistrerConnexion

Quêtes (difficile)

 
Poster un nouveau sujet   Répondre au sujet    RPG Maker XP Index du Forum -> RPG maker XP -> Scripts -> Script mini jeux/ autres systèmes, fenêtres ou fonctions
Sujet précédent :: Sujet suivant  
Auteur Message
Kevin
Administrateur

Hors ligne

Inscrit le: 06 Déc 2008
Messages: 41
Masculin
Maker: 1 000
Moyenne de points: 24,39

MessagePosté le: Sam 6 Déc - 13:49 (2008)    Sujet du message: Quêtes (difficile) Répondre en citant

Bonjour ce script n'est pas de moi

1) Crez un script " Game_Quests "
Collez y

Code:
#==============================================================================
# ■ Game_Quests
# créé par Tonyryu, entièrement modifié et optimisé par Corwin
#------------------------------------------------------------------------------

class Game_Quests
#--------------------------------------------------------------------------
# ● intialize
#--------------------------------------------------------------------------
def initialize
@etat = []
@addr_quete = []
# nombre de quetes
@nbre_quete = 4

@quete_declenche = 0

# données des quétes
# format : [ nbreEtat, NomQuete, DescriptionEtat1,...,DescriptionEtat2]
#
@quete = [
#quete n°1
1,"Achats", "Aller en ville pour effectuer des achats divers.",

#quete n°2
2,"Recherche", "Il faut aller voir par-là bas si j'y suis et si j'y suis pas et bien tant pis... on va aller chercher ailleur",  "et bien je dois chercher encore",

#quete n°3
4,"Pierres", "A récupérer les pierre Saintes", "les pierres sont dans les repaires des méchants pas bô", "Et bien... encore une seule pierre et j'ai tout un sac, cool !", "... et c'est vrai, c'est la 4ème partie de la quête !",



#quete n°...
2,"Liste des quêtes...","Il est possible de trouver dans le présent grimoire une liste des différentes quêtes à résoudre", "--"


# attention, la dernière quête ne doit pas avoir de virgule à la fin !

]

# initialisation du tableau de recherche rapide des données de quête
@offset = 0
for i in 0..(@nbre_quete - 1 )
@etat[i] = 0
@addr_quete[i] = @offset

@offset += (@quete[@offset] + 2)
end

end
#--------------------------------------------------------------------------
# ● etatID
# quest_id : ID de la quete dont on veut connaitre l'etat
#--------------------------------------------------------------------------
def etatID(quest_id)
quest_id -= 1
if quest_id <= @nbre_quete and @etat[quest_id] != nil
return @etat[quest_id]
else
return 0
end
end
#--------------------------------------------------------------------------
# ● changer_etat
# quest_id : ID de la quete dont on veut changer l'etat
# neo_etat : nouvel etat de la quete
#--------------------------------------------------------------------------
def changer_etat(quest_id, neo_etat)
quest_id -= 1
if quest_id <= @nbre_quete
@etat[quest_id] = neo_etat
end
end

#--------------------------------------------------------------------------
# ● nom
# quest_id : ID de la quete dont on veut connaitre le nom
#--------------------------------------------------------------------------
def nom(quest_id)
quest_id -= 1
if quest_id <= @nbre_quete
return @quete[ ( @addr_quete[quest_id] + 1 ) ]
end
end

#--------------------------------------------------------------------------
# ● etatNom
# quest_id : ID de la quete dont on veut connaitre l'etat d'avancement
#--------------------------------------------------------------------------
def etatNom(quest_id)
quest_id -= 1
if quest_id <= @nbre_quete
return @quete[ ( @addr_quete[quest_id] + 1 + @etat[quest_id] ) ]
end
end

#--------------------------------------------------------------------------
# ● nbreQuete
# quest_id : ID de la quete dont on veut connaitre l'etat
#--------------------------------------------------------------------------
def nbreQuete()
return @nbre_quete
end

#--------------------------------------------------------------------------
# ● set_etat
# tout_etat : table des etats à rentrer (load)
#--------------------------------------------------------------------------
def set_etat(tout_etat)
@etat = tout_etat
end

#--------------------------------------------------------------------------
# ● get_etat
#--------------------------------------------------------------------------
def get_etat
return @etat
end

#--------------------------------------------------------------------------
# ● set_quete_declenche
# quete_ID :
#--------------------------------------------------------------------------
def set_quete_declenche( quest_id )
@quete_declenche = quest_id
end

#--------------------------------------------------------------------------
# ● get_quete_declenche
#--------------------------------------------------------------------------
def get_quete_declenche
return @quete_declenche
end

#--------------------------------------------------------------------------
# ● declencher
#--------------------------------------------------------------------------
def declencher
changer_etat(@quete_declenche, 1)
end

#--------------------------------------------------------------------------
# ● b_quete_echoue
#--------------------------------------------------------------------------
def b_quete_echoue(quest_id)
return (etatID(quest_id) == -1 )
end

#--------------------------------------------------------------------------
# ● b_quete_reussi
#--------------------------------------------------------------------------
def b_quete_reussi(quest_id)
return (etatID(quest_id) == 99 )
end

#--------------------------------------------------------------------------
# ● b_quete_termine
#--------------------------------------------------------------------------
def b_quete_termine(quest_id)
return (b_quete_echoue(quest_id) or b_quete_reussi(quest_id) )
end

#--------------------------------------------------------------------------
# ● b_quete_commence
#--------------------------------------------------------------------------
def b_quete_commence(quest_id)
return (etatID(quest_id) != 0)
end

#--------------------------------------------------------------------------
# ● b_quete_inconu
#--------------------------------------------------------------------------
def b_quete_inconu(quest_id)
return (etatID(quest_id) == 0)
end

#--------------------------------------------------------------------------
# ● finir_quete
#--------------------------------------------------------------------------
def finir_quete(quest_id)
changer_etat(quest_id, 99)
end

#--------------------------------------------------------------------------
# ● echouer_quete
#--------------------------------------------------------------------------
def echouer_quete(quest_id)
changer_etat(quest_id, -1)
end

end # fin de la classe




ensuite un " Window_Quests "
Code:
#==============================================================================
# ■ Window_Quests
# créé par Tonyryu, entièrement modifié et optimisé par Corwin
#------------------------------------------------------------------------------
#  Permet de visualiser les quêtes en cours
#==============================================================================

class Window_Quests < Window_Selectable
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize

super(54, 104, 260, 330)

refresh

self.index = 0
self.active = true
self.opacity = 0

end

#--------------------------------------------------------------------------
# ● refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil

end



@IDquest = []
@nbreQuestActive = 0

for i in 0...$game_quests.nbreQuete()
if $game_quests.etatID(i) != 0
@IDquest[@nbreQuestActive] = (i)
@nbreQuestActive += 1
end
end

@item_max = (@nbreQuestActive == 0 ? 1 : @nbreQuestActive)

self.contents = Bitmap.new(width - 32, @item_max * 32)
self.contents.font.name = $fontfaceQuest
self.contents.font.size = $fontsizeQuest
self.contents.font.color = normal_color

if @nbreQuestActive != 0
for i in 0...(@nbreQuestActive)
 
if $game_quests.etatID(@IDquest[i]) == -1
self.contents.font.color = red_color
else if $game_quests.etatID(@IDquest[i]) == 99
self.contents.font.color = green_color
else
self.contents.font.color = normal_color
end
end



self.contents.draw_text(4, i * 32, 600, 32, $game_quests.nom(@IDquest[i]))
end


end
end


#--------------------------------------------------------------------------
# ● update_help
#--------------------------------------------------------------------------
def update_help
if @nbreQuestActive != 0
if $game_quests.etatID(@IDquest[self.index]) == -1
text = "Quête lamentablement échouée."
@help_window.contents.font.color = red_color

else
if $game_quests.etatID(@IDquest[self.index]) == 99
text = "Quête terminée avec succés !"
@help_window.contents.font.color = green_color

else
text = $game_quests.etatNom(@IDquest[self.index])
@help_window.contents.font.color = normal_color
end
end
else
text = "Aucune quête en cours..."
@help_window.contents.font.color = normal_color
end

@help_window.set_text(text)


end
end




Ensuite un " Scene_Quests "
Code:
#==============================================================================
# ■ Scene_Quests
# créé par Tonyryu, entièrement modifié et optimisé par Corwin
#------------------------------------------------------------------------------
#  Permet de gérer l'affichage des quêtes
#==============================================================================

class Scene_Quests
#--------------------------------------------------------------------------
# ● main
#--------------------------------------------------------------------------
def main
# Prèparation des fenêtre

@quest_book= Sprite.new
@quest_book.bitmap = RPG::Cache.picture("quests")
@quest_book.z = 9999
@quest_book.visible = true
@quest_book.opacity = 120

# ---  @help_window = Window_Help.new
@help_window = Window_QuestsMsge.new
@quest_window = Window_Quests.new
# Définir une fenêtre d'aide
@quest_window.help_window = @help_window


@quest_details_window = Window_QuestDetails.new





# Boucle de transition, mise à jour graphique et entré clavier
Graphics.transition
# boucle
loop do
# Mise à jour graphique
Graphics.update
# Mise à jour des entrées clavier
Input.update
# Mise à jour de la class
update

# Si la scene n'existe plus, alors sortir de la boucle
if $scene != self
break
end
end
# figer les graphiques
Graphics.freeze
# destruction des objets



@help_window.dispose
@quest_window.dispose
@quest_details_window.dispose
@quest_book.dispose


end
#--------------------------------------------------------------------------
# ● update
#--------------------------------------------------------------------------
def update
# Mise à jour de la fenêtre aide
@help_window.update

# Mise à jour de la fenêtre quete
@quest_window.update
# Gestion des entrées clavier
# Si B est appuyé
if Input.trigger?(Input::B)
# jouer le son d'annulation
$game_system.se_play($data_system.cancel_se)
# Revenir au menu sur l'élément 6
$scene = Scene_Menu.new(6)
return
end
end
end




puis un " Window_QuestsMsge "
Code:
#==============================================================================
# ■ Window_QuestsMsge
# créé par Corwin
#------------------------------------------------------------------------------
#==============================================================================


class Window_QuestsMsge < Window_Base
  def initialize
    #super(0, 0, 640, 64)
    super(330, 104, 270, 348)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontfaceQuest
    self.contents.font.size = $fontsizeQuest
 self.opacity = 0
    end

  def set_text(text, align = 0)
    # テキストとアラインメントの少なくとも一方が前回と違っている場合
    if text != @text or align != @align
      # テキストを再描画
      self.contents.clear
   
 
# -- test check lgueur ligne

    self.contents.font.size= $fontsizeQuest -4
    height = contents.text_size("Pg").height  #pour avoir une hauteur type
    line_length = 220 #longueur de la ligne
    line = 0
    lgueur_text = text.length
     
   
  #  for i in 0...lgueur_text
     
      pos = lgueur_text
     
      while contents.text_size(text).width > line_length

        pos_nulle = 0
        pos = 0
       
   
   
    # on affiche tant que le texte n'est pas trop long...

          while contents.text_size(text[0, pos]).width < line_length && pos < lgueur_text
            pos += 1
          end     
       
      # on cherche une position nulle à venir
          pos_nulle = pos
         
          while pos_nulle > 0
            if text[pos_nulle] == 32
              break
            end
            pos_nulle -= 1
          end
         
         
          #on a trouvé une position nulle (space), on affiche le texte jusqu'à la pos. nulle
          if pos_nulle == 0
            self.contents.draw_text(4, 2+line*height, self.width - 40,height, text[0,pos])
            text = text[pos, lgueur_text]
          else
            self.contents.draw_text(4, 2+line*height, self.width - 40,height, text[0,pos_nulle])
            text = text[pos_nulle+1, lgueur_text]
          end
         
          line += 1  # permet de descendre d'une ligne pour afficher la suite
         
         
     
      end
     
      if ( text.length > 0 )
          self.contents.draw_text(4, 2+line*height, self.width - 40,height, text[0,pos])
        line += 1
        end
       
        line += 1
     
 #    end


# -- fin check lgeur ligne
     
     

     
      # -- self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
      @text = text
      @align = align
      @actor = nil

    end
    self.visible = true

   
  end
 

  def set_actor(actor)
    if actor != @actor
      self.contents.clear
      draw_actor_name(actor, 4, 0)
      draw_actor_state(actor, 140, 0)
      draw_actor_hp(actor, 284, 0)
      draw_actor_sp(actor, 460, 0)
      @actor = actor
      @text = nil
      self.visible = true
    end
  end

  def set_enemy(enemy)
    text = enemy.name
    state_text = make_battler_state_text(enemy, 112, false)
    if state_text != ""
      text += "  " + state_text
    end
    set_text(text, 1)
  end
end



Revenir en haut
Publicité






MessagePosté le: Sam 6 Déc - 13:49 (2008)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Kevin
Administrateur

Hors ligne

Inscrit le: 06 Déc 2008
Messages: 41
Masculin
Maker: 1 000
Moyenne de points: 24,39

MessagePosté le: Sam 6 Déc - 13:52 (2008)    Sujet du message: Quêtes (difficile) Répondre en citant

Puis pour finir un " Window_QuestDetails "


Code:
#==============================================================================
# ■ Window_QuestDetails
# créé par Corwin
#------------------------------------------------------------------------------

class Window_QuestDetails < Window_Base

  def initialize
    #super(0, 0, 640, 64)
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.contents.font.name = $fontfaceQuest
    self.contents.font.size = $fontsizeQuest+12
    self.contents.font.color = gold_color
    self.contents.draw_text(0, -8, self.width - 40, 36, "Grimoire des Quêtes...", 1)
  end

 
  end






Maintenant les modifications des scripts déjà présents

Main

Code:
#==============================================================================
#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
#  各クラスの定義が終わった後、ここから実際の処理が始まります。
#==============================================================================

Font.default_name = "Comic Sans MS"
Font.default_color = Color.new(255,255,255,255)
$defaultfontsize = 28
$defaultfonttype = "Comic Sans MS"
begin
  # Change the $fontface variable to change the font style
  $fontface = "Comic Sans MS"
  # Change the $fontsize variable to change the font size
  $fontsize = 28
  # トランジション準備
  Graphics.freeze
  # シーンオブジェクト (タイトル画面) を作成
  $scene = Scene_Title.new
  # $scene が有効な限り main メソッドを呼び出す
  # définition du type de police d'écriture pour l'affichage des Quêtes
$fontfaceQuest = "Comic Sans MS"
$fontsizeQuest = 28


  while $scene != nil
    $scene.main
  end
  # フェードアウト
  Graphics.transition(20)
rescue Errno::ENOENT
  # 例外 Errno::ENOENT を補足
  # ファイルがオープンできなかった場合、メッセージを表示して終了する
  filename = $!.message.sub("Ne trouve pas le fichier ou le répertoire - ", "")
  print("Le ficher #{filename} n'a pas été trouvé.")
end



(sachez qu'il contient à peu près tout)

puis dans " scene_save "
vers la fin entre les lignes 82 et 83
Code:
Code:
Marshal.dump($game_quests.get_etat, file)



puis à " scene_Load "
entre les lignes 82 et 83

Code:
$game_quests.set_etat( Marshal.load(file))



Et voila fini pour les scripts[/code]

Maintenant ATTENTION car c'est là que 90% des erreurs vont subvenir !

Tout va se passer dans "game_quest"

observons

Code:
#quete n°1

1,"Achats", "Aller en ville pour effectuer des achats divers.",


1 représente le nombre d'état de la quête

"achats" et le titre

"aller en ville ..." est un état

Remarquer qu'à la fin il y a toujours une virgule !Si elle n'y est pas vous verrez apparaître une erreur à la quête suivante.

Pour changer les états, changer 1 et rajoutez (dans ce cas mais ça peut-être aussi enlevez) une description entre ""

Pour rajouter ou enlever une quête à la ligne 14 modifier le 4 en fonction de ce que vous voulez faire

Code:
@nbre_quete = 4


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 15:39 (2016)    Sujet du message: Quêtes (difficile)

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    RPG Maker XP Index du Forum -> RPG maker XP -> Scripts -> Script mini jeux/ autres systèmes, fenêtres ou fonctions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | creer un forum gratuit | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
darkages Template © larme d'ange
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com