61 [[nodiscard]] std::uint32_t
Version()
const;
81 [[nodiscard]] std::uint32_t
Version()
const;
90 bool WriteRecord(std::uint32_t a_type, std::uint32_t a_version,
const void* a_buf, std::uint32_t a_length)
const;
98 inline std::uint32_t
WriteRecord(std::uint32_t a_type, std::uint32_t a_version,
const T& a_buf)
const
100 return WriteRecord(a_type, a_version, std::addressof(a_buf),
sizeof(T));
109 inline std::uint32_t
WriteRecord(std::uint32_t a_type, std::uint32_t a_version,
const T (&a_buf)[N])
const
111 return WriteRecord(a_type, a_version, std::addressof(a_buf),
sizeof(T) * N);
114 [[nodiscard]]
bool OpenRecord(std::uint32_t a_type, std::uint32_t a_version)
const;
140 bool GetNextRecordInfo(std::uint32_t& a_type, std::uint32_t& a_version, std::uint32_t& a_length)
const;
231 template <
class Last>
234 return Register_Impl(a_last);
237 template <
class First,
class... Rest>
240 return Register_Impl(a_first) &&
Register(a_rest...);
297 bool Dispatch(std::uint32_t a_messageType,
void* a_data, std::uint32_t a_dataLen,
const char* a_receiver)
const;
352#ifdef SKYRIM_SUPPORT_AE
353 struct PluginVersionData
363 kVersionIndependent_AddressLibraryPostAE = 1 << 0,
364 kVersionIndependent_Signatures = 1 << 1,
365 kVersionIndependent_StructsPost629 = 1 << 2,
370 kVersionIndependentEx_NoStructUse = 1 << 0,
373 constexpr void AuthorEmail(std::string_view a_email)
noexcept { SetCharBuffer(a_email, std::span{ supportEmail }); }
374 constexpr void AuthorName(std::string_view a_name)
noexcept { SetCharBuffer(a_name, std::span{ author }); }
376 constexpr void CompatibleVersions(std::initializer_list<REL::Version> a_versions)
noexcept
378 assert(a_versions.size() < std::size(compatibleVersions) - 1);
382 std::begin(compatibleVersions),
383 [](
const REL::Version& a_version)
noexcept { return a_version.pack(); });
386 constexpr void MinimumRequiredXSEVersion(
REL::Version a_version)
noexcept { xseMinimum = a_version.pack(); }
387 constexpr void PluginName(std::string_view a_plugin)
noexcept { SetCharBuffer(a_plugin, std::span{ pluginName }); }
388 constexpr void PluginVersion(
REL::Version a_version)
noexcept { pluginVersion = a_version.pack(); }
389 constexpr void UsesAddressLibrary() noexcept { versionIndependence |= kVersionIndependent_AddressLibraryPostAE; }
390 constexpr void UsesSigScanning() noexcept { versionIndependence |= kVersionIndependent_Signatures; }
391 constexpr void UsesUpdatedStructs() noexcept { versionIndependence |= kVersionIndependent_StructsPost629; }
393 constexpr void UsesNoStructs() noexcept { versionIndependenceEx |= kVersionIndependentEx_NoStructUse; }
395 const std::uint32_t dataVersion{ kVersion };
396 std::uint32_t pluginVersion = 0;
397 char pluginName[256] = {};
398 char author[256] = {};
399 char supportEmail[252] = {};
400 std::uint32_t versionIndependenceEx = 0;
401 std::uint32_t versionIndependence = 0;
402 std::uint32_t compatibleVersions[16] = {};
403 std::uint32_t xseMinimum = 0;
406 static constexpr void SetCharBuffer(
407 std::string_view a_src,
408 std::span<char> a_dst)
noexcept
410 assert(a_src.size() < a_dst.size());
411 std::fill(a_dst.begin(), a_dst.end(),
'\0');
412 std::copy(a_src.begin(), a_src.end(), a_dst.begin());
415 static_assert(offsetof(PluginVersionData, dataVersion) == 0x000);
416 static_assert(offsetof(PluginVersionData, pluginVersion) == 0x004);
417 static_assert(offsetof(PluginVersionData, pluginName) == 0x008);
418 static_assert(offsetof(PluginVersionData, author) == 0x108);
419 static_assert(offsetof(PluginVersionData, supportEmail) == 0x208);
420 static_assert(offsetof(PluginVersionData, versionIndependenceEx) == 0x304);
421 static_assert(offsetof(PluginVersionData, versionIndependence) == 0x308);
422 static_assert(offsetof(PluginVersionData, compatibleVersions) == 0x30C);
423 static_assert(offsetof(PluginVersionData, xseMinimum) == 0x34C);
424 static_assert(
sizeof(PluginVersionData) == 0x350);
Definition: IVirtualMachine.h:38
Definition: VirtualMachine.h:46
Definition: GFxMovieView.h:24
Definition: GFxValue.h:90
Definition: InventoryEntryData.h:15
Definition: Relocation.h:275
Definition: Interfaces.h:29
@ kTrampoline
Definition: Interfaces.h:40
@ kMessaging
Definition: Interfaces.h:38
@ kPapyrus
Definition: Interfaces.h:35
@ kSerialization
Definition: Interfaces.h:36
@ kObject
Definition: Interfaces.h:39
@ kTask
Definition: Interfaces.h:37
@ kInvalid
Definition: Interfaces.h:33
@ kScaleform
Definition: Interfaces.h:34
@ kTotal
Definition: Interfaces.h:41
void * QueryInterface(std::uint32_t a_id) const
PluginHandle GetPluginHandle() const
std::uint32_t GetReleaseIndex() const
const PluginInfo * GetPluginInfo(const char *a_name) const
Definition: Interfaces.h:252
@ kTotal
Definition: Interfaces.h:281
@ kPostPostLoad
Definition: Interfaces.h:272
@ kPostLoad
Definition: Interfaces.h:271
@ kPreLoadGame
Definition: Interfaces.h:273
@ kSaveGame
Definition: Interfaces.h:275
@ kNewGame
Definition: Interfaces.h:278
@ kDataLoaded
Definition: Interfaces.h:279
@ kInputLoaded
Definition: Interfaces.h:277
@ kDeleteGame
Definition: Interfaces.h:276
@ kPostLoadGame
Definition: Interfaces.h:274
Dispatcher
Definition: Interfaces.h:285
void * GetEventDispatcher(Dispatcher a_dispatcherID) const
std::uint32_t Version() const
const detail::SKSEMessagingInterface * GetProxy() const
bool Dispatch(std::uint32_t a_messageType, void *a_data, std::uint32_t a_dataLen, const char *a_receiver) const
bool RegisterListener(const char *a_sender, EventCallback *a_callback) const
@ kVersion
Definition: Interfaces.h:266
bool RegisterListener(EventCallback *a_callback) const
void(Message *a_msg) EventCallback
Definition: Interfaces.h:262
Definition: Interfaces.h:307
SKSEObjectRegistry & GetObjectRegistry() const
SKSEPersistentObjectStorage & GetPersistentObjectStorage() const
std::uint32_t Version() const
SKSEDelayFunctorManager & GetDelayFunctorManager() const
@ kVersion
Definition: Interfaces.h:311
Definition: Interfaces.h:219
bool Register(First a_first, Rest... a_rest) const
Definition: Interfaces.h:238
const detail::SKSEPapyrusInterface * GetProxy() const
std::uint32_t Version() const
bool(RE::BSScript::Internal::VirtualMachine *a_vm) RegFunction1
Definition: Interfaces.h:221
bool(RE::BSScript::IVirtualMachine *a_vm) RegFunction2
Definition: Interfaces.h:222
@ kVersion
Definition: Interfaces.h:226
bool Register(Last a_last) const
Definition: Interfaces.h:232
Definition: Interfaces.h:17
const detail::SKSEInterface * GetProxy() const
std::uint32_t EditorVersion() const
REL::Version RuntimeVersion() const
std::uint32_t SKSEVersion() const
Definition: Interfaces.h:71
std::uint32_t WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const T(&a_buf)[N]) const
Definition: Interfaces.h:109
bool ResolveHandle(RE::VMHandle a_oldHandle, RE::VMHandle &a_newHandle) const
std::uint32_t WriteRecordData(const T(&a_buf)[N]) const
Definition: Interfaces.h:135
void SetLoadCallback(EventCallback *a_callback) const
std::uint32_t WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const T &a_buf) const
Definition: Interfaces.h:98
void SetFormDeleteCallback(FormDeleteCallback *a_callback) const
std::uint32_t ReadRecordData(T &a_buf) const
Definition: Interfaces.h:150
void(SerializationInterface *a_intfc) EventCallback
Definition: Interfaces.h:73
void(RE::VMHandle a_handle) FormDeleteCallback
Definition: Interfaces.h:74
@ kVersion
Definition: Interfaces.h:78
std::uint32_t ReadRecordData(void *a_buf, std::uint32_t a_length) const
void SetRevertCallback(EventCallback *a_callback) const
const detail::SKSESerializationInterface * GetProxy() const
std::uint32_t WriteRecordData(const T &a_buf) const
Definition: Interfaces.h:124
void SetUniqueID(std::uint32_t a_uid) const
bool WriteRecordData(const void *a_buf, std::uint32_t a_length) const
bool GetNextRecordInfo(std::uint32_t &a_type, std::uint32_t &a_version, std::uint32_t &a_length) const
void SetSaveCallback(EventCallback *a_callback) const
std::uint32_t ReadRecordData(T(&a_buf)[N]) const
Definition: Interfaces.h:161
bool ResolveFormID(RE::FormID a_oldFormID, RE::FormID &a_newFormID) const
std::uint32_t Version() const
bool WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const void *a_buf, std::uint32_t a_length) const
bool OpenRecord(std::uint32_t a_type, std::uint32_t a_version) const
Definition: Interfaces.h:192
Definition: Interfaces.h:204
Definition: Interfaces.h:174
@ kVersion
Definition: Interfaces.h:180
void AddUITask(UIDelegate_v1 *a_task) const
std::function< void()> TaskFn
Definition: Interfaces.h:176
const detail::SKSETaskInterface * GetProxy() const
void AddTask(TaskFn a_task) const
void AddUITask(TaskFn a_task) const
void AddTask(TaskDelegate *a_task) const
std::uint32_t Version() const
Definition: Interfaces.h:325
void * AllocateFromBranchPool(std::size_t a_size) const
std::uint32_t Version() const
@ kVersion
Definition: Interfaces.h:329
void * AllocateFromLocalPool(std::size_t a_size) const
std::uint32_t FormID
Definition: BSCoreTypes.h:5
std::uint64_t VMHandle
Definition: BSCoreTypes.h:7
std::uint32_t PluginHandle
Definition: Stubs.h:11
Definition: Interfaces.h:255
std::uint32_t dataLen
Definition: Interfaces.h:258
const char * sender
Definition: Interfaces.h:256
std::uint32_t type
Definition: Interfaces.h:257
void * data
Definition: Interfaces.h:259
Definition: Interfaces.h:342
@ kVersion
Definition: Interfaces.h:345
std::uint32_t version
Definition: Interfaces.h:350
const char * name
Definition: Interfaces.h:349
std::uint32_t infoVersion
Definition: Interfaces.h:348