CommonLibSSE NG
Loading...
Searching...
No Matches
Interfaces.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/G/GFxMovieView.h"
4#include "RE/G/GFxValue.h"
8
9#include "SKSE/Impl/Stubs.h"
10#include "SKSE/Version.h"
11
12namespace SKSE
13{
14 struct PluginInfo;
15
17 {
18 public:
19 [[nodiscard]] std::uint32_t EditorVersion() const;
20 [[nodiscard]] bool IsEditor() const;
21 [[nodiscard]] REL::Version RuntimeVersion() const;
22 [[nodiscard]] std::uint32_t SKSEVersion() const;
23
24 protected:
25 [[nodiscard]] const detail::SKSEInterface* GetProxy() const;
26 };
27
29 {
30 public:
31 enum : std::uint32_t
32 {
41 kTotal
42 };
43
44 [[nodiscard]] PluginHandle GetPluginHandle() const;
45 const PluginInfo* GetPluginInfo(const char* a_name) const;
46 [[nodiscard]] std::uint32_t GetReleaseIndex() const;
47 [[nodiscard]] void* QueryInterface(std::uint32_t a_id) const;
48 };
49
51 {
52 public:
53 using RegCallback = bool(RE::GFxMovieView* a_view, RE::GFxValue* a_root);
54 using RegInvCallback = void(RE::GFxMovieView* a_view, RE::GFxValue* a_object, RE::InventoryEntryData* a_item);
55
56 enum
57 {
58 kVersion = 2
59 };
60
61 [[nodiscard]] std::uint32_t Version() const;
62
63 bool Register(RegCallback* a_callback, const char* a_name) const;
64 void Register(RegInvCallback* a_callback) const;
65
66 protected:
67 [[nodiscard]] const detail::SKSEScaleformInterface* GetProxy() const;
68 };
69
71 {
72 public:
73 using EventCallback = void(SerializationInterface* a_intfc);
74 using FormDeleteCallback = void(RE::VMHandle a_handle);
75
76 enum
77 {
78 kVersion = 4
79 };
80
81 [[nodiscard]] std::uint32_t Version() const;
82
83 void SetUniqueID(std::uint32_t a_uid) const;
84
86 void SetLoadCallback(EventCallback* a_callback) const;
87 void SetRevertCallback(EventCallback* a_callback) const;
88 void SetSaveCallback(EventCallback* a_callback) const;
89
90 bool WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const void* a_buf, std::uint32_t a_length) const;
91
92 template <
93 class T,
94 std::enable_if_t<
95 std::negation_v<
96 std::is_pointer<T>>,
97 int> = 0>
98 inline std::uint32_t WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const T& a_buf) const
99 {
100 return WriteRecord(a_type, a_version, std::addressof(a_buf), sizeof(T));
101 }
102
103 template <
104 class T,
105 std::size_t N,
106 std::enable_if_t<
107 std::is_array_v<T>,
108 int> = 0>
109 inline std::uint32_t WriteRecord(std::uint32_t a_type, std::uint32_t a_version, const T (&a_buf)[N]) const
110 {
111 return WriteRecord(a_type, a_version, std::addressof(a_buf), sizeof(T) * N);
112 }
113
114 [[nodiscard]] bool OpenRecord(std::uint32_t a_type, std::uint32_t a_version) const;
115
116 bool WriteRecordData(const void* a_buf, std::uint32_t a_length) const;
117
118 template <
119 class T,
120 std::enable_if_t<
121 std::negation_v<
122 std::is_pointer<T>>,
123 int> = 0>
124 inline std::uint32_t WriteRecordData(const T& a_buf) const
125 {
126 return WriteRecordData(std::addressof(a_buf), sizeof(T));
127 }
128
129 template <
130 class T,
131 std::size_t N,
132 std::enable_if_t<
133 std::is_array_v<T>,
134 int> = 0>
135 inline std::uint32_t WriteRecordData(const T (&a_buf)[N]) const
136 {
137 return WriteRecordData(std::addressof(a_buf), sizeof(T) * N);
138 }
139
140 bool GetNextRecordInfo(std::uint32_t& a_type, std::uint32_t& a_version, std::uint32_t& a_length) const;
141
142 std::uint32_t ReadRecordData(void* a_buf, std::uint32_t a_length) const;
143
144 template <
145 class T,
146 std::enable_if_t<
147 std::negation_v<
148 std::is_pointer<T>>,
149 int> = 0>
150 inline std::uint32_t ReadRecordData(T& a_buf) const
151 {
152 return ReadRecordData(std::addressof(a_buf), sizeof(T));
153 }
154
155 template <
156 class T,
157 std::size_t N,
158 std::enable_if_t<
159 std::is_array_v<T>,
160 int> = 0>
161 inline std::uint32_t ReadRecordData(T (&a_buf)[N]) const
162 {
163 return ReadRecordData(std::addressof(a_buf), sizeof(T) * N);
164 }
165
166 bool ResolveFormID(RE::FormID a_oldFormID, RE::FormID& a_newFormID) const;
167 bool ResolveHandle(RE::VMHandle a_oldHandle, RE::VMHandle& a_newHandle) const;
168
169 protected:
170 [[nodiscard]] const detail::SKSESerializationInterface* GetProxy() const;
171 };
172
174 {
175 public:
176 using TaskFn = std::function<void()>;
177
178 enum
179 {
180 kVersion = 2
181 };
182
183 [[nodiscard]] std::uint32_t Version() const;
184
185 void AddTask(TaskFn a_task) const;
186 void AddTask(TaskDelegate* a_task) const;
187 void AddUITask(TaskFn a_task) const;
188 void AddUITask(UIDelegate_v1* a_task) const;
189
190 protected:
192 {
193 public:
194 Task(TaskFn&& a_fn);
195
196 void Run() override;
197 void Dispose() override;
198
199 private:
200 TaskFn _fn;
201 };
202
204 {
205 public:
206 UITask(TaskFn&& a_fn);
207
208 void Run() override;
209 void Dispose() override;
210
211 private:
212 TaskFn _fn;
213 };
214
215 [[nodiscard]] const detail::SKSETaskInterface* GetProxy() const;
216 };
217
219 {
220 public:
223
224 enum
225 {
226 kVersion = 1
227 };
228
229 [[nodiscard]] std::uint32_t Version() const;
230
231 template <class Last>
232 bool Register(Last a_last) const
233 {
234 return Register_Impl(a_last);
235 }
236
237 template <class First, class... Rest>
238 bool Register(First a_first, Rest... a_rest) const
239 {
240 return Register_Impl(a_first) && Register(a_rest...);
241 }
242
243 protected:
244 [[nodiscard]] const detail::SKSEPapyrusInterface* GetProxy() const;
245
246 private:
247 bool Register_Impl(RegFunction1* a_fn) const;
248 bool Register_Impl(RegFunction2* a_fn) const;
249 };
250
252 {
253 public:
254 struct Message
255 {
256 const char* sender;
257 std::uint32_t type;
258 std::uint32_t dataLen;
259 void* data;
260 };
261
262 using EventCallback = void(Message* a_msg);
263
264 enum
265 {
266 kVersion = 2
267 };
268
269 enum : std::uint32_t
270 {
280
281 kTotal
282 };
283
284 enum class Dispatcher : std::uint32_t
285 {
286 kModEvent = 0,
291
292 kTotal
293 };
294
295 [[nodiscard]] std::uint32_t Version() const;
296
297 bool Dispatch(std::uint32_t a_messageType, void* a_data, std::uint32_t a_dataLen, const char* a_receiver) const;
298 [[nodiscard]] void* GetEventDispatcher(Dispatcher a_dispatcherID) const;
299 bool RegisterListener(EventCallback* a_callback) const;
300 bool RegisterListener(const char* a_sender, EventCallback* a_callback) const;
301
302 protected:
303 [[nodiscard]] const detail::SKSEMessagingInterface* GetProxy() const;
304 };
305
307 {
308 public:
309 enum
310 {
311 kVersion = 1
312 };
313
314 [[nodiscard]] std::uint32_t Version() const;
315
316 [[nodiscard]] SKSEDelayFunctorManager& GetDelayFunctorManager() const;
317 [[nodiscard]] SKSEObjectRegistry& GetObjectRegistry() const;
318 [[nodiscard]] SKSEPersistentObjectStorage& GetPersistentObjectStorage() const;
319
320 private:
321 [[nodiscard]] const detail::SKSEObjectInterface* GetProxy() const;
322 };
323
325 {
326 public:
327 enum
328 {
329 kVersion = 1
330 };
331
332 [[nodiscard]] std::uint32_t Version() const;
333
334 [[nodiscard]] void* AllocateFromBranchPool(std::size_t a_size) const;
335 [[nodiscard]] void* AllocateFromLocalPool(std::size_t a_size) const;
336
337 private:
338 [[nodiscard]] const detail::SKSETrampolineInterface* GetProxy() const;
339 };
340
342 {
343 enum
344 {
345 kVersion = 1
346 };
347
348 std::uint32_t infoVersion;
349 const char* name;
350 std::uint32_t version;
351 };
352
354 {
355 public:
356 enum
357 {
359 };
360
361 constexpr void AuthorEmail(std::string_view a_email) noexcept { SetCharBuffer(a_email, std::span{ supportEmail }); }
362 constexpr void AuthorName(std::string_view a_name) noexcept { SetCharBuffer(a_name, std::span{ author }); }
363
364 constexpr void CompatibleVersions(std::initializer_list<REL::Version> a_versions) noexcept
365 {
366 assert(a_versions.size() < std::size(compatibleVersions) - 1);
367 std::transform(
368 a_versions.begin(),
369 a_versions.end(),
370 std::begin(compatibleVersions),
371 [](const REL::Version& a_version) noexcept { return a_version.pack(); });
372 }
373
374 constexpr void MinimumRequiredXSEVersion(REL::Version a_version) noexcept { xseMinimum = a_version.pack(); }
375 constexpr void PluginName(std::string_view a_plugin) noexcept { SetCharBuffer(a_plugin, std::span{ pluginName }); }
376 constexpr void PluginVersion(REL::Version a_version) noexcept { pluginVersion = a_version.pack(); }
377 constexpr void HasNoStructUse(bool a_value = true) noexcept { noStructUse = a_value; }
378 constexpr void UsesNoStructs(bool a_value = true) noexcept { noStructUse = a_value; }
379 constexpr void UsesAddressLibrary(bool a_value = true) noexcept { addressLibrary = a_value; }
380 constexpr void UsesSigScanning(bool a_value = true) noexcept { sigScanning = a_value; }
381 constexpr void UsesStructsPost629(bool a_value = true) noexcept { structsPost629 = a_value; }
382
383 const std::uint32_t dataVersion{ kVersion };
384 std::uint32_t pluginVersion = 0;
385 char pluginName[256] = {};
386 char author[256] = {};
387 char supportEmail[252] = {};
388 bool noStructUse : 1 = false;
389 std::uint8_t padding1 : 7 = 0;
390 std::uint8_t padding2 = 0;
391 std::uint16_t padding3 = 0;
392 bool addressLibrary: 1 = false;
393 bool sigScanning: 1 = false;
394 bool structsPost629 : 1 = false;
395 std::uint8_t padding4: 5 = 0;
396 std::uint8_t padding5 = 0;
397 std::uint16_t padding6 = 0;
398 std::uint32_t compatibleVersions[16] = {};
399 std::uint32_t xseMinimum = 0;
400
401 private:
402 static constexpr void SetCharBuffer(
403 std::string_view a_src,
404 std::span<char> a_dst) noexcept
405 {
406 assert(a_src.size() < a_dst.size());
407 std::fill(a_dst.begin(), a_dst.end(), '\0');
408 std::copy(a_src.begin(), a_src.end(), a_dst.begin());
409 }
410 };
411 static_assert(offsetof(PluginVersionData, dataVersion) == 0x000);
412 static_assert(offsetof(PluginVersionData, pluginVersion) == 0x004);
413 static_assert(offsetof(PluginVersionData, pluginName) == 0x008);
414 static_assert(offsetof(PluginVersionData, author) == 0x108);
415 static_assert(offsetof(PluginVersionData, supportEmail) == 0x208);
416 static_assert(offsetof(PluginVersionData, padding2) == 0x305);
417 static_assert(offsetof(PluginVersionData, padding3) == 0x306);
418 static_assert(offsetof(PluginVersionData, padding5) == 0x309);
419 static_assert(offsetof(PluginVersionData, padding6) == 0x30A);
420 static_assert(offsetof(PluginVersionData, compatibleVersions) == 0x30C);
421 static_assert(offsetof(PluginVersionData, xseMinimum) == 0x34C);
422 static_assert(sizeof(PluginVersionData) == 0x350);
423
425 {
430 };
431
432 enum class StructCompatibility : std::uint32_t
433 {
434 Dependent = 0,
435 Independent = 1
436 };
437
439 {
440 public:
441 template <std::size_t N>
442 class String
443 {
444 public:
445 constexpr String() = default;
446
447 constexpr String(std::string_view a_string) noexcept
448 {
449 std::span<char> buffer(_buffer, N);
450 std::fill(buffer.begin(), buffer.end(), '\0');
451 std::copy(a_string.begin(), a_string.end(), buffer.begin());
452 }
453
454 constexpr String(const char* a_string) noexcept
455 {
456 std::string_view string(a_string);
457 std::span<char> buffer(_buffer, N);
458 std::fill(buffer.begin(), buffer.end(), '\0');
459 std::copy(string.begin(), string.end(), buffer.begin());
460 }
461
462 [[nodiscard]] constexpr operator const char*() const noexcept
463 {
464 return _buffer;
465 }
466
467 [[nodiscard]] constexpr operator std::string_view() const noexcept
468 {
469 return _buffer;
470 }
471
472 private:
473 char _buffer[N]{};
474 };
475
477 {
478 public:
480
481 constexpr VersionNumber(value_type a_major = 1, value_type a_minor = 0, value_type a_patch = 0,
482 value_type a_build = 0) noexcept :
483 _packed(REL::Version{ a_major, a_minor, a_patch, a_build }.pack())
484 {}
485
486 constexpr VersionNumber(REL::Version a_version) noexcept :
487 _packed(a_version.pack()) {}
488
489 constexpr VersionNumber& operator=(REL::Version a_version) noexcept
490 {
491 _packed = a_version.pack();
492 return *this;
493 }
494
495 [[nodiscard]] constexpr operator REL::Version() const noexcept
496 {
497 return REL::Version::unpack(_packed);
498 }
499
500 [[nodiscard]] constexpr explicit operator std::uint32_t() const noexcept
501 {
502 return _packed;
503 }
504
505 private:
506 std::uint32_t _packed{};
507 };
508
510 {
511 public:
512 static constexpr std::size_t MaxCompatibleVersions = 16;
513
514 constexpr RuntimeCompatibility() = default;
515
516 template <class... Args>
517 requires(sizeof...(Args) <= MaxCompatibleVersions && (std::convertible_to<Args, VersionNumber> && ...))
518 constexpr RuntimeCompatibility(Args... a_compatibleVersions) noexcept :
519 _addressLibrary(false), _compatibleVersions({ VersionNumber(a_compatibleVersions)... })
520 {
521 }
522
523 constexpr RuntimeCompatibility(VersionIndependence a_versionIndependence, bool a_requiresPost629Structs = false) noexcept :
524 _addressLibrary(a_versionIndependence == VersionIndependence::AddressLibrary),
525 _signatureScanning(a_versionIndependence == VersionIndependence::SignatureScanning),
526 _structsPost629(a_requiresPost629Structs) {}
527
528 [[nodiscard]] constexpr bool UsesAddressLibrary() const noexcept
529 {
530 return _addressLibrary;
531 }
532
533 [[nodiscard]] constexpr bool UsesSignatureScanning() const noexcept
534 {
535 return _signatureScanning;
536 }
537
538 [[nodiscard]] constexpr bool Targets629Structs() const noexcept
539 {
540 return _structsPost629;
541 }
542
543 [[nodiscard]] constexpr bool IsVersionIndependent() const noexcept
544 {
546 }
547
548 [[nodiscard]] constexpr std::array<VersionNumber, 16> GetCompatibleRuntimeVersions() const noexcept
549 {
550 return _compatibleVersions;
551 }
552
553 private:
554 const bool _addressLibrary : 1 = true;
555 const bool _signatureScanning: 1 = false;
556 const bool _structsPost629 : 1 = false;
557 [[maybe_unused]] const std::uint8_t _pad0: 5 = 0;
558 [[maybe_unused]] const std::uint8_t _pad1{ 0 };
559 [[maybe_unused]] const std::uint16_t _pad2{ 0 };
560 std::array<VersionNumber, 16> _compatibleVersions{};
561 };
562 static_assert(sizeof(RuntimeCompatibility) == 0x44);
563
565 {
569 const VersionNumber Version{ 1, 0, 0, 0 };
570
575
580
585
597
608
613 };
614 static_assert(offsetof(PluginDeclarationInfo, Version) == 0x000);
615 static_assert(offsetof(PluginDeclarationInfo, Name) == 0x004);
616 static_assert(offsetof(PluginDeclarationInfo, Author) == 0x104);
617 static_assert(offsetof(PluginDeclarationInfo, SupportEmail) == 0x204);
618 static_assert(offsetof(PluginDeclarationInfo, StructCompatibility) == 0x300);
619 static_assert(offsetof(PluginDeclarationInfo, RuntimeCompatibility) == 0x304);
620 static_assert(offsetof(PluginDeclarationInfo, MinimumSKSEVersion) == 0x348);
621
622 constexpr PluginDeclaration(PluginDeclarationInfo info) noexcept :
623 _data(std::move(info)) {}
624
625 [[nodiscard]] constexpr REL::Version GetVersion() const noexcept
626 {
627 return _data.Version;
628 }
629
630 [[nodiscard]] constexpr std::string_view GetName() const noexcept
631 {
632 return _data.Name;
633 }
634
635 [[nodiscard]] constexpr std::string_view GetAuthor() const noexcept
636 {
637 return _data.Author;
638 }
639
640 [[nodiscard]] constexpr std::string_view GetSupportEmail() const noexcept
641 {
642 return _data.SupportEmail;
643 }
644
645 [[nodiscard]] constexpr StructCompatibility GetStructCompatibility() const noexcept
646 {
647 return _data.StructCompatibility;
648 }
649
650 [[nodiscard]] constexpr const RuntimeCompatibility& GetRuntimeCompatibility() const noexcept
651 {
652 return _data.RuntimeCompatibility;
653 }
654
655 [[nodiscard]] constexpr REL::Version GetMinimumSKSEVersion() const noexcept
656 {
657 return _data.MinimumSKSEVersion;
658 }
659
660 [[nodiscard]] static const PluginDeclaration* GetSingleton() noexcept;
661
662 private:
663 enum
664 {
665 kVersion = 1,
666 };
667
668 [[maybe_unused]] const std::uint32_t _dataVersion{ kVersion };
669 [[maybe_unused]] const PluginDeclarationInfo _data;
670 };
671 static_assert(sizeof(PluginDeclaration) == 0x350);
672}
673
674#define SKSEPluginInfo(...) \
675 extern "C" [[maybe_unused]] __declspec(dllexport) constinit ::SKSE::PluginDeclaration SKSEPlugin_Version({ __VA_ARGS__ }); \
676 extern "C" [[maybe_unused]] __declspec(dllexport) bool SKSEPlugin_Query(::SKSE::QueryInterface*, ::SKSE::PluginInfo* pluginInfo) \
677 { \
678 pluginInfo->infoVersion = ::SKSE::PluginInfo::kVersion; \
679 pluginInfo->name = SKSEPlugin_Version.GetName().data(); \
680 pluginInfo->version = static_cast<std::uint32_t>(SKSEPlugin_Version.GetVersion().pack()); \
681 return true; \
682 }
683
684#define SKSEPluginLoad(...) extern "C" [[maybe_unused]] __declspec(dllexport) bool SKSEPlugin_Load(__VA_ARGS__)
Definition IVirtualMachine.h:39
Definition VirtualMachine.h:46
Definition GFxMovieView.h:24
Definition GFxValue.h:92
Definition InventoryEntryData.h:15
Definition Relocation.h:401
static constexpr Version unpack(std::uint32_t a_packedVersion) noexcept
Definition Relocation.h:505
std::uint16_t value_type
Definition Relocation.h:403
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
Dispatcher
Definition Interfaces.h:285
void * GetEventDispatcher(Dispatcher a_dispatcherID) const
@ 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
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
bool RegisterListener(EventCallback *a_callback) const
@ kVersion
Definition Interfaces.h:266
void(Message *a_msg) EventCallback
Definition Interfaces.h:262
Definition Interfaces.h:307
SKSEObjectRegistry & GetObjectRegistry() const
SKSEPersistentObjectStorage & GetPersistentObjectStorage() const
std::uint32_t Version() const
@ kVersion
Definition Interfaces.h:311
SKSEDelayFunctorManager & GetDelayFunctorManager() const
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
constexpr bool Targets629Structs() const noexcept
Definition Interfaces.h:538
constexpr RuntimeCompatibility(VersionIndependence a_versionIndependence, bool a_requiresPost629Structs=false) noexcept
Definition Interfaces.h:523
static constexpr std::size_t MaxCompatibleVersions
Definition Interfaces.h:512
constexpr RuntimeCompatibility(Args... a_compatibleVersions) noexcept
Definition Interfaces.h:518
constexpr std::array< VersionNumber, 16 > GetCompatibleRuntimeVersions() const noexcept
Definition Interfaces.h:548
constexpr bool IsVersionIndependent() const noexcept
Definition Interfaces.h:543
constexpr bool UsesAddressLibrary() const noexcept
Definition Interfaces.h:528
constexpr bool UsesSignatureScanning() const noexcept
Definition Interfaces.h:533
Definition Interfaces.h:443
constexpr String(const char *a_string) noexcept
Definition Interfaces.h:454
constexpr String(std::string_view a_string) noexcept
Definition Interfaces.h:447
constexpr String()=default
Definition Interfaces.h:477
constexpr operator REL::Version() const noexcept
Definition Interfaces.h:495
constexpr VersionNumber & operator=(REL::Version a_version) noexcept
Definition Interfaces.h:489
constexpr VersionNumber(value_type a_major=1, value_type a_minor=0, value_type a_patch=0, value_type a_build=0) noexcept
Definition Interfaces.h:481
typename REL::Version::value_type value_type
Definition Interfaces.h:479
constexpr VersionNumber(REL::Version a_version) noexcept
Definition Interfaces.h:486
Definition Interfaces.h:17
const detail::SKSEInterface * GetProxy() const
std::uint32_t EditorVersion() const
REL::Version RuntimeVersion() const
std::uint32_t SKSEVersion() const
bool IsEditor() const
Definition Interfaces.h:51
const detail::SKSEScaleformInterface * GetProxy() const
void(RE::GFxMovieView *a_view, RE::GFxValue *a_object, RE::InventoryEntryData *a_item) RegInvCallback
Definition Interfaces.h:54
void Register(RegInvCallback *a_callback) const
@ kVersion
Definition Interfaces.h:58
bool Register(RegCallback *a_callback, const char *a_name) const
std::uint32_t Version() const
bool(RE::GFxMovieView *a_view, RE::GFxValue *a_root) RegCallback
Definition Interfaces.h:53
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
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
@ kVersion
Definition Interfaces.h:78
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
void Dispose() override
Definition Interfaces.h:204
Definition Interfaces.h:174
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
@ kVersion
Definition Interfaces.h:180
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
Definition Stubs.h:99
Definition Stubs.h:106
std::uint32_t FormID
Definition BSCoreTypes.h:5
std::uint64_t VMHandle
Definition BSCoreTypes.h:7
Definition Relocation.h:182
Definition API.h:14
std::uint32_t PluginHandle
Definition Stubs.h:11
VersionIndependence
Definition Interfaces.h:425
StructCompatibility
Definition Interfaces.h:433
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
const String< 256 > Name
Definition Interfaces.h:574
const VersionNumber MinimumSKSEVersion
Definition Interfaces.h:612
const StructCompatibility StructCompatibility
Definition Interfaces.h:596
const String< 256 > Author
Definition Interfaces.h:579
const VersionNumber Version
Definition Interfaces.h:569
const String< 252 > SupportEmail
Definition Interfaces.h:584
const RuntimeCompatibility RuntimeCompatibility
Definition Interfaces.h:607
Definition Interfaces.h:439
static const PluginDeclaration * GetSingleton() noexcept
constexpr std::string_view GetAuthor() const noexcept
Definition Interfaces.h:635
constexpr PluginDeclaration(PluginDeclarationInfo info) noexcept
Definition Interfaces.h:622
constexpr std::string_view GetName() const noexcept
Definition Interfaces.h:630
constexpr REL::Version GetMinimumSKSEVersion() const noexcept
Definition Interfaces.h:655
constexpr REL::Version GetVersion() const noexcept
Definition Interfaces.h:625
constexpr std::string_view GetSupportEmail() const noexcept
Definition Interfaces.h:640
constexpr StructCompatibility GetStructCompatibility() const noexcept
Definition Interfaces.h:645
constexpr const RuntimeCompatibility & GetRuntimeCompatibility() const noexcept
Definition Interfaces.h:650
Definition Interfaces.h:342
std::uint32_t version
Definition Interfaces.h:350
const char * name
Definition Interfaces.h:349
std::uint32_t infoVersion
Definition Interfaces.h:348
@ kVersion
Definition Interfaces.h:345
Definition Interfaces.h:354
std::uint8_t padding5
Definition Interfaces.h:396
constexpr void HasNoStructUse(bool a_value=true) noexcept
Definition Interfaces.h:377
std::uint16_t padding6
Definition Interfaces.h:397
constexpr void UsesNoStructs(bool a_value=true) noexcept
Definition Interfaces.h:378
std::uint8_t padding4
Definition Interfaces.h:395
bool structsPost629
Definition Interfaces.h:394
constexpr void MinimumRequiredXSEVersion(REL::Version a_version) noexcept
Definition Interfaces.h:374
constexpr void PluginName(std::string_view a_plugin) noexcept
Definition Interfaces.h:375
std::uint16_t padding3
Definition Interfaces.h:391
std::uint32_t pluginVersion
Definition Interfaces.h:384
std::uint32_t xseMinimum
Definition Interfaces.h:399
constexpr void CompatibleVersions(std::initializer_list< REL::Version > a_versions) noexcept
Definition Interfaces.h:364
char pluginName[256]
Definition Interfaces.h:385
constexpr void AuthorEmail(std::string_view a_email) noexcept
Definition Interfaces.h:361
bool addressLibrary
Definition Interfaces.h:392
constexpr void UsesStructsPost629(bool a_value=true) noexcept
Definition Interfaces.h:381
std::uint8_t padding1
Definition Interfaces.h:389
constexpr void PluginVersion(REL::Version a_version) noexcept
Definition Interfaces.h:376
char author[256]
Definition Interfaces.h:386
@ kVersion
Definition Interfaces.h:358
std::uint8_t padding2
Definition Interfaces.h:390
bool sigScanning
Definition Interfaces.h:393
constexpr void AuthorName(std::string_view a_name) noexcept
Definition Interfaces.h:362
bool noStructUse
Definition Interfaces.h:388
std::uint32_t compatibleVersions[16]
Definition Interfaces.h:398
constexpr void UsesAddressLibrary(bool a_value=true) noexcept
Definition Interfaces.h:379
const std::uint32_t dataVersion
Definition Interfaces.h:383
char supportEmail[252]
Definition Interfaces.h:387
constexpr void UsesSigScanning(bool a_value=true) noexcept
Definition Interfaces.h:380
Definition Stubs.h:27
Definition Stubs.h:85