V1 API Interface#
Cette page détaille toutes les exigences et fonctionnalités du SDK qui y sont proposées. Un plugin d’exemple complet est disponible ici.
Caractéristiques#
- Interface de journalisation
- Enregistrement des fonctions et méthodes GSC
- Enregistrement des commandes client
- Rappels d’événements
- Planificateur de fils
Point d’entrée#
La partie la plus importante de votre plugin est de configurer le point d’entrée. Sans une implémentation correcte, votre plugin ne se chargera pas. Le fragment de code suivant peut être utilisé comme exemple minimal pour configurer le 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() il faut mettre en œuvre des méthodes pour que votre plugin soit considéré comme valide par le plutonium.
on_startup: Exécuté après que tous les patchs de plutonium soient appliqués, avant que le WinMain du jeu ne soit appeléon_shutdown: Exécuté lorsque le plugin est déchargé
Le on_initialize La fonction sert de point d’entrée à votre plugin. Cette fonction est la façon dont Plutonium découvre l’implémentation du SDK du plugin. Votre implémentation doit suivre exactement cette signature.
L’interface plugin propose également une option is_game_supported() méthode. Par défaut, tous les jeux compatibles Plutonium essaient 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 sert à imprimer les messages vers 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 le message d’information sans coloriage
- Avertissement : Imprime les messages d’avertissement avec du texte jaune
- Erreur : Affiche le message d’erreur avec du texte rouge
GSC#
L’interface GSC est utilisée pour enregistrer les méthodes et fonctions personnalisées intégrées à la VM GSC. Ces méthodes peuvent alors être facilement appelées depuis un script GSC chargé sur le serveur.
AVERTISSEMENT: Si tu l’utilises sur IW5, décharger ton plugin fera probablement planter le jeu. Le déchargement est pris en charge sur T4, T5 et T6 avec GSC personnalisés intégrés.
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 du GSC :
init()
{
testFunction();
level thread onPlayerConnect();
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
player testMethod();
}
}
Commandements#
L’interface de commande client est utilisée pour 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 rappels permet à votre plugin d’être notifié lorsque des événements génériques du jeu 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 de dvars du jeu est initialisé et prêt à enregistrer les dvars
- on_after_dvar_init() - La plupart des variables de jeu ont été enregistrées et la boucle principale de thread est sur le point de commencer
- on_game_init(niveau d’inteinteTemps, redémarrage d’inte) - Le serveur de jeu est en cours d’initialisation
- levelTime - Durée de fonctionnement du serveur
- restart - Indique si cette initialisation est due au redémarrage du serveur (c’est-à-dire map_restart)
- on_game_shutdown(int freeScripts) - Le serveur de jeu est en train de se fermer
- freeScripts - Indique si les scripts du jeu seront gratuits (c’est-à-dire pas un map_restart)
- on_player_pre_connect(client int) - Un client se connecte au serveur pour la première fois
- on_player_connect(client intNum) - Un client se connecte au serveur
- Cet événement est soulevé 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 des scripts GSC
- on_scripts_execute() - Le serveur commence à exécuter des scripts GSC
Planificateur#
L’interface du planificateur permet à votre plugin de programmer le code à exécuter sur un thread de jeu spécifique à un moment précis.
Fils de discussion :
- Main - Le fil conducteur de l’exécutable du jeu. Ce fil est toujours actif
- jeu - Le fil de discussion jeu/serveur. Ce fil ne s’exécute que lorsqu’une carte est actuellement chargée et en cours de lecture
Emplois du temps :
- on_frame - Ce rappel sera exécuté sur chaque image du thread choisi.
- une fois - Ce rappel sera exécuté une fois sur la trame suivante du thread choisi.
- délai - Ce rappel sera exécuté sur le thread choisi après un nombre déterminé de millisecondes
- chaque - Ce rappel sera exécuté sur le fil choisi après un nombre déterminé de millisecondes et reprogrammé pour être exécuté à nouveau selon 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);
}