Una extensión completa de Visual Studio Code para el lenguaje SphereScript (.scp) utilizado en servidores de Ultima Online basados en Sphere X.
✨ Características
🎨 Resaltado de Sintaxis
- Secciones:
[CHARDEF], [ITEMDEF], [EVENTS], etc.
- Triggers:
@CREATE, @DCLICK, @TIMER, etc.
- Propiedades:
NAME, COLOR, HITS, MANA, etc.
- Funciones:
SAY, SYSMESSAGE, DAMAGE, etc.
- Keywords:
IF, ENDIF, FOR, WHILE, etc.
- Comentarios:
// y /* */
- Indentación inteligente basada en estructuras de control
- Conversión a mayúsculas de palabras clave del lenguaje
- Preservación de strings entre comillas
- Respeto por secciones especiales (BOOK, COMMENT, etc.)
- Cache optimizado para mejor rendimiento en archivos grandes
📝 Snippets
- Estructuras de control:
if, for, while, begin
- Bucles especializados:
forchars, forcont, foritems, forplayers, forclients, forobjs
- Bucles avanzados:
forcharlayer, forcharmemorytype, forcontid, forconttype, forinstances
- Bloques de manejo:
try, tryp, trysrc, trysrv, dorand, doswitch
🛠️ Comandos Adicionales
- Format SCP Document (
Shift+Alt+F) - Formatear documento actual
- Validate SCP Syntax - Validar sintaxis básica del archivo
- Clear Formatter Cache - Limpiar cache del formateador
📦 Instalación
- Abre Visual Studio Code
- Ve a Extensions (
Ctrl+Shift+X)
- Busca "SphereScript SCP Syntax Highlight Formatter"
- Haz clic en "Install"
⚙️ Configuración
Configuración Básica
{
"scpFormatter.tabSize": 1,
"scpFormatter.batchSize": 500,
"scpFormatter.enableCache": true
}
Configuración Avanzada
{
"scpFormatter.preserveCase": {
"strings": true,
"comments": true,
"customSections": ["BOOK", "COMMENT", "SCROLL"]
},
"scpFormatter.indentStyle": "tabs",
"scpFormatter.maxLineLength": 0,
"scpFormatter.debug": false
}
Configuración Recomendada para Archivos SCP
{
"[scp]": {
"editor.defaultFormatter": "Izoard.spherescript-syntax-highlight-formatter",
"editor.formatOnSave": true,
"editor.tabSize": 1
}
}
Nota: editor.insertSpaces es una configuración estándar de VS Code, no específica de esta extensión.
🚀 Rendimiento
La extensión está optimizada para manejar archivos grandes mediante:
Optimizaciones Implementadas
- ✅ Expresiones regulares pre-compiladas
- ✅ Procesamiento por lotes inteligente (configurable via
scpFormatter.batchSize)
- ✅ Cache con limpieza automática (configurable via
scpFormatter.enableCache)
- ✅ Validación condicional de edits
- ✅ Métricas de rendimiento en tiempo real (con
scpFormatter.debug)
Nota: Los tiempos específicos pueden variar según el hardware y contenido del archivo.
📝 Ejemplo de Código SCP
[CHARDEF c_man]
NAME=Hombre
BODY=0400
STR=50
DEX=50
INT=50
ON=@CREATE
HITS=<STR>
MANA=<INT>
STAM=<DEX>
IF (<STR> > 40)
SAY "Soy fuerte!"
ENDIF
[ITEMDEF i_sword_magic]
NAME=Espada Mágica
TYPE=t_weapon_sword
DAM=15,25
SKILL=45.0
COLOR=colors_blue
ON=@EQUIP
SRC.SYSMESSAGE "Sientes el poder de la magia"
[EVENTS e_player_magic]
ON=@LOGIN
SYSMESSAGE "Bienvenido al mundo mágico"
ON=@LOGOUT
SYSMESSAGE "Hasta la vista"
🎯 Validación de Sintaxis
La extensión incluye validación básica (comando scp.validateSyntax) que puede detectar errores comunes en la sintaxis SCP.
Nota: Esta es una validación básica, no un analizador completo del lenguaje.
🔧 Comandos
| Comando |
Atajo |
Descripción |
scp.formatDocument |
Shift+Alt+F |
Formatear documento SCP |
scp.validateSyntax |
- |
Validar sintaxis del archivo |
scp.clearCache |
- |
Limpiar cache del formateador |
🛠️ Desarrollo
Compilar la Extensión
npm install
npx vsce package
Ejecutar en Modo Debug
- Abre el proyecto en VS Code
- Presiona
F5 para lanzar Extension Development Host
- Abre un archivo
.scp para probar
🐛 Resolución de Problemas
- Aumenta
scpFormatter.batchSize a 1000
- Verifica que
scpFormatter.enableCache esté en true
- Verifica que el archivo tenga extensión
.scp
- Comprueba que la extensión esté activa
Problemas de cache
- Ejecuta el comando "Clear Formatter Cache"
- Reinicia VS Code si persiste el problema
🎮 Sobre SphereScript y Ultima Online
SphereScript es el lenguaje de scripting utilizado por el emulador Sphere X para crear servidores privados de Ultima Online. Este lenguaje permite definir:
- NPCs y Personajes con comportamientos personalizados
- Items y Objetos con propiedades únicas
- Eventos del Juego y sistemas interactivos
- Mecánicas de Gameplay avanzadas
Esta extensión está especialmente optimizada para el servidor "Berks Worlds" pero es compatible con cualquier implementación de Sphere X.
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE.md para detalles.
🤝 Contribuir
- Fork el proyecto
- Crea tu Feature Branch (
git checkout -b feature/AmazingFeature)
- Commit tus cambios (
git commit -m 'Add some AmazingFeature')
- Push al Branch (
git push origin feature/AmazingFeature)
- Abre un Pull Request
🔗 Basado en extensiones
Esta extensión ha sido desarrollada para brindar soporte a Berks Worlds en Sphere X.
Basada en las extensiones:
¡Disfruta programando en SphereScript! 🎯