Diese Seite wurde maschinell übersetzt, sie kann einige Ungenauigkeiten enthalten. Du kannst helfen, indem du eine Übersetzung beisteuerst, alternativ kannst du zur englischen Version.

V1 API-Schnittstelle#

Auf diesen Seiten werden alle SDK-Anforderungen und -Funktionen ausführlich erläutert. Ein vollständiges Beispiel-Plugin finden Sie hier.

Funktionen#

Eingangsstelle#

Der wichtigste Teil Ihres Plugins ist die Einrichtung des Einstiegspunkts. Ohne eine korrekte Implementierung kann Ihr Plugin nicht geladen werden. Der folgende Codeausschnitt kann als Mindestbeispiel für die Einrichtung des Einstiegspunkts verwendet werden.

#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;
}

Das plugin_name(), on_startup() und on_shutdown() Es müssen Methoden implementiert werden, damit Ihr Plugin von Plutonium als gültig angesehen wird.

  • on_startup: Wird ausgeführt, nachdem alle Plutonium-Patches angewendet wurden, bevor der WinMain des Spiels aufgerufen wird
  • on_shutdown: Wird ausgeführt, wenn das Plugin entladen wird

Das on_initialize wird als Einstiegspunkt zu Ihrem Plugin verwendet. Mit dieser Funktion erkennt Plutonium die Plug-in-SDK-Implementierung. Ihre Implementierung muss genau dieser Signatur entsprechen.

Die Plugin-Schnittstelle verfügt auch über eine optionale is_game_supported() Methode. Standardmäßig versuchen alle von Plutonium unterstützten Spiele, das Plugin zu laden. Sie können diese Methode verwenden, um auszuwählen, ob Ihr Plugin geladen werden soll oder nicht, wenn es nur einen Titel unterstützt.

Protokollierung#

Die Logging-Schnittstelle wird verwendet, um Meldungen zurück in das Plutonium-Konsolenfenster zu drucken.

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    interface_ptr->logging()->info("Plugin Starting Up!");
}
  • Info: Druckt eine Informationsmeldung ohne Färbung
  • Warnmeldungen: Gibt Warnmeldungen mit gelbem Text aus
  • Fehler: Gibt eine Fehlermeldung mit rotem Text aus

GSC#

Die GSC-Schnittstelle wird verwendet, um benutzerdefinierte Methoden und Funktionen zu registrieren, die in die GSC-VM integriert sind. Diese Methoden können dann einfach von einem GSC-Skript aus aufgerufen werden, das auf dem Server geladen ist.

VERZICHTSERKLÄRUNG: Wenn Sie Ihr Plugin auf IW5 verwenden, wird das Entladen Ihres Plugins wahrscheinlich zum Absturz führen. Das Entladen wird auf T4, T5 und T6 mit benutzerdefinierten GSC-Builtins unterstützt.

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);
}

GSC-Verwendung:

init()
{
    testFunction();

    level thread onPlayerConnect();
}

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

        player testMethod();
    }
}

Befehle#

Die Clientbefehlsschnittstelle wird verwendet, um einen benutzerdefinierten Handler für einen bestimmten Befehl zu registrieren, der von einem Client an den Server gesendet wird.

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);
}

Rückrufe#

Die Callbacks-Schnittstelle ermöglicht es Ihrem Plugin, benachrichtigt zu werden, wenn generische Spielereignisse auftreten. Diese Ereignisse können dann verwendet werden, um benutzerdefinierte Logik hinzuzufügen, die zu einem bestimmten Zeitpunkt ausgeführt werden muss.

  • on_dvar_init() - Das dvar-System des Spiels ist initialisiert und bereit, dvars zu registrieren
  • on_after_dvar_init() - Die meisten Spiel-Dvars wurden registriert und die Haupt-Thread-Schleife beginnt
  • on_game_init(int levelTime, int Neustart) - Der Spielserver wird initialisiert
    • levelTime - Zeitspanne, in der der Server ausgeführt wurde
    • restart - Gibt an, ob diese Initialisierung auf einen Neustart des Servers zurückzuführen ist (d. h. map_restart)
  • on_game_shutdown(int freeScripts) - Der Spielserver wird heruntergefahren
    • freeScripts - Gibt an, ob die Spielskripte freigegeben werden (d.h. kein map_restart)
  • on_player_pre_connect(int clientNum) - Ein Client stellt zum ersten Mal eine Verbindung zum Server her
  • on_player_connect(int clientNum) - Ein Client stellt eine Verbindung zum Server her
    • Dieses Ereignis wird ausgelöst, wenn ein Client nach einem map_restart!
  • on_player_disconnect(int clientNum) - Ein Client trennt die Verbindung zum Server
  • on_scripts_load() - Der Server beginnt mit dem Laden von GSC-Skripten
  • on_scripts_execute() - Der Server beginnt mit der Ausführung von GSC-Skripten

Scheduler#

Die Scheduler-Schnittstelle ermöglicht es Ihrem Plugin, die Ausführung von Code in einem bestimmten Spiel-Thread zu einem bestimmten Zeitpunkt zu planen.

Fäden:

  • main - Der Hauptthread der ausführbaren Datei des Spiels. Dieser Thread ist immer aktiv
  • game - Der Spiel-/Server-Thread. Dieser Thread wird nur ausgeführt, wenn eine Karte gerade geladen ist und abgespielt wird

Sendepläne:

  • on_frame - Dieser Callback wird für jeden Frame des ausgewählten Threads ausgeführt.
  • once - Dieser Callback wird einmal für den nächsten Frame des ausgewählten Threads ausgeführt.
  • delay: Dieser Rückruf wird nach einer bestimmten Anzahl von Millisekunden für den ausgewählten Thread ausgeführt
  • every - Dieser Rückruf wird nach einer bestimmten Anzahl von Millisekunden auf dem ausgewählten Thread ausgeführt und basierend auf der Auswertung des Rückrufs erneut ausgeführt.
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);
}