Mundo Maker
¡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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

Nuestros miembros han publicado un total de 85779 mensajes en 12216 argumentos.

[XP] Switch Shop & Scene Switch

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Switch Shop & Scene Switch

Mensaje por Wecoc el 2017-04-05, 12:42

Éste script permite comprar interruptores (al comprarlos son activados).
Para ello se usan items normales, pero antes de iniciar la tienda hay que usar la siguiente llamada de script:
$game_temp.switch_shop = true

En esa nueva tienda, al comprar el item se activa su interruptor directamente.

Hay que definir para cada item especial cual es su switch. Eso se configura al principio del script, puse un ejemplo desactivado.
No modifica nada de la tienda normal, va totalmente a parte. Podéis cambiar su aspecto de modo similar a como funciona la tienda normal.

Configuración:

Aquí tenéis el script, ponedlo encima de main. Créditos opcionales.

Código:
#==============================================================================
# ** [XP] Switch Shop
#------------------------------------------------------------------------------
# Autor: Wecoc (créditos opcionales)
#------------------------------------------------------------------------------
# Éste script permite comprar switches, que al comprarlos son activados.
# Para ello se usan items normales, pero antes de iniciar la tienda hay que
# usar la siguiente llamada de script:
#  $game_temp.switch_shop = true
#------------------------------------------------------------------------------
# Además hay que definir para cada item especial cual es su switch
# Eso se configura al principio del script usando:
#  self.set_item_switch(ID item, ID switch)
#==============================================================================

#==============================================================================
# ** Switch_Items
#==============================================================================

module Switch_Items
  @@items = {}
  @@items.default = [0, "", ""]
  def self.items
    return @@items
  end
  def self.set_item_switch(item_id, switch_id, condition=nil, effect_on=nil,
    effect_off=nil)
    condition  = "$game_switches[#{switch_id}] == false" if condition == nil
    effect_on  = "$game_switches[#{switch_id}] = true"  if effect_on == nil
    effect_off = "$game_switches[#{switch_id}] = false"  if effect_off == nil
    @@items[item_id] = [switch_id, condition, effect_on, effect_off]
  end
 
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
 
  # Definir aquí los items que son switches (ID item, ID switch)
 
  self.set_item_switch(33, 1)
  self.set_item_switch(34, 2)
  self.set_item_switch(35, 3)
 
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
end

#==============================================================================
# ** Game_Temp
#==============================================================================

class Game_Temp
  attr_accessor :switch_shop
  alias switch_shop_ini initialize unless $@
  def initialize
    switch_shop_ini
    @switch_shop = false
  end
end

#==============================================================================
# ** Scene_Map
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # * Shop Call
  #--------------------------------------------------------------------------
  def call_shop
    $game_temp.shop_calling = false
    $game_player.straighten
    if $game_temp.switch_shop == true
      $scene = Scene_SwitchShop.new
    else
      $scene = Scene_Shop.new
    end
  end
end

#==============================================================================
# ** Window_ShopCommand
#==============================================================================

class Window_SwitchShopCommand < Window_ShopCommand
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super
    self.width = 320
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 2
    @column_max = 2
    @commands = ["Comprar", "Salir"]
    refresh
    self.index = 0
  end
end

#==============================================================================
# ** Window_SwitchShop
#==============================================================================

class Window_SwitchShop < Window_Selectable
  attr_accessor :status_window
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 128, 640, 352)
    @shop_goods = shop_goods
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Item Acquisition
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for goods_item in @shop_goods
      if goods_item[0] == 0
        item = $data_items[goods_item[1]]
        if item != nil
          @data.push(item)
        end
      end
    end
    @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)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if item.price <= $game_party.gold
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    switch = Switch_Items.items[item.id][0]
    condition = Switch_Items.items[item.id][1]
    if switch == 0 or condition == "" or eval(condition) == false
      self.contents.font.color = disabled_color
    end
    if $game_party.item_number(item.id) > 0
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 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, 88, 32, item.price.to_s, 2)
    if $game_party.item_number(item.id) > 0
      self.contents.draw_text(x + 400, y, 160, 32, "Disponible", 1)
    else
      self.contents.draw_text(x + 400, y, 160, 32, "No Disponible", 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if !@status_window.nil?
      update_status
    end
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
  # * Status Text Update
  #--------------------------------------------------------------------------
  def update_status
    if self.item == nil
      @status_window.set_text("")
      return
    end
    switch = Switch_Items.items[self.item.id][0]
    if switch == 0
      @status_window.set_text("")
      return
    end
    state = $game_switches[switch]
    case state
    when true
      @status_window.set_text("[ON]")
    else
      @status_window.set_text("[OFF]")
    end
  end
end

#==============================================================================
# ** Window_SwitchStatus
#==============================================================================

class Window_SwitchStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(320, 64, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #--------------------------------------------------------------------------
  def set_text(text)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, self.width - 40, 32, text, 1)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    set_text("")
  end
end

#==============================================================================
# ** Scene_SwitchShop
#==============================================================================

class Scene_SwitchShop
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @help_window = Window_Help.new
    @command_window = Window_SwitchShopCommand.new
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 64
    @dummy_windowb = Window_Base.new(320, 64, 160, 64)
    @status_window = Window_SwitchStatus.new
    @status_window.visible = false
    @switch_window = Window_SwitchShop.new($game_temp.shop_goods)
    @switch_window.active = false
    @switch_window.visible = false
    @switch_window.help_window = @help_window
    @switch_window.status_window = @status_window
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
    @dummy_windowb.dispose
    @status_window.dispose
    @switch_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @help_window.update
    @command_window.update
    @gold_window.update
    @dummy_windowb.update
    @status_window.update
    @switch_window.update
    if @command_window.active
      update_command
      return
    end
    if @switch_window.active
      update_switch
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      $game_temp.switch_shop = false
      $game_map.refresh
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # buy
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @switch_window.active = true
        @switch_window.visible = true
        @status_window.visible = true
        @dummy_windowb.visible = false
        @switch_window.refresh
        @status_window.refresh
        @gold_window.refresh
      when 1  # quit
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Map.new
        $game_map.refresh
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when switch window is active)
  #--------------------------------------------------------------------------
  def update_switch
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @switch_window.active = false
      @switch_window.visible = false
      @status_window.visible = false
      @dummy_windowb.visible = true
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @switch_window.item
      if @item == nil or @item.price > $game_party.gold
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      switch = Switch_Items.items[@item.id][0]
      condition = Switch_Items.items[@item.id][1]
      effect = Switch_Items.items[@item.id][2]
      if switch == 0 or condition == "" or eval(condition) == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if $game_party.item_number(@item.id) > 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.shop_se)
      eval(effect)
      $game_party.gain_item(@item.id, 1)
      $game_party.lose_gold(@item.price)
      @switch_window.refresh
    end
  end
end

#==============================================================================
# ** Window_Item
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add items
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if Switch_Items.items[i][0] == 0
          @data.push($data_items[i])
        end
      end
    end
    # Also add weapons and items if outside of battle
    unless $game_temp.in_battle
      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
    end
    # If item count is not 0, make a bit map and draw all items
    @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)
      end
    end
  end
end

Imagen:

Hay configuración avanzada para scripters; se puede hacer que al activar un interruptor se active o desactive otro, o que no esté disponible uno hasta que no haya otro interruptor activo, o interacciones complejas de ese tipo...
Si tenéis dudas sobre cómo hacer algo concreto con éste script, pedidlo.


Última edición por Wecoc el 2017-04-26, 00:46, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Switch Shop & Scene Switch

Mensaje por Wecoc el 2017-04-05, 21:53

Añado otro script que usa el Switch Shop de base. Éste nuevo imita Scene_Item pero usando los items propios de los interruptores (los disponibles, ya sea porque has comprado o te han dado el item especial correspondiente), de modo que se pueden activar y desactivar libremente. Usa la misma configuración que Switch Shop, así que lo que dije de la configuración avanzada sigue funcionando de la misma forma.

Para acceder a la escena usad en una llamada de evento: $scene = Scene_Switch.new
Podríais anclarlo en el menú pero eso ya es cosa vuestra.

Código:
#==============================================================================
# ** [XP] Scene Switch
#------------------------------------------------------------------------------
# Autor: Wecoc (créditos opcionales)
#------------------------------------------------------------------------------
# Éste script requiere el Switch Shop
# Permite activar y desactivar algunos interruptores usando un item como atajo
#==============================================================================

#==============================================================================
# * Window_SwitchItem
#==============================================================================

class Window_SwitchItem < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 640, 416)
    @column_max = 2
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if Switch_Items.items[i][0] > 0
          @data.push($data_items[i])
        end
      end
    end
    @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)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if Switch_Items.items[item.id][1] != ""
      condition = (eval(Switch_Items.items[item.id][1]) == false)
    end
    self.contents.font.color = normal_color
    if condition == true && Switch_Items.items[item.id][3] == ""
      self.contents.font.color = disabled_color
    end
    if condition == false && Switch_Items.items[item.id][2] == ""
      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)
    if condition
      self.contents.draw_text(x + 186, y, 120, 32, "[ON]", 1)
    else
      self.contents.draw_text(x + 186, y, 120, 32, "[OFF]", 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#==============================================================================
# * Scene_Switch
#==============================================================================

class Scene_Switch
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    @switch_window = Window_SwitchItem.new
    @help_window = Window_Help.new
    @switch_window.help_window = @help_window
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @switch_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    @switch_window.update
    @help_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      $game_map.refresh
      return
    end
    if Input.trigger?(Input::C)
      item = @switch_window.item
      if item == nil
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      condition = (eval(Switch_Items.items[item.id][1]) == false)
      item_can_use = true
      if condition == true && Switch_Items.items[item.id][3] == ""
        item_can_use = false
      end
      if condition == false && Switch_Items.items[item.id][2] == ""
        item_can_use = false
      end
      if item_can_use == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if condition
        eval(Switch_Items.items[item.id][3])
      else
        eval(Switch_Items.items[item.id][2])
      end
      @switch_window.refresh
    end
  end
end

Imagen:

De nuevo los que son scripters le sabran sacar mejor uso a éste script, pero igualmente para los no scripters también puede resultar útil.
Saludos ;D


Última edición por Wecoc el 2017-04-26, 00:47, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Switch Shop & Scene Switch

Mensaje por BlazeCrimson el 2017-04-06, 18:19

Un gran aporte, incluyendo una pequeña edición que se me ocurrió en su funcionamiento y unas cuantas en su interfaz, este dúo de script da muchas, muchas posibilidades con un poco de ingenio y paciencia.

Muy agradecido Wecoc (una gran idea), añadido a los scripts de Descendencia carmesí.

_________________
Image and video hosting by TinyPic
avatar
BlazeCrimson
Analista
Analista

0/3

Créditos 1124

Gracias : 110

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Switch Shop & Scene Switch

Mensaje por AsFzKakarotto el 2017-04-25, 22:15

Oye amigo Wecoc te encontré una anomalía con respecto a los 2 Script.
Me explico…en la tienda compre un querido interruptor que tanto estaba en oferta…. XD y que se cambia en el mismo lugar, cuando de repente del menú vuelvo al mapa y What?, no a ocurrido nada. Pero como ya he visto este pequeñito problema en varios script e inmediatamente presiono F9 y después lo vuelvo a pulsar y ¡¡WALA !! A cambiado jajaja. Creo que falto actualizar con el código:

$game_map.refresh

También lo he probado con “Scene Switch” y es igual….
Aquí les dejo ambos script con el código mencionado anteriormente para que se pueda activar o desactivar el interruptor en cualquier momento del juego. Incluso para el inodoro del baño….jejejejeje, no es una bromita. Como siempre es un gusto ayudar a todo makers… Adiós

SWITCH SHOP:
Código:
#==============================================================================
# ** [XP] Switch Shop
#------------------------------------------------------------------------------
# Autor: Wecoc (créditos opcionales)
#------------------------------------------------------------------------------
# Éste script permite comprar switches, que al comprarlos son activados.
# Para ello se usan items normales, pero antes de iniciar la tienda hay que
# usar la siguiente llamada de script:
#  $game_temp.switch_shop = true
#------------------------------------------------------------------------------
# Además hay que definir para cada item especial cual es su switch
# Eso se configura al principio del script usando:
#  self.set_item_switch(ID item, ID switch)
#==============================================================================

#==============================================================================
# ** Switch_Items
#==============================================================================

module Switch_Items
  @@items = {}
  @@items.default = [0, "", ""]
  def self.items
    return @@items
  end
  def self.set_item_switch(item_id, switch_id, condition=nil, effect_on=nil,
    effect_off=nil)
    condition  = "$game_switches[#{switch_id}] == false" if condition == nil
    effect_on  = "$game_switches[#{switch_id}] = true"  if effect_on == nil
    effect_off = "$game_switches[#{switch_id}] = false"  if effect_off == nil
    @@items[item_id] = [switch_id, condition, effect_on, effect_off]
  end
  
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  
  # Definir aquí los items que son switches (ID item, ID switch)
  
  self.set_item_switch(33, 1)
  self.set_item_switch(34, 2)
  self.set_item_switch(35, 3)
  
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
end

#==============================================================================
# ** Game_Temp
#==============================================================================

class Game_Temp
  attr_accessor :switch_shop
  alias switch_shop_ini initialize unless $@
  def initialize
    switch_shop_ini
    @switch_shop = false
  end
end

#==============================================================================
# ** Scene_Map
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # * Shop Call
  #--------------------------------------------------------------------------
  def call_shop
    $game_temp.shop_calling = false
    $game_player.straighten
    if $game_temp.switch_shop == true
      $scene = Scene_SwitchShop.new
    else
      $scene = Scene_Shop.new
    end
  end
end

#==============================================================================
# ** Window_ShopCommand
#==============================================================================

class Window_SwitchShopCommand < Window_ShopCommand
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super
    self.width = 320
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 2
    @column_max = 2
    @commands = ["Comprar", "Salir"]
    refresh
    self.index = 0
  end
end

#==============================================================================
# ** Window_SwitchShop
#==============================================================================

class Window_SwitchShop < Window_Selectable
  attr_accessor :status_window
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 128, 640, 352)
    @shop_goods = shop_goods
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Item Acquisition
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for goods_item in @shop_goods
      if goods_item[0] == 0
        item = $data_items[goods_item[1]]
        if item != nil
          @data.push(item)
        end
      end
    end
    @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)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if item.price <= $game_party.gold
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    switch = Switch_Items.items[item.id][0]
    condition = Switch_Items.items[item.id][1]
    if switch == 0 or condition == "" or eval(condition) == false
      self.contents.font.color = disabled_color
    end
    if $game_party.item_number(item.id) > 0
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 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, 88, 32, item.price.to_s, 2)
    if $game_party.item_number(item.id) > 0
      self.contents.draw_text(x + 400, y, 160, 32, "Disponible", 1)
    else
      self.contents.draw_text(x + 400, y, 160, 32, "No Disponible", 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if !@status_window.nil?
      update_status
    end
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
  # * Status Text Update
  #--------------------------------------------------------------------------
  def update_status
    if self.item == nil
      @status_window.set_text("")
      return
    end
    switch = Switch_Items.items[self.item.id][0]
    if switch == 0
      @status_window.set_text("")
      return
    end
    state = $game_switches[switch]
    case state
    when true
      @status_window.set_text("[ON]")
    else
      @status_window.set_text("[OFF]")
    end
  end
end

#==============================================================================
# ** Window_SwitchStatus
#==============================================================================

class Window_SwitchStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(320, 64, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #--------------------------------------------------------------------------
  def set_text(text)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, self.width - 40, 32, text, 1)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    set_text("")
  end
end

#==============================================================================
# ** Scene_SwitchShop
#==============================================================================

class Scene_SwitchShop
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @help_window = Window_Help.new
    @command_window = Window_SwitchShopCommand.new
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 64
    @dummy_windowb = Window_Base.new(320, 64, 160, 64)
    @status_window = Window_SwitchStatus.new
    @status_window.visible = false
    @switch_window = Window_SwitchShop.new($game_temp.shop_goods)
    @switch_window.active = false
    @switch_window.visible = false
    @switch_window.help_window = @help_window
    @switch_window.status_window = @status_window
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
    @dummy_windowb.dispose
    @status_window.dispose
    @switch_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @help_window.update
    @command_window.update
    @gold_window.update
    @dummy_windowb.update
    @status_window.update
    @switch_window.update
    if @command_window.active
      update_command
      return
    end
    if @switch_window.active
      update_switch
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      $game_temp.switch_shop = false
      $game_map.refresh
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # buy
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @switch_window.active = true
        @switch_window.visible = true
        @status_window.visible = true
        @dummy_windowb.visible = false
        @switch_window.refresh
        @status_window.refresh
        @gold_window.refresh
       when 1  # quit
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Map.new
        $game_map.refresh
       end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when switch window is active)
  #--------------------------------------------------------------------------
  def update_switch
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @switch_window.active = false
      @switch_window.visible = false
      @status_window.visible = false
      @dummy_windowb.visible = true
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @switch_window.item
      if @item == nil or @item.price > $game_party.gold
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      switch = Switch_Items.items[@item.id][0]
      condition = Switch_Items.items[@item.id][1]
      effect = Switch_Items.items[@item.id][2]
      if switch == 0 or condition == "" or eval(condition) == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if $game_party.item_number(@item.id) > 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.shop_se)
      eval(effect)
      $game_party.gain_item(@item.id, 1)
      $game_party.lose_gold(@item.price)
      @switch_window.refresh
    end
  end
end

#==============================================================================
# ** Window_Item
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add items
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if Switch_Items.items[i][0] == 0
          @data.push($data_items[i])
        end
      end
    end
    # Also add weapons and items if outside of battle
    unless $game_temp.in_battle
      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
    end
    # If item count is not 0, make a bit map and draw all items
    @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)
      end
    end
  end
end

SCENE SWITCH:
Código:
#==============================================================================
# ** [XP] Scene Switch
#------------------------------------------------------------------------------
# Autor: Wecoc (créditos opcionales)
#------------------------------------------------------------------------------
# Éste script requiere el Switch Shop
# Permite activar y desactivar algunos interruptores usando un item como atajo
#==============================================================================

#==============================================================================
# * Window_SwitchItem
#==============================================================================

class Window_SwitchItem < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 640, 416)
    @column_max = 2
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if Switch_Items.items[i][0] > 0
          @data.push($data_items[i])
        end
      end
    end
    @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)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if Switch_Items.items[item.id][1] != ""
      condition = (eval(Switch_Items.items[item.id][1]) == false)
    end
    self.contents.font.color = normal_color
    if condition == true && Switch_Items.items[item.id][3] == ""
      self.contents.font.color = disabled_color
    end
    if condition == false && Switch_Items.items[item.id][2] == ""
      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)
    if condition
      self.contents.draw_text(x + 186, y, 120, 32, "[ON]", 1)
    else
      self.contents.draw_text(x + 186, y, 120, 32, "[OFF]", 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#==============================================================================
# * Scene_Switch
#==============================================================================

class Scene_Switch
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    @switch_window = Window_SwitchItem.new
    @help_window = Window_Help.new
    @switch_window.help_window = @help_window
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @switch_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    @switch_window.update
    @help_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      $game_map.refresh
      return
    end
    if Input.trigger?(Input::C)
      item = @switch_window.item
      if item == nil
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      condition = (eval(Switch_Items.items[item.id][1]) == false)
      item_can_use = true
      if condition == true && Switch_Items.items[item.id][3] == ""
        item_can_use = false
      end
      if condition == false && Switch_Items.items[item.id][2] == ""
        item_can_use = false
      end
      if item_can_use == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if condition
        eval(Switch_Items.items[item.id][3])
      else
        eval(Switch_Items.items[item.id][2])
      end
      @switch_window.refresh
    end
  end
end

En cualquier modo si los script de wecoc le funcionan perfectamente no lo reemplacen por los míos.
avatar
AsFzKakarotto
Novato
Novato

0/3

Créditos 98

Gracias : 19

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Switch Shop & Scene Switch

Mensaje por Wecoc el 2017-04-26, 00:47

Porras, tienes toda la razón, se me pasó refrescar el mapa.
Muchas gracias por mencionar eso, ya he actualizado ámbos posts con tus arreglos.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Switch Shop & Scene Switch

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.