Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/SkyFangames/La-Base-de-Sky/llms.txt

Use this file to discover all available pages before exploring further.

Descripción

Box Auto-Sort es un plugin que añade funcionalidad de ordenamiento automático al sistema de almacenamiento de PC en Pokémon Essentials. Permite organizar los Pokémon en las cajas usando múltiples criterios de ordenamiento con vista previa opcional.
Versión: 1.0.0
Compatible con: Pokémon Essentials v21.1
Autores: NoNonever, DPertierra
Enlace: Eevee Expo

Características Principales

12 Métodos de Ordenamiento

Múltiples criterios para organizar tus Pokémon

Sistema de Vista Previa

Visualiza el resultado antes de aplicar cambios

Integración Automática

Se añade automáticamente al menú de cajas

Compatible con Otros Sistemas

Funciona con BW Storage y Storage System Utilities

Instalación y Configuración

Configuración Básica

# En 000_Settings.rb
module BoxAutoSort
  # Habilitar/deshabilitar el sistema completo
  ENABLED = true
  
  # Mostrar vista previa antes de ordenar (recomendado)
  SHOW_PREVIEW = false
  
  # Número máximo de Pokémon a mostrar en vista previa
  PREVIEW_COUNT = 30
end
Si SHOW_PREVIEW está en false, los cambios se aplicarán inmediatamente sin confirmación. Se recomienda dejarlo en true para evitar ordenamientos accidentales.

Métodos de Ordenamiento

1. Por Nivel (Level)

Nivel Ascendente

:LEVEL_ASC - Ordena del nivel 1 al 100

Nivel Descendente

:LEVEL_DESC - Ordena del nivel 100 al 1
# Ejemplo de uso directo
sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, 0)
sorter.sort_pokemon(:LEVEL_ASC)   # Menor a mayor
sorter.sort_pokemon(:LEVEL_DESC)  # Mayor a menor

2. Alfabético (Alphabetical)

A-Z

:ALPHABET - Ordena alfabéticamente A→Z

Z-A

:ALPHABET_REV - Ordena alfabéticamente Z→A
# Ordenar alfabéticamente
sorter.sort_pokemon(:ALPHABET)      # A-Z
sorter.sort_pokemon(:ALPHABET_REV)  # Z-A

3. Por Tipo (Type)

Tipo Primario

:TYPE_PRIMARY - Solo considera el tipo primario

Combinación de Tipos

:TYPE_DUAL - Considera ambos tipos del Pokémon
# Ordenamiento por tipo
sorter.sort_pokemon(:TYPE_PRIMARY)  # Por tipo primario
sorter.sort_pokemon(:TYPE_DUAL)     # Por combinación completa

# Orden de tipos (por ID):
# NORMAL, FIGHTING, FLYING, POISON, GROUND, ROCK, BUG, GHOST, STEEL,
# FIRE, WATER, GRASS, ELECTRIC, PSYCHIC, ICE, DRAGON, DARK, FAIRY

4. Por Fecha de Captura (Catch Date)

# Ordena por fecha de captura (más recientes primero)
sorter.sort_pokemon(:CATCH_DATE)
Los Pokémon capturados más recientemente aparecerán primero. Si dos Pokémon se capturaron el mismo día, se ordenan por hora de captura.

5. Shiny Primero (Shiny First)

# Los Pokémon shiny aparecen primero
sorter.sort_pokemon(:SHINY_FIRST)
Organiza colocando todos los Pokémon shiny al inicio de la caja, seguidos de los Pokémon normales.

6. Por Número de Pokédex Nacional (National Dex)

# Ordena por número de Pokédex Nacional
sorter.sort_pokemon(:SPECIES_ID)
Ejemplo de orden: Bulbasaur (#001) → Ivysaur (#002) → Venusaur (#003) → …

7. Por Formas (Forms)

# Ordena por especie y forma
sorter.sort_pokemon(:FORM_ID)
Agrupa Pokémon de la misma especie, ordenando sus formas:
  • Rotom normal → Rotom Calor → Rotom Lavado → Rotom Frío → etc.

8. Por Amistad (Friendship)

# Ordena por nivel de amistad (mayor a menor)
sorter.sort_pokemon(:FRIENDSHIP)
Los Pokémon con mayor amistad (255) aparecen primero.

9. Por Naturaleza (Nature)

# Ordena por naturaleza (alfabéticamente)
sorter.sort_pokemon(:NATURE)
Ejemplo de orden: Activa → Agitada → Alegre → … → Tímida

Uso desde el Juego

Método 1: Menú de Comandos de Caja

# El jugador puede acceder desde:
# 1. Abrir el PC
# 2. Hacer clic en el nombre de cualquier caja
# 3. Seleccionar "Ordenar" del menú
# 4. Elegir método de ordenamiento
# 5. Confirmar en la vista previa

Método 2: Menú Principal del PC

# También disponible desde:
# 1. Acceder al PC desde cualquier Centro Pokémon
# 2. Seleccionar "Box Auto-Sort" del menú principal
# 3. Elegir qué caja ordenar
# 4. Seleccionar método de ordenamiento

API para Desarrolladores

Clase BoxSorter

# Crear instancia de ordenador
sorter = BoxAutoSort::BoxSorter.new(storage, box_index)

# storage: $PokemonStorage
# box_index: Índice de la caja (0-based)

Métodos Principales

Obtener Lista de Pokémon

# Obtener todos los Pokémon en la caja (excluye espacios vacíos)
pokemon_list = sorter.get_pokemon_list

# Retorna: Array de [pokemon, posicion]
# Ejemplo: [[pokemon1, 0], [pokemon2, 3], [pokemon5, 8]]

Ordenar Pokémon

# Aplicar ordenamiento
success = sorter.sort_pokemon(:LEVEL_ASC)

# Retorna: true si se ordenó correctamente, false si hubo error
if success
  pbMessage("¡Caja ordenada exitosamente!")
else
  pbMessage("No se pudo ordenar la caja.")
end

Vista Previa de Ordenamiento

# Obtener vista previa sin aplicar cambios
preview = sorter.preview_sort(:LEVEL_ASC)

# Retorna: Array ordenado de [pokemon, posicion_original]
# Los cambios NO se aplican a la caja

Métodos de Comparación

Estos métodos son usados internamente pero pueden ser útiles:
# Comparar por tipo primario
def compare_types(pkmn1, pkmn2)
  type1_id = GameData::Type.get(pkmn1.type1).id_number
  type2_id = GameData::Type.get(pkmn2.type1).id_number
  return type1_id <=> type2_id
end

# Comparar por tipo dual
def compare_types_dual(pkmn1, pkmn2)
  # Primero compara tipo primario, luego secundario
  result = compare_types(pkmn1, pkmn2)
  return result if result != 0
  
  type1_id = GameData::Type.get(pkmn1.type2).id_number
  type2_id = GameData::Type.get(pkmn2.type2).id_number
  return type1_id <=> type2_id
end

# Comparar por fecha de captura
def compare_catch_date(pkmn1, pkmn2)
  return pkmn2.timeReceived <=> pkmn1.timeReceived
end

# Comparar shiny primero
def compare_shiny_first(pkmn1, pkmn2)
  return -1 if pkmn1.shiny? && !pkmn2.shiny?
  return 1 if !pkmn1.shiny? && pkmn2.shiny?
  return 0
end

# Comparar por ID de especie
def compare_species_id(pkmn1, pkmn2)
  id1 = GameData::Species.get(pkmn1.species).id_number
  id2 = GameData::Species.get(pkmn2.species).id_number
  return id1 <=> id2
end

# Comparar por especie y forma
def compare_form_id(pkmn1, pkmn2)
  result = compare_species_id(pkmn1, pkmn2)
  return result if result != 0
  return pkmn1.form <=> pkmn2.form
end

Ejemplos Avanzados

Ejemplo 1: Ordenamiento Personalizado desde Script

# Ordenar la primera caja por nivel
def sort_first_box_by_level
  return if !$PokemonStorage
  
  sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, 0)
  
  if sorter.sort_pokemon(:LEVEL_DESC)
    pbMessage("¡La primera caja ha sido ordenada por nivel!")
  else
    pbMessage("La caja está vacía o hubo un error.")
  end
end

# Llamar desde evento
sort_first_box_by_level

Ejemplo 2: Ordenar Todas las Cajas

def sort_all_boxes(method = :LEVEL_ASC)
  return if !$PokemonStorage
  
  sorted_count = 0
  
  $PokemonStorage.maxBoxes.times do |box_index|
    sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, box_index)
    sorted_count += 1 if sorter.sort_pokemon(method)
  end
  
  pbMessage("Se ordenaron #{sorted_count} cajas.")
end

# Uso
sort_all_boxes(:SPECIES_ID)  # Ordenar todas por Pokédex Nacional

Ejemplo 3: Sistema de Vista Previa Personalizado

def custom_sort_with_preview(box_index, method)
  sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, box_index)
  
  # Obtener vista previa
  preview = sorter.preview_sort(method)
  
  if preview.empty?
    pbMessage("La caja está vacía.")
    return
  end
  
  # Mostrar primeros 5 Pokémon del resultado
  message = "Primeros 5 Pokémon después de ordenar:\n"
  preview.first(5).each_with_index do |data, i|
    pokemon = data[0]
    message += "#{i+1}. #{pokemon.name} Nv.#{pokemon.level}\n"
  end
  
  pbMessage(message)
  
  # Confirmar
  if pbConfirmMessage("¿Aplicar este ordenamiento?")
    sorter.sort_pokemon(method)
    pbMessage("¡Caja ordenada!")
  end
end

Ejemplo 4: Ordenamiento Condicional

def smart_sort_box(box_index)
  sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, box_index)
  pokemon_list = sorter.get_pokemon_list
  
  return if pokemon_list.empty?
  
  # Decidir método basado en contenido de la caja
  has_shinies = pokemon_list.any? { |pkmn, pos| pkmn[0].shiny? }
  all_same_species = pokemon_list.all? { |pkmn, pos| pkmn[0].species == pokemon_list[0][0].species }
  
  if has_shinies
    # Si hay shinies, ponerlos primero
    sorter.sort_pokemon(:SHINY_FIRST)
    pbMessage("Caja ordenada: Shiny primero")
  elsif all_same_species
    # Si todos son la misma especie, ordenar por nivel
    sorter.sort_pokemon(:LEVEL_DESC)
    pbMessage("Caja ordenada: Por nivel")
  else
    # Por defecto, ordenar por Pokédex
    sorter.sort_pokemon(:SPECIES_ID)
    pbMessage("Caja ordenada: Por Pokédex Nacional")
  end
end

Ejemplo 5: Integración con Menú Personalizado

def show_sort_menu
  commands = [
    "Nivel (↑)",
    "Nivel (↓)",
    "Alfabético (A-Z)",
    "Por Tipo",
    "Shiny Primero",
    "Pokédex Nacional",
    "Por Amistad",
    "Cancelar"
  ]
  
  cmd = pbMessage("¿Cómo ordenar?", commands, -1)
  
  return if cmd < 0 || cmd == commands.length - 1
  
  methods = [
    :LEVEL_ASC,
    :LEVEL_DESC,
    :ALPHABET,
    :TYPE_PRIMARY,
    :SHINY_FIRST,
    :SPECIES_ID,
    :FRIENDSHIP
  ]
  
  box = $PokemonStorage.currentBox
  sorter = BoxAutoSort::BoxSorter.new($PokemonStorage, box)
  
  if sorter.sort_pokemon(methods[cmd])
    pbMessage("¡Caja ordenada exitosamente!")
  else
    pbMessage("No se pudo ordenar la caja.")
  end
end

Compatibilidad con Otros Plugins

BW Storage System

# Box Auto-Sort detecta automáticamente BW Storage System
# y se integra con su interfaz
if PluginManager.installed?("BW Storage System")
  # Funcionalidad especial para BW Storage
end

Storage System Utilities

# Compatible con Storage System Utilities
if PluginManager.installed?("Storage System Utilities")
  # Se añade al menú extendido
end

Solución de Problemas

Error: “BoxAutoSort::BoxSorter not found”Asegúrate de que el plugin está habilitado:
module BoxAutoSort
  ENABLED = true
end
Los Pokémon no se ordenan como esperabaVerifica:
  1. Que la caja no esté vacía
  2. Que el método de ordenamiento sea válido
  3. Que SHOW_PREVIEW esté configurado correctamente
La opción “Ordenar” no aparece en el menú
  1. Verifica que ENABLED = true
  2. Comprueba que no haya conflictos con otros plugins de almacenamiento
  3. Asegúrate de estar usando Essentials v21.1

Configuración Avanzada

Personalizar Nombres de Métodos

Puedes traducir o personalizar los nombres mostrados:
# Añadir en tu script personalizado
module BoxAutoSort
  SORT_METHOD_NAMES = {
    :LEVEL_ASC     => "Nivel Bajo → Alto",
    :LEVEL_DESC    => "Nivel Alto → Bajo",
    :ALPHABET      => "Nombre A-Z",
    :ALPHABET_REV  => "Nombre Z-A",
    :TYPE_PRIMARY  => "Tipo Principal",
    :TYPE_DUAL     => "Combinación de Tipos",
    :CATCH_DATE    => "Fecha de Captura",
    :SHINY_FIRST   => "Variocolor Primero",
    :SPECIES_ID    => "Número de Pokédex",
    :FORM_ID       => "Especie y Forma",
    :FRIENDSHIP    => "Nivel de Amistad",
    :NATURE        => "Naturaleza"
  }
end

Rendimiento

Optimización:
  • El ordenamiento es muy rápido para cajas con < 30 Pokémon
  • Para cajas llenas, puede tomar 1-2 segundos
  • El algoritmo de ordenamiento es O(n log n)
  • La vista previa no afecta el rendimiento significativamente

Créditos y Enlaces

Autores: NoNonever, DPertierra
Versión: 1.0.0
Compatible con: Pokémon Essentials v21.1
Enlace oficial: Eevee Expo - Box Auto-Sort

Páginas Relacionadas

Descripción General

Volver al catálogo de plugins

Enhanced Pokemon UI

Mejoras visuales para Pokémon

Build docs developers (and LLMs) love