Cette page a été traduite par machine, elle peut contenir quelques inexactitudes. Tu peux aider en contribuant à une traduction, ou tu peux aussi passer à la version anglaise.

V1 API Interface#

Cette page détaille toutes les exigences et fonctionnalités du SDK fournies. Un exemple complet de plugin peut être trouvé ici.

Fonctionnalités#

Point d’entrée#

La partie la plus importante de votre plugin est la configuration du point d’entrée. Sans une implémentation correcte, votre plugin ne se chargera pas. L’extrait de code suivant peut être utilisé comme exemple minimum pour la configuration du point d’entrée.

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

Le plugin_name(), on_startup() et on_shutdown() méthodes doivent être mises en œuvre pour que votre plugin soit considéré comme valide par Plutonium.

  • on_startup: Exécuté après l’application de tous les correctifs de Plutonium, avant l’appel du WinMain du jeu
  • on_shutdown: Exécuté lors du déchargement du plugin

Le on_initialize function est utilisé comme point d’entrée de votre plugin. C’est ainsi que Plutonium découvre l’implémentation du SDK du plugin. Votre implémentation doit suivre cette signature exacte.

L’interface du plugin dispose également d’un is_game_supported() méthode. Par défaut, tous les jeux pris en charge par Plutonium essaieront de charger le plugin. Vous pouvez utiliser cette méthode pour choisir de charger ou non votre plugin s’il ne prend en charge qu’un seul titre.

Exploitation forestière#

L’interface de journalisation permet d’imprimer les messages dans la fenêtre de la console Plutonium.

void on_startup(plutonium::sdk::iinterface* interface_ptr, plutonium::sdk::game game) override
{
    interface_ptr->logging()->info("Plugin Starting Up!");
}
  • info : imprime un message d’information sans coloration
  • WARN : Imprime les messages d’avertissement avec du texte jaune
  • Erreur : Imprime le message d’erreur avec du texte rouge

SGC#

L’interface GSC est utilisée pour enregistrer les méthodes et fonctions personnalisées intégrées à la machine virtuelle GSC. Ces méthodes peuvent ensuite être facilement appelées à partir d’un script GSC chargé sur le serveur.

DÉMENTI: S’il est utilisé sur IW5, le déchargement de votre plugin provoquera probablement le plantage du jeu. Le déchargement est pris en charge sur T4, T5 et T6 avec des intégrations GSC personnalisées.

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

Utilisation de la GSC :

init()
{
    testFunction();

    level thread onPlayerConnect();
}

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

        player testMethod();
    }
}

Commandes#

L’interface de commande du client permet d’enregistrer un gestionnaire personnalisé pour une commande spécifique envoyée par un client au serveur.

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

Rappels#

L’interface de callbacks permet à votre plugin d’être averti lorsque des événements de jeu génériques se produisent. Ces événements peuvent ensuite être utilisés pour ajouter une logique personnalisée qui doit être exécutée à un moment précis.

  • on_dvar_init() - Le système dvar du jeu est initialisé et prêt à enregistrer les dvars.
  • on_after_dvar_init() - La plupart des dvars de jeu ont été enregistrés et la boucle principale du fil de discussion est sur le point de commencer
  • on_game_init(int levelTime, int restart) - Le serveur de jeu est en cours d’initialisation
    • levelTime - Durée d’exécution du serveur
    • restart - Indique si cette initialisation est le résultat du redémarrage du serveur (c’est-à-dire map_restart)
  • on_game_shutdown(int freeScripts) - Le serveur de jeu s’arrête
    • freeScripts - Indique si les scripts du jeu seront libérés (c’est-à-dire pas un map_restart)
  • on_player_pre_connect(int clientNum) - Un client se connecte au serveur pour la première fois
  • on_player_connect(int clientNum) - Un client se connecte au serveur
    • Cet événement est déclenché lorsqu’un client se reconnecte après une map_restart !
  • on_player_disconnect(int clientNum) - Un client se déconnecte du serveur
  • on_scripts_load() - Le serveur commence à charger les scripts GSC
  • on_scripts_execute() - Le serveur commence à exécuter des scripts GSC

Programmateur#

L’interface du planificateur permet à votre plugin de programmer l’exécution du code sur un fil de jeu spécifique à un moment précis.

Bobine:

  • main - Le fil conducteur de l’exécutable du jeu. Ce fil de discussion est toujours actif
  • game - Le fil de discussion jeu/serveur. Ce fil de discussion ne s’exécute que lorsqu’une carte est en cours de chargement et de lecture

Horaires:

  • on_frame - Ce rappel sera exécuté sur chaque trame du thread choisi.
  • once - Ce rappel sera exécuté une fois sur la trame suivante du thread choisi.
  • delay - Ce rappel sera exécuté sur le thread choisi après un nombre spécifié de millisecondes
  • every - Ce rappel sera exécuté sur le thread choisi après un nombre spécifié de millisecondes et reprogrammé pour être exécuté à nouveau en fonction de l’évaluation du rappel.
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);
}