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 API V1#

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

Características#

Punto de entrada#

La parte más importante de tu plugin es configurar el punto de entrada. Sin una implementación correcta, tu plugin no cargará. El siguiente fragmento de código puede usarse 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 requieren métodos para que tu plugin sea considerado válido por Plutonium.

  • on_startup: Ejecutado después de aplicar todos los parches de plutonio, antes de que se llame el WinMain del juego
  • on_shutdown: Ejecutado cuando el plugin se descarga

El on_initialize Function se usa como punto de entrada a tu plugin. Esta función es la forma en que Plutonium descubre la implementación del SDK del plugin. Tu implementación debe seguir exactamente esta firma.

La interfaz de plugins también tiene una opción opcional is_game_supported() método. Por defecto, todos los juegos compatibles con Plutonium intentarán cargar el plugin. Puedes usar este método para decidir si cargar o no tu plugin si solo soporta un título.

Tala#

La interfaz de registro se utiliza para imprimir mensajes de vuelta a la ventana de la consola de plutonio.

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

GSC#

La interfaz GSC se utiliza para registrar métodos y funciones personalizados integrados en la VM GSC. Estos métodos pueden ser llamados fácilmente desde un script GSC cargado en el servidor.

AVISO: AVISO: Si se usa en IW5, descargar tu plugin probablemente hará que el juego se cuelgue. La descarga está soportada en T4, T5 y T6 con GSC personalizados integrados.

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 del GSC:

init()
{
    testFunction();

    level thread onPlayerConnect();
}

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

        player testMethod();
    }
}

Mandos#

La interfaz de comandos del cliente se utiliza para registrar un manejador 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);
}

Llamadas de regreso#

La interfaz de callbacks permite notificar a tu plugin cuando ocurren eventos genéricos del juego. Estos eventos pueden usarse para añadir lógica personalizada que debe ejecutarse en un momento específico.

  • on_dvar_init() - El sistema de dvar del juego se inicializa y está listo para registrar dvars
  • on_after_dvar_init() - La mayoría de los dvars de juego han sido registrados y el bucle principal del hilo está a punto de comenzar
  • on_game_init(nivel de inteligenciaTime, reinicio de inteligencia) - Se está inicializando el servidor del juego
    • levelTime - Tiempo que el servidor lleva funcionando
    • reinicio - Indica si esta inicialización es resultado de que el servidor se reinicie (es decir, map_restart)
  • on_game_shutdown(int freeScripts) - El servidor del juego se está apagando
    • freeScripts - Indica si los scripts del juego serán free-d (es decir, no son map_restart)
  • on_player_pre_connect(int clientNum) - Un cliente se conecta al servidor por primera vez
  • on_player_connect(cliente entero de usuario) - Un cliente se está conectando al servidor
    • ¡Este evento se presenta cuando un cliente se reconecta tras un 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 planificador permite que tu plugin programe código para ejecutarse en un hilo de juego específico en un momento determinado.

Hilos:

  • Main - El hilo principal del ejecutable del juego. Este hilo está siempre activo
  • juego - El hilo del juego/servidor. Este hilo solo se ejecuta cuando un mapa está cargado y en reproducción

Horarios:

  • on_frame - Esta callback se ejecutará en cada fotograma del hilo elegido.
  • once - Esta callback se ejecutará una vez en el siguiente fotograma del hilo elegido.
  • retraso - Esta devolución de llamada se ejecutará en el hilo elegido tras un número especificado de milisegundos
  • every - Esta callback se ejecutará en el hilo elegido tras un número especificado de milisegundos y se reprogramará para ejecutarse de nuevo según la evaluación de la callback.
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);
}