Partagez
Aller en bas
avatar
Bencoco
Membre

Nombre de messages : 31
Age : 27
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012

Changement de système monétaire

le Lun 25 Fév 2013 - 17:39
Comme dit dans le titre, ce script permet d'avoir l'argent que l'on possède exprimé en fonction de trois matériaux.

Ce script est intégralement de Moi Smile mais vous pouvez l'utiliser tant que je suis dans les crédits ! merci de votre compréhension
(l'auteur de ce script se décharge de toute responsabilités en cas d'interférences entre ce script et tout autre script préalablement installé :-D )

et un petit screen pour être compris :


et la vous me direz, c'est bien gentil ton truc mais dans les dialogues comment je fais ??

eh bien oui j'ai pensé à tout ! car rappelez vous quand vous écrivez une somme d'argent dans un texte vous rajoutez \G pour l'unité eh bien il suffit d'écrire \OAC[valeur] pour que l'argent soit écrit de la même manière dans les texte, de plus cette fonction ajoute automatiquement la quantité d'argent saisie au porte monaie sans avoir besoin de rajouter une ligne d'évent.

ex:

devient :


et pour que tout soit bien dans le meilleur des mondes j'ai un petit peu du modifier le menu "magasin"



et voilà pour bénéficier de ce magnifique script, il suffit de le coller à l'endroit habituel (en dessous de materials) :


Code:


#==============================================================================
#  Gestion Or, Argent Cuivre
# Scripts de base modifiés par Bencoco
#                                                                    Enjoy !
#==============================================================================

#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
#  Cette classe gère les magasins
#==============================================================================

class Scene_Shop < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Prepare
  #--------------------------------------------------------------------------
  def prepare(goods, purchase_only,event_id)
    @goods = goods
    @purchase_only = purchase_only
    @event_id = event_id
  end
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window_shop
    create_gold_window
    create_command_window
    create_dummy_window
    create_number_window
    create_status_window
    create_buy_window
    create_category_window
    create_sell_window
  end
  #--------------------------------------------------------------------------
  # * Create Gold Window
  #--------------------------------------------------------------------------
  def create_gold_window
    @gold_window = Window_Gold.new
    @gold_window.viewport = @viewport
    @gold_window.x = Graphics.width - @gold_window.width
    @gold_window.y = 0
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_ShopCommand.new(@gold_window.x, @purchase_only)
    @command_window.viewport = @viewport
    @command_window.y = (@gold_window.height - @command_window.height)/2
    @command_window.set_handler(:buy,    method(:command_buy))
    @command_window.set_handler(:sell,  method(:command_sell))
    @command_window.set_handler(:cancel, method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # * Create Dummy Window
  #--------------------------------------------------------------------------
  def create_dummy_window
    wy = @gold_window.y + @gold_window.height
    wh = Graphics.height - wy - @help_window.height
    @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
    @dummy_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # * Create Sell Window
  #--------------------------------------------------------------------------
  def create_sell_window
    wy = @category_window.y + @category_window.height
    wh = Graphics.height - wy - @help_window.height
    @sell_window = Window_ShopSell.new(0, wy, Graphics.width, wh)
    @sell_window.viewport = @viewport
    @sell_window.help_window = @help_window
    @sell_window.hide
    @sell_window.set_handler(:ok,    method(:on_sell_ok))
    @sell_window.set_handler(:cancel, method(:on_sell_cancel))
    @category_window.item_window = @sell_window
  end

  #--------------------------------------------------------------------------
  # * Effectuer l'achat
  #--------------------------------------------------------------------------
  def do_buy(number)
    # retire l'argent
    $game_party.lose_gold(number * buying_price)
    # ajoute l'objet
    $game_party.gain_item(@item, number)
   
    # détermine le type d'objet
    type = type_item(@item)
   
    #pour n compris entre 0 et le nombre d'objets dans le magasin
    for n in 0..@goods.count-1
      #si l'élément 1 de l'objet n correspond à l'id de l'objet
      # et si l'élément 0 de l'objet n correspond à la variable type
      if @goods[n][1] == @item.id and @goods[n][0] == type
        #si l'élément 4 de l'objet n correspond à "number" le nombre d'objet que l'on a acheté
        if @goods[n][4] == number
          #retirer l'objet de la liste d'objets de l'event
          $game_map.events[@event_id].list.delete_at n
          # retirer de la liste du magasin ouvert
          @goods.delete_at n
        end
      end
    end
   
  end
  #--------------------------------------------------------------------------
  # * Effectuer la vente
  #--------------------------------------------------------------------------
  def do_sell(number)
    # ajouter l'argent
    $game_party.gain_gold(number * selling_price)
    # retirer l'objet
    $game_party.lose_item(@item, number)
    # initialisation du test
    test = 0
   
    # détermine le type d'objet
    type = type_item(@item)
   
    # détermine le nombre d'objets en vente dans l'event
    fin = $game_map.events[@event_id].list.count-1
   
    # pour i compris entre 0 et le nombre d'objets
    for i in 0..fin
      # si un objet de même type existe
      if $game_map.events[@event_id].list[i].parameters[0] == type
        # si cet objet a le même id
        if $game_map.events[@event_id].list[i].parameters[1] == @item.id
          # si sa quantité éxiste
          if $game_map.events[@event_id].list[i].parameters[4] != nil
            # si sa quantité n'a pas pour valeur false
            if $game_map.events[@event_id].list[i].parameters[4] != false
              # ajouter la quantité vendue à la quantité déjà en stock
              $game_map.events[@event_id].list[i].parameters[4] += number
              # ajouter dans le magasin actif
              @goods[i][4] += number
            end
          end
          # si un objet existe mais sans quantité ajouter 1 à la variable test
          test += 1
        end
      end
    end
   
    # si aucun objet identique n''existe dans le magasin
    if test == 0
      # modifier le code du dernier objet de la liste de l'évent
      #ici 605 correspond à un objet supplémentaire en magasin
      $game_map.events[@event_id].list[fin].code = 605
      # modifier le indent du dernier objet de la liste de l'évent
      $game_map.events[@event_id].list[fin].indent = 0
      # modifier les parametres du dernier objet de la liste de l'évent
      $game_map.events[@event_id].list[fin].parameters = [type,@item.id,0,0,number]
      # ajouter une dernière commande vide popur clorer la liste
      $game_map.events[@event_id].list.push(RPG::EventCommand.new)
      #ajouter l'objet dans le magasin actuel
      @goods.push([type,@item.id,0,0,number]) 
    end
  end

  #--------------------------------------------------------------------------
  # * Get Maximum Quantity Buyable
  #--------------------------------------------------------------------------
  def max_buy
   
    # détermine le type d'objet
    type = type_item(@item)
    #initialise le max à 0
    max = 0
    #pour chaque objet de la liste appliquer identité
    @goods.each do |identite|
      # si l'id et le type de l'objet correspondent à quelquechose dans la base
      if identite[1] == @item.id and identite[0] == type
        # si la quantité existe
        if identite[4] !=nil
          # si la quantité n'a pas pour valeur false
          if identite[4] != false
            # max prend pour valeur la quantité
            max = identite[4]
          end
        end
      end
    end
    # si max a pour valeur 0
    if max == 0
      # max prend la valeur par défaut
      max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
    end
    #détermine la quantité pouvant être achetée en fonction de l'argent possédé
    buying_price == 0 ? max : [max, money / buying_price].min
  end
  #--------------------------------------------------------------------------
  # * Détermine le type d'objet
  #--------------------------------------------------------------------------
  def type_item(objet)
   
    # si l'objet est un "objet"
    if objet.is_a?(RPG::Item)
      return 0
    end
    # si l'objet est une arme
    if objet.is_a?(RPG::Weapon)
      return 1
    end
    # si l'objet est une armure
    if objet.is_a?(RPG::Armor)
      return 2
    end
  end
end

#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  Ceci est une super-classe pour toutes les fenêtres du jeu.
#==============================================================================

class Window_Base < Window
 
  def process_escape_character(code, text, pos)
    case code.upcase
    # ajoute la possibilité en écrivant "\OAC[valeur] d'écrire l'argent
    # sous la forme or argent cuivre(OAC)
    when 'OAC'
      process_draw_gold(obtain_escape_param(text),pos)
    when 'C'
      change_color(text_color(obtain_escape_param(text)))
    when 'I'
      process_draw_icon(obtain_escape_param(text), pos)
    when '{'
      make_font_bigger
    when '}'
      make_font_smaller
    end
  end
 
  #--------------------------------------------------------------------------
  # * Écrit l'argent sous forme OAC
  #--------------------------------------------------------------------------
  def process_draw_gold(value,pos)
   
    # ajoute la somme dans le crochet à la bourse
    $game_party.gain_gold(value)
    # détermine la quantité d'or
    gold = value/10000
    # détermine la quantité d'argent
    silver = (value-(10000*gold.to_i))/100
    # détermine la quantité de cuivre
    copper = value - 10000*gold.to_i - 100*silver.to_i

    # La partie suivante gère les différents cas de figure
    # et place les icones et le texte en fonction :
   
    # si l'on a que du cuivre
    if copper != 0 and silver == 0 and gold == 0
      draw_coin(pos,20,copper,2)
      pos[:x] += 35
    end
    # si l'on a que de l'argent
    if copper == 0 and silver != 0 and gold == 0
      draw_coin(pos,20,silver,1)
      pos[:x] += 35
    end
    # si l'on a que de l'or
    if copper == 0 and silver == 0 and gold != 0
      draw_coin(pos,20,gold,0)
      pos[:x] += 35
    end
    #si l'on a du cuivre et de l'argent
    if copper != 0 and silver != 0 and gold == 0
      draw_coin(pos,65,copper,2)
      draw_coin(pos,20,silver,1)
      pos[:x] += 80
    end
    #si l'on a du cuivre et de l'or
    if copper != 0 and silver == 0 and gold != 0
      draw_coin(pos,65,copper,2)
      draw_coin(pos,20,gold,0)
      pos[:x] += 80
    end
    #si l'on a de l'or et de l'argent
    if copper == 0 and silver != 0 and gold != 0
      draw_coin(pos,65,silver,1)
      draw_coin(pos,20,gold,0)
      pos[:x] += 80
    end
    # si l'on possède les trois
    if copper != 0 and silver != 0 and gold != 0
      draw_coin(pos,20,gold,0)
      draw_coin(pos,65,silver,1)
      draw_coin(pos,110,copper,2)
      pos[:x] += 125
    end
  end
  #--------------------------------------------------------------------------
  # * dessine les icones et le texte
  #--------------------------------------------------------------------------
  def draw_coin(pos,x1,type,i)
    # dessine le texte
    draw_text(pos[:x] + x1 - text_size(type).width, pos[:y], width, line_height, type)
    # dessine les icones
    draw_icon(125 + i, pos[:x] + x1, pos[:y])
  end
 
  #--------------------------------------------------------------------------
  # * écrit l'argent sous forme OAC à la place de l'unité
  #--------------------------------------------------------------------------
  def draw_currency_value(value, unit, x, y, width)
    # détermine la quantité d'or
    gold = value/10000
    # détermine la quantité d'argent
    silver = (value-(10000*gold.to_i))/100
    # détermine la quantité de cuivre
    copper = value - 10000*gold.to_i - 100*silver.to_i
    # écrit en blanc
    change_color(normal_color)
    # écrit la quantité d'or
    draw_text(x-16, y, width, line_height, gold, 2)
    # écrit la quantité d'argent
    draw_text(x-16, y + line_height, width, line_height, silver, 2)
    # écrit la quantité de cuivre
    draw_text(x-16, y + line_height + line_height, width, line_height, copper, 2)
    # dessine l'icone pour l'or
    draw_icon(125, x + width -16, y, enabled = true)
    # dessine l'icone pour l'argent
    draw_icon(126, x + width -16, y + line_height, enabled = true)
    # dessine l'icone pour le cuivre
    draw_icon(127, x + width -16, y + line_height + line_height, enabled = true)
  end
end

#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
#  Cette fenêtre affiche l'or
#==============================================================================

class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # ● initialise l'objet
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(3))
    refresh
  end
end

#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  Ce module d'interprétation permet d'exécuter les actions des évents
#  Cette classe est utilisée dans les classes suivantes :
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Shop Processing
  #--------------------------------------------------------------------------
  def command_302
    return if $game_party.in_battle
    goods = [@params]
    while next_event_code == 605
      @index += 1
      goods.push(@list[@index].parameters)
    end
    SceneManager.call(Scene_Shop)
    # ajout de la transmission de l'id de l'évent
    SceneManager.scene.prepare(goods, @params[4],@event_id)
    Fiber.yield
  end
end

#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

#==============================================================================
# ** Scene_MenuBase
#------------------------------------------------------------------------------
#  Cete classe effectue les actions de base du menu
#==============================================================================

class Scene_MenuBase < Scene_Base
  #--------------------------------------------------------------------------
  # * Crée une fenêtre d'aide pour le magasin
  #--------------------------------------------------------------------------
  def create_help_window_shop
    @help_window = Window_Help.new
    @help_window.y = Graphics.height - @help_window.height
    @help_window.viewport = @viewport
  end
end

#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

#==============================================================================
# ** Window_ShopBuy
#------------------------------------------------------------------------------
#  Cette fenêtre affiche la liste des objets "achetable"
#==============================================================================

class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # * Dessine les objets
  #--------------------------------------------------------------------------
  def draw_item(index)
    # définition de la variable item
    item = @data[index]
    # définition de rect
    rect = item_rect(index)
    # écrit le nom de l'objet
    draw_item_name(item, rect.x, rect.y, enable?(item))
   
    rect.width -= 4
    # détermine la quantité d'or
    gold = @price[item]/10000
    # détermine la quantité d'argent
    silver = (@price[item]-(10000*gold.to_i))/100
    # détermine la quantité de cuivre
    copper = @price[item] - 10000*gold.to_i - 100*silver.to_i
   
    # La partie suivante gère les différents cas de figure
    # et place les icones et le texte en fonction :
   
    # uniquement du cuivre
    if copper != 0 and silver == 0 and gold == 0
      draw_coin(rect,20,copper,2,enable?(item))
    end
    # uniquement de l'argent
    if copper == 0 and silver != 0 and gold == 0
      draw_coin(rect,20,silver,1,enable?(item))
    end
    # uniquement de l'or
    if copper == 0 and silver == 0 and gold != 0
      draw_coin(rect,20,gold,0,enable?(item))
    end
    # du cuivre et de l'argent
    if copper != 0 and silver != 0 and gold == 0
      draw_coin(rect,20,copper,2,enable?(item))
      draw_coin(rect,65,silver,1,enable?(item))
    end
    # du cuivre et de l'or
    if copper != 0 and silver == 0 and gold != 0
      draw_coin(rect,20,copper,2,enable?(item))
      draw_coin(rect,65,gold,0,enable?(item))
    end
    # de l'or et de l'argent
    if copper == 0 and silver != 0 and gold != 0
      draw_coin(rect,20,silver,1,enable?(item))
      draw_coin(rect,65,gold,0,enable?(item))
    end
    # les trois
    if copper != 0 and silver != 0 and gold != 0
      draw_coin(rect,20,copper,2,enable?(item))
      draw_coin(rect,65,silver,1,enable?(item))
      draw_coin(rect,110,gold,0,enable?(item))
    end
  end
 
  #--------------------------------------------------------------------------
  # * dessine les icones et le texte
  #--------------------------------------------------------------------------
  def draw_coin(rect,x1,type,i,enabled)
    # dessine le texte
    draw_text(rect.x-x1+3, rect.y, rect.width, rect.height, type, 2)
    # dessine l'icone
    draw_icon(125+i, rect.width-x1, rect.y, enabled)
  end
end
j'ai mi pas mal de commentaires dans le script pour ceux qui seraient intéressés par son fonctionnement.

Ah !!! Misérable j'ai failli oublier le bonus ! ^^ lorsque vous vendez un objet au magasin, ce dernier le garde en stock et peut vous le revendre à tout moment ! ( bien entendu plus cher que vous ne l'avez vendu, mais ça ce sont les règles de la finance je n'y peu pas grand chose !!)

Bonne fin de Week-en à tous

avatar
Elisa'
Staffeux retraité

Nombre de messages : 2924
Age : 20
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris
[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

Re: Changement de système monétaire

le Lun 25 Fév 2013 - 18:15
Sympa ce script, +5 points de participation Smile

_________________


Cliquez ici pour voter pour la commu'
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 25
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Re: Changement de système monétaire

le Lun 14 Oct 2013 - 11:54
Bonjour,

J'espère ne pas faire de nécropost en posant des questions à propos de ce script.

Est-il possible donc de switcher entre les différentes monnaies du jeu, de manière à en disposer de plusieurs, mettons 1 monnaie par peuple.

Si oui, est-ce que la valeur du cuivre, par exemple peut-être infériorisée par rapport à celle de l'or, on disposerait alors d'or valant 10 cuivres l'unité.

Toujours dans cette optique, peut-on effectuer un "cours de change", afin de transformer son or en argent ou inversement ?

Merci d'avance
Contenu sponsorisé

Re: Changement de système monétaire

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