Skip to content

¿Qué es Infernus?

El nombre Infernus proviene del vehículo con el ID 411 en el juego (concretamente en GTA: San Andreas).

Infernus es una biblioteca construida sobre samp-node, que permite llamar al SDK del juego desde la capa de JavaScript.

🚧 Trabajo en Curso

  • omp-node está actualmente en desarrollo activo, reemplazará a Infernus en el futuro.
  • si quiere probar omp-node o prefiere la sintaxis nativa sin demasiado envoltorio, revise @open.mp/node.

Limitaciones

DANGER

Sí, es importante entender las limitaciones antes de comenzar.

Varias limitaciones impactan significativamente la experiencia de desarrollo. Se recomienda abordar el desarrollo del ecosistema samp-node con una mentalidad experimental.

En general, el ecosistema es actualmente inestable debido a varios factores.

Ecosistema de SAMP-NODE

Existiendo librerías desarrolladas en Pawn, tales como fcnpc, colandreas, nexac y otras también conocidas, pueden presentarse dos situaciones en tu proyecto si dependes de ellas: mantenimiento inexistente o incompatible.

Teniendo en cuenta que el plugin desarrollo de samp-node está basado en samp y no en omp, ciertos ecosistemas de algunos plugins no son compatibles. Por ejemplo, acceder a las funciones nativas de ciertos plugins, como raknet, no es posible.

Esto limita bastante el desarrollo de plugins de samp usando el ecosistema de node.js. Requiere juntar esfuerzos de los autores de samp-node y la comunidad para abordar este problema.

Sin embargo, el enfoque de omp está principalmente en construir omp en sí en lugar de bibliotecas de terceros.

Bloqueo de terminal

IMPORTANT

Este problema se ha solucionado a través de monkeyPatch como la solución actual.

Debido a la pobre compatibilidad entre el samp-node subyacente y ciertas librerías asíncronas de node.js, ocasionalmente puede haber bloqueo de terminal.

Por ejemplo, cuando usas librerías de orm como typeorm/sequelize, puede casar bloqueo de terminal y el server deja de responder hasta que manualmente presionas enter en la terminal.

Por lo tanto, es recomendado adoptar un enfoque de desarrollo distribuido, aunque pueda parecer molesto.

Un enfoque es crear un proyecto separado de node.js para las operaciones de base de datos, como el uso de NestJS para construir una API específicamente para operaciones CRUD. El servidor del juego puede acceder a la lógica de la base de datos a través de peticiones HTTP, o puedes explorar métodos de comunicación avanzada como RPC o sockets.

El beneficio de este enfoque es que el servidor del juego solo maneja la lógica del juego, mientras que la lógica de la base de datos está transferida en otro proyecto. Adicionalmente, puedes desarrollar un sistema de administración que comparta la misma API que el servidor del juego.

Composición

En general, sólo hay que centrarse en la capa superior, que es la de desarrollo de aplicaciones.

Infernus trabaja principalmente con la segunda y tercera capa, dependiendo de samp-node y del servidor de juego omp.

Si no está seguro de cómo iniciar un proyecto, consulte el Inicio rápido.

/CapaDescripción
1AplicaciónModo de juego, como free-roam o role-play
2Envoltorios de claseFuncionalidad envuelta en clases
3Envoltorios funcionalesEnvoltorios para librerías como samp/omp/streamer
4SAMP NODEPuente hacia el SDK subyacente
5OMP Servidor de juegoServidor de juego subyacente

¿Por qué desarrollar?

Para los principiantes en programación o los desarrolladores frontales (front-end developers), iniciarse en el desarrollo de scripts de juegos utilizando «Pawn», un lenguaje procedimental similar a «C», puede resultar complicado. Además, realizar operaciones básicas de bajo nivel en Pawn, como la concatenación de cadenas, la eliminación y la manipulación de matrices, es más engorroso en comparación con JavaScript orientado a objetos.

Además, implementar funcionalidades asíncronas es bastante difícil dentro del ecosistema del lenguaje Pawn. La internacionalización se consigue normalmente utilizando la codificación UTF-8, pero como el lanzamiento de sa fue bastante temprano, no utilizó UTF-8 para la internacionalización. En su lugar, utilizaba diferentes conjuntos de caracteres basados en la norma ANSI del sistema Windows, como ISO-8859-1 en los países occidentales y la codificación GBK en China.

El desarrollo de scripts localizados en Pawn a menudo requiere configurar la codificación del archivo para que coincida con el conjunto de caracteres del idioma localizado del sistema Windows. Esto puede dar lugar a problemas de codificación imprevistos, como el almacenamiento de datos GBK en una base de datos UTF-8, que puede dar lugar a datos confusos si no se manejan correctamente.

Al utilizar JavaScript para el desarrollo, podemos aprovechar la potencia del ecosistema Node.js, incluyendo librerías para el procesamiento de fecha y hora (por ejemplo, dayjs), bases de datos (por ejemplo, MySQL, Redis, MongoDB), y programación asíncrona (por ejemplo, Promises, Async/await). Esto nos permite sustituir las librerías del ecosistema Pawn por otras equivalentes del ecosistema Node.js.