npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

stone-rae-parser

v1.0.0

Published

Parser para arquivos .aeitems (STONE_ESSENCE) - retorna dados de itens baseado em ID

Readme

stone-rae-parser

Parser para arquivos .aeitems (STONE_ESSENCE) - retorna dados estruturados de itens baseado em ID.

Instalação

npm install stone-rae-parser

Uso Básico

Node.js - Usar dados padrão (STONE_ESSENCE.aeitems)

import { getItemById, getAllIds } from 'stone-rae-parser';

// Buscar um item pelo ID
const item = getItemById(1996);
console.log(item);
// {
//   id: 1996,
//   type: 1956,
//   name: 'Pedra Vermelha Ardente Nv.5',
//   level: 5,
//   price: 800,
//   ...
// }

// Obter todos os IDs disponíveis
const allIds = getAllIds();
console.log(allIds); // [1996, 1998, 2000, ...]

Browser - Usar dados padrão

import { getItemById, getAllIds, loadDefaultDataFromUrl, setDefaultData } from 'stone-rae-parser';

// Opção 1: Carregar via fetch (recomendado)
await loadDefaultDataFromUrl('/assets/STONE_ESSENCE.aeitems');
const item = getItemById(1996);

// Opção 2: Usar dados já carregados como string
const fileContent = await fetch('/assets/STONE_ESSENCE.aeitems').then(r => r.text());
setDefaultData(fileContent); // Converter UTF-16LE para UTF-8 primeiro se necessário
const item2 = getItemById(1996);

Usar dados customizados

import { getItemById, parseFile, parseContent } from 'stone-rae-parser';

// Opção 1: Arquivo customizado (UTF-16LE)
const item1 = getItemById(1996, './meu_arquivo.aeitems');

// Opção 2: Conteúdo como string (já em UTF-8)
const content = `531 MINHA_LISTA\n1996\n1956\n...`;
const item2 = getItemById(1996, content);

// Opção 3: Parsear manualmente
const itemsMap = parseFile('./meu_arquivo.aeitems');
const item3 = itemsMap.get(1996);

// Ou parsear conteúdo string
const itemsMap2 = parseContent(content);
const item4 = itemsMap2.get(1996);

API

getItemById(id: number): StoneItem | null

Retorna um item usando os dados padrão (STONE_ESSENCE.aeitems).

getItemById(id: number, data: string | Map<number, StoneItem>): StoneItem | null

Retorna um item usando dados customizados. O parâmetro data pode ser:

  • string: Caminho do arquivo .aeitems (será lido como UTF-16LE) ou conteúdo string (já em UTF-8)
  • Map<number, StoneItem>: Map já parseado

getAllIds(): number[]

Retorna array com todos os IDs disponíveis nos dados padrão, ordenados.

getAllIds(data: string | Map<number, StoneItem>): number[]

Retorna array com todos os IDs disponíveis nos dados customizados, ordenados.

parseFile(filePath: string): Map<number, StoneItem>

Lê e parseia um arquivo .aeitems com codificação UTF-16LE, retornando um Map. Apenas disponível no Node.js.

parseContent(content: string): Map<number, StoneItem>

Parseia conteúdo string (já em UTF-8) e retorna um Map. Funciona em Node.js e Browser.

loadFileFromUrl(url: string): Promise<Map<number, StoneItem>>

Carrega arquivo .aeitems via fetch (UTF-16LE) e retorna um Map parseado. Apenas disponível no Browser.

setDefaultData(content: string): void

Define dados padrão embutidos (útil para browser). O conteúdo deve estar em UTF-8 (já convertido de UTF-16LE se necessário).

loadDefaultDataFromUrl(url: string): Promise<void>

Carrega dados padrão via fetch e armazena em cache. Apenas disponível no Browser.

Tipos TypeScript

StoneItem

interface StoneItem {
  id: number;                    // ID único do item
  type: number;                  // Tipo (1956=físico, 1957=mágico, etc.)
  name: string;                  // Nome do item
  modelPath: string;             // Caminho do modelo 3D
  iconPath: string;              // Caminho do ícone
  level: number;                 // Nível da pedra
  color: number;                 // Cor
  price: number;                 // Preço
  shopPrice: number;             // Preço na loja
  installPrice: number;          // Preço de instalação
  uninstallPrice: number;        // Preço de desinstalação
  damageAddon: number;          // ID do addon de dano
  defenseAddon: number;          // ID do addon de defesa
  weaponDesc: string;            // Descrição para armas
  armorDesc: string;             // Descrição para armaduras
  pileNum: number;               // Número máximo de empilhamento
  hasGuid: number;               // Se possui GUID
  procType: number;              // Tipo de processamento
  combinedSwitch: number;        // Switch combinado
  decorationAddonId: number;      // ID do addon de decoração
}

StoneType (Enum)

Valores disponíveis:

  • StoneType.FISICO = 1956 - Tipo físico
  • StoneType.MAGICO = 1957 - Tipo mágico
  • StoneType.VELOCIDADE = 1958 - Tipo velocidade
  • StoneType.HP = 1959 - Tipo HP
  • StoneType.MP = 1960 - Tipo MP
  • StoneType.CINCO_ELEMENTOS = 5287 - Classe dos cinco elementos
  • StoneType.DIVERSOS = 12636 - Diversos

Formato do Arquivo .aeitems

O arquivo .aeitems tem o seguinte formato:

531 STONE_ESSENCE          // Linha de header (nome da lista)
1996                       // ID do primeiro item
1956                       // Tipo
Pedra Vermelha Ardente Nv.5  // Nome
Models\...                 // Model path
Surfaces\...               // Icon path
5                          // Level
0                          // Color
800                        // Price
57143                      // Shop price
2000                       // Install price
2000                       // Uninstall price
476                        // Damage addon
477                        // Defense addon
Atq +16                    // Weapon desc
Def +26                    // Armor desc
9999                       // Pile num
0                          // Has GUID
0                          // Proc type
0                          // Combined switch
0                          // Decoration addon ID
1998                       // Próximo item ID
...

Compatibilidade

Node.js ✅

  • Suporte completo para parseFile() e carregamento automático de dados padrão do sistema de arquivos.

Browser ✅

  • Suporte completo para parseContent(), loadFileFromUrl(), e funções de dados customizados.
  • Use loadDefaultDataFromUrl() ou setDefaultData() para carregar dados padrão no browser.
  • parseFile() não está disponível no browser (use loadFileFromUrl()).

Notas

  • Os arquivos .aeitems estão codificados em UTF-16LE (UCS-2 BOM).
  • O parser detecta automaticamente e remove o BOM se presente.
  • Node.js: Dados padrão são carregados em runtime a partir do arquivo STONE_ESSENCE.aeitems na raiz do projeto (se disponível).
  • Browser: Use loadDefaultDataFromUrl() ou setDefaultData() para definir dados padrão.
  • Se o arquivo padrão não for encontrado, use dados customizados ou coloque o arquivo na raiz do projeto.

Licença

MIT