¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Tutorial Interactivo [Uso de interruptores]
por Ledai Hoy a las 16:58

» Necesito Script
por Elian84 Hoy a las 04:44

» Holaaa a tod@s!!!
por chronoMxx Hoy a las 03:41

» [AYUDA]Hootshot de moghunter
por Rudy_kinneas Hoy a las 01:06

» El poder oculto (Segunda entrega)
por alex1633 Ayer a las 23:18

» Hola mucho gusto
por Hk Diamond Ayer a las 13:49

» SoraDeathss se presenta!
por chronoMxx Ayer a las 07:50

» {AYUDA}Blizz-ABS Script
por chronoMxx Ayer a las 06:45

» las cosas como son...
por Bleuw Ayer a las 04:18

» Busco artistas graficos para proyecto serio
por Rudy_kinneas 2016-12-02, 20:52

Afiliados
Estadísticas
Tenemos 3381 miembros registrados.
El último usuario registrado es Hk Diamond.

Nuestros miembros han publicado un total de 79767 mensajes en 11247 argumentos.
Navega con Google Chrome
[DESCARGA]

Limitar dinero en script del banco (XP)

 :: RPG Maker :: Ayuda RPG

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Limitar dinero en script del banco (XP)

Mensaje por wemento el 2015-09-23, 12:51

Buenas a todos.

Estuve consultando el asunto de limitar el dinero y resulta que ya de por sí el dinero está limitado. Pero bueno, voy a hacer un tema a parte para aquellos que estén interesados en esto. No es un gran aporte, pero ahí lo dejaré escrito para quien pueda resultarle útil.

Resulta que con el dinero limitado tengo un nuevo problema. Al usar el script del banco y sacar 2000 oros del banco, el dinero de mi personaje se queda en 1000, que es el límite que he fijado, y sin embargo el dinero de la cuenta sí se decrementa en 2000 oros. O sea, que se pierde dinero.

Quisiera saber qué debo modificar a este script para que no te deje sacar nunca más dinero de lo posible (no sólo que te limite los extractos a 1000, sino que si tienes 999 sólo te deje sacar 1, por ejemplo).

Os adjunto el script. Mil gracias a todos.

Salu2

Código:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

#_/  ?Espace de Stockage - KGC_Depository ? Translated by Ojiro -

#_/----------------------------------------------------------------------------

#_/ Espace de stockage pour objets et monaie.

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_





class Window_DepositoryCommand < Window_Selectable

# ?Nom des commandes de l'espace de stockage

DEPOSITORY_COMMAND = [

  "Depositar",      # Déposer

  "Retirar",    # Retirer

  "Almacenar",  # Stocker

  "Tomar"  # Prendre

]

# ?Définitions des commandes

DEPOSITORY_HELP = [

  "Depositar Dbns.",              # Déposer de l'argent

  "Retirar Dbns.",    # Retirer de l'argent

  "Almacenar un objeto",          # Stocker un objet

  "Tomar un objeto"  # Prendre un objet

]

end



class Window_DepositoryGold < Window_Base

# ?Nombre de chiffres maximal pour le dépot de monnaie

GOLD_DIGITS = 7

end



class Scene_Depository

DEPOSIT_GOLD = "Insertar la cantidad a depositar"

WDEPOSIT_GOLD = "Insertar la cantidad a retirar"

DEPOSIT_ITEM = "¿Cuanto quiere depositar?"

WDEPOSIT_ITEM = "¿Cuanto quiere retirar?"

end



#???????????????????????????????????????



#--------------------------------------------------------------------------

# ? Appel de l'espace de stockage

#--------------------------------------------------------------------------

def call_depository

$game_player.straighten

# Affiche l'espace de stockage

$scene = Scene_Depository.new

end



#???????????????????????????????????????



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

# ¦ Game_Party

#------------------------------------------------------------------------------

#  Récupère les informations sur la monnaie et les objets possédés dans

# $game_party

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



class Game_Party

#--------------------------------------------------------------------------

# ? Initialisation

#--------------------------------------------------------------------------

alias initialize_KGC_Depository initialize

def initialize

  # Exécute le processus d'origine

  initialize_KGC_Depository



  @deposit_gold = 0

  @deposit_item = []

  @deposit_weapon = []

  @deposit_armor = []

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur la monnaie

#--------------------------------------------------------------------------

def deposit_gold

  @deposit_gold = 0 if @deposit_gold == nil

  return @deposit_gold

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur la monnaie récupérée

#    number : Montant a récuperer

#--------------------------------------------------------------------------

def gain_deposit_gold(number)

  @deposit_gold = 0 if @deposit_gold == nil

  @deposit_gold += number

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur la monnaie déposée

#    number : Montant à déposer

#--------------------------------------------------------------------------

def lose_deposit_gold(number)

  self.gain_deposit_gold(-number)

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur les objets

#    id : ID

#--------------------------------------------------------------------------

def deposit_item_number(id)

  @deposit_item = [] if @deposit_item == nil

  return @deposit_item[id] != nil ? @deposit_item[id] : 0

end

#--------------------------------------------------------------------------

# ? Acquisition de l'objet

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def gain_deposit_item(id, number)

  @deposit_item = [] if @deposit_item == nil

  @deposit_item[id] = 0 if @deposit_item[id] == nil

  @deposit_item[id] += number

end

#--------------------------------------------------------------------------

# ? Dépôt de l'objet

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def lose_deposit_item(id, number)

  self.gain_deposit_item(id, -number)

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur les armes

#    id : ID

#--------------------------------------------------------------------------

def deposit_weapon_number(id)

  @deposit_weapon = [] if @deposit_weapon == nil

  return @deposit_weapon[id] != nil ? @deposit_weapon[id] : 0

end

#--------------------------------------------------------------------------

# ? Acquisition de l'arme

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def gain_deposit_weapon(id, number)

  @deposit_weapon = [] if @deposit_weapon == nil

  @deposit_weapon[id] = 0 if @deposit_weapon[id] == nil

  @deposit_weapon[id] += number

end

#--------------------------------------------------------------------------

# ? Dépôt de l'arme

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def lose_deposit_weapon(id, number)

  self.gain_deposit_weapon(id, -number)

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur les armures

#    id : ID

#--------------------------------------------------------------------------

def deposit_armor_number(id)

  @deposit_armor = [] if @deposit_armor == nil

  return @deposit_armor[id] != nil ? @deposit_armor[id] : 0

end

#--------------------------------------------------------------------------

# ? Acquisition de l'armure

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def gain_deposit_armor(id, number)

  @deposit_armor = [] if @deposit_armor == nil

  @deposit_armor[id] = 0 if @deposit_armor[id] == nil

  @deposit_armor[id] += number

end

#--------------------------------------------------------------------------

# ? Dépôt de l'armure

#    id    : ID

#    number : Quantité

#--------------------------------------------------------------------------

def lose_deposit_armor(id, number)

  self.gain_deposit_armor(id, -number)

end

end



#???????????????????????????????????????



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

# ¦ Window_DepositoryCommand

#------------------------------------------------------------------------------

#  Ecran de sélection d'une commande de l'espace de stockage

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



class Window_DepositoryCommand < Window_Selectable

#--------------------------------------------------------------------------

# ? Initialisation

#--------------------------------------------------------------------------

def initialize

  super(0, 64, 640, 64)

  self.contents = Bitmap.new(width - 32, height - 32)

  # ?????????

  @commands = DEPOSITORY_COMMAND

  @item_max = @commands.size

  @column_max = @commands.size

  @item_width = (width - 32) / @commands.size

  self.back_opacity = 160

  self.index = 0

  refresh

end

#--------------------------------------------------------------------------

# ? Actualisation

#--------------------------------------------------------------------------

def refresh

  for i in 0...@commands.size

    rect = Rect.new(@item_width * i, 0, @item_width, 32)

    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

    self.contents.font.color = system_color

    self.contents.draw_text(rect, @commands[i], 1)

  end

end

  #--------------------------------------------------------------------------

# ? Curseur

#--------------------------------------------------------------------------

def update_cursor_rect

  if index != -1

    self.cursor_rect.set(@item_width * index, 0, @item_width, 32)

  end

end

#--------------------------------------------------------------------------

# ? Actualisation de la fenêtre d'aide

#--------------------------------------------------------------------------

def update_help

  @help_window.set_text(DEPOSITORY_HELP[self.index])

end

end



#???????????????????????????????????????



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

# ¦ Window_DepositoryGold

#------------------------------------------------------------------------------

#  Indication de la quantité/valeur de la monnaie/objet.

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



class Window_DepositoryGold < Window_Base

#--------------------------------------------------------------------------

# ? Initialisation

#--------------------------------------------------------------------------

def initialize

  super(0, 128, 640, 352)

  @digits_max = GOLD_DIGITS

  # Calcul de la largeur du curseur à partir du nombre de chiffres à entrer

  dummy_bitmap = Bitmap.new(32, 32)

  @cursor_width = dummy_bitmap.text_size("0").width + 8

  dummy_bitmap.dispose

  self.contents = Bitmap.new(width - 32, height - 32)

  self.back_opacity = 160

  self.active = false

  self.visible = false

  @cursor_position = 0

  @max = 0

  @price = 0

  @index = 0

end

#--------------------------------------------------------------------------

# ? Acquisition de la quantité inséré

#--------------------------------------------------------------------------

def price

  return @price

end

#--------------------------------------------------------------------------

# ? Option de la quantité

#    np : Nouvelle quantité

#--------------------------------------------------------------------------

def price=(np)

  @price = [[np, 0].max, @max].min

  redraw_price

end

#--------------------------------------------------------------------------

# ? Reinitialisation

#    type : Type

#--------------------------------------------------------------------------

def reset(type)

  @price = 0

  @index = @digits_max - 1

  refresh(type)

end

#--------------------------------------------------------------------------

# ? Actualisation

#    type : Type

#--------------------------------------------------------------------------

def refresh(type)

  # Affiche la quantité

  self.contents.clear

  domination = $data_system.words.gold

  cx = contents.text_size(domination).width

  @cursor_position = 332 - cx - @cursor_width * @digits_max

  self.contents.font.color = system_color

  self.contents.draw_text(0, 0, 608, 32, "Dbns que tienes:")

  self.contents.draw_text(0, 64, 608, 32, "Depósito:")

  if type == 0

    self.contents.draw_text(0, 128, 608, 32, "Cantidad:")

    @max = $game_party.gold

  else

    self.contents.draw_text(0, 128, 608, 32, "Retirada:")

    @max = [10 ** @digits_max - $game_party.gold - 1, $game_party.deposit_gold].min

  end

  self.contents.font.color = normal_color

  self.contents.draw_text(4, 32, 326 - cx, 32, $game_party.gold.to_s, 2)

  self.contents.font.color = system_color

  self.contents.draw_text(332 - cx, 32, cx, 32, domination, 2)

  self.contents.font.color = normal_color

  self.contents.draw_text(4, 96, 326 - cx, 32, $game_party.deposit_gold.to_s, 2)

  self.contents.font.color = system_color

  self.contents.draw_text(332 - cx, 96, cx, 32, domination, 2)

  redraw_price

end

#--------------------------------------------------------------------------

# ? Quantité re-affiché

#--------------------------------------------------------------------------

def redraw_price

  domination = $data_system.words.gold

  cx = contents.text_size(domination).width

  self.contents.fill_rect(0, 160, 608, 32, Color.new(0, 0, 0, 0))

  self.contents.font.color = normal_color

  text = sprintf("%0#{@digits_max}d", self.price)

  for i in 0...text.length

    x = @cursor_position + (i - 1) * @cursor_width

    self.contents.draw_text(x, 160, 32, 32, text[i, 1], 2)

  end

  self.contents.font.color = system_color

  self.contents.draw_text(332 - cx, 160, cx, 32, domination, 2)

end

#--------------------------------------------------------------------------

# ? Actualisation du curseur

#--------------------------------------------------------------------------

def update_cursor_rect

  x = @cursor_position + @index * @cursor_width

  self.cursor_rect.set(x, 160, @cursor_width, 32)

end

#--------------------------------------------------------------------------

# ? Actualisation

#--------------------------------------------------------------------------

def update

  super

  return unless self.active

  # Lors d'un appui HAUT ou BAS

  if Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN)

    $game_system.se_play($data_system.cursor_se)

    place = 10 ** (@digits_max - 1 - @index)

    n = self.price / place % 10

    self.price -= n * place

    n = (n + 1) % 10 if Input.repeat?(Input::UP)

    n = (n + 9) % 10 if Input.repeat?(Input::DOWN)

    self.price += n * place

  end

  if Input.repeat?(Input::RIGHT)

    if @digits_max >= 2

      $game_system.se_play($data_system.cursor_se)

      @index = (@index + 1) % @digits_max

    end

  end

  if Input.repeat?(Input::LEFT)

    if @digits_max >= 2

      $game_system.se_play($data_system.cursor_se)

      @index = (@index + @digits_max - 1) % @digits_max

    end

  end

  update_cursor_rect

end

end



#???????????????????????????????????????



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

# ¦ Window_DepositoryItem

#------------------------------------------------------------------------------

#  Conception d'un sommaire pour les objets

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



class Window_DepositoryItem < Window_Selectable

#--------------------------------------------------------------------------

# ? Initialisation

#--------------------------------------------------------------------------

def initialize

  super(0, 128, 640, 352)

  self.back_opacity = 160

  self.active = false

  self.visible = false

  @column_max = 2

  self.index = 0

end

#--------------------------------------------------------------------------

# ? Récupère l'information sur les objets

#--------------------------------------------------------------------------

def item

  return @data[self.index]

end

#--------------------------------------------------------------------------

# ? Actualisation

#    type : Type

#--------------------------------------------------------------------------

def refresh(type)

  if self.contents != nil

    self.contents.dispose

    self.contents = nil

  end

  @data = []

  self.index = 0

  # Ajoute l'objet / arme / armure x

  if type == 0

    for i in 1...$data_items.size

      if $game_party.item_number(i) > 0

        @data.push($data_items[i])

      end

    end

    for i in 1...$data_weapons.size

      if $game_party.weapon_number(i) > 0

        @data.push($data_weapons[i])

      end

    end

    for i in 1...$data_armors.size

      if $game_party.armor_number(i) > 0

        @data.push($data_armors[i])

      end

    end

  else

    for i in 1...$data_items.size

      if $game_party.deposit_item_number(i) > 0

        @data.push($data_items[i])

      end

    end

    for i in 1...$data_weapons.size

      if $game_party.deposit_weapon_number(i) > 0

        @data.push($data_weapons[i])

      end

    end

    for i in 1...$data_armors.size

      if $game_party.deposit_armor_number(i) > 0

        @data.push($data_armors[i])

      end

    end



  end

  # Si le nombre d'objet n'est pas de 0 :

  @item_max = @data.size

  if @item_max > 0

    self.contents = Bitmap.new(width - 32, row_max * 32)

    for i in 0...@item_max

      draw_item(i, type)

    end

  end

end

  #--------------------------------------------------------------------------

# ? Affichage de l'objet

#    index : Nombre d'objets

#    type  : Type

#--------------------------------------------------------------------------

def draw_item(index, type)

  item = @data[index]

  case item

  when RPG::Item

    number = type == 0 ? $game_party.item_number(item.id) :

      $game_party.deposit_item_number(item.id)

  when RPG::Weapon

    number = type == 0 ? $game_party.weapon_number(item.id) :

      $game_party.deposit_weapon_number(item.id)

  when RPG::Armor

    number = type == 0 ? $game_party.armor_number(item.id) :

      $game_party.deposit_armor_number(item.id)

  end

  x = 4 + index % 2 * (288 + 32)

  y = index / 2 * 32

  rect = Rect.new(x, y, self.width / @column_max - 32, 32)

  self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

  bitmap = RPG::Cache.icon(item.icon_name)

  self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))

  self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)

  self.contents.draw_text(x + 240, y, 16, 32, ":", 1)

  self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)

end

#--------------------------------------------------------------------------

# ? Actualisation de la fenêtre d'aide

#--------------------------------------------------------------------------

def update_help

  @help_window.set_text(self.item == nil ? "" : self.item.description)

end

end



#???????????????????????????????????????



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

# ¦ Window_DepositoryNumber

#------------------------------------------------------------------------------

#  Fenêtre de l'insertion numérique

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



class Window_DepositoryNumber < Window_Base

#--------------------------------------------------------------------------

# ? Initialisation

#--------------------------------------------------------------------------

def initialize

  @digits_max = 2

  @number = 0

  # Calcul de la largeur du curseur en fonction du nombre de chiffres

  dummy_bitmap = Bitmap.new(32, 32)

  @cursor_width = dummy_bitmap.text_size("0").width + 8

  dummy_bitmap.dispose

  @default_size = @cursor_width * @digits_max + 32

  super(0, 0, @default_size, 128)

  self.contents = Bitmap.new(width - 32, height - 32)

  self.z = 1000

  self.back_opacity = 160

  self.active = false

  self.visible = false

  @index = 0

  @item = nil

  refresh

  update_cursor_rect

end

#--------------------------------------------------------------------------

# ? Option de l'objet

#    item : Objet

#--------------------------------------------------------------------------

def item=(item)

  @item = item

end

#--------------------------------------------------------------------------

# ? Acquisition de la valeur numérique

#--------------------------------------------------------------------------

def number

  return @number

end

#--------------------------------------------------------------------------

# ? Option de la valeur numérique

#    number : Nouvelle valeur numérique

#--------------------------------------------------------------------------

def number=(number)

  @number = [[number, 0].max, @max].min

  refresh

end

#--------------------------------------------------------------------------

# ? Actualisation du curseur

#--------------------------------------------------------------------------

def update_cursor_rect

  self.cursor_rect.set(@index * @cursor_width, 32, @cursor_width, 32)

end

#--------------------------------------------------------------------------

# ? Reinitilisation

#--------------------------------------------------------------------------

def reset(type)

  @number = 0

  @index = @digits_max - 1

  if type == 0

    case @item

    when RPG::Item

      @max = $game_party.item_number(@item.id)

      dep = $game_party.deposit_item_number(@item.id)

    when RPG::Weapon

      @max = $game_party.weapon_number(@item.id)

      dep = $game_party.deposit_weapon_number(@item.id)

    when RPG::Armor

      @max = $game_party.armor_number(@item.id)

      dep = $game_party.deposit_armor_number(@item.id)

    end

    # Affiche la quantité déposé

    self.contents.fill_rect(0, 64, width - 32, 32, Color.new(0, 0, 0, 0))

    self.contents.font.color = system_color

    self.contents.draw_text(0, 64, width - 32, 32, "Depósito:#{dep}")

  else

    case @item

    when RPG::Item

      @max = [$game_party.deposit_item_number(@item.id),

        10 ** @digits_max - $game_party.item_number(@item.id) - 1].min

      having = $game_party.item_number(@item.id)

    when RPG::Weapon

      @max = [$game_party.deposit_weapon_number(@item.id),

        10 ** @digits_max - $game_party.weapon_number(@item.id) - 1].min

      having = $game_party.weapon_number(@item.id)

    when RPG::Armor

      @max = [$game_party.deposit_armor_number(@item.id),

        10 ** @digits_max - $game_party.armor_number(@item.id) - 1].min

      having = $game_party.armor_number(@item.id)

    end

    # Affiche la quantité possedé

    self.contents.fill_rect(0, 64, width - 32, 32, Color.new(0, 0, 0, 0))

    self.contents.font.color = system_color

    self.contents.draw_text(0, 64, width - 32, 32, "Poseído:#{having}")

  end

  refresh

end

#--------------------------------------------------------------------------

# ? Actualisation

#--------------------------------------------------------------------------

def refresh

  self.contents.fill_rect(0, 32, width - 32, 32, Color.new(0, 0, 0, 0))

  self.contents.font.color = normal_color

  s = sprintf("%0*d", @digits_max, @number)

  for i in 0...@digits_max

    self.contents.draw_text(i * @cursor_width + 4, 32, 32, 32, s[i,1])

  end

end

#--------------------------------------------------------------------------

# ? Option du personnage

#    string : Met en place les options

#--------------------------------------------------------------------------

def set_text(string = " ")

  self.resize(self.contents.text_size(string).width + 40)

  self.contents.fill_rect(0, 0, width - 32, 32, Color.new(0, 0, 0, 0))

  self.contents.font.color = normal_color

  self.contents.draw_text(0, 0, width - 32, 32, string, 1)

  refresh

  centering

end

#--------------------------------------------------------------------------

# ? Modification de la taille

#    nw : Nouvelle largeur

#--------------------------------------------------------------------------

def resize(nw)

  self.width = nw

  buf = self.contents.dup

  self.contents.dispose

  self.contents = Bitmap.new(nw - 32, 96)

  self.contents.blt(0, 0, buf, buf.rect)

  buf.dispose

end

#--------------------------------------------------------------------------

# ? Mouvement central

#--------------------------------------------------------------------------

def centering

  self.x = 320 - self.width / 2

  self.y = 240 - self.height / 2

end

#--------------------------------------------------------------------------

# ? Actualisation

#--------------------------------------------------------------------------

def update

  super

  return unless self.active

  # Lors d'un appui HAUT ou BAS

  if Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN)

    $game_system.se_play($data_system.cursor_se)

    place = 10 ** (@digits_max - 1 - @index)

    n = self.number / place % 10

    self.number -= n * place

    n = (n + 1) % 10 if Input.repeat?(Input::UP)

    n = (n + 9) % 10 if Input.repeat?(Input::DOWN)

    self.number += n * place

    refresh

  end

  if Input.repeat?(Input::RIGHT)

    if @digits_max >= 2

      $game_system.se_play($data_system.cursor_se)

      @index = (@index + 1) % @digits_max

    end

  end

  if Input.repeat?(Input::LEFT)

    if @digits_max >= 2

      $game_system.se_play($data_system.cursor_se)

      @index = (@index + @digits_max - 1) % @digits_max

    end

  end

  update_cursor_rect

end

end

#???????????????????????????????????????



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

# ¦ Scene_Depository

#------------------------------------------------------------------------------

#  "Class" qui proccède à l'espace de stockage

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



class Scene_Depository

#--------------------------------------------------------------------------

# ? ?????

#--------------------------------------------------------------------------

def main

  # Compilation des sprites

  @spriteset = Spriteset_Map.new

  # Affiche des fenêtres multiples

  @dummy_window = Window_Base.new(0, 128, 640, 352)

  @help_window = Window_Help.new

  @dummy_window.back_opacity = 160

  @help_window.back_opacity = 160

  @command_window = Window_DepositoryCommand.new

  @gold_window = Window_DepositoryGold.new

  @item_window = Window_DepositoryItem.new

  @number_window = Window_DepositoryNumber.new

  # Association de la fenêtre d'affichage

  @command_window.help_window = @help_window

  @item_window.help_window = @help_window

  # Exécute la transition

  Graphics.transition

  # Boucle Principale

  loop do

    # Actualise les images

    Graphics.update

    # Actualise l'information d'insertion

    Input.update

    # Actualisation

    update

    # Brise la boucle si les images changent

    if $scene != self

      break

    end

  end

  # Préparation de la Transition

  Graphics.freeze

  # Relais

  @spriteset.dispose

  @dummy_window.dispose

  @help_window.dispose

  @command_window.dispose

  @gold_window.dispose

  @item_window.dispose

  @number_window.dispose

end

#--------------------------------------------------------------------------

# ? Actualisation

#--------------------------------------------------------------------------

def update

  # Actualisation des fenêtres

  @dummy_window.update

  @help_window.update

  @command_window.update

  @gold_window.update

  @item_window.update

  @number_window.update

  if @command_window.active

    update_command

    return

  end

  if @gold_window.active

    update_gold

    return

  end

  if @item_window.active

    update_item

    return

  end

  if @number_window.active

    update_number

    return

  end

end

#--------------------------------------------------------------------------

# ? Actualisation lorsque une fenêtre de commande est active

#--------------------------------------------------------------------------

def update_command

  # Lors d'un appui sur la touche B

  if Input.trigger?(Input::B)

    $game_system.se_play($data_system.cancel_se)

    $scene = Scene_Map.new

    return

  end

  # Lors d'un appui sur la touche C

  if Input.trigger?(Input::C)

    $game_system.se_play($data_system.decision_se)

    case @command_window.index

    when 0

      @gold_window.active = true

      @gold_window.visible = true

      @gold_window.reset(0)

      @help_window.set_text(DEPOSIT_GOLD)

    when 1

      @gold_window.active = true

      @gold_window.visible = true

      @gold_window.reset(1)

      @help_window.set_text(WDEPOSIT_GOLD)

    when 2

      @item_window.active = true

      @item_window.visible = true

      @item_window.refresh(0)

    when 3

      @item_window.active = true

      @item_window.visible = true

      @item_window.refresh(1)

    end

    @command_window.active = false

    @dummy_window.visible = false

    return

  end

end

#--------------------------------------------------------------------------

# ? Actualisation lors d'un appui pendant la fenetre de monnaie

#--------------------------------------------------------------------------

def update_gold

  # Lors d'un appui sur la touche B

  if Input.trigger?(Input::B)

    $game_system.se_play($data_system.cancel_se)

    @command_window.active = true

    @gold_window.active = false

    @gold_window.visible = false

    @dummy_window.visible = true

    return

  end

  # Lors d'un appui sur la touche C

  if Input.trigger?(Input::C)

    price = @gold_window.price

    if price == 0

      $game_system.se_play($data_system.decision_se)

      @command_window.active = true

      @gold_window.active = false

      @gold_window.visible = false

      @dummy_window.visible = true

      return

    end

    $game_system.se_play($data_system.shop_se)

    case @command_window.index

    when 0

      $game_party.lose_gold(price)

      $game_party.gain_deposit_gold(price)

    when 1

      $game_party.gain_gold(price)

      $game_party.lose_deposit_gold(price)

    end

    # ??????????????

    @gold_window.reset(@command_window.index)

    return

  end

end

#--------------------------------------------------------------------------

# ? Actualisation lors d'un appui pendant la fenetre d'objet

#--------------------------------------------------------------------------

def update_item

  # Lors d'un appui sur la touche B

  if Input.trigger?(Input::B)

    $game_system.se_play($data_system.cancel_se)

    @command_window.active = true

    @item_window.active = false

    @item_window.visible = false

    @dummy_window.visible = true

    return

  end

  # Lors d'un appui sur la touche C

  if Input.trigger?(Input::C)

    @item = @item_window.item

    if @item == nil

      $game_system.se_play($data_system.buzzer_se)

      return

    end

    @number_window.item = @item

    $game_system.se_play($data_system.decision_se)

    case @command_window.index

    when 2

      @number_window.set_text(DEPOSIT_ITEM)

    when 3

      @number_window.set_text(WDEPOSIT_ITEM)

    end

    @number_window.reset(@command_window.index - 2)

    # ????????????

    @item_window.active = false

    @number_window.active = true

    @number_window.visible = true

    return

  end

end

#--------------------------------------------------------------------------

# ? Actualisation lors d'un appui pendant la fenetre de nombres

#--------------------------------------------------------------------------

def update_number

  # Lors d'un appui sur la touche B

  if Input.trigger?(Input::B)

    $game_system.se_play($data_system.cancel_se)

    @item_window.active = true

    @number_window.active = false

    @number_window.visible = false

    return

  end

  # Lors d'un appui sur la touche C

  if Input.trigger?(Input::C)

    $game_system.se_play($data_system.decision_se)

    number = @number_window.number

    case @command_window.index

    when 2

      case @item

      when RPG::Item

        $game_party.lose_item(@item.id, number)

        $game_party.gain_deposit_item(@item.id, number)

      when RPG::Weapon

        $game_party.lose_weapon(@item.id, number)

        $game_party.gain_deposit_weapon(@item.id, number)

      when RPG::Armor

        $game_party.lose_armor(@item.id, number)

        $game_party.gain_deposit_armor(@item.id, number)

      end

    when 3

      case @item

      when RPG::Item

        $game_party.gain_item(@item.id, number)

        $game_party.lose_deposit_item(@item.id, number)

      when RPG::Weapon

        $game_party.gain_weapon(@item.id, number)

        $game_party.lose_deposit_weapon(@item.id, number)

      when RPG::Armor

        $game_party.gain_armor(@item.id, number)

        $game_party.lose_deposit_armor(@item.id, number)

      end

    end

    @item_window.refresh(@command_window.index - 2)

    @item_window.active = true

    @number_window.active = false

    @number_window.visible = false

    return

  end

end

end

wemento
Iniciado
Iniciado

0/3

Créditos 57

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Limitar dinero en script del banco (XP)

Mensaje por wemento el 2015-09-24, 09:40

Solucionado.

Por si a alguien le sirviera he tenido que cambiar estas líneas (a partir de la línea 179):

Código:
def lose_deposit_gold(number)

  self.gain_deposit_gold(-number)

end

Por estas otras:

Código:
def lose_deposit_gold(number)
 
  if (number + $game_party.oldgold) > $game_party.max_gold
   
    self.gain_deposit_gold(-($game_party.max_gold - $game_party.oldgold))
   
  else
   
    self.gain_deposit_gold(-number)
   
  end

end

De esta forma, si el dinero que quieres sacar hace que el dinero de tu bolsa exceda en una cantidad, esa cantidad extra sigue permaneciendo en el banco. La bolsa no la actualizo porque el propio juego, al limitar el dinero, hace que se ponga en su máximo.

Esto esta solucionado, pero en base a este script me gustaría plantear una duda. Este script del banco ofrece un menú donde también pueden almacenarse y extraer objetos. Me gustaría quitarlo, aunque siga estando el código, por lo menos que no se pueda acceder al menú de objetos, sino que únicamente se ofrezca la posibilidad de almacenar/sacar dinero.

Muchas gracias por vuestra ayuda. Salu2.

wemento
Iniciado
Iniciado

0/3

Créditos 57

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Limitar dinero en script del banco (XP)

Mensaje por Wecoc el 2015-09-24, 14:42

Ok a ver se así funciona como querías:

Código:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/  ?Espace de Stockage - KGC_Depository ? Translated by Ojiro -
#_/----------------------------------------------------------------------------
#_/ Espace de stockage pour objets et monaie.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_


class Window_DepositoryCommand < Window_Selectable
 
  # ?Nom des commandes de l'espace de stockage
 
  DEPOSITORY_COMMAND = [
    "Depositar",  # Déposer
    "Retirar"    # Retirer
    # "Almacenar",  # Stocker
    # "Tomar"      # Prendre
  ]
 
  # ?Définitions des commandes
 
  DEPOSITORY_HELP = [
    "Depositar Dbns.",      # Déposer de l'argent
    "Retirar Dbns."        # Retirer de l'argent
    # "Almacenar un objeto",          # Stocker un objet
    # "Tomar un objeto"  # Prendre un objet
  ]

end

class Window_DepositoryGold < Window_Base
  # ?Nombre de chiffres maximal pour le dépot de monnaie
  GOLD_DIGITS = 7
end

class Scene_Depository
  DEPOSIT_GOLD = "Insertar la cantidad a depositar"
  WDEPOSIT_GOLD = "Insertar la cantidad a retirar"
end

#--------------------------------------------------------------------------
# ? Appel de l'espace de stockage
#--------------------------------------------------------------------------

module Kernel
  def call_depository
    $game_player.straighten
    # Affiche l'espace de stockage
    $scene = Scene_Depository.new
  end
end

#==============================================================================
# ¦ Game_Party
#------------------------------------------------------------------------------
#  Récupère les informations sur la monnaie et les objets possédés dans
# $game_party
#==============================================================================

class Game_Party

  #--------------------------------------------------------------------------
  # ? Initialisation
  #--------------------------------------------------------------------------
  attr_reader :deposit_gold
  alias initialize_KGC_Depository initialize
  def initialize
    # Exécute le processus d'origine
    initialize_KGC_Depository
    @deposit_gold = 0
  end

  #--------------------------------------------------------------------------
  # ? Récupère l'information sur la monnaie récupérée
  #    number : Montant a récuperer
  #--------------------------------------------------------------------------
  def gain_deposit_gold(number)
    @deposit_gold = 0 if @deposit_gold == nil
    @deposit_gold += number
  end

  #--------------------------------------------------------------------------
  # ? Récupère l'information sur la monnaie déposée
  #    number : Montant à déposer
  #--------------------------------------------------------------------------
  def lose_deposit_gold(number)
    if (number + $game_party.oldgold) > $game_party.max_gold
      self.gain_deposit_gold(-($game_party.max_gold - $game_party.oldgold))
    else
      self.gain_deposit_gold(-number)
    end
  end
end

#==============================================================================
# ¦ Window_DepositoryCommand
#------------------------------------------------------------------------------
#  Ecran de sélection d'une commande de l'espace de stockage
#==============================================================================

class Window_DepositoryCommand < Window_Selectable

  #--------------------------------------------------------------------------
  # ? Initialisation
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    # ?????????
    @commands = DEPOSITORY_COMMAND
    @item_max = @commands.size
    @column_max = @commands.size
    @item_width = (width - 32) / @commands.size
    self.back_opacity = 160
    self.index = 0
    refresh
  end

  #--------------------------------------------------------------------------
  # ? Actualisation
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@commands.size
      rect = Rect.new(@item_width * i, 0, @item_width, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) 
      self.contents.font.color = system_color
      self.contents.draw_text(rect, @commands[i], 1)
    end
  end

  #--------------------------------------------------------------------------
  # ? Curseur
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    self.cursor_rect.set(@item_width * index, 0, @item_width, 32)
  end

  #--------------------------------------------------------------------------
  # ? Actualisation de la fenêtre d'aide
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(DEPOSITORY_HELP[self.index])
  end
end

#==============================================================================
# ¦ Window_DepositoryGold
#------------------------------------------------------------------------------
#  Indication de la quantité/valeur de la monnaie/objet.
#==============================================================================

class Window_DepositoryGold < Window_Base

  #--------------------------------------------------------------------------
  # ? Initialisation
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128, 640, 352)
    @digits_max = GOLD_DIGITS
    # Calcul de la largeur du curseur à partir du nombre de chiffres à entrer
    dummy_bitmap = Bitmap.new(32, 32)
    @cursor_width = dummy_bitmap.text_size("0").width + 8
    dummy_bitmap.dispose
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    self.active = false
    self.visible = false
    @cursor_position = 0
    @max = 0
    @price = 0
    @index = 0
  end

  #--------------------------------------------------------------------------
  # ? Acquisition de la quantité inséré
  #--------------------------------------------------------------------------
  def price
    return @price
  end

  #--------------------------------------------------------------------------
  # ? Option de la quantité
  #    np : Nouvelle quantité
  #--------------------------------------------------------------------------
  def price=(np)
    @price = [[np, 0].max, @max].min
    redraw_price
  end

  #--------------------------------------------------------------------------
  # ? Reinitialisation
  #    type : Type
  #--------------------------------------------------------------------------
  def reset(type)
    @price = 0
    @index = @digits_max - 1
    refresh(type)
  end

  #--------------------------------------------------------------------------
  # ? Actualisation
  #    type : Type
  #--------------------------------------------------------------------------
  def refresh(type)
    # Affiche la quantité
    self.contents.clear
    domination = $data_system.words.gold
    cx = contents.text_size(domination).width
    @cursor_position = 332 - cx - @cursor_width * @digits_max
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 608, 32, "Dbns que tienes:")
    self.contents.draw_text(0, 64, 608, 32, "Depósito:")
    if type == 0
      self.contents.draw_text(0, 128, 608, 32, "Cantidad:")
      @max = $game_party.gold
    else
      self.contents.draw_text(0, 128, 608, 32, "Retirada:")
      d_max = 10 ** @digits_max - $game_party.gold - 1
      @max = [d_max, $game_party.deposit_gold].min
    end
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 32, 326-cx, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(332-cx, 32, cx, 32, domination, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 96, 326-cx, 32, $game_party.deposit_gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(332-cx, 96, cx, 32, domination, 2)
    redraw_price
  end

  #--------------------------------------------------------------------------
  # ? Quantité re-affiché
  #--------------------------------------------------------------------------
  def redraw_price
    domination = $data_system.words.gold
    cx = contents.text_size(domination).width
    self.contents.fill_rect(0, 160, 608, 32, Color.new(0, 0, 0, 0))
    self.contents.font.color = normal_color
    text = sprintf("%0#{@digits_max}d", self.price)
    for i in 0...text.length
      x = @cursor_position + (i - 1) * @cursor_width
      self.contents.draw_text(x, 160, 32, 32, text[i, 1], 2)
    end
    self.contents.font.color = system_color
    self.contents.draw_text(332 - cx, 160, cx, 32, domination, 2)
  end

  #--------------------------------------------------------------------------
  # ? Actualisation du curseur
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = @cursor_position + @index * @cursor_width
    self.cursor_rect.set(x, 160, @cursor_width, 32)
  end

  #--------------------------------------------------------------------------
  # ? Actualisation
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active
    # Lors d'un appui HAUT ou BAS
    if Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      place = 10 ** (@digits_max - 1 - @index)
      n = self.price / place % 10
      self.price -= n * place
      n = (n + 1) % 10 if Input.repeat?(Input::UP)
      n = (n + 9) % 10 if Input.repeat?(Input::DOWN)
      self.price += n * place
    end
    if Input.repeat?(Input::RIGHT)
      if @digits_max >= 2
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + 1) % @digits_max
      end
    end
    if Input.repeat?(Input::LEFT)
      if @digits_max >= 2
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + @digits_max - 1) % @digits_max
      end
    end
    update_cursor_rect
  end

end


#==============================================================================
# ¦ Scene_Depository
#------------------------------------------------------------------------------
#  "Class" qui proccède à l'espace de stockage
#==============================================================================

class Scene_Depository

  def main
    # Compilation des sprites
    @spriteset = Spriteset_Map.new
    # Affiche des fenêtres multiples
    @dummy_window = Window_Base.new(0, 128, 640, 352)
    @help_window = Window_Help.new
    @dummy_window.back_opacity = 160
    @help_window.back_opacity = 160
    @command_window = Window_DepositoryCommand.new
    @gold_window = Window_DepositoryGold.new
    # Association de la fenêtre d'affichage
    @command_window.help_window = @help_window
    # Exécute la transition
    Graphics.transition
    # Boucle Principale
    loop do
      # Actualise les images
      Graphics.update
      # Actualise l'information d'insertion
      Input.update
      # Actualisation
      update
      # Brise la boucle si les images changent
      if $scene != self
        break
      end
    end
    # Préparation de la Transition
    Graphics.freeze
    # Relais
    @spriteset.dispose
    @dummy_window.dispose
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
  end

  #--------------------------------------------------------------------------
  # ? Actualisation
  #--------------------------------------------------------------------------

  def update
    # Actualisation des fenêtres
    @dummy_window.update
    @help_window.update
    @command_window.update
    @gold_window.update
    if @command_window.active
      update_command
      return
    end
    if @gold_window.active
      update_gold
      return
    end
  end

  #--------------------------------------------------------------------------
  # ? Actualisation lorsque une fenêtre de commande est active
  #--------------------------------------------------------------------------

  def update_command
    # Lors d'un appui sur la touche B
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    # Lors d'un appui sur la touche C
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      case @command_window.index
      when 0
        @gold_window.active = true
        @gold_window.visible = true
        @gold_window.reset(0)
        @help_window.set_text(DEPOSIT_GOLD)
      when 1
        @gold_window.active = true
        @gold_window.visible = true
        @gold_window.reset(1)
        @help_window.set_text(WDEPOSIT_GOLD)
      end
      @command_window.active = false
      @dummy_window.visible = false
      return
    end
  end

  #--------------------------------------------------------------------------
  # ? Actualisation lors d'un appui pendant la fenetre de monnaie
  #--------------------------------------------------------------------------

  def update_gold
    # Lors d'un appui sur la touche B
    if Input.trigger?(Input::B) 
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @gold_window.active = false
      @gold_window.visible = false
      @dummy_window.visible = true
      return
    end
    # Lors d'un appui sur la touche C
    if Input.trigger?(Input::C)
      price = @gold_window.price
      if price == 0
        $game_system.se_play($data_system.decision_se)
        @command_window.active = true
        @gold_window.active = false
        @gold_window.visible = false
        @dummy_window.visible = true
        return
      end
      $game_system.se_play($data_system.shop_se)
      case @command_window.index
      when 0
        $game_party.lose_gold(price)
        $game_party.gain_deposit_gold(price)
      when 1
        $game_party.gain_gold(price)
        $game_party.lose_deposit_gold(price)
      end
      # ??????????????
      @gold_window.reset(@command_window.index)
      return
    end
  end
end

Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: Limitar dinero en script del banco (XP)

Mensaje por wemento el 2015-09-24, 15:56

Buf, tío. Perfecto. Eres un genio.

Por curiosidad, ¿dónde aprendiste Ruby?

Muchas gracias de nuevo, me estás ayudando un montón.

wemento
Iniciado
Iniciado

0/3

Créditos 57

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Limitar dinero en script del banco (XP)

Mensaje por Contenido patrocinado Hoy a las 20:20


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Ayuda RPG

Permisos de este foro:
No puedes responder a temas en este foro.