Últimos temas
» [VX/Ace]PersonajesEscolares
por mdk3dd Hoy a las 3:30 pm

» Chaos of Destiny - The Origin
por mdk3dd Ayer a las 9:24 pm

» Laminación [VXACE] [NUEVO LAVADO DE CARA!]
por Pocari Ayer a las 8:22 pm

» [Avance] Chaos of Destiny - The origin
por IvalteK_Dev Ayer a las 7:11 pm

» Proyecto: "En busca del biberón perdido"
por IvalteK_Dev Ayer a las 6:59 pm

» Muz-taller: Charas
por Ruben_modder Ayer a las 2:30 pm

» 2 Dudas: Compatibilidad maker PC y Android
por Ruben_modder Ayer a las 1:36 pm

» Duda Bases Maker MV
por Ruben_modder Ayer a las 11:46 am

» [MV] Precognition
por JapoZero Sáb Dic 08, 2018 8:06 am

» ("TCG") Que RPG Maker es el recomendado?
por JKLmaster Vie Dic 07, 2018 7:48 pm

» Problema con los charas
por mdk3dd Dom Dic 02, 2018 5:55 pm

» Heartland | IGMC 2018
por InvariableZ Dom Dic 02, 2018 11:20 am


[Ace] Sistema de encantamientos

Ir abajo

[Ace] Sistema de encantamientos

Mensaje por Alojzy el Jue Ene 15, 2015 8:10 pm

Hola a todos, primero que todo. Hoy les traigo un script que nos permite encantar equipamiento (ya sea armas, armaduras, accesorios) en nuestro juego.

Código:
($imported ||= {})[:mbs_equip_enchantment] = true
$e_weapons ||= []
$e_armors ||= []
#==============================================================================
# MBS - Sistema de Encantamientos para el equipamiento (Créditos a Masked por
# la creación del script, y a Alojzy por la traducción de instrucciones varias)
#==============================================================================
#==============================================================================
# Instrucciones:
#------------------------------------------------------------------------------
# Para que aparezca la ventana, usar un "llamar script" con el siguiente código:
# SceneManager.call(Scene_Enchant)
#
# Para desbloquear un encantamiento:
# MBS::Equip_Enchantment.unlock(s) # "s" es el símbolo (:atk_up, por ejemplo) del efecto
#
# Para bloquear:
# MBS::Equip_Enchantment.lock(s)
#==============================================================================
#==============================================================================
# Alteraciones
#------------------------------------------------------------------------------
# Classes:
#   • RPG::EquipItem
#
# Módulos:
#   • DataManager
#==============================================================================
#==============================================================================
# Configuración
#==============================================================================
module MBS
  module Equip_Enchantment
    
    #==========================================================================
    # Configuración General
    #==========================================================================
    
    #Título de la ventana de encantamientos
    WORD = "Encantamientos"
    
    #Frases utilizadas en la ventana de ayuda
    HELP_TEXTS = ["Escoja el equipamiento a encantar",
    
                  "Escoja un encantamiento a aplicar. Pulse A" +
                  "\r\npara mayor información sobre un encantamiento",
                  
                  "No tienes equipamiento disponible para encantar"]
    
    # Boton que debe ser presionado para obtener información del encantamiento,
    # El botón debe seguir el patrón de las teclas F1 y debe ir después de:
    INFO_BUTTON = :C # Tecla A
    
    # Palabra utilizada para cuando no hay ningún encantamiento o equipamiento
    # disponible
    EMPTY_TEXT = "Ningún"
    
    #==========================================================================
    # Configuración de los efectos
    #==========================================================================
    EFFECTS = {
    
      :atk_up => {
        
        # Nombre del encantamiento
        name: 'Ataque +',
        
        # Índex o índice del ícono del encantamiento en el iconset
        icon: 34,
        
        # Número de veces que puede ser encantado un objeto con éste
        max: 5,
        
        # Deje como "true"(verdadero) si quiere que no sea necesario tener el
        # encantamiento desbloqueado, si no, déjelo como "false" (falso)
        enabled: true,
      
        # Fórmula para calcular el costo de un encantamiento:
        # atk = ataque del ítem, df = defesa del ítem, mat = ataque mágico,
        # mdf = defesa mágica, luk = suerte, agi = agilidad,
        # price = precio estándar del ítem, level = número de veces
        # que el ítem puede ser encantado
        cost_formula: 'level * 1000 + atk * 10',
        
        # Fórmula para el cálculo del precio del ítem YA encantado
        item_cost: 'price * 1.5',
        
        # Sufijo que será agregado al encantar el equipamiento
        suffix: 'de Guerra',
        
        # ID del o de los item(s) consumidos para encantar (como alguna
        # piedra de encantamiento o lo que quieras) y la cantidad
        # Exemplo:
        # [[1, 3]] #=> 3 ítems de ID 1
        items: [],
        
        # Número de los tipos de equipamiento que pueden ser encantados con ese
        # efecto (por ejemplo, el arma, el yelmo, el escudo) y el tipo secundario
        # (espada, armadura pesada...), el tipo secundario PUEDE ser omitido, en
        # ese caso cualquier tipo secundario es aceptado
        #
        # Números:
        # Arma = 0
        # Escudo = 1
        # Yelmo = 2
        # Armadura = 3
        # Accesorio = 4
        type: [[0]],
        
        # Los efectos en sí, deben estar organizados en una lista,
        # así el primer número modifica al primer efecto, el segundo modifica
        # el segundo efecto, y así sucesivamente. El orden a seguir es:
        # HP, MP, Ataque, Defensa, Ataque M., Defensa M., Agilidad, Suerte,
        # Elemento, Estado (ID), Estado (Posibilidad de causarlo (porcentaje))
        # En el caso del elemento o del estado, se puede agregar más de uno,
        # en ese caso, se deben colocar los dos IDs de los elementos o estados
        # dentro de una nueva lista.
        # Ejemplo:
        # [0, 0, 0, 0, 0, 0, 0, 0, [3, 8], [1], [25]]
        # En caso de no querer ningún elemento o estado, dejar los espacios
        # vacíos
        effects: [0, 0, 15, 0, 0, 0, 0, 0, [], [], []],
        
        # Ajuste del efecto por nivel
        adjust: 1.25
        
      },
      
      :fire => {
        name: 'Fuego',                      # El nombre será "Fuego"
        icon: 96,                           # El índex o índice del ítem en el iconset (96)
        max: 1,                             # Sólo puede ser usado una vez
        enabled: false,                     # Necesita ser desbloqueado
        cost_formula: '1050',               # Cuesta exactamente 1050 el encantamiento
        item_cost: 'price * 1.5',           # El precio aproximado será 1.5 veces el original
        suffix: 'Flameante',                # Añade el sufijo "Flameante" al nombre
        items: [],                          # No consume ningún ítem
        type: [[0]],                        # Funciona en cualquier arma
        effects: [0,0,0,0,0,0,0,0,[3],[],[]], # Añade el elemento Fuego al arma
        adjust: 1.0                         # No ajusta el efecto por nivel
      },
      
      :def_up => {
        name: 'Defensa +',
        icon: 35,
        max: 5,
        enabled: true,
        cost_formula: '1000 * level + df * 10',
        item_cost: 'price * 1.5',
        suffix: 'Resistente',
        items: [],
        type: [[1], [3]],
        effects: [0,0,0,15,0,0,0,0,[],[],[]],
        adjust: 1.25
      },
    }
#==============================================================================
# Fin de la configuración (A partir de aquí, modifica bajo tu responsabilidad)
#==============================================================================

    @unlocked = []

    #--------------------------------------------------------------------------
    # * Creación del ítem encantado
    #--------------------------------------------------------------------------
    def self.create_enchanted(effect, type, id)
      #return enchanted(type, effect, id) if enchanted(effect, type, id)
      d = type == :weapon ? $e_weapons : $e_armors
      data = type == :weapon ? $data_weapons : $data_armors
      d[id] ||= {}
      d[id][effect] ||= data.size
      i = data[d[id][effect]].nil?
      unless data[d[id][effect]]
        w = data[id].dup
        w.id = data.size
        data[d[id][effect]] = w
      end
      return i ? data[d[id][effect]].add_enchant(effect) : data[d[id][effect]]
    end
    
    #--------------------------------------------------------------------------
    # * Obtención del ítem encantado en caso de existir
    #--------------------------------------------------------------------------
    def self.enchanted(effect, type, id)
      data = type == :weapon ? $data_weapons : $data_armors
      d = type == :weapon ? $e_weapons : $e_armors
      if d[id]
        if d[id][effect]
          create_enchanted(effect, type, id) unless data[d[id][effect]]
        else
          create_enchanted(effect, type, id)
        end
      else
        create_enchanted(effect, type, id)
      end
      return data[d[id][effect]] if d[id][effect] if d[id]
      return nil
    end
    
    #--------------------------------------------------------------------------
    # * Adquisición de la lista de equipamientos desbloqueados
    #--------------------------------------------------------------------------
    def self.unlocked
      EFFECTS.each {|k, v| @unlocked << k if v[:enabled] && !@unlocked.include?(k)}
      u = EFFECTS.select {|i| @unlocked.include?(i)}
      r = {}
      u.each {|s| r[s[0]] = s[1]}
      return r
    end
    
    #--------------------------------------------------------------------------
    # * Definición de la lista de equipamientos desbloqueados
    #--------------------------------------------------------------------------
    def self.unlocked=(u)
      @unlocked = u
    end
    #--------------------------------------------------------------------------
    # * Desbloqueo de un encantamiento
    #--------------------------------------------------------------------------
    def self.unlock(symbol)
      @unlocked << symbol
      @unlocked.uniq!
    end
    
    #--------------------------------------------------------------------------
    # * Bloqueo de un encantamiento
    #--------------------------------------------------------------------------
    def self.lock(symbol)
      @unlocked.delete(symbol)
    end
    
    #--------------------------------------------------------------------------
    # * Adquisición de los encantamientos que un ítem puede recibir
    #--------------------------------------------------------------------------
    def self.enabled(item)
      return {} unless item
      t = item.is_a?(RPG::Weapon) ? item.wtype_id : item.atype_id
      r = {}
      self.unlocked.each do |k, i|
        r[k] = i if i[:type].include?([item.etype_id, t]) || i[:type].include?([item.etype_id])
      end
      return r
    end
  end
end

#==============================================================================
# ** RPG::EquipItem
#==============================================================================
class RPG::EquipItem < RPG::BaseItem
  attr_reader :enchant

  alias mbsintlzcp initialize_copy
  
  #----------------------------------------------------------------------------
  # * Inicialización del objeto como copia
  #----------------------------------------------------------------------------
  def initialize_copy(obj)
    mbsintlzcp(obj)
    @features = []
    obj.features.each {|i| @features << i}
    @params = [0] * 8
    obj.params.each_with_index {|x, i| @params[i] = x}
  end
  
  #----------------------------------------------------------------------------
  # * Cálculo del costo para la aplicación del encantamiento
  #----------------------------------------------------------------------------
  def enchant_cost(symbol)
    e = MBS::Equip_Enchantment::EFFECTS[symbol]
    mhp = @params[0]
    mmp = @params[1]
    atk = @params[2]
    df = @params[3]
    mat = @params[4]
    mdf = @params[5]
    agi = @params[6]
    luk = @params[7]
    price = @price
    level = @name.include?(e[:suffix]) ? (@name[-1] =~ /\d+/ ? @name[-1].to_i : 1) : 0
    return eval(e[:cost_formula]).to_i
  end
  
  #----------------------------------------------------------------------------
  # * Verificación del nivel del encantamiento
  #----------------------------------------------------------------------------
  def max_level?(symbol)
    da = etype_id == 0 ? $data_weapons : $data_armors
    d = etype_id == 0 ? $e_weapons : $e_armors
    i = 0
    d.each do |x|
      next unless x
      i += x.size
    end
    s = MBS::Equip_Enchantment.enchanted(symbol, etype_id == 0 ? :weapon : :armor, @id) if @id < da.size - i
    e = MBS::Equip_Enchantment::EFFECTS[symbol]
    return false unless e
    level = @name[-1] =~ /\d+/ ? @name[-1].to_i : 0
    return level >= e[:max]
  end
  
  #----------------------------------------------------------------------------
  # * Aplicación de los encantamientos
  #----------------------------------------------------------------------------
  def apply_enchant(symbol)
    e = MBS::Equip_Enchantment::EFFECTS[symbol]
    level = @name[-1] =~ /\d+/ ? @name[-1].to_i : 1
    return false if max_level?(symbol)
    unless e[:suffix].empty?
      unless @name.include?(e[:suffix])
        @name += (' ' + e[:suffix])
      else
        n = @name[-1] =~ /\d+/ ? @name.split(' ')[0...-1].inject('') {|s, i| s += i + ' '} : @name + ' '
        @name = n + (level + 1).to_s
      end
    end
    
    mhp = @params[0]
    mmp = @params[1]
    atk = @params[2]
    df = @params[3]
    mat = @params[4]
    mdf = @params[5]
    agi = @params[6]
    luk = @params[7]
    price = @price
    @price = eval(e[:item_cost])
    
    8.times do |i|
      p = e[:effects][i]
      level.times {p *= e[:adjust]}
      @params[i] += p
    end
    
    e[:effects][8].each {|x| @features << RPG::BaseItem::Feature.new(31, x)}
    e[:effects][9].size.times {|x| @features << RPG::BaseItem::Feature.new(32, e[:effects][9][x], e[:effects][10][x])}
    return true
  end
  
  #----------------------------------------------------------------------------
  # * Adición de un encantamiento
  #----------------------------------------------------------------------------
  def add_enchant(symbol)
    return false if @enchant != symbol && @enchant
    return false unless MBS::Equip_Enchantment::EFFECTS[symbol][:type].any? {|j| j[0] == etype_id}
    @enchant = symbol
    return apply_enchant(symbol)
  end
  
  protected :apply_enchant
  
end

#==============================================================================
# ** Window_EquipList
#==============================================================================
class Window_EquipList < Window_Selectable
  #----------------------------------------------------------------------------
  # * Inicialización del objeto
  #----------------------------------------------------------------------------
  def initialize
    w = 244
    h = 416
    super(0, 72, w, h - 72)
    @index = 0
    @disabled = []
    refresh
    @oas = self.active
  end
  
  #----------------------------------------------------------------------------
  # * Actualización del proceso
  #----------------------------------------------------------------------------
  def update
    super
    refresh if @oas != self.active
  end

  #--------------------------------------------------------------------------
  # * Adquisición de los ítems equipados del grupo
  #--------------------------------------------------------------------------
  def equips
    $game_party.equip_items
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición del ítem seleccionado
  #--------------------------------------------------------------------------
  def item
    equips[@index]
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición del número máximo de ítems
  #--------------------------------------------------------------------------
  def item_max
    return equips.size
  end
  
  #--------------------------------------------------------------------------
  # * Definición de confirmación
  #--------------------------------------------------------------------------
  def ok_enabled?
    super && !@disabled.include?(@index)
  end
  
  #--------------------------------------------------------------------------
  # * Definición del control de confirmación y cancelación
  #--------------------------------------------------------------------------
  def process_handling
    super
    Sound.play_buzzer if !ok_enabled? && Input.trigger?(:C)
  end
  
  #--------------------------------------------------------------------------
  # * Renovación
  #--------------------------------------------------------------------------
  def refresh
    @disabled.clear
    equips.each_with_index {|e, i| @disabled << i if MBS::Equip_Enchantment.enabled(e).empty?}
    @oas = self.active
    change_color(normal_color, self.active)
    unless equips.empty?
      super
    else
      contents.clear
      draw_text(5, 0, self.width, 24, MBS::Equip_Enchantment::EMPTY_TEXT)
    end
  end
  
  #----------------------------------------------------------------------------
  # * Creación de los encantamientos disponibles
  #----------------------------------------------------------------------------
  def draw_item(index)
    change_color(normal_color, !@disabled.include?(index))
    draw_icon(equips[index].icon_index, 5, index * 24, self.active && !@disabled.include?(index))
    s = sprintf(":%02d", $game_party.item_number(equips[index]))
    draw_text(32, index * 24, self.width - 102, 24, equips[index].name)
    draw_text(self.width - 65, index * 24, 36, 24, s)
  end
end

#==============================================================================
# ** Window_EnchantList
#==============================================================================
class Window_EnchantList < Window_Selectable
  
  attr_reader :item
  #----------------------------------------------------------------------------
  # * Inicialización del objeto
  #----------------------------------------------------------------------------
  def initialize(item)
    @item = item
    @enchants = MBS::Equip_Enchantment.enabled(item)
    w = 300
    h = 416
    super(Graphics.width - w, 72, w, h - 72)
    @index = -1
    @disabled = []
    refresh
    @oas = self.active
  end
  
  #----------------------------------------------------------------------------
  # * Actualización del proceso
  #----------------------------------------------------------------------------
  def update
    super
    refresh if @oas != self.active
  end
  
  #--------------------------------------------------------------------------
  # * Definición de confirmación
  #--------------------------------------------------------------------------
  def ok_enabled?
    super && !@disabled.include?(@index)
  end
  
  #--------------------------------------------------------------------------
  # * Alteración del ítem a encantar
  #--------------------------------------------------------------------------
  def item=(i)
    @item = i
    @enchants = MBS::Equip_Enchantment.enabled(i)
  end
  
  #--------------------------------------------------------------------------
  # * Definición del control de confirmación o cancelación
  #--------------------------------------------------------------------------
  def process_handling
    super
    call_handler(:info) if Input.trigger?(MBS::Equip_Enchantment::INFO_BUTTON)
    Sound.play_buzzer if !ok_enabled? && Input.trigger?(:C)
  end
  
  #----------------------------------------------------------------------------
  # * Adquisición del encantamiento seleccionado
  #----------------------------------------------------------------------------
  def enchant
    return @enchants.values[@index]
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición del número máximo de ítems
  #--------------------------------------------------------------------------
  def item_max
    return @enchants.size
  end
  
  #--------------------------------------------------------------------------
  # * Renovación
  #--------------------------------------------------------------------------
  def refresh
    @oas = self.active
    @disabled.clear
    change_color(normal_color, self.active)
    super
    change_color(system_color, self.active)
    draw_text(5, 0, self.width, 24, MBS::Equip_Enchantment::WORD)
    change_color(normal_color, self.active)
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición del rectángulo para desechar el ítem
  #     index : índice del ítem
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new
    rect.width = item_width
    rect.height = item_height
    rect.x = index % col_max * (item_width + spacing)
    rect.y = 32 + index / col_max * item_height
    rect
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición del símbolo del encantamiento
  #--------------------------------------------------------------------------
  def symbol
    @enchants.keys[@index]
  end
  
  #--------------------------------------------------------------------------
  # * Verificación de la disponibilidad de un encantamiento
  #--------------------------------------------------------------------------
  def e_enabled?(symbol)
    return false unless @item
    e = MBS::Equip_Enchantment.unlocked[symbol]
    a = e[:type].include?([@item.etype_id, @item.etype_id == 0 ? @item.wtype_id : @item.atype_id]) || e[:type].include?([@item.etype_id])
    cost = @item.enchant_cost(symbol).to_i
    b = $game_party.gold >= cost
    c = e[:items].all? {|i| $game_party.item_number($data_items[i[0]]) >= i[1]}
    return a && b && c && !@item.max_level?(symbol)
  end
  
  #----------------------------------------------------------------------------
  # * Creación de los encantamientos dispobinles
  #----------------------------------------------------------------------------
  def draw_item(index)
    change_color(normal_color, e_enabled?(@enchants.keys[index]))
    @disabled << index unless e_enabled?(@enchants.keys[index])
    draw_icon(@enchants.values[index][:icon], 5, 32 + index * 24, self.active)
    draw_text(32, 32 + index * 24, self.width - 37, 24, @enchants.values[index][:name])
  end
end

#==============================================================================
# ** Window_EnchantInfo
#==============================================================================
class Window_EnchantInfo < Window_Base
  
  attr_accessor :enchant, :item
  
  #----------------------------------------------------------------------------
  # * Inicialización del objeto
  #----------------------------------------------------------------------------
  def initialize(enchant, item)
    @item = item
    @symbol = enchant
    @enchant = MBS::Equip_Enchantment::EFFECTS[enchant]
    @page = 0
    w = 260
    h = 416
    super(Graphics.width / 2 - w / 2, Graphics.height / 2 - h / 2, w, h)
    self.back_opacity = 255
    refresh
  end
  
  #----------------------------------------------------------------------------
  # * Actualización del objeto
  #----------------------------------------------------------------------------
  def update
    return if disposed?
    super
    dispose if Input.trigger?(:B)
    next_page if Input.trigger?(:DOWN) || Input.trigger?(:RIGHT) || Input.trigger?(:R)
    prev_page if Input.trigger?(:UP) || Input.trigger?(:LEFT) || Input.trigger?(:L)
  end
  
  #----------------------------------------------------------------------------
  # * Próxima página
  #----------------------------------------------------------------------------
  def prev_page
    return if @page == 0
    @page -= 1
    refresh
  end
  
  #----------------------------------------------------------------------------
  # * Página anterior
  #----------------------------------------------------------------------------
  def next_page
    return if @page == 3
    @page += 1
    refresh
  end

  #----------------------------------------------------------------------------
  # * Renovación
  #----------------------------------------------------------------------------
  def refresh
    return unless @enchant && @item
    contents.clear
    case @page
      when 0
        draw_attributes
      when 1
        draw_elements
      when 2
        draw_states
      when 3
        draw_cost
    end
  end
  
  #--------------------------------------------------------------------------
  # * Diseño de una línea horizontal
  #--------------------------------------------------------------------------
  def draw_horz_line(y)
    contents.fill_rect(0, y, contents_width, 2, system_color)
  end
  
  #--------------------------------------------------------------------------
  # * Adquisición de color de la línea horizontal
  #--------------------------------------------------------------------------
  def line_color
    color = normal_color
    color.alpha = 48
    color
  end
  
  #----------------------------------------------------------------------------
  # * Diseño de los atributos alterados para el encantamiento
  #----------------------------------------------------------------------------
  def draw_attributes
    draw_header
    
    change_color(system_color)
    #draw_text(5, 32, self.width, 24, "Categoria:")
    draw_text(5, 32, self.width, 24, "Atributos:")
    change_color(normal_color)
      
    8.times do |i|
      draw_text(5, 56 + i * 24, 131, 24, Vocab.param(i))
    end

    8.times do |i|
      change_color(normal_color)
      draw_text(self.width - 108, 54 + i * 24, 64, 24, "#{@item.params[i].to_i}")
      draw_text(self.width - 75, 54 + i * 24, 64, 24, "→")
      change_color(@enchant[:effects][i] > 0 ? power_up_color : normal_color)
      draw_text(self.width - 54, 54 + i * 24, 64, 24, "#{(@item.params[i] + @enchant[:effects][i]).to_i}")
    end
  end
  
  #----------------------------------------------------------------------------
  # * Diseño de los elementos dados al ítem encantado
  #----------------------------------------------------------------------------
  def draw_elements
    draw_header
    
    change_color(system_color)
    draw_text(5, 32, self.width, 24, "Elementos:")
    
    change_color(normal_color)
    @enchant[:effects][8].each_with_index do |x, i|
      draw_text(5, 56 + 24 * i, self.width - 5, 24, $data_system.elements[x])
    end
    draw_text(5, 56, self.width, 24, MBS::Equip_Enchantment::EMPTY_TEXT) if @enchant[:effects][8].empty?
  end
  
  #----------------------------------------------------------------------------
  # * Diseño de los estados que el ítem encantado causa
  #----------------------------------------------------------------------------
  def draw_states
    draw_header
    
    change_color(system_color)
    draw_text(5, 32, self.width, 24, "Estados:")
    
    change_color(normal_color)
    @enchant[:effects][9].each_with_index do |x, i|
      draw_icon($data_states[x].icon_index, 5, 56 + 24 * i)
      draw_text(32, 56 + 24 * i, self.width - 32, 24, $data_states[x].name)
    end
    
    @enchant[:effects][10].each_with_index do |x, i|
      draw_text(self.width - 64, 56 + 24 * i, 64, 24, "#{x}%")
    end
    
    draw_text(5, 56, self.width, 24, MBS::Equip_Enchantment::EMPTY_TEXT) if @enchant[:effects][9].empty?
  end
  
  #----------------------------------------------------------------------------
  # * Diseño del costo del encantamiento
  #----------------------------------------------------------------------------
  def draw_cost
    draw_header
    
    change_color(system_color)
  
    draw_text(5, 32, self.width, 24, "Costo:")
    
    cost = @item.enchant_cost(@symbol).to_i
    
    change_color(cost > $game_party.gold ? crisis_color : normal_color)
    draw_text(self.width - 96, 32, 96, 25, "#{cost} #{Vocab.currency_unit}")
    
    change_color(system_color)
    draw_text(5, 64, self.width, 24, "Ítems necesarios:")
    change_color(normal_color)
    
    @enchant[:items].each_with_index do |x, i|
      change_color(x[1] > $game_party.item_number($data_items[x[0]]) ? crisis_color : normal_color)
      draw_icon($data_items[x[0]].icon_index, 5, 88 + 24 * i)
      draw_text(32, 88 + 24 * i, self.width - 52, 24, $data_items[x[0]].name)
      draw_text(self.width - 64, 88 + 24 * i, 64, 24, sprintf(":%02d", x[1]))
    end
    
    draw_text(5, 88, self.width, 24, MBS::Equip_Enchantment::EMPTY_TEXT) if @enchant[:items].empty?
    
  end
  
  #----------------------------------------------------------------------------
  # * Diseño del cabezal
  #----------------------------------------------------------------------------
  def draw_header
    change_color(normal_color)
    draw_icon(@enchant[:icon], 5, 0)
    draw_text(32, 0, self.width, 24, @enchant[:name])
    draw_text(self.width - 64, 0, 64, 24, "#{@page+1}/4")
    draw_horz_line(28)
  end
  
end

#==============================================================================
# ** Scene_Enchant
#==============================================================================
class Scene_Enchant < Scene_Base
  
  #----------------------------------------------------------------------------
  # * Inicialización del proceso
  #----------------------------------------------------------------------------
  def start
    super
    create_all_windows
    @oi = @equip_list.index
  end
  
  #----------------------------------------------------------------------------
  # * Creación de las ventanas
  #----------------------------------------------------------------------------
  def create_all_windows
    @help = Window_Help.new(2)
    
    @equip_list = Window_EquipList.new
    @equip_list.set_handler(:ok, method(:choose_enchant))
    @equip_list.set_handler(:cancel, method(:return_scene))
    
    @enchant_list = Window_EnchantList.new(@equip_list.item)
    @enchant_list.set_handler(:ok, method(:do_enchant))
    @enchant_list.set_handler(:cancel, method(:choose_equip))
    @enchant_list.set_handler(:info, method(:show_info))
    
    choose_equip unless $game_party.equip_items.empty?
  end
  
  #----------------------------------------------------------------------------
  # * Creación del ítem encantado
  #----------------------------------------------------------------------------
  def do_enchant
    if @equip_list.item.max_level?(@enchant_list.symbol)
      choose_enchant
      return
    end
    e = @enchant_list.enchant
    m = MBS::Equip_Enchantment
    s = @equip_list.item.is_a?(RPG::Weapon) ? :weapon : :armor
    r = m.create_enchanted(@enchant_list.symbol, s, @equip_list.item.id)
    @enchant_list.refresh
    unless r
      choose_enchant
      return
    end
    w = m.enchanted(@enchant_list.symbol, s, @equip_list.item.id)
    $game_party.lose_gold(@equip_list.item.enchant_cost(@enchant_list.symbol))
    $game_party.lose_item(@equip_list.item, 1, true)
    e[:items].each {|i| $game_party.lose_item($data_items[i], 1, false)}
    $game_party.gain_item(w, 1, true)
    @equip_list.refresh
    choose_equip
  end
  
  #----------------------------------------------------------------------------
  # * Exhibición de la información de un encantamiento
  #----------------------------------------------------------------------------
  def show_info
    return unless @enchant_list.active
    if @info_window
      @info_window = Window_EnchantInfo.new(MBS::Equip_Enchantment.enabled(@enchant_list.item).keys[@enchant_list.index], @equip_list.item) if @info_window.disposed?
    else
      @info_window = Window_EnchantInfo.new(MBS::Equip_Enchantment.enabled(@enchant_list.item).keys[@enchant_list.index], @equip_list.item)
    end
    @equip_list.deactivate
    @enchant_list.deactivate
    @info_window.activate
  end
  
  #----------------------------------------------------------------------------
  # * Selección de equipamiento
  #----------------------------------------------------------------------------
  def choose_equip
    @enchant_list.deactivate
    @enchant_list.index = -1
    @enchant_list.refresh
    @equip_list.activate
    @equip_list.refresh
    @help.set_text(MBS::Equip_Enchantment::HELP_TEXTS[0])
  end
  
  #----------------------------------------------------------------------------
  # * Selección de encantamiento
  #----------------------------------------------------------------------------
  def choose_enchant
    @equip_list.deactivate
    @equip_list.refresh
    @enchant_list.activate
    @enchant_list.index = 0
    @help.set_text(MBS::Equip_Enchantment::HELP_TEXTS[1])
  end
  
  #----------------------------------------------------------------------------
  # * Desativación de las ventanas
  #----------------------------------------------------------------------------
  def deactivate_all
    @equip_list.deactivate
    @equip_list.index = -1
    @enchant_list.deactivate
    @enchant_list.index = -1
  end
  
  #----------------------------------------------------------------------------
  # * Actualización del proceso
  #----------------------------------------------------------------------------
  def update
    if @info_window
      if @info_window.disposed? && !(@equip_list.active || @enchant_list.active)
        choose_enchant
      end
    end
    super
    deactivate_all if $game_party.equip_items.empty?
    return_scene if Input.trigger?(:B) && $game_party.equip_items.empty?
    if @oi != @equip_list.index
      @oi = @equip_list.index
      @enchant_list.item = @equip_list.item
      @enchant_list.refresh
    end
    @help.set_text(MBS::Equip_Enchantment::HELP_TEXTS[2]) if $game_party.equip_items.empty?
  end
end

#==============================================================================
# ** DataManager
#==============================================================================
module DataManager
  class << self
    alias mbsmkscnts make_save_contents
    alias mbsexsvcns extract_save_contents
  end
  #--------------------------------------------------------------------------
  # * Guardar la creación de contenido
  #--------------------------------------------------------------------------
  def self.make_save_contents
    contents = mbsmkscnts
    contents[:e_weapons] = $e_weapons
    contents[:e_armors] = $e_armors
    contents[:e_unlocked] = MBS::Equip_Enchantment.unlocked.keys
    contents
  end
  #--------------------------------------------------------------------------
  # * Extraer contenido guardado
  #--------------------------------------------------------------------------
  def self.extract_save_contents(contents)
    mbsexsvcns(contents)
    $e_weapons = contents[:e_weapons]
    
    $e_weapons.each_with_index do |x, i|
      next unless x
      x.each do |k, y|
        $data_weapons[y] = MBS::Equip_Enchantment.enchanted(k, :weapon, i)
      end
    end
    
    $e_armors = contents[:e_armors]
    
    $e_armors.each_with_index do |x, i|
      next unless x
      x.each do |k, y|
        $data_armors[y] = MBS::Equip_Enchantment.enchanted(k, :armor, i)
      end
    end
    
    MBS::Equip_Enchantment.unlocked = contents[:e_unlocked]
  end
end

Screens:






Instrucciones:

- Pegar encima de Main
- El resto de indicaciones vienen dentro del script. En caso de tener alguna duda, contactarme por MP.

Créditos:

- Masked (Creación del script)
- Flaviozzz (Ayudante del creador)
- Alojzy (Por traducir las instrucciones y comentarios del autor)

_________________
Staff tú tienes que comprender, mi firma se pasa en excesooo:

==========================================================================
 

Nadie sabe que le pasó a esta mujer...
Las leyendas de Magvel dicen que tuvo una explosión cerebral causada por el torso desnudo de Ephraim, otros dicen que El Rey Demonio la tiene poseída, ¿quién sabe?... 
==========================================================================
Soy y me gusta:



avatar
Alojzy
Moderador
Moderador

Masculino
Chile
RPG Maker : Xp
Mensajes : 278
Monedas : 444
Reputación : 55
Edad : 27
Localización : Ginnungagap.

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Turbiosoft.acho el Jue Ene 15, 2015 8:14 pm

¡Genial aporte!

No lo usaré por ser de Ace xD Pero veo que viene bastante bien. ¡Además, se aprecia mucho el esfuerzo que has hecho en traducir tanto el script como la demo!

¡Un +1 pa ti!

_________________

¡Apoya PCII colocando esta barrita en tu firma!

Turbiosoft.acho apoya a...:






Y a los juegos de Zoro y Japo (?)


avatar
Turbiosoft.acho
Admin
Admin

Femenino
Rmakercom
RPG Maker : Vx
Mensajes : 1228
Monedas : 4304
Reputación : 179
Localización : En el glorioso y magistral Zulo.

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Muzgar el Jue Ene 15, 2015 10:08 pm

Muy buen script, te llevas el +1 xD una lástima que sea para Ace ya que yo no puedo ni verlo (??) pero es un buen script, imagina las posibilidades! (??) xD buen aporte

_________________
Apoya wild wars poniendo esta barra en tu firma


Muzgar apoya a...
Spoiler:

avatar
Muzgar
Admin
Admin

Rmakercom
RPG Maker : Ace
Mensajes : 1294
Monedas : 1408
Reputación : 156

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por KRiZaLiD el Jue Ene 15, 2015 10:36 pm

Excelente aporte ALOJ!!
pero yo también soy otro usuario del VX como los dos de arriba. =(  ¿Hay algo parecido para VX? 
Te mereces tus +1
Nos vemos Aloj, se despide
KriZ

_________________
Mi Proyecto:


KRiZaLiD apoya:
avatar
KRiZaLiD
Moderador
Moderador

Masculino
Chile
RPG Maker : Vx
Mensajes : 816
Monedas : 4205
Reputación : 103
Edad : 33
Localización : Florida (pueblo fantasma), Chile

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Blazecrimson el Vie Ene 16, 2015 12:44 pm

Me parece un aporte verdaderamente útil,  se agradece.  No uso ACE pero seguro que sirve a más de uno. 

Saludos!
avatar
Blazecrimson
PJ de Quest
PJ de Quest

España
RPG Maker : Xp
Mensajes : 46
Monedas : 58
Reputación : 2

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por luistop12 el Sáb Ene 17, 2015 2:28 am

yo uso vx, igual que los tres de arriba, y no uso ACE como blaze.

Pero de igual manera se agradece el aporte y se te da su respectivo "pulgarcito".

ATTE
Luis.
avatar
luistop12
PJ Recurrente
PJ Recurrente

Chile
RPG Maker : Vx
Mensajes : 74
Monedas : 595
Reputación : 7
Edad : 24
Localización : Oliwi ¿has visto a Alice?

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por carlosandrescomenzando el Dom Ene 25, 2015 4:17 am

jeje hola amigo me llamo carlos 
y yo utilizo la version vx y la vx ace las dos
y de verdad me gusto mucho el script
y soi un poco nuevo tambien queria saludar
a blaze e visto su projecto descendencia carmesi 
solo su historia me encanta*:D*
avatar
carlosandrescomenzando
PJ de Quest
PJ de Quest

Colombia
RPG Maker : Ace
Mensajes : 38
Monedas : 84
Reputación : 9
Localización : colombia la mejor tierra del mundo

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por ElNachGames el Vie Dic 18, 2015 1:15 pm

Yo uso Ace, queria saber si se puesde utilizar para las armas también?

ElNachGames
PJ de Relleno
PJ de Relleno

España
RPG Maker : Ace
Mensajes : 2
Monedas : 3
Reputación : 0
Edad : 21

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Turbiosoft.acho el Vie Dic 18, 2015 2:59 pm

Sí, de hecho lo menciona el propio creador del post. Este script es sólo para Ace así que no te preocupes, si tienes problemas de compatibilidad sólo significará que estará chocando con algún otro script (?

_________________

¡Apoya PCII colocando esta barrita en tu firma!

Turbiosoft.acho apoya a...:






Y a los juegos de Zoro y Japo (?)


avatar
Turbiosoft.acho
Admin
Admin

Femenino
Rmakercom
RPG Maker : Vx
Mensajes : 1228
Monedas : 4304
Reputación : 179
Localización : En el glorioso y magistral Zulo.

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por cienpieces el Vie Ago 19, 2016 7:09 pm

Hola, este script es justo lo que estaba buscando, pero soy terriblemente novato y no entiendo como crear los encantamientos y armas :/

cienpieces
PJ de Relleno
PJ de Relleno

Rmakercom
RPG Maker : Ace
Mensajes : 1
Monedas : 1
Reputación : 0

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por hikarukurenai el Sáb Ago 20, 2016 8:57 pm

que padreeee!!!! me lo llevo siiiiii!!!!! lo necesito
avatar
hikarukurenai
PJ de Relleno
PJ de Relleno

México
RPG Maker : Ace
Mensajes : 28
Monedas : 39
Reputación : 1
Localización : villahermosa tabasco mexico

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Turbiosoft.acho el Dom Ago 21, 2016 8:35 pm

Buenas, cienpieces y Hikaru. Vengo a comentaros que habéis cometido necropost, cuyas únicas excepciones son:

El necropost no es considerado como tal en los siguientes casos:
- El autor de un post viejo de un proyecto o recursos publica una actualización y la da a conocer reviviendo el post.
- Comentarios o críticas a un proyecto publicado, únicamente comentarios o críticas largas, no mensajes cortos de 4 palabras.
- Notificación de cierre de un proyecto por parte del mismo autor del post.
- En la sección de tutoriales, no se considera necropost siempre y cuando el mensaje del usuario haga referencia hacia alguna duda manteniendo el hilo de tal.
- En la sección "galería de juegos y proyectos" se puede revivir un tema, siempre y cuando sea por alguna duda del juego o un comentario sobre tal, cuando el comentario sea totalmente necesario de parte del usuario hacia el creador del juego.

De momento lo dejaré pasar, pero espero que no ocurra más. Aseguraos de leer las reglas para no cometer más infracciones.

Saludos

_________________

¡Apoya PCII colocando esta barrita en tu firma!

Turbiosoft.acho apoya a...:






Y a los juegos de Zoro y Japo (?)


avatar
Turbiosoft.acho
Admin
Admin

Femenino
Rmakercom
RPG Maker : Vx
Mensajes : 1228
Monedas : 4304
Reputación : 179
Localización : En el glorioso y magistral Zulo.

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Yo \(._.)/ el Sáb Sep 03, 2016 7:10 am

Oye, tengo un problema:
El Script funciona muy bien, pero yo quiero hacer en el que al usar un atributo gaste una cierta cantidad de objetos, sin embargo me aparece un error en el Script.
Dime ¿que tengo que hacer para que ya no me aparezca es error?

Aquí esta el código en donde ocurre el error;
Código:
draw_icon($data_items[x[0]].icon_index, 5, 88 + 24 * i)

Espero que puedas responderme pronto.

Yo \(._.)/
PJ de Relleno
PJ de Relleno

Rmakercom
RPG Maker : Ace
Mensajes : 1
Monedas : 1
Reputación : 0

Volver arriba Ir abajo

Re: [Ace] Sistema de encantamientos

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

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