Le forum des Fans des Final Fantasy
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Le deal à ne pas rater :
Réassort du coffret Pokémon 151 Électhor-ex : où l’acheter ?
Voir le deal

 

 La Forge

Aller en bas 
2 participants
AuteurMessage
Riful
lvl 18 : Bronze Fighter
lvl 18 : Bronze Fighter
Riful


Nombre de messages : 339
Alias : Un mec...je suis un mec...xD...
Date d'inscription : 24/06/2005

La Forge Empty
MessageSujet: La Forge   La Forge EmptyMer 25 Juil à 19:43

Et bien, Xanatos avait voulu faire d'une forge, mais ce n'etait pas un script mais un tuto. En cherchant j'ai trouvé un super script pour faire une forge, et je peux vous dire qu'il est fonctionnel 19 !

Auteur : Deke
Remarques : Ce scrit marche, je vous donnerais l'explication ci dessous.
Fonctions : Un script pour faire une forge (construction d'arme / armure / item ?)
Screen :
Installation : Créer un script au-dessus de « Main » que nous appellerons « Crafting_program » (le nom importe peu !) et introduire ceci à l'intérieur :

Code:
#================================
# CRAFTING PROGRAM
#----------------------------------------------------------------
#-written by Deke
#-yes_no window code created by Phsylomortis
#----------------------------------------------------------------
#================================

class Game_Temp
  attr_reader :recipe_list
 
  alias crafting_temp_initialize initialize

  def initialize
    crafting_temp_initialize
    @recipe_list=[]
    get_recipe_list
  end
 
  def get_recipe_list
#copier-coller les 7 lignes suivantes afin de créer vos recettes
 
    ingredients = []
    ingredient_types = []
    quantities = []
    result =
    result_type =
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
 
end
end

#updates to Game_Party class

class Game_Party
 
 attr_accessor      :recipes
 
 alias crafting_party_initialize initialize
 
 def initialize
  crafting_party_initialize
  @recipes=[]
 end
 
 #----------------------------------------------------------------------
 def know?(recipe, version = 1)
  unless recipe.is_a?(Game_Recipe)
    recipe = get_recipe_from_master_list(recipe, version)
  end
  return $game_party.recipes.include?(recipe)
 end
 
#----------------------------------------------------------------------
 def learn_recipe(recipe , version = 1)
  unless recipe.is_a?(Game_Recipe)
    recipe = get_recipe_from_master_list(recipe, version)
  end
  if recipe.is_a?(Game_Recipe)
    unless know?(recipe)
      @recipes.push(recipe)
    end
  end
 end
 
#----------------------------------------------------------------------
 def forget_recipe(recipe , version = 1)
  if !recipe.is_a?(Game_Recipe)
    recipe = get_recipe_from_master_list(recipe, version)
  end
  if recipe.is_a?(Game_Recipe)
    for i in 0...@recipes.size
      if recipe == @recipes[i]
        index = i
        break
      end
    end
    if index != nil
      @recipes.delete(@recipes[index])
    end
  end
 end
 
#----------------------------------------------------------------------
 def get_recipe_from_master_list(item, version)
  index = nil
  for i in 0...$game_temp.recipe_list.size
    if item[0] == $game_temp.recipe_list[i].result and item[1] ==$game_temp.recipe_list[i].result_type
      version -= 1
      if version == 0
        index = i
        break
      end
    end
  end
  if index.is_a?(Integer)
    return ($game_temp.recipe_list[index])
  else
    return false
  end
 end
 
end # of Game_Party updates

#================================
class Game_Recipe

 attr_reader :ingredients
 attr_reader :quantities
 attr_reader :result
 attr_reader :result_type
 attr_reader :ingredient_types
 
#----------------------------------------------------------------------
 def initialize( ingredients, ingredient_types, quantities, result, result_type)
  @ingredients = ingredients
  @ingredient_types = ingredient_types
  @quantities = quantities
  @result = result
  @result_type = result_type
 end
 
#----------------------------------------------------------------------
 def name
  case @result_type
    when 0
      name = $data_items[@result].name
    when 1
      name = $data_armors[@result].name
    when 2
      name = $data_weapons[@result].name
  end
  return name
 end

#----------------------------------------------------------------------
 def have
  have_all = true
  for i in 0...@ingredients.size
    case @ingredient_types[i]
      when 0
        if $game_party.item_number(@ingredients[i]) < @quantities[i]
          have_all=false
        end
      when 1
        if $game_party.armor_number(@ingredients[i]) < @quantities[i]
          have_all=false
        end
      when 2
        if $game_party.weapon_number(@ingredients[i]) < @quantities[i]
          have_all=false
        end
    end
  end
  return have_all
 end

#----------------------------------------------------------------------
 def decrement
  for i in 0...@ingredients.size
    case @ingredient_types[i]
    when 0
      $game_party.lose_item(@ingredients[i], @quantities[i])
    when 1
      $game_party.lose_armor(@ingredients[i], @quantities[i])
    when 2
      $game_party.lose_weapon(@ingredients[i], @quantities[i])
    end
  end
 end

#----------------------------------------------------------------------
 def make
  if have
    case @result_type
    when 0
      $game_party.gain_item(@result, 1)
    when 1
      $game_party.gain_armor(@result, 1)
    when 2
      $game_party.gain_weapon(@result, 1)
    end
    decrement
  end
 end
 
#----------------------------------------------------------------------
 def == (recipe)
  if recipe.is_a?(Game_Recipe)
    equal = true
    if recipe.ingredients != self.ingredients
      equal = false
    end
    if recipe.ingredient_types != self.ingredient_types
      equal = false
    end
    if recipe.quantities != self.quantities
      equal = false
    end
    if recipe.result != self.result
      equal=false
    end
    if recipe.result_type != self.result_type
      equal = false
    end
  else
    equal = false
  end
  return equal
 end
 
end # of Game_Recipe class

#===================================

class Window_Craft < Window_Selectable

 #--------------------------------------------------------------------------
 def initialize
  super(0, 64, 240, 416)
  @column_max = 1
  refresh
  self.index = 0
 end

 #--------------------------------------------------------------------------
 def recipe
  return @data[self.index]
 end

 #--------------------------------------------------------------------------
 def refresh
  if self.contents != nil
    self.contents.dispose
    self.contents = nil
  end
  @data = []
  for i in 0...$game_party.recipes.size
      @data.push($game_party.recipes[i])
  end
  @item_max = @data.size
  if @item_max > 0
    self.contents = Bitmap.new(width - 32, row_max * 32)
    self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
    self.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
    for i in 0...@item_max
      draw_item(i)
    end
  end
 end

 #--------------------------------------------------------------------------
 def draw_item(index)
  recipe = @data[index]
  self.contents.font.color = recipe.have ? normal_color : disabled_color
  x = 16
  y = index * 32
  self.contents.draw_text(x , y, self.width-32, 32, recipe.name, 0)
 end

 #--------------------------------------------------------------------------
 def update_help
  current_recipe = recipe
  if current_recipe.is_a?(Game_Recipe)
  case current_recipe.result_type
    when 0
      description = $data_items[current_recipe.result].description
    when 1
      description = $data_armors[current_recipe.result].description
    when 2
      description = $data_weapons[current_recipe.result].description
    end
  else
    description = ""
  end
  @help_window.set_text(description)
  @help_window.update
 end
 
end # of Window_Craft

#=======================================
class Window_CraftResult < Window_Base

 #--------------------------------------------------------------------------
 def initialize
  super(240, 64, 400, 184)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  self.contents.font.size = 20
  @result = nil
  @type = nil
 end

 #--------------------------------------------------------------------------
 def refresh
  self.contents.clear
  case @type
    when 0
      item = $data_items[@result]
      if item.recover_hp_rate > item.recover_hp
        hp_string = "HP rendus :"
        hp_stat = item.recover_hp_rate
      else
        hp_string = "HP rendus:"
        hp_stat = item.recover_hp
      end
      if item.recover_sp_rate > item.recover_sp
        sp_string = "MP rendus :"
        sp_stat = item.recover_sp_rate
      else
        sp_string = "MP rendus:"
        sp_stat = item.recover_sp
      end
      @strings = [hp_string, sp_string, "Def phy:" , "Def mag:", "Précision:", "Variance:"]
      @stats = [hp_stat, sp_stat, item. pdef_f, item.mdef_f, item.hit, item.variance,
                      $game_party.item_number(@result)]
      @bitmap = RPG::Cache.icon(item.icon_name)
    when 1
      item = $data_armors[@result]
      @strings = ["Def phy:", "Def mag:", "Esquive:", "Force:", "Defense:",
                      "Agilité:", "Intelligence:"]
      @stats = [item.pdef, item.mdef, item.eva, item.str_plus, item.dex_plus,
                  item.agi_plus, item.int_plus, $game_party.armor_number(@result) ]
      @bitmap = RPG::Cache.icon(item.icon_name)
    when 2
      item = $data_weapons[@result]
      @strings =["Attaque:", "Def phy:", "Def mag:", "Force:", "Defense:",
                  "Agilité:", "Intelligence:"]
      @stats = [item.atk, item.pdef, item.mdef, item.str_plus, item.dex_plus,
                  item.agi_plus, item.int_plus, $game_party.weapon_number(@result) ]
      @bitmap = RPG::Cache.icon(item.icon_name)
  end
  for i in 0...@strings.size
    x = i%2 * 184
    y = i /2 *28 +32
    self.contents.font.color = normal_color
    self.contents.draw_text(x,y,100, 28,@strings[i])
    self.contents.font.color = system_color
    self.contents.draw_text(x + 110, y, 45, 28, @stats[i].to_s)
  end
  self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, 24, 24), 255)
  self.contents.font.color= normal_color
  self.contents.draw_text(40, 0, 300, 28, "Possédé:")
  self.contents.font.color = system_color
  count = @stats[@stats.size - 1].to_s
  self.contents.draw_text(294, 0, 45, 28, count )
 end
 
#----------------------------------------------------------------------
 def set_result(result , type)
  @result = result
  @type = type
  refresh
 end

end #of Window_CraftResult

#=======================================
class Window_CraftIngredients < Window_Base

 #--------------------------------------------------------------------------
 def initialize
  super(240, 248, 400, 232)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  self.contents.font.size = 20
  @ingredients = []
  @types = []
  @quantities = []
  @item = nil
  @count = 0
 end

 #--------------------------------------------------------------------------
 def refresh
  self.contents.clear
  for i in 0...@ingredients.size
    case @types[i]
    when 0
      @item = $data_items[@ingredients[i]]
      @count = $game_party.item_number(@ingredients[i])
    when 1
      @item = $data_armors[@ingredients[i]]
      @count = $game_party.armor_number(@ingredients[i])
    when 2
      @item = $data_weapons[@ingredients[i]]
      @count = $game_party.weapon_number(@ingredients[i])
    end
    y = i *26
    self.contents.blt(0, y, RPG::Cache.icon(@item.icon_name), Rect.new(0, 0, 24, 24), 255)
    self.contents.font.color = @count >= @quantities[i] ? normal_color : disabled_color
    self.contents.draw_text(30, y, 280, 28, @item.name)
    self.contents.draw_text(300, y, 45, 28, @quantities[i].to_s)
    self.contents.font.color = system_color
    self.contents.draw_text(245, y, 45, 28, @count.to_s )   
  end
 end
   
 #--------------------------------------------------------------------------
 def set_ingredients(ingredients , types, quantities)
  @ingredients = ingredients
  @types = types
  @quantities = quantities
  refresh
 end

end # of Window_CraftIngredients

#======================================
class Scene_Craft

 #--------------------------------------------------------------------------
 def initialize(craft_index=0, return_scene = "Menu")
  @craft_index=craft_index
  @return_scene = return_scene
 end
Revenir en haut Aller en bas
Riful
lvl 18 : Bronze Fighter
lvl 18 : Bronze Fighter
Riful


Nombre de messages : 339
Alias : Un mec...je suis un mec...xD...
Date d'inscription : 24/06/2005

La Forge Empty
MessageSujet: Re: La Forge   La Forge EmptyMer 25 Juil à 19:44

Code:
#--------------------------------------------------------------------------
 def main
  @craft_window = Window_Craft.new
  @craft_window.index=@craft_index
  @confirm_window = Window_Base.new(120, 188, 400, 64)
  @confirm_window.contents = Bitmap.new(368, 32)
  @confirm_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  @confirm_window.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
  @help_window = Window_Help.new
  @craft_window.help_window = @help_window
  @result_window=Window_CraftResult.new
  @ingredients_window=Window_CraftIngredients.new
  @yes_no_window = Window_Command.new(100, ["Oui", "Non"])
  @confirm_window.visible = false
  @confirm_window.z = 1500
  @yes_no_window.visible = false
  @yes_no_window.active = false
  @yes_no_window.index = 1
  @yes_no_window.x = 270
  @yes_no_window.y = 252
  @yes_no_window.z = 1500
  @label_window = Window_Base.new(450,200,190,52)
  @label_window.contents=Bitmap.new(@label_window.width - 32,@label_window.height - 32)
  @label_window.contents.font.size=20
  @label_window.contents.font.color = @label_window.normal_color
  @label_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  @label_window.contents.draw_text(0, 0, @label_window.contents.width, 20, "Possédé    Besoin")
  Graphics.transition
  loop do
    Graphics.update
    Input.update
    update
    if $scene != self
      break
    end
  end
  Graphics.freeze
  @help_window.dispose
  @craft_window.dispose
  @result_window.dispose
  @ingredients_window.dispose
  @confirm_window.dispose
  @yes_no_window.dispose
  @label_window.dispose
 end

 #--------------------------------------------------------------------------
 def update
  @craft_window.update
  @ingredients_window.update
  if $game_party.recipes.size > 0
    @result_window.set_result(@craft_window.recipe.result, @craft_window.recipe.result_type)
    @ingredients_window.set_ingredients(@craft_window.recipe.ingredients,
                                                          @craft_window.recipe.ingredient_types,
                                                          @craft_window.recipe.quantities)
  end
  if @craft_window.active
    update_craft
    return
  end
  if @yes_no_window.active
    confirm_update
    return
  end
 end

 #--------------------------------------------------------------------------
 def update_craft
  if Input.trigger?(Input::B)
    $game_system.se_play($data_system.cancel_se)
    if @return_scene == "Menu"
      $scene = Scene_Menu.new(0)
    else
      $scene = Scene_Map.new
    end
    return
  end
  if Input.trigger?(Input::C)
    @recipe = @craft_window.recipe
    if @recipe.have
      @yes_no_window.active = true
      @craft_window.active = false
    else
      $game_system.se_play($data_system.buzzer_se)
      return
    end
  end
 end

 #--------------------------------------------------------------------------
 def confirm_update
  @craft_index = @craft_window.index
  @confirm_window.visible = true
  @confirm_window.z = 1500
  @yes_no_window.visible = true
  @yes_no_window.active = true
  @yes_no_window.z = 1500
  @yes_no_window.update
  string = "Fabriquer " + @recipe.name + "?"
  cw = @confirm_window.contents.text_size(string).width
  center = @confirm_window.contents.width/2 - cw /2
  unless @drawn
    @confirm_window.contents.draw_text(center, 0, cw, 30, string)
    @drawn = true
  end
  if Input.trigger?(Input::C)
    if @yes_no_window.index == 0
      $game_system.se_play($data_system.decision_se)
      @recipe.make
      $game_system.se_play($data_system.save_se)
      $scene=Scene_Craft.new(@craft_index)
    else
      $game_system.se_play($data_system.cancel_se)
      $scene=Scene_Craft.new(@craft_index)
    end
  end
  if Input.trigger?(Input::B)
    $game_system.se_play($data_system.cancel_se)
    $scene=Scene_Craft.new(@craft_index)
  end
 end
end

Voilà, je vais vous faire une explication de comment ça marche.
Tout commence à la ligne 21 :

Entrer dans les crochets les chiffres de cette façon :

ingredients : [l’ID des ingredients séparés par des virgules ","]
ingredient_type : [objet : 0 / Armure :1 / Arme :2]
quantities = [mettez les quantité des ingredients séparés par des virgules dans l'ordre respectif de ci-dessus
result : l’ID de l’objet fabriqué
result type : (objet :0 ; armure :1 ; arme :2)

Il est normal que vous n'ayez toujours pas tout compris.
Nous allons prendre un exemple. Vous voulez créer une arme du nom de Solar Sword. Pour cela vous avez besoin de:

- 1 Bague solaire - ID : 41
- 1 Ruban de Runa - ID : 42
- 1 Mémoire 412 - ID : 43
- 30 Sceaux de feu - ID : 44
- 10 Hananosolar - ID : 45

La Solar Sword - ID - 7
La Forge Forge2gg8
Pour appeler la forge, appeler un script avec un event
Code :
$scene=Scene_Craft.new

Pour qu’une recette soit accessible dans cette forge, appeler de nouveau un script
Code :

$game_party.learn_recipe([7,2])

Entre les crochets, mettre l’ID de l’objet obtenu, puis le type de l’objet
(7 : L'ID de Solar Sword, 2 son type (arme) ).

Revenons à notre script, cela donnera :
Code:
#======Solar Sword======#
    ingredients = [41,42,43,44,45]
    ingredient_types = [0,0,0,0,0,0]
    quantities = [1,1,1,30,10]
    result = 6
    result_type = 2
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))

Tous les ingrédients dont on a besoin sont des objets, donc "0", pour les quantité, ils sont dans l'ordre respectif des ingrédients.
Après vous devrez avoir tout saisi.

Attaquons un deuxieme problème.
Vous voulez que dans votre forge il y est plusieurs armes !

Vous copiez collé le :

ingredients = []
ingredient_types = []
quantities = []
result =
result_type =
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))

Et mettez ce qu'il faut.
ATTENTION ! Une erreur peut survenir si vous mettez ce petit bout, en dessous du end ! il faut le mettre au dessus ! dans mon cas j'ai fait comme ça (Riférus est le nom d'une autre arme)
La Forge Forge3ub9
LIGNE 22 à LIGNE 41 (Alnéstère est le nom du forgeron)
Code:
#=====Alnestère=====#

#======Solar Sword======#
    ingredients = [41,42,43,44,45]
    ingredient_types = [0,0,0,0,0,0]
    quantities = [1,1,1,30,10]
    result = 6
    result_type = 2
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))

#========Riférus=======#
    ingredients = [33,34,35,36,37,38]
    ingredient_types = [0,0,0,0,0,0]
    quantities = [5,50,1,1,1,1]
    result = 7
    result_type = 2
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
 
end
end

La Forge Forgexh1

Voilà, c'est finit.
Revenir en haut Aller en bas
Wakka211
Administrateur
Wakka211


Nombre de messages : 234
Age : 37
Alias : Nibelhem
Date d'inscription : 04/06/2004

La Forge Empty
MessageSujet: Re: La Forge   La Forge EmptyMar 31 Juil à 1:33

Wahou ça programme dit donc, je suis en pleine programmtion flash en ce moment
Revenir en haut Aller en bas
http://www.fansdesff.com
Contenu sponsorisé





La Forge Empty
MessageSujet: Re: La Forge   La Forge Empty

Revenir en haut Aller en bas
 
La Forge
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Forge

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le forum des Fans des Final Fantasy :: Projets des membres :: Tutoriaux-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser