Uso
GameMode.use
es un método para simular filterscript
, que se utiliza para la reutilización lógica en GameMode.
TIP
Debido a que se trata de una simulación y no de un filterscript
real, no puede operar estos scripts a través de comandos como rcon loadfs/unloadfs
.
Tipo
interface IFilterScript {
name: string;
load: (...args: Array<any>) => any;
unload: () => any;
[propName: string | number | symbol]: any;
}
type Use = (plugin: IFilterScript, ...options: Array<any>) => GameMode;
Definir script
Puedes escribir tú mismo algunos scripts de reutilización lógica y compartirlos con otros a través de node package
u otras formas.
import { GameMode } from "@infernus/core";
import type { IFilterScript } from "@infernus/core";
interface IMyScriptOptions {
debug?: boolean;
}
interface IMyScript extends IFilterScript {
load(options: IMyScriptOptions): ReturnType<IFilterScript["load"]>;
}
const MyScript: IMyScript = {
name: "my_script",
load(...args) {
console.log('Mi script cargó.', args);
},
unload() {
console.log('Mi script se descargó.');
}
};
// Ningún parámetro es pasado al método load
GameMode.use(MyScript);
// Pasa parámetros al método load
GameMode.use(MyScript, 'arg1', 'arg2', 'arg...');
TIP
Los scripts registrados se cargan automáticamente después del inicio del GameMode. El script cargado se descarga automáticamente al salir del GameMode.
Cargar un comando
GameMode.loadUseScript(name: string)
: Cargar un script registradoGameMode.unloadUseScript(nombre: cadena)
: Descargar un script registradoGameMode.reloadUseScript(nombre: cadena)
: Recargar un script registrado
Ejemplo
import { GameMode, PlayerEvent } from "@infernus/core";
PlayerEvent.onCommandText("reloadMyScript", ({ next }) => {
GameMode.reloadUseScript("my_script");
return next();
});
Noticia
WARNING
No deberías de registrar el evento GameMode.onInit
en la función load
, ya que se ejecuta en su evento cuando es cargada a través de GameMode.use
.
Si usas funciones de middleware en la función load
, deberías retornar un arreglo de funciones de middleware canceladas la final, ¡de otra forma habría un fenómeno de fuga de memoria! Para otras variables globales, como los timers, ¡deberías reiniciarlas en la función unload
!
La razón es simple, si no haces eso, el middleware no va a ser descargado cuando la GameMode es reiniciada o se ejecuta de forma manual el script del comando para reiniciar, y cada vez que el script es cargado, una nueva función intermedia es agregada, ¡lo que provocará una fuga de memoria!
Además, no debe llamar a script.load()
o script.unload()
. Debe usar el cargar comando para llamar.
const MyScript = {
name: 'my_script',
load(...args) {
const off1 = PlayerEvent.onCommandText("foo", ({ player, next }) => {
return next();
});
const off2 = PlayerEvent.onConnect(({ player, next }) => {
return next();
});
return [off1, off2];
},
unload() {
}
}
GameMode.use(MyScript);
Reescribe el oficial filterscript
Infernus
ha intentado reescribir el filterscript oficial, pero hasta ahora solo se ha implementado una pequeña parte. Puedes probarlo instalando @infernus/fs
. Si está interesado, puede continuar mejorando el filterscript oficial que no se ha reescrito y enviarlo al repositorio.
pnpm install @infernus/fs
import { GameMode } from "@infernus/core";
import { A51Base } from "@infernus/fs";
GameMode.use(A51Base, { debug: true });
Luego ingresas /a51
en el juego para teletransportarte a la base.