-
Notifications
You must be signed in to change notification settings - Fork 156
Papyrus
Ryan edited this page May 7, 2019
·
14 revisions
SKSEPapyrusInterface
can accessed from SKSEInterface
by calling QueryInterface(kInterface_Papyrus)
. The papyrus interface allows plugin authors to register functions with the papyrus virtual machine which users can take advantage of in the Papyrus
scripting language.
-
interfaceVersion
: This is the version of the exported interface. Plugin authors should assert on this field if they require a certain version. -
Register
: This method is used to delay function registration with the virtual machine until it's ready.
-
Users should define a registration function matching the declared
typedef
forRegisterFunctions
within the class. Note that SKSE does not register your functions for you; this is simply a delay functor. You must use theVMClassRegistry*
passed as the first argument to register your functions. -
The Papyrus Functions:
#include "skse64/GameTypes.h" // BSFixedString
#include "skse64/PapyrusNativeFunctions.h" // StaticFunctionTag
BSFixedString HelloWorld(StaticFunctionTag*)
{
return BSFixedString("Hello world!");
}
SInt32 Sum(StaticFunctionTag*, SInt32 a_num1, SInt32 a_num2)
{
return a_num1 + a_num2;
}
These are the functions we will be registering.
- The Registration Function:
#include "skse64/GameTypes.h" // BSFixedString
#include "skse64/PapyrusNativeFunctions.h" // NativeFunction, StaticFunctionTag
#include "skse64/PapyrusVM.h" // VMClassRegistry
bool RegisterFuncs(VMClassRegistry* a_registry)
{
a_registry->RegisterFunction(new NativeFunction0<StaticFunctionTag, BSFixedString>("HelloWorld", "MyClass", HelloWorld, a_registry));
a_registry->RegisterFunction(new NativeFunction2<StaticFunctionTag, SInt32, SInt32, SInt32>("Sum", "MyClass", Sum, a_registry));
return true;
}