2022-06-27 11:38:49 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "ArtifactTracker.h"
|
2022-06-30 10:31:01 +00:00
|
|
|
#include "Util.h"
|
2022-06-27 11:38:49 +00:00
|
|
|
|
|
|
|
namespace Papyrus::PapyrusFunctions
|
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
constexpr bool IsLoaded(RE::StaticFunctionTag*)
|
2022-06-27 11:38:49 +00:00
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
return ArtifactTracker::g_bLoaded;
|
|
|
|
}
|
2022-06-27 11:38:49 +00:00
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
inline RE::TESObjectREFR* GetCellStorage(RE::StaticFunctionTag*)
|
|
|
|
{
|
|
|
|
return ArtifactTracker::g_cellStorage;
|
|
|
|
}
|
2022-06-27 11:38:49 +00:00
|
|
|
|
2022-07-01 20:15:55 +00:00
|
|
|
inline void SyncCellStorage(RE::StaticFunctionTag*)
|
2022-06-30 10:31:01 +00:00
|
|
|
{
|
2022-07-01 20:15:55 +00:00
|
|
|
ArtifactTracker::SyncCellStorage();
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
// From po3's Papyrus Extender
|
|
|
|
inline std::vector<RE::Actor*> GetPlayerFollowers(RE::StaticFunctionTag*)
|
2022-06-27 11:38:49 +00:00
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
std::vector<RE::Actor*> result;
|
2022-06-27 11:38:49 +00:00
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
if (const auto processLists = RE::ProcessLists::GetSingleton(); processLists) {
|
|
|
|
for (auto& actorHandle : processLists->highActorHandles) {
|
|
|
|
if (auto actor = actorHandle.get(); actor && actor->IsPlayerTeammate()) {
|
|
|
|
result.push_back(actor.get());
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
return result;
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
inline RE::TESObjectREFR* GetCurrentContainer(RE::StaticFunctionTag*)
|
2022-06-27 11:38:49 +00:00
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
const auto handle = RE::ContainerMenu::GetTargetRefHandle();
|
|
|
|
const auto refr = RE::TESObjectREFR::LookupByHandle(handle);
|
|
|
|
return refr ? refr.get() : nullptr;
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
inline void RescanStoredArtifacts(RE::StaticFunctionTag*)
|
2022-06-27 11:38:49 +00:00
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
ListRevert(ArtifactTracker::g_listStored);
|
|
|
|
ArtifactTracker::AddRefArtifactsToList(ArtifactTracker::g_persistentStorage, ArtifactTracker::g_listStored);
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
inline void RescanFoundArtifacts(RE::StaticFunctionTag*)
|
|
|
|
{
|
|
|
|
ListRevert(ArtifactTracker::g_listFound);
|
|
|
|
ArtifactTracker::AddRefArtifactsToList(RE::PlayerCharacter::GetSingleton(), ArtifactTracker::g_listFound, ArtifactTracker::g_listStored);
|
2022-06-27 11:38:49 +00:00
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
for (const auto& ref : GetPlayerFollowers(nullptr)) {
|
|
|
|
ArtifactTracker::AddRefArtifactsToList(ref, ArtifactTracker::g_listFound, ArtifactTracker::g_listStored);
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-30 10:31:01 +00:00
|
|
|
inline void RescanNewArtifacts(RE::StaticFunctionTag*)
|
2022-06-27 11:38:49 +00:00
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
ListRevert(ArtifactTracker::g_listNew);
|
|
|
|
for (auto const& item : ArtifactTracker::g_artifactMap) {
|
|
|
|
if (!ArtifactTracker::g_listStored->HasForm(item.second) && !ArtifactTracker::g_listFound->HasForm(item.second)) {
|
|
|
|
ArtifactTracker::g_listNew->AddForm(item.second);
|
|
|
|
}
|
|
|
|
}
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
inline void Bind(VM& a_vm)
|
|
|
|
{
|
2022-06-30 10:31:01 +00:00
|
|
|
BIND(IsLoaded);
|
|
|
|
logger::info("Registered IsLoaded"sv);
|
|
|
|
BIND(RescanStoredArtifacts);
|
|
|
|
logger::info("Registered RescanStoredArtifacts"sv);
|
|
|
|
BIND(RescanFoundArtifacts);
|
|
|
|
logger::info("Registered RescanFoundArtifacts"sv);
|
|
|
|
BIND(RescanNewArtifacts);
|
|
|
|
logger::info("Registered RescanNewArtifacts"sv);
|
2022-06-27 11:38:49 +00:00
|
|
|
BIND(GetCellStorage);
|
|
|
|
logger::info("Registered GetCellStorage"sv);
|
|
|
|
BIND(SyncCellStorage);
|
|
|
|
logger::info("Registered SyncCellStorage"sv);
|
2022-06-30 10:31:01 +00:00
|
|
|
BIND(GetPlayerFollowers);
|
|
|
|
logger::info("Registered GetPlayerFollowers"sv);
|
|
|
|
BIND(GetCurrentContainer);
|
|
|
|
logger::info("Registered GetCurrentContainer"sv);
|
2022-06-27 11:38:49 +00:00
|
|
|
}
|
|
|
|
}
|