¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 Problema con script de añadir ranuras de equipo el Miér Jul 18, 2012 7:31 pm

alex.fayula

avatar
Buenos días, tengo un problema con el script FP Script Slots de Tsukihime

Para mi proyecto (que por cierto pronto presentaré en caso de que se solucione este tema y avance un poco con el mapeado) estoy creando un sistema de magia por equipo, es decir, me equipo un objeto y me otorga una magia

Para ello necesitaba un script que me ampliara el número y el tipo de ranuras de equipo que vienen por defecto y el FP Script Slots lo soluciona. El problema está en que al crear un nuevo tipo de ranura no sé como añadirle equipo que se inserte en dicha ranura (me he leido las instrucciones pero no consigo hacer que funcione)

tengo también el script de Overlay de Yami pero lo he probado con y sin ese script y no funciona así que no es un problema de incompatibilidad. A ver si alguién con un poco de tiempo es capaz de conseguirlo y de decirme cual es el problema, si es que hago algo mal.

Aquí os dejo el script:

Código:
=begin
==============================================================================
 ** FP Equip Slots
 Author: Tsukihime
 Date: Jul 3, 2012
------------------------------------------------------------------------------
 ** Change log
 Jul 3
  -equip slots are now determined by features
  -added support for FP Inventory System
 May 15
  -somewhat compatible with ace equip engine
  -Added support for equip levels
 
 May 13
  -Initial release
------------------------------------------------------------------------------
 This script allows you to specify arbitrary numbers
 of equip slots.
 
 If you are using this script, all of the vocabulary
 for the equip types will be controlled by this
 script and not "database terms"
 
 You start by defining the equip types in your game.
 In the "Etypes" table below, you can type in the different
 equip types. Note that number of slots is no longer used.
 
 Equips that should be given a custom equip type should be tagged with
 
    <etype n>
   
 Where n corresponds to the a particular equip type defined in the table
 
 In order to add slots, you must add "features". This is not available
 in the default editor, so you will need to use notetags.
 
 In actors, classes, weapons, armors, and states, you can type
 
    <+eslot: slot_type amount>
   
    <+eslot: 0 2>
    <+eslot: 1 1>
   
 The first example says to add two slot 0's. Slot 0 by default
 is the weapon slot, so your actor will have two weapon slots.
 
 Because these are features, the slots change depending on what you
 equip, what your class is, and who the actor is. It is also possible
 to change slots in game using script calls.
 
 You can also add slots to your actors directly through script calls
 Just use

    add_slot(actor_id, slot_type, amount)
   
 to give the specified actor more slots.
==============================================================================
=end
$imported = {} if $imported.nil?
$imported["FP_EquipSlots"] = true

module Feature_Plus
  module Equip_Slots
   
    # Want to use this system?
    Use_ES_Slots = true
   
    # Equip types. You can customize this
    # Equip type => [Type name, number of slots, has levels?]
    Etypes = {0 => ["Arma", 1, true],
        1 => ["Escudo", 1, true],
        2 => ["Cabeza", 1, false],
        3 => ["Cuerpo", 1, false],
        4 => ["Accesorio", 1, false],
                 
        #extended equip types
        5 => ["Objeto", 1, false],
        6 => ["Flechas", 1, false]
        }
   
    # Order that they should appear in the menu
    # You must include all types
    Etype_Order = [0, 6, 1, 2, 3, 4, 5]
   
    # Feature code
    #FEATURE_SLOT_TYPE = 55 default
    FEATURE_EQUIP_TYPE = 102
    FEATURE_EQUIP_SLOT = 103

    # Equip slot count data ID corresponds to
    # the etype defined above
   
    # Regex   
    ES_ETYPE = /<etype:?\s*(\d+)\s*>/i
    Add_Slot_Regex = /<\+eslot:\s*(\d+) (\d+)\s*>/i
   
    def self.etype(etype_id)
      Etypes[etype_id][0] rescue ""
    end
   
    # in case user doesn't follow instructions
    Default_Order = Etypes.collect {|k, v| k}
  end
end

module RPG
 
  class BaseItem
  end
 
  class EquipItem
    include Feature_Plus::Equip_Slots
   
    alias :fp_es_init_rpg_armor :initialize
    def initialize
      fp_es_init_rpg_armor
      fp_es_load_notetags
    end
   
    def fp_es_load_notetags
      self.note.split(/[\r\n]+/).each do |line|
        case line
        when Add_Slot_Regex
          add_slot($1.to_i, $2.to_i)
        when ES_ETYPE
          @etype_id = $1.to_i
        end
      end
    end
  end
 
  class BaseItem
    include Feature_Plus::Equip_Slots
   
    alias :fp_es_init_baseitem :initialize
    def initialize
      fp_es_init_baseitem
      fp_es_load_notetags
    end

    def fp_es_load_notetags
      self.note.split(/[\r\n]+/).each do |line|
        case line
        when Add_Slot_Regex
          add_slot($1.to_i, $2.to_i)
        end
      end
    end
   
    def add_slot(data_id, value)
      @features << RPG::BaseItem::Feature.new(FEATURE_EQUIP_SLOT, data_id, value)
    end
  end
end

module DataManager
 
  class << self
    alias tsuki_fp_es_init init
  end
 
  def self.init
    tsuki_fp_es_init
    load_notetags_fp_equip_slots
  end
   
  def self.load_notetags_fp_equip_slots
    groups = [$data_actors, $data_classes, $data_items, $data_skills, $data_weapons, $data_armors, $data_states]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.fp_es_load_notetags
      end
    end
  end
end

class Game_Actor < Game_Battler
  include Feature_Plus::Equip_Slots
 
  alias :fp_es_empty_slot :empty_slot
  def empty_slot(etype_id)
    make_slots(etype_id)
    fp_es_empty_slot(etype_id)
  end
 
  def make_slots(etype_id)
    list = slot_list(etype_id)
    list.each {|i|
      @equips[i] = Game_BaseItem.new if @equips[i].nil?
    }
  end
 
  def check_slots(slots)
    slots.each_with_index {|slot_id, i|
      @equips[i] ||= Game_BaseItem.new
    }
  end
 
  def es_slots?
    Use_ES_Slots
  end
 
  def es_slot_features
    features(FEATURE_EQUIP_SLOT).inject({}) {|r, ft|
      r[ft.data_id] ||= 0
      r[ft.data_id] += ft.value
      r
    }
  end
 
  def es_default_order
    eslots = es_slot_features
    #return Etypes.flat_map {|k,v| [k] * v[1]}.sort_by {|i| Default_Order.index(i)}
    return eslots.flat_map {|k,v| [k] * v[1]}.sort_by {|i| Default_Order.index(i)}
  end
 
  def es_get_slots
    eslots = es_slot_features
    #return Etypes.flat_map {|k,v| [k] * v[1]}.sort_by {|i| Etype_Order.index(i)} rescue es_default_order
    return eslots.flat_map {|k,v| [k] * v}.sort_by {|i| Etype_Order.index(i)} rescue es_default_order
  end
     
  def es_equip_slots
    slots = es_get_slots
    check_slots(slots)
    return slots.map! {|slot| slot == 1 ? 0 : slot} if dual_wield?
    return slots
  end

  alias fpes_equip_slots equip_slots
  def equip_slots
    return es_equip_slots if es_slots?
    return fpes_equip_slots
  end
end

class Game_Interpreter
 
  def add_slot(actor_id, slot_id, amount)
    $data_actors[actor_id].add_slot(slot_id, amount)
  end
 
#~  def remove_slot(actor_id, slot_id, amount)
#~    $data_actors[actor_id].remove_slot(slot_id, amount)
#~  end
end

#==============================================================================
# ** Modify equip window to hold variable equips
#==============================================================================

class Window_EquipSlot < Window_Selectable
  #--------------------------------------------------------------------------
  # * content height variable to actor equip size
  #--------------------------------------------------------------------------
  def content_height
    @actor.equip_slots.size * line_height - standard_padding * 2
  end
  #--------------------------------------------------------------------------
  # * Hardcode number of lines
  #--------------------------------------------------------------------------
  def window_height
    fitting_height(5)
  end
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    @actor.nil? ? 0 : @actor.equip_slots.size
  end
 
  #--------------------------------------------------------------------------
  # * Use custom vocabulary list
  #--------------------------------------------------------------------------
  def slot_name(index)
    @actor ? Feature_Plus::Equip_Slots::etype(@actor.equip_slots[index]) : ""
  end
 
  def refresh
    create_contents
    draw_all_items
  end
end

class Window_EquipItem < Window_ItemList

  #--------------------------------------------------------------------------
  # * Include in Item List?
  #--------------------------------------------------------------------------
  def include?(item)
    return true if item == nil
    return false unless item.is_a?(RPG::EquipItem)
    return false if @slot_id < 0
    return false if item.etype_id != @actor.equip_slots[@slot_id]
    return @actor.equippable?(item)
  end
end

class Window_EquipStatus < Window_Base
 
  def draw_item(x, y, param_id)
    draw_param_name(x + 4, y, param_id)
    draw_current_param(x + 44, y, param_id) if @actor
    draw_right_arrow(x + 104, y)
    draw_new_param(x + 126, y, param_id) if @temp_actor
  end
 
  def draw_right_arrow(x, y)
    change_color(system_color)
    draw_text(x, y, 22, line_height, "→", 1)
  end
 
  def draw_current_param(x, y, param_id)
    change_color(normal_color)
    draw_text(x, y, 48, line_height, @actor.param(param_id), 2)
  end
 
  def draw_new_param(x, y, param_id)
    new_value = @temp_actor.param(param_id)
    change_color(param_change_color(new_value - @actor.param(param_id)))
    draw_text(x, y, 48, line_height, new_value, 2)
  end
end

if $imported["FP_InventoryPlus"]
 
  class Game_Actor < Game_Battler
   
    def make_slots(etype_id)
      list = slot_list(etype_id)
      list.each {|i|
        @equips[i] = Game_CustItem.new if @equips[i].nil?
      }
    end
   
    def check_slots(slots)
      slots.each_with_index {|slot_id, i|
        @equips[i] ||= Game_CustItem.new
      }
    end
  end
end


EDIT: Resuelto, al final era una tontería, pueden cerrar el tema

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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