Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Cambiar límite de dinero

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Cambiar límite de dinero

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

Buenas tardes a todos.

En primer lugar, no sé si este tema iría aquí. Va sobre modificar un script, por eso lo incluí en este subforo. De todas formas si me equivoco de tema movedlo, si no es molestia. Y perdón en tal caso.

Vamos al grano. Para aquellos que quieran hacer que el personaje tenga un límite de dinero encima (al igual que ocurre en los Zelda, que únicamente puedes llevar 200 rupias en lo alto, al principio), únicamente hay que modificar una línea de un script del juego.

Antes que nada, indicar que realmente sí existe un límite de dinero, el problema es que es algo disparado (1000000 oros).

Para fijar vuestro propio límite de dinero, basta con irse al script Game Party, a la parte que os indico a continuación:

Código:
  #--------------------------------------------------------------------------
  # * Gain Gold (or lose)
  #    n : amount of gold
  #--------------------------------------------------------------------------
  def gain_gold(n)
    @gold = [[@gold + n, 0].max, 1000].min
  end

Ahí modificamos el número máximo (que en este caso yo lo he fijado como 1000). Si por ejemplo queremos que nuestro personaje pueda llevar como máximo 200 oros, basta con dejar esta línea de la siguiente manera:

Código:
    @gold = [[@gold + n, 0].max, 200].min

De esta forma ahora el límite será de 200.

Espero que os haya servido de ayuda. No es gran cosa, pero para aquel que esté interesado en cambiarlo puede resultar útil.

Nada más.

Salu2
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Wecoc el 2015-09-23, 17:27

Está bien aunque siempre está mejor no cambiar directamente la base de scripts, porque si no luego no puedes distinguir lo que es default de lo que no.

Te he hecho una pequeña ampliación para poder usarlo en un script a parte, y además puse la opción de poder cambiar ese límite manualmente con $game_party.set_max_gold(máximo)

Código:
class Game_Party
  
  MAX_GOLD_BY_ACTORS = false
  
  unless $@
    alias max_gold_initialize initialize
    alias max_gold_add_actor add_actor
    alias max_gold_rem_actor remove_actor
  end
  
  def initialize
    max_gold_initialize
    @max_gold = 1000
  end
  
  def set_max_gold(value)
    @max_gold = value
    if @gold > max_gold
      @gold = max_gold
    end
  end
    
  def max_gold
    return @max_gold * (MAX_GOLD_BY_ACTORS ? $game_party.actors.size : 1)
  end
  
  def add_actor(actor_id)
    max_gold_add_actor(actor_id)
    set_max_gold(@max_gold)
  end

  def remove_actor(actor_id)
    max_gold_rem_actor(actor_id)
    set_max_gold(@max_gold)
  end

  def gain_gold(n)
    @gold = [[@gold + n, 0].max, max_gold].min
  end
end

Lo dejo solo como sugerencia pero quizá estaría bien, ya que usas un límite tan bajo, modificar la tienda para impedir vender cosas si el dinero total que tendrías tras venderlo sobrepasara ese límite. Si no estás regalando objetos...


Última edición por Wecoc el 2015-09-24, 10:45, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por wemento el 2015-09-23, 18:02

He tenido problemas también con un script del banco, pero sí, habría que evitar eso. ¿sabes a grandes rasgos cómo podría hacerse lo de la tienda?
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Wecoc el 2015-09-23, 18:49

Aquí la modificación de la tienda. Puedes ponerlo justo detrás del script de antes, copiándolo en la última línea (es decir juntarlos en uno). Lo del banco ya es trigo de otro trigal.

Código:
#==============================================================================
# ** Window_ShopSell
#==============================================================================

class Window_ShopSell < Window_Selectable
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.price > 0
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    # -------- Max gold add-on ----------
    if $game_party.gold + item.price / 2 > $game_party.max_gold
      self.contents.font.color = disabled_color
    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)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    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
end

#==============================================================================
# ** Scene_Shop
#==============================================================================

class Scene_Shop
  def update_sell
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      if @item == nil or @item.price == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # -------- Max gold add-on ----------
      if $game_party.gold + @item.price / 2 > $game_party.max_gold
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # -----------------------------------
      $game_system.se_play($data_system.decision_se)
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      max = number
      # -------- Max gold add-on ----------
      max_p = ($game_party.max_gold - $game_party.gold).to_f / (@item.price / 2)
      max_p = max_p.floor
      max = [max, max_p].min
      # -----------------------------------
      @sell_window.active = false
      @sell_window.visible = false
      @number_window.set(@item, max, @item.price / 2)
      @number_window.active = true
      @number_window.visible = true
      @status_window.visible = true
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por wemento el 2015-09-23, 19:16

He conseguido arreglar el problema del banco, pero al incrustar tus dos scripts deja de funcionar mi arreglo.

¿Me puedes explicar por encima que hace tu primer script? Estoy un poco pegote.

Gracias por tu ayuda!
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Wecoc el 2015-09-23, 19:30

Mi primer script hace lo mismo que el tuyo, pero en vez de hacer directamente ésto:

@gold = [[@gold + n, 0].max, 1000].min

Define una nueva variable llamada max_gold que vale 1000 por defecto, y luego hace

@gold = [[@gold + n, 0].max, max_gold].min

Eso permite luego hacer en cualquier parte del juego ésto:

$game_party.set_max_gold(200)

Y así el máximo pasa de 1000 a 200 (o a cualquier valor que le indiques). Además puse que si cambias el máximo y tu dinero actual es por ejemplo 500, pierdes ese dinero sobrante y te quedas con 200 que es el nuevo máximo.

Si no quieres que el valor por defecto de max_gold sea 1000 busca ésta línea y la cambias:

@max_gold = 1000
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

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

Intuyo que todo cambio que yo haga sobre el dinero en este script tuyo será el que cuente, y no los cambios que se produzcan en el Game Party original, ¿correcto? Es para intentar corregir ahí el problema del banco.

Por otro lado, ¿esas líneas de add actor y remove actor qué son? Es por mera curiosidad, por aprender.

Muchas gracias por tu ayuda y tus aportes.
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Wecoc el 2015-09-24, 10:51

Intuyo que todo cambio que yo haga sobre el dinero en este script tuyo será el que cuente, y no los cambios que se produzcan en el Game Party original, ¿correcto? Es para intentar corregir ahí el problema del banco.

Exacto. Los scripts originales no los cambies directamente.

Por otro lado, ¿esas líneas de add actor y remove actor qué son? Es por mera curiosidad, por aprender.

Ah sí, eso... Por defecto no hace nada, y de ahí no debes cambiar nada tampoco.

Lo que pasa es que definí una global (MAX_GOLD_BY_ACTORS) para que el dinero máximo vaya según el número de actores que hay en la party. Por defecto vale false, lo que significa que si el límite de dinero en la party es 100 aunque sean 4 actores sigue siendo 100. Si pones true, el límite será 100 por cada actor que haya, por lo tanto si son 4 miembros en realidad es 400.

Por lo tanto al añadir o quitar un actor se vuelve a definir el máximo según ese patrón, siempre teniendo en cuenta que si tienes 400 y 4 actores y quitas un actor haciendo que el máximo de dinero ahora sea 300, tu dinero también pasará a ser 300.

Como dije como por defecto vale false aunque quites un actor y se vuelva a definir el máximo, seguirá valiendo lo mismo, por eso digo que "no hace nada".

Otra opción a parte sería que cada actor tuviera su máximo de oro alterable, pero eso ya sería un script muy distinto...
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por wemento el 2015-09-24, 11:17

Gracias por explicarlo. Curiosamente esa idea me viene de lujo para mi juego.

Solucioné lo del banco, pásate por ese tema si no es molestia. He planteado una duda simple al final, a ver si puedes responderla.

En fin, como te decía ahora me funciona lo del banco y lo de la tienda, con lo cual te estoy muy agradecido.

Salu2
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por wemento el 2015-10-09, 12:01

Buenas, Wecoc.

Te comento. Tu primer script (el del dinero máximo) me ha dado el siguiente fallo:



Y te pongo un poco en situación por si te sirve de pista. Era en un combate, justo al derrotar un enemigo que te da 142 oros. Con 5 personajes en el equipo y un máximo de 5000 oros (1000 por personaje, como comentabas). El equipo tenía 4204 oros antes de matar al enemigo.

El fallo concretamente es en estas líneas (la de en medio, para ser más exactos):

Código:
  def max_gold
    return @max_gold * (MAX_GOLD_BY_ACTORS ? $game_party.actors.size : 1)
  end

A ver si sabes algo. No me había fallado hasta ahora.

Mil gracias.

EDIT: No es sólo al vencer a un enemigo. Es con cualquier cambio de dinero, creo. Acabo de probar a restar 99999 antes de empezar el combate y me ha saltado el error también. Y a abrir un cofre de 300 oros y lo mismo.

EDIT2: Puede ser que al estar usando una partida que tenía guardada de antes de incluir los scripts esa variable no esté inicializada y por tanto me esté dando fallo? Al probar con una partida nueva no me da problemas.
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Wecoc el 2015-10-09, 14:19

EDIT2: Puede ser que al estar usando una partida que tenía guardada de antes de incluir los scripts esa variable no esté inicializada y por tanto me esté dando fallo? Al probar con una partida nueva no me da problemas.

Exacto, es justamente eso. Pasa con muchos scripts (cualquiera que añada nuevas variables, en éste caso @max_gold). No hay un modo límpio y fácil de arreglarlo, lo mejor es empezar una partida nueva.

Si estás en un punto en el que eso es impensable por lo avanzado que lo tienes, crea un evento cerca de tu posición que haga ésto en llamar script (al hablar con él): $game_party.set_max_gold(1000)

Cambia 1000 por el número que le pusieras de máximo.

Justo después de eso vuelve a guardar en esa misma partida, cierras el juego y borras el evento. Eso debería valer.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por wemento el 2015-10-09, 14:22

Eso mismo hice, y funcionó. Así que perfecto, todo quedó en un susto, menos mal jaja

Muchas gracias de nuevo. Me alegra saber que sólo era eso.
avatar
wemento
Iniciado
Iniciado

0/3

Créditos 61

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: Cambiar límite de dinero

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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