Partagez
Aller en bas
grifdail
grifdail
Membre

Nombre de messages : 51
Distinction : aucune
Date d'inscription : 18/04/2008

Systeme de quête avancée  et bonus Empty Systeme de quête avancée et bonus

le Sam 26 Juin 2010 - 10:02
Bonjour tout le monde

Systeme de quête avancée  et bonus Descri10
Voici un grand script qui permet de faire des quêtes.

Seulement ?!?!?!?!?!?

Euh ouais ...

Mais par contre il gère presque tout.
Je pense que des screens seraient plus explicatifs
Spoiler:
Systeme de quête avancée  et bonus Qs10

Vous avez pu remarquer qu'il y a plusieurs types de quêtes :
1 => vaincre tel monstre
2 => ramener un objet
3 => apporter un objet
4 => Tuer x monstre
5 => aller à tel endroit
6=> trouver quelqu'un
7 => avis de recherche
C'est l'une des fonctionnalités du script

Liste des fonctions :
☼ menu de quêtes
☼ fenêtre de quête gère automatiquement
☼scène_quête (screen 1 et 2)
☼mis à jour automatique du statut de la quête avec un seul interrupteur par quêtes
☼possibilité de créer des quêtes sans le scène_quête
☼les quêtes ont des types
...

Systeme de quête avancée  et bonus Freshg10

Rien de plus simple
Créer une quête à accepter :

Dans un appel de script mettez ça :
Code:
$nonq = "maraudeur"
$tipeq = 7
$cible = 3
$cible2 = 0
$tarif = 100000
$exp = 0
$item = 0
$item2 = 0
$descri = "Attention criminel dangereux"
$nonq est le nom de la quête entre guillemets.
$tipeq est le type de la quête selon cela :
Spoiler:
1 => vaincre tel monstre
2 => ramener un objet
3 => apporter un objet
4 => Tuer x monstre
5 => aller a tel endroit
6=> trouve quelqu'un
7 => avis de recherche
$cible est la cible de la quête, cela peut être :
Spoiler:
l'id d'un monstre dans les types 1 , 4 et 7.
l'id d'un objet dans les types 2 et 3.
l'id d'une map dans le type 5.
un nom entre guillemets pour le cas 6.
$cible2 est la cible secondaire de la quête, cela peut être :
Spoiler:
un non entre guillemet pour le cas 3
le nombre de fois ou il faut vaincre un monstre dans le type 4
$tarif est l'argent gagné après la quête
$exp est l'expérience gagnée après la quête
$item est l'objet n1 gagné après la quête sous forme [a , b] ou a est le type de l'objet (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$item2 est l'objet n2 gagné après la quête sous forme [a , b] ou a est le type de l'objet (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$descri est une description de la quête entre guillemets
puis mettez ceci :
Code:
$scene = Scene_Quete.new(id)
où id est l'id de l'interrupteur correspondant à la quête

ou bien
Code:
make_quete(id)
si vous ne souhaitez pas le scène quête : la quête sera alors visible uniquement dans la liste
ou id est l'id de l'interrupteur correspondant à la quête

Pour appeler la liste de quête ecrivez dans un appelle de script
Code:
$scene = Scene_quete__liste.new

Systeme de quête avancée  et bonus Le_scr10
Spoiler:
Code:
#############
#GRIFDAIL###
###########
##########
#########
########
#######
######
#####
####
###
##
#
=begin


créer une quête a accepté :

dans un appelle de scripte mettez ça


$nonq = "maraudeur"
$tipeq = 7
$cible = 3
$cible2 = 0
$tarif = 120
$exp = 100
$item = [1,1]
$item2 = [3,3]
$descri = "Attention criminel dangereux"

  ou
 
$nonq est le non de la quête entre guillemet
$tipeq est le type de la quête selon cela
    1 => vaincre tel monstre
    2 => ramener un objet
    3 => apporter un objet
    4 => Tuer x monstre
    5 => aller a tel endroit
    6=>  trouve quelle quelle qu'un
    7 => avis de recherche
$cible est cible de la quête cela peut être
    l'id d un monstre dans les types 1 , 4 et 7
    l'id d'un objet dans les types 2 et 3
    l'id d'une map dans le type 5
    un non entre guillemet pour le cas 6
$cible2 est cible secondaire de la quête cela peut être
    un non entre guillemet pour le cas 3
    le nombre de fois  ou il faut vaincre un monstre dans le type 4
$tarif est l'argent gagner après la quête
$exp est l'expérience gagner après la quête
$item est l'objet n1 gagner après la quête sous forme [a , b] ou a est le type de l'objet  (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$item2 est l'objet n2 gagner après la quête sous forme [a , b] ou a est le type de l'objet  (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$descri est une description de la quête entre guillemet

puis mettez ceci
[code]$scene = Scene_Quete.new(id)[/code]
ou id est l'id de l'interrupteur correspondant a la quête

ou bien
make_quete(id)[ si vous ne souhaiter pas le scène quête : la quête sera alors visible unique dans la liste
ou id est l'id de l'interrupteur correspondant a la quête

Pour appeler la liste de quête ecrivez dans un appelle de script
$scene = Scene_quete__liste.new
=end
#######
#################
############################
########################################
################################################
class Window_quette < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x,y,id=0)
    super(x,y, 480, 480/5*3-10)
    @id = id
    refresh
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #  text  : character string displayed in window
  #  align : alignment (0..flush left, 1..center, 2..flush right)
  #--------------------------------------------------------------------------
  def refresh(id=@id)
      @id = id
      self.contents.clear
      self.contents.font.color = Color.new(139,0,0)
      self.contents.font.size = 34
      if $tipeq != 7
            self.contents.draw_text(0,0, self.width - 40, 34, "Quête",1)
            self.contents.font.color = normal_color
            self.contents.font.size = WLH
            self.contents.draw_text(0,40, self.width - 40, 28, $nonq.to_s,1)
      else
            self.contents.draw_text(0,0, self.width - 40, 34, "Avis de recherche",1)
            self.contents.font.color = normal_color
          end
      self.contents.font.size = 20
      self.contents.draw_text(0, 68, self.width - 40, 28, chek_type)
      self.contents.draw_text(0, 68+24, self.width - 40, 28, $descri)
      self.contents.font.color = system_color
      self.contents.draw_text(0, 124, self.width - 40, 28,  "Récompense: ")
      draw_icon(205, 0, 148) unless $tarif == 0
      self.contents.font.color = normal_color
      self.contents.draw_text(25, 148, self.width - 40, 28, $tarif) unless $tarif == 0
      self.contents.font.color = system_color
      self.contents.draw_text(120, 148, self.width - 40, 28, "Expérience:") unless $exp == 0
      self.contents.font.color = normal_color
      self.contents.draw_text(110+120, 148, self.width - 40, 28, $exp) unless $exp == 0
      draw_recompense1 unless $item == 0
      draw_recompense2 unless $item2 == 0
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Acepter ?",1) unless $quete.include?(@id)
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Quête deja acepter",1) if $quete.include?(@id) and $game_switches[@id] == false
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Quête acomplie",1) if $quete.include?(@id) and $game_switches[@id]
      Audio.se_play("Audio/SE/Chime2") if $quete.include?(@id) and $game_switches[@id]
    end
 
=begin
Categorie
1 => gagne tel monstre
2 => ramene un objet
3 => aporte un objet
4 => Tue x monstre
5 => Va a tel endroi
6=>  trouve quelle quelle qu'un
7 => gagne tel PNJ
=end

def draw_recompense1
  if $item[0] ==1
  draw_item_name($data_items[$item[1]], 0, 148+24)
 elsif $item[0] == 2
  draw_item_name($data_skills[$item[1]], 0, 148+24)
 elsif $item[0] == 3
  draw_item_name($data_armors[$item[1]], 0, 148+24)
  elsif $item[0] == 4
  draw_item_name($data_weapons[$item[1]], 0, 148+24)
  end
end 
def draw_recompense2
x = (self.width-32)/2
  if $item2[0] ==1
  draw_item_name($data_items[$item2[1]], x, 148+24)
 elsif $item2[0] == 2
  draw_item_name($data_skills[$item2[1]], x, 148+24)
 elsif $item2[0] == 3
  draw_item_name($data_armors[$item2[1]], x, 148+24)
  elsif $item2[0] == 4
  draw_item_name($data_weapons[$item2[1]], x, 148+24)
  end
end   
def chek_type
    case $tipeq
    when 1
      a = "Vaincs " + $data_enemies[$cible].name + " !"
    when 2
      a = "Ramène  moi " + $data_items[$cible].name + " !"
    when 3
      a = "Apporte " + $data_items[$cible].name + " à " + $cible2.to_s + " !"
    when 4
      a = "Vaincs " +$cible2.to_s+" " + $data_enemies[$cible].name + "s !"
    when 5
      map = load_data("Data/MapInfos.rvdata")
      a = "Rends toi a ''"+map[$cible].name.to_s+"'' !"
    when 6
      a = "Trouve " + $cible.to_s+ " !"
    when 7
      a = "On recherche : " + $data_enemies[$cible].name + " !"
    else
      a = ""
    end
    return a
  end
 
 
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color = normal_color
      self.contents.font.color.alpha = enabled ? 255 : 128
      self.contents.draw_text(x + 24, y,160, WLH, item.name)
    end
  end
 
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################
class Scene_Quete < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
def initialize(id)
@id = id
  end

#--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @quete = Window_quette.new((544-384)/2,416/6,@id)
    create_command_window unless $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @quete.dispose
    @command_window.dispose unless $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @quete.update
    @command_window.update unless $quete.include?(@id)
    update_command_selection unless $quete.include?(@id)
    update_command_quite if $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = "Oui"
    s2 = "Non"
    @command_window = Window_Command.new(@quete.width, [s1, s2],2)
    @command_window.y = (416/6)+ @quete.height
    @command_window.x = @quete.x
    @command_window.index = 0
end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
  if Input.trigger?(Input::C)
      Sound.play_decision
      if @command_window.index == 0
          make_quete(@id)
          @command_window.dispose
      end
      $scene = Scene_Map.new
    end
  end
 
  def update_command_quite
  if Input.trigger?(Input::C)
      Sound.play_decision
      $scene = Scene_Map.new
    end
  end
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################

class Scene_quete__liste < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize

  end
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @qlib = Window_Qlib.new
    @quete = Window_quette.new(@qlib.width , 0)
    @quete.visible = false
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
@qlib.dispose
@quete.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    update_command_selection
    @qlib.update
  end
#
#
#
#
def update_command_selection
   
   
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
end
      retour_quete(@qlib.retour_key)
      @quete.refresh(@qlib.retour_key)
      @quete.visible = true

   
   
end

end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################

$quete = {}
def make_quete(id , importance = false)
  $quete[id] = [$nonq, $tipeq , $cible , $cible2 , $descri , $tarif , $exp , $item , $item2 , importance]
  #                        0            1          2              3            4            5          6        7        8
end

def retour_quete(id)
  $nonq = $quete[id][0]
  $tipeq = $quete[id][1]
  $cible = $quete[id][2]
  $cible2 = $quete[id][3]
  $descri = $quete[id][4]
  $tarif = $quete[id][5]
  $exp = $quete[id][6]
  $item = $quete[id][7]
  $item2= $quete[id][8]
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################

class Window_Qlib < Window_Selectable

  attr_reader  :commands               


  def initialize
    super(0, 0, 160, 416)
    @item_max = $quete.size
    refresh
    self.index = 0
    @indexn = 1
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
      a= []
      $quete.each_key do |@key_index|
      a = a + @key_index.to_a
    end
    for i in 0...a.size
      draw_item(i,a)
    end
    @tab =a
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index  : item number
  #    enabled : enabled flag. When false, draw semi-transparently.
  #--------------------------------------------------------------------------
  def draw_item(index, tab)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    key_p = tab[index]
    self.contents.font.color = normal_color unless $quete[key_p][9]
    self.contents.font.color = Color.new(139,0,0) if $quete[key_p][9]
    self.contents.draw_text(rect, $quete[key_p][0])
  end
 
  def retour_key
    a = @tab[self.index]
    return a
  end
end
################################################
########################################
############################
#################
#######

#######
#################
############################
########################################
class Scene_File < Scene_Base 
def write_save_data(file)
    characters = []
    for actor in $game_party.members
      characters.push([actor.character_name, actor.character_index])
    end
    $game_system.save_count += 1
    $game_system.version_id = $data_system.version_id
    @last_bgm = RPG::BGM::last
    @last_bgs = RPG::BGS::last
    Marshal.dump(characters,          file)
    Marshal.dump(Graphics.frame_count, file)
    Marshal.dump(@last_bgm,            file)
    Marshal.dump(@last_bgs,            file)
    Marshal.dump($game_system,        file)
    Marshal.dump($game_message,        file)
    Marshal.dump($game_switches,      file)
    Marshal.dump($game_variables,      file)
    Marshal.dump($game_self_switches,  file)
    Marshal.dump($game_actors,        file)
    Marshal.dump($game_party,          file)
    Marshal.dump($game_troop,          file)
    Marshal.dump($game_map,            file)
    Marshal.dump($game_player,        file)
    Marshal.dump($quete,        file)
  end
    def read_save_data(file)
    characters          = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    @last_bgm            = Marshal.load(file)
    @last_bgs            = Marshal.load(file)
    $game_system        = Marshal.load(file)
    $game_message        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables      = Marshal.load(file)
    $game_self_switches  = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party          = Marshal.load(file)
    $game_troop          = Marshal.load(file)
    $game_map            = Marshal.load(file)
    $game_player        = Marshal.load(file)
    $quete          = Marshal.load(file)
    if $game_system.version_id != $data_system.version_id
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
  end
end
################################################
########################################
############################
#################
#######

Oups j'avais oublié le bonus :

Regardez amis scripteurs :
Spoiler:
Code:
def hk_to_a(hash)
      a= []
      hash.each_key do |key_index|
      a = a + key_index.to_a
      return a
end 
end

Cette méthode transforme les clés d'un hash en aray (utilisé sous forme pure dans mon script)
Spoiler:
Code:
    def hv_to_a(hash)
      a= []
      hash.each_value do |value_index|
      a = a + value_index.to_a
      return a
    end
end 

Cette méthode transforme les clés d'un hash en aray (utilisé sous forme pure dans mon script)



Dernière édition par Elisa-Chan le Sam 26 Juin 2010 - 21:23, édité 2 fois (Raison : Correction de fautes d'orthographe)
grifdail
grifdail
Membre

Nombre de messages : 51
Distinction : aucune
Date d'inscription : 18/04/2008

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Sam 26 Juin 2010 - 20:56
Systeme de quête avancée  et bonus 600px-Panneau_attention.svg
Atention


Tres important ce script a un bug (au niveau des sauvegarde )
heuresement je l'ai corriger si quelle qu'un la deja pris et utiliser alors prener le nouveau ou rajouter ca a la fin du scripte
Spoiler:
Code:
#######
#################
############################
########################################
class Scene_File < Scene_Base
def write_save_data(file)
    characters = []
    for actor in $game_party.members
      characters.push([actor.character_name, actor.character_index])
    end
    $game_system.save_count  = 1
    $game_system.version_id = $data_system.version_id
    @last_bgm = RPG::BGM::last
    @last_bgs = RPG::BGS::last
    Marshal.dump(characters,          file)
    Marshal.dump(Graphics.frame_count, file)
    Marshal.dump(@last_bgm,            file)
    Marshal.dump(@last_bgs,            file)
    Marshal.dump($game_system,        file)
    Marshal.dump($game_message,        file)
    Marshal.dump($game_switches,      file)
    Marshal.dump($game_variables,      file)
    Marshal.dump($game_self_switches,  file)
    Marshal.dump($game_actors,        file)
    Marshal.dump($game_party,          file)
    Marshal.dump($game_troop,          file)
    Marshal.dump($game_map,            file)
    Marshal.dump($game_player,        file)
    Marshal.dump($quete,        file)
  end
    def read_save_data(file)
    characters          = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    @last_bgm            = Marshal.load(file)
    @last_bgs            = Marshal.load(file)
    $game_system        = Marshal.load(file)
    $game_message        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables      = Marshal.load(file)
    $game_self_switches  = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party          = Marshal.load(file)
    $game_troop          = Marshal.load(file)
    $game_map            = Marshal.load(file)
    $game_player        = Marshal.load(file)
    $quete          = Marshal.load(file)
    if $game_system.version_id != $data_system.version_id
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
  end
end
################################################
########################################
############################
#################
#######
Desoler pour le double post mais c'est pour bien marquer ce bug
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 28
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Dim 27 Juin 2010 - 11:03
et hop voici donc une version que je vous conseille de prendre pour n meilleur fonctionnement
notamment pour avoir une compatibilité avec les script de sauvegarde^^

Code:
#############
#GRIFDAIL###
###########
##########
#########
########
#######
######
#####
####
###
##
#
#optimisé par adurna (crédite non obligatoire mais bienvenue)
=begin


créer une quête a accepté :

dans un appelle de scripte mettez ça


$nonq = "maraudeur"
$tipeq = 7
$cible = 3
$cible2 = 0
$tarif = 120
$exp = 100
$item = [1,1]
$item2 = [3,3]
$descri = "Attention criminel dangereux"

  ou
 
$nonq est le non de la quête entre guillemet
$tipeq est le type de la quête selon cela
    1 => vaincre tel monstre
    2 => ramener un objet
    3 => apporter un objet
    4 => Tuer x monstre
    5 => aller a tel endroit
    6=>  trouve quelle quelle qu'un
    7 => avis de recherche
$cible est cible de la quête cela peut être
    l'id d un monstre dans les types 1 , 4 et 7
    l'id d'un objet dans les types 2 et 3
    l'id d'une map dans le type 5
    un non entre guillemet pour le cas 6
$cible2 est cible secondaire de la quête cela peut être
    un non entre guillemet pour le cas 3
    le nombre de fois  ou il faut vaincre un monstre dans le type 4
$tarif est l'argent gagner après la quête
$exp est l'expérience gagner après la quête
$item est l'objet n1 gagner après la quête sous forme [a , b] ou a est le type de l'objet  (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$item2 est l'objet n2 gagner après la quête sous forme [a , b] ou a est le type de l'objet  (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$descri est une description de la quête entre guillemet

puis mettez ceci
[code]$scene = Scene_Quete.new(id)[/code]
ou id est l'id de l'interrupteur correspondant a la quête

ou bien
make_quete(id)[ si vous ne souhaiter pas le scène quête : la quête sera alors visible unique dans la liste
ou id est l'id de l'interrupteur correspondant a la quête

Pour appeler la liste de quête ecrivez dans un appelle de script
$scene = Scene_quete__liste.new
=end
#######
#################
############################
########################################
################################################
class Window_quette < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x,y,id=0)
    super(x,y, 385, 480/5*3-10)
    @id = id
    refresh
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #  text  : character string displayed in window
  #  align : alignment (0..flush left, 1..center, 2..flush right)
  #--------------------------------------------------------------------------
  def refresh(id=@id)
      @id = id
      self.contents.clear
      self.contents.font.color = Color.new(139,0,0)
      self.contents.font.size = 34
      if $tipeq != 7
            self.contents.draw_text(0,0, self.width - 40, 34, "Quête",1)
            self.contents.font.color = normal_color
            self.contents.font.size = WLH
            self.contents.draw_text(0,40, self.width - 40, 28, $nonq.to_s,1)
      else
            self.contents.draw_text(0,0, self.width - 40, 34, "Avis de recherche",1)
            self.contents.font.color = normal_color
          end
      self.contents.font.size = 20
      self.contents.draw_text(0, 68, self.width - 40, 28, chek_type)
      self.contents.draw_text(0, 68+24, self.width - 40, 28, $descri)
      self.contents.font.color = system_color
      self.contents.draw_text(0, 124, self.width - 40, 28,  "Récompense: ")
      draw_icon(205, 0, 148) unless $tarif == 0
      self.contents.font.color = normal_color
      self.contents.draw_text(25, 148, self.width - 40, 28, $tarif) unless $tarif == 0
      self.contents.font.color = system_color
      self.contents.draw_text(120, 148, self.width - 40, 28, "Expérience:") unless $exp == 0
      self.contents.font.color = normal_color
      self.contents.draw_text(110+120, 148, self.width - 40, 28, $exp) unless $exp == 0
      draw_recompense1 unless $item == 0
      draw_recompense2 unless $item2 == 0
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Acepter ?",1) unless $quete.include?(@id)
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Quête deja acepter",1) if $quete.include?(@id) and $game_switches[@id] == false
      self.contents.draw_text(0, 148+48+24, self.width - 40, 28, "Quête acomplie",1) if $quete.include?(@id) and $game_switches[@id]
      Audio.se_play("Audio/SE/Chime2") if $quete.include?(@id) and $game_switches[@id]
    end
 
=begin
Categorie
1 => gagne tel monstre
2 => ramene un objet
3 => aporte un objet
4 => Tue x monstre
5 => Va a tel endroi
6=>  trouve quelle quelle qu'un
7 => gagne tel PNJ
=end

def draw_recompense1
  if $item[0] ==1
  draw_item_name($data_items[$item[1]], 0, 148+24)
 elsif $item[0] == 2
  draw_item_name($data_skills[$item[1]], 0, 148+24)
 elsif $item[0] == 3
  draw_item_name($data_armors[$item[1]], 0, 148+24)
  elsif $item[0] == 4
  draw_item_name($data_weapons[$item[1]], 0, 148+24)
end
def draw_recompense2
x = (self.width-32)/2
  if $item2[0] ==1
  draw_item_name($data_items[$item2[1]], x, 148+24)
 elsif $item2[0] == 2
  draw_item_name($data_skills[$item2[1]], x, 148+24)
 elsif $item2[0] == 3
  draw_item_name($data_armors[$item2[1]], x, 148+24)
  elsif $item2[0] == 4
  draw_item_name($data_weapons[$item2[1]], x, 148+24)
end
end 
end
def chek_type
    case $tipeq
    when 1
      a = "Vaincs " + $data_enemies[$cible].name + " !"
    when 2
      a = "Ramène  moi " + $data_items[$cible].name + " !"
    when 3
      a = "Apporte " + $data_items[$cible].name + " à " + $cible2.to_s + " !"
    when 4
      a = "Vaincs " +$cible2.to_s+" " + $data_enemies[$cible].name + "s !"
    when 5
      map = load_data("Data/MapInfos.rvdata")
      a = "Rends toi a ''"+map[$cible].name.to_s+"'' !"
    when 6
      a = "Trouve " + $cible.to_s+ " !"
    when 7
      a = "On recherche : " + $data_enemies[$cible].name + " !"
    else
      a = ""
    end
    return a
  end
 
 
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color = normal_color
      self.contents.font.color.alpha = enabled ? 255 : 128
      self.contents.draw_text(x + 24, y,160, WLH, item.name)
    end
  end
 
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################
class Scene_Quete < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
def initialize(id)
@id = id
  end

#--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @quete = Window_quette.new((544-384)/2,416/6,@id)
    create_command_window unless $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @quete.dispose
    @command_window.dispose unless $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @quete.update
    @command_window.update unless $quete.include?(@id)
    update_command_selection unless $quete.include?(@id)
    update_command_quite if $quete.include?(@id)
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = "Oui"
    s2 = "Non"
    @command_window = Window_Command.new(@quete.width, [s1, s2],2)
    @command_window.y = (416/6)+ @quete.height
    @command_window.x = @quete.x
    @command_window.index = 0
end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
  if Input.trigger?(Input::C)
      Sound.play_decision
      if @command_window.index == 0
          make_quete(@id)
          @command_window.dispose
      end
      $scene = Scene_Map.new
    end
  end
 
  def update_command_quite
  if Input.trigger?(Input::C)
      Sound.play_decision
      $scene = Scene_Map.new
    end
  end
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################

class Scene_quete__liste < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize

  end
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @qlib = Window_Qlib.new
    @quete = Window_quette.new(@qlib.width , 0)
    @quete.visible = false
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
@qlib.dispose
@quete.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    update_command_selection
    @qlib.update
  end
#
#
#
#
def update_command_selection
 
 
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
end
      retour_quete(@qlib.retour_key)
      @quete.refresh(@qlib.retour_key)
      @quete.visible = true

 
 
end

end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################
################################################

$quete = {}
def make_quete(id , importance = false)
  $quete[id] = [$nonq, $tipeq , $cible , $cible2 , $descri , $tarif , $exp , $item , $item2 , importance]
  #                        0            1          2              3            4            5          6        7        8
end

def retour_quete(id)
  $nonq = $quete[id][0]
  $tipeq = $quete[id][1]
  $cible = $quete[id][2]
  $cible2 = $quete[id][3]
  $descri = $quete[id][4]
  $tarif = $quete[id][5]
  $exp = $quete[id][6]
  $item = $quete[id][7]
  $item2= $quete[id][8]
end
################################################
########################################
############################
#################
#######
#######
#################
############################
########################################

class Window_Qlib < Window_Selectable

  attr_reader  :commands             


  def initialize
    super(0, 0, 160, 416)
    @item_max = $quete.size
    refresh
    self.index = 0
    @indexn = 1
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
      a= []
      $quete.each_key do |@key_index|
      a = a + @key_index.to_a
    end
    for i in 0...a.size
      draw_item(i,a)
    end
    @tab =a
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index  : item number
  #    enabled : enabled flag. When false, draw semi-transparently.
  #--------------------------------------------------------------------------
  def draw_item(index, tab)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    key_p = tab[index]
    self.contents.font.color = normal_color unless $quete[key_p][9]
    self.contents.font.color = Color.new(139,0,0) if $quete[key_p][9]
    self.contents.draw_text(rect, $quete[key_p][0])
  end
 
  def retour_key
    a = @tab[self.index]
    return a
  end
end
################################################
########################################
############################
#################
#######

#######
#################
############################
########################################
class Scene_File < Scene_Base
  alias adurna_write write_save_data
  alias adurna_read read_save_data
def write_save_data(file)
      adurna_write (file)
    Marshal.dump($quete,        file)
  end
    def read_save_data(file)
      adurna_read  (file)
    $quete          = Marshal.load(file)
  end
end
################################################
########################################
############################
#################
#######
ps: note à grifdail: pence à utiliser les a^ias pour un meilleur compatibilité
filen
filen
Membre

Nombre de messages : 14
Distinction : aucune
Date d'inscription : 08/07/2010

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Mar 20 Juil 2010 - 21:19
c'est super mais je veux savoir comment en mette le chois de plusieurs quête
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 28
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Mar 20 Juil 2010 - 22:01
@grifdail a écrit:
Systeme de quête avancée  et bonus Descri10
Voici un grand script qui permet de faire des quêtes.

Seulement ?!?!?!?!?!?

Euh ouais ...

Mais par contre il gère presque tout.
Je pense que des screens seraient plus explicatifs
Spoiler:
Systeme de quête avancée  et bonus Qs10

Vous avez pu remarquer qu'il y a plusieurs types de quêtes :
1 => vaincre tel monstre
2 => ramener un objet
3 => apporter un objet
4 => Tuer x monstre
5 => aller à tel endroit
6=> trouver quelqu'un
7 => avis de recherche
C'est l'une des fonctionnalités du script

Liste des fonctions :
☼ menu de quêtes
☼ fenêtre de quête gère automatiquement
☼scène_quête (screen 1 et 2)
☼mis à jour automatique du statut de la quête avec un seul interrupteur par quêtes
☼possibilité de créer des quêtes sans le scène_quête
☼les quêtes ont des types
...

Systeme de quête avancée  et bonus Freshg10

Rien de plus simple
Créer une quête à accepter :

Dans un appel de script mettez ça :
Code:
$nonq = "maraudeur"
$tipeq = 7
$cible = 3
$cible2 = 0
$tarif = 100000
$exp = 0
$item = 0
$item2 = 0
$descri = "Attention criminel dangereux"
$nonq est le nom de la quête entre guillemets.
$tipeq est le type de la quête selon cela :
Spoiler:
1 => vaincre tel monstre
2 => ramener un objet
3 => apporter un objet
4 => Tuer x monstre
5 => aller a tel endroit
6=> trouve quelqu'un
7 => avis de recherche
$cible est la cible de la quête, cela peut être :
Spoiler:
l'id d'un monstre dans les types 1 , 4 et 7.
l'id d'un objet dans les types 2 et 3.
l'id d'une map dans le type 5.
un nom entre guillemets pour le cas 6.
$cible2 est la cible secondaire de la quête, cela peut être :
Spoiler:
un non entre guillemet pour le cas 3
le nombre de fois ou il faut vaincre un monstre dans le type 4
$tarif est l'argent gagné après la quête
$exp est l'expérience gagnée après la quête
$item est l'objet n1 gagné après la quête sous forme [a , b] ou a est le type de l'objet (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$item2 est l'objet n2 gagné après la quête sous forme [a , b] ou a est le type de l'objet (1 objet 2 sort 3 armure 4 arme) et b l'id de l'objet
$descri est une description de la quête entre guillemets
puis mettez ceci :
Code:
$scene = Scene_Quete.new(id)
où id est l'id de l'interrupteur correspondant à la quête

ou bien
Code:
make_quete(id)
si vous ne souhaitez pas le scène quête : la quête sera alors visible uniquement dans la liste
ou id est l'id de l'interrupteur correspondant à la quête

Pour appeler la liste de quête ecrivez dans un appelle de script
Code:
$scene = Scene_quete__liste.new


voila c'est pas compliqué^^
Llednar
Llednar
Membre

Nombre de messages : 11
Distinction : aucune
Date d'inscription : 09/04/2011

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Lun 2 Mai 2011 - 0:02
Script qui ne fonctionne pas desolé en plus j'aurais aimé m'en servir
grifdail
grifdail
Membre

Nombre de messages : 51
Distinction : aucune
Date d'inscription : 18/04/2008

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Lun 2 Mai 2011 - 13:33
Necro de pres d'un an non?
Sinon desoler pour toi mai j'ai aretter le making donc je vais pas pouvoire t'aider
Si tu y tien vraiment MP moi je verais ce que je peut faire
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Lun 2 Mai 2011 - 15:18
Ce code fonctionne parfaitement...
Je viens de tester, ça marche niquel. Bon, ça peut être amélioré au niveau de la structure, m'enfin.

Neko'.
Llednar
Llednar
Membre

Nombre de messages : 11
Distinction : aucune
Date d'inscription : 09/04/2011

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Lun 2 Mai 2011 - 17:03
ouais deso pour le necro en fait j'ai une erreur ligne 134
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Lun 2 Mai 2011 - 21:02
T'as défini une valeur pour la variable $tarif?
Faudrait que je bosse un peu sur ce code tiens pour l'améliorer...
Llednar
Llednar
Membre

Nombre de messages : 11
Distinction : aucune
Date d'inscription : 09/04/2011

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Jeu 5 Mai 2011 - 18:31
Non je vois ou est MON erreur
Masouf
Masouf
Membre

Nombre de messages : 284
Age : 25
Localisation : Rennes
Distinction : aucune
Date d'inscription : 24/12/2008

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Jeu 5 Mai 2011 - 21:18
Bonjour tout le monde,
Alors voila le script fonctionne bien avec moi mais je ne sais pas comment faire pour valider la quête (on encore on ne peut pas voir l’avancement de la quête par exemple : je dois tuer 10 monstres j’en tue 1 sa aurai été bien que l’on me dise combien il m’en reste à tuer soit 9). J’aurai aussi aimé que le se script soir aussi compatible avec le Requiem ABS 9 de vlad, pour que lorsque l’on tue un monstres sur la carte il soit compté comme mort dans un combat.
Voila c’est tout.
Llednar
Llednar
Membre

Nombre de messages : 11
Distinction : aucune
Date d'inscription : 09/04/2011

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Ven 6 Mai 2011 - 21:22
re testé et approuvé je m'était trompé dans l'ordre des etapes:lol!: Systeme de quête avancée  et bonus 301290 mais c normal que la que soit acceptée tout de suite??
Elisa'
Elisa'
Staffeux retraité

Nombre de messages : 2924
Age : 21
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris Systeme de quête avancée  et bonus 344805Systeme de quête avancée  et bonus 344805
[Coco' Smile]
Plus que 2 ans avant d'épouser Coco' ! Compte à rebours lancé !
[Auto-distinction]

Adepte du "Je le savais" alors qu'elle le savait pas.
Date d'inscription : 30/05/2009

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

le Sam 7 Mai 2011 - 12:23
Llednar, merci de faire attention à éviter les abréviations comme "c" à la place de "c'est". Les nécroposts sont interdits, pour les problèmes il y a la section entraide. La prochaine fois c'est l'avertissement.

Bonne journée Wink

_________________


Cliquez ici pour voter pour la commu'
Systeme de quête avancée  et bonus Banner
Contenu sponsorisé

Systeme de quête avancée  et bonus Empty Re: Systeme de quête avancée et bonus

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum