Esta página ha sido traducida automáticamente, por lo que puede contener algunas inexactitudes. Puedes ayudar aportando una traducción, o bien puedes cambiar a la versión en inglés.

Interfaz de API V1#

En esta página se detallan todos los requisitos y características del SDK que se proporcionan. Se puede encontrar un plugin de ejemplo completo aquí.

Funciones#

Punto de entrada#

La parte más importante de tu plugin es configurar el punto de entrada. Sin una implementación correcta, su complemento no se cargará. El siguiente fragmento de código se puede usar como ejemplo mínimo para configurar el punto de entrada.

#include "plutonium-sdk/plutonium_sdk.hpp"

std::unique_ptr<plutonium::sdk::plugin> plugin_;
class plugin_impl : public plutonium::sdk::plugin
{
public:
    const char* plugin_name() override
    {
        return "Plutonium SDK Example";
    }

    void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
    {
        // startup code
    }

    void on_shutdown() override
    {
        // shutdown code
    }
};

PLUTONIUM_API plutonium::sdk::plugin* on_initialize()
{
    return (plugin_ = std::make_unique<plugin_impl>()).get();
}

BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID)
{
    return TRUE;
}

El plugin_name(), on_startup() y on_shutdown() Se requiere que se implementen métodos para que su complemento sea considerado válido por Plutonium.

  • on_startup: Se ejecuta después de que se apliquen todos los parches de plutonio, antes de que se llame al WinMain del juego
  • on_shutdown: Se ejecuta cuando se descarga el complemento

El on_initialize se utiliza como punto de entrada a su complemento. Esta función es la forma en que Plutonium descubre la implementación del SDK del complemento. La implementación debe seguir esta firma exacta.

La interfaz del plugin también tiene un is_game_supported() método. De forma predeterminada, todos los juegos compatibles con Plutonium intentarán cargar el complemento. Puedes usar este método para elegir si cargar o no tu plugin si solo admite un título.

Registro#

La interfaz de registro se utiliza para imprimir mensajes en la ventana de la consola de Plutonium.

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    interface_ptr->logging()->info("Plugin Starting Up!");
}
  • Información: Imprime un mensaje informativo sin colorear
  • ADVERTIR: imprime mensajes de advertencia con texto amarillo
  • Error: Imprime un mensaje de error con texto rojo

SGC#

La interfaz GSC se usa para registrar métodos personalizados y funciones integradas en la máquina virtual GSC. Estos métodos se pueden llamar fácilmente desde un script GSC cargado en el servidor.

RENUNCIA: Si se usa en IW5, descargar su complemento probablemente hará que el juego se bloquee. La descarga es compatible con T4, T5 y T6 con incorporados GSC personalizados.

void test_method_builtin(plutonium::sdk::types::entref entity)
{

}

void test_function_builtin()
{

}

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    interface_ptr->gsc()->register_function("testFunction", test_function_builtin);
    interface_ptr->gsc()->register_method("testMethod", test_method_builtin);
}

Uso de GSC:

init()
{
    testFunction();

    level thread onPlayerConnect();
}

onPlayerConnect()
{
    for(;;)
    {
        level waittill( "connected", player );

        player testMethod();
    }
}

Comandos#

La interfaz de comandos de cliente se utiliza para registrar un controlador personalizado para un comando específico enviado por un cliente al servidor.

void client_command_function_test(int client_num)
{

}

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    interface_ptr->client_command()->register_client_command("testClientCommand", client_command_function_test);
}

Callbacks#

La interfaz de devoluciones de llamada permite que su complemento sea notificado cuando ocurren eventos genéricos del juego. Estos eventos se pueden usar para agregar lógica personalizada que debe ejecutarse en un momento específico.

  • on_dvar_init() - El sistema dvar del juego está inicializado y listo para registrar dvars
  • on_after_dvar_init() - La mayoría de los dvars del juego se han registrado y el bucle del hilo principal está a punto de comenzar
  • on_game_init(int levelTime, int restart) - El servidor del juego se está inicializando
    • levelTime: cantidad de tiempo que el servidor ha estado funcionando
    • restart: indica si esta inicialización es el resultado del reinicio del servidor (es decir, map_restart)
  • on_game_shutdown(int freeScripts) - El servidor del juego se está cerrando
    • freeScripts - Indica si los scripts del juego serán libres (es decir, no serán una map_restart)
  • on_player_pre_connect(int clientNum) - Un cliente se conecta al servidor por primera vez
  • on_player_connect(int clientNum) - Un cliente se está conectando al servidor
    • Este evento se genera cuando un cliente se vuelve a conectar después de una map_restart.
  • on_player_disconnect(int clientNum) - Un cliente se está desconectando del servidor
  • on_scripts_load() - El servidor está empezando a cargar scripts GSC
  • on_scripts_execute() - El servidor está empezando a ejecutar scripts GSC

Programador#

La interfaz del programador permite que su complemento programe el código para que se ejecute en un hilo de juego específico en un momento específico.

Hilos:

  • main: el hilo principal del ejecutable del juego. Este hilo siempre está activo
  • game - El hilo del juego/servidor. Este subproceso solo se ejecuta cuando un mapa está cargado y reproduciéndose

Horarios:

  • on_frame - Esta devolución de llamada se ejecutará en cada fotograma del hilo elegido.
  • once: esta devolución de llamada se ejecutará una vez en el siguiente fotograma del subproceso elegido.
  • delay: esta devolución de llamada se ejecutará en el subproceso elegido después de un número especificado de milisegundos
  • every - Esta devolución de llamada se ejecutará en el subproceso elegido después de un número especificado de milisegundos y se reprogramará para que se vuelva a ejecutar en función de la evaluación de la devolución de llamada.
scheduler::evaluation callback()
{
    // code
    return scheduler::reschedule;
}

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    // execute a callback on the game thread every 1000ms
    interface_ptr->scheduler()->every(callback, 1000, scheduler::thread::game);
}