|
|
|
@ -2,7 +2,7 @@ |
|
|
|
|
|
|
|
|
|
namespace Papyrus::ArtifactTracker |
|
|
|
|
{ |
|
|
|
|
inline bool is_excluded(RE::TESForm* a_form, RE::TESForm* a_excludeForm = NULL) |
|
|
|
|
inline bool is_excluded(RE::TESForm* a_form, RE::TESForm* a_excludeForm = NULL, bool nested = true) |
|
|
|
|
{ |
|
|
|
|
if (!a_excludeForm) { |
|
|
|
|
return false; |
|
|
|
@ -13,7 +13,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
if (list) { |
|
|
|
|
if (list->HasForm(a_form)) { |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
} else if (nested) { |
|
|
|
|
bool isExcluded = false; |
|
|
|
|
|
|
|
|
|
list->ForEachForm([&](RE::TESForm& a_exform) { |
|
|
|
@ -69,7 +69,8 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
inline std::int32_t AddAllFormsToList(RE::StaticFunctionTag*, |
|
|
|
|
RE::BGSListForm* a_targetList, |
|
|
|
|
short a_formType, |
|
|
|
|
RE::TESForm* a_excludeForm = NULL) |
|
|
|
|
RE::TESForm* a_excludeForm = NULL, |
|
|
|
|
bool excludeNested = true) |
|
|
|
|
{ |
|
|
|
|
const auto formType = static_cast<RE::FormType>(a_formType); |
|
|
|
|
|
|
|
|
@ -77,7 +78,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
|
|
|
|
|
case RE::FormType::Book: |
|
|
|
|
for (auto const& item : BookCheck::GetBookList()) { |
|
|
|
|
if (!a_excludeForm || !is_excluded(item.second, a_excludeForm)) { |
|
|
|
|
if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { |
|
|
|
|
a_targetList->AddForm(item.second); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -85,7 +86,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
|
|
|
|
|
case RE::FormType::Misc: |
|
|
|
|
for (auto const& item : MiscCheck::GetMiscList()) { |
|
|
|
|
if (!a_excludeForm || !is_excluded(item.second, a_excludeForm)) { |
|
|
|
|
if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { |
|
|
|
|
a_targetList->AddForm(item.second); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -105,7 +106,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
if (!form || !form->GetPlayable()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (a_excludeForm && is_excluded(form, a_excludeForm)) { |
|
|
|
|
if (a_excludeForm && is_excluded(form, a_excludeForm, excludeNested)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
a_targetList->AddForm(form); |
|
|
|
@ -118,7 +119,8 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
inline std::int32_t AddArtifactsToList(VM* a_vm, StackID a_stackID, RE::StaticFunctionTag*, |
|
|
|
|
RE::TESForm* a_refOrList, |
|
|
|
|
RE::BGSListForm* a_targetList, |
|
|
|
|
RE::TESForm* a_excludeForm = NULL) |
|
|
|
|
RE::TESForm* a_excludeForm = NULL, |
|
|
|
|
bool excludeNested = false) |
|
|
|
|
{ |
|
|
|
|
if (!a_refOrList) { |
|
|
|
|
a_vm->TraceStack("a_refOrList in AddArtifactsToList is None", a_stackID); |
|
|
|
@ -133,7 +135,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
a_refOrList->As<RE::BGSListForm>()->ForEachForm([&](RE::TESForm& a_exform) { |
|
|
|
|
const auto refrItem = a_exform.As<RE::TESObjectREFR>(); |
|
|
|
|
if (refrItem) { |
|
|
|
|
AddArtifactsToList(a_vm, a_stackID, {}, refrItem, a_targetList, a_excludeForm); |
|
|
|
|
AddArtifactsToList(a_vm, a_stackID, nullptr, refrItem, a_targetList, a_excludeForm); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
}); |
|
|
|
@ -148,7 +150,7 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto inv = containerRef->GetInventory([&](RE::TESBoundObject& a_exform) { |
|
|
|
|
return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm); |
|
|
|
|
return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm, excludeNested); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
for (const auto& item : inv) { |
|
|
|
@ -283,11 +285,12 @@ namespace Papyrus::ArtifactTracker |
|
|
|
|
|
|
|
|
|
inline std::int32_t AddArtifactsFromFollowersToList(RE::StaticFunctionTag*, |
|
|
|
|
RE::BGSListForm* a_targetList, |
|
|
|
|
RE::TESForm* a_excludeForm = NULL) |
|
|
|
|
RE::TESForm* a_excludeForm = NULL, |
|
|
|
|
bool excludeNested = false) |
|
|
|
|
{ |
|
|
|
|
for (const auto& actor : GetPlayerFollowers(nullptr)) { |
|
|
|
|
auto inv = actor->GetInventory([&](RE::TESBoundObject& a_exform) { |
|
|
|
|
return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm); |
|
|
|
|
return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm, excludeNested); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
for (const auto& item : inv) { |
|
|
|
|