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! 🎯