All hardcoded filters can be overridden in INI
This commit is contained in:
parent
00fe1f78a7
commit
01dbb4bf9d
@ -1,3 +1,5 @@
|
|||||||
|
; Limiting by mod is a bit tricky at the time of writing. If a filter has only mod name, it will work as expected only when the mod is active. If the mod is not enabled, the keyword will be assigned to ALL items. To work around it, add at least one Editor ID, found in the mod, the rule will be skipped correctly.
|
||||||
|
|
||||||
Keyword = ETR_ExtraArtifact|Ingredient|ccBGSSSE037-Curios.esl,ccBGSSSE037_BunglersBane
|
Keyword = ETR_ExtraArtifact|Ingredient|ccBGSSSE037-Curios.esl,ccBGSSSE037_BunglersBane
|
||||||
|
|
||||||
Keyword = ETR_ExtraArtifact|Book|TreasureHunter.esp,dunTreasMapWinterholdEast,-TreasHunterAgnarrNote,-treasHuntTharadsJournal,-treasHuntAdventurersJournal,-THDawnstarNote,-THDawnstarNote01,-ArxieTHMzuhlacJournal
|
Keyword = ETR_ExtraArtifact|Book|TreasureHunter.esp,dunTreasMapWinterholdEast,-TreasHunterAgnarrNote,-treasHuntTharadsJournal,-treasHuntAdventurersJournal,-THDawnstarNote,-THDawnstarNote01,-ArxieTHMzuhlacJournal
|
||||||
@ -6,9 +8,9 @@ Keyword = ETR_ExtraArtifact|Book|treasure_hunt.esp,dunTreasMapPalePass,-dunTreas
|
|||||||
|
|
||||||
Keyword = ETR_ExtraArtifact|Potion|yumcheese.esp,snowcheesewedgeyum,-PROPERTYOFSHEOGORATHyum
|
Keyword = ETR_ExtraArtifact|Potion|yumcheese.esp,snowcheesewedgeyum,-PROPERTYOFSHEOGORATHyum
|
||||||
|
|
||||||
; Seashells have VendorItemClutter, we need to include them explicitly
|
; Include seashells. They have VendorItemClutter, which is skipped via the ETR_ExcludeMiscKeywords formlist, we need to include them explicitly
|
||||||
Keyword = ETR_ExtraArtifact|Misc Item|Seashells.esp,aaaSeaConchBlue
|
Keyword = ETR_ExtraArtifact|Misc Item|Seashells.esp,aaaSeaConchBlue
|
||||||
|
|
||||||
; Pouches with WACCF keywords
|
; Exclude pouches with WACCF keywords
|
||||||
Keyword = ETR_NotArtifact|Armor|WAF_ClothingAccessories,-ClothingHead
|
Keyword = ETR_NotArtifact|Armor|WAF_ClothingAccessories,-ClothingHead
|
||||||
Keyword = ETR_NotArtifact|Armor|WAF_ClothingPouch
|
Keyword = ETR_NotArtifact|Armor|WAF_ClothingPouch
|
||||||
|
@ -1,22 +1,53 @@
|
|||||||
; DB01Plate, NordWarHorn, ImperialWarHorn, DBTortureTools, DB06OlavaToken, dunUniqueBeeInJar, dunWaywardPassSkull01, dunUniqueFireflyInJar, dunUniqueDragonflyInJar, dunUniqueButterflyInJar, dunUniqueMothInJar, DancersFlute, BalbusForkNonEquip, MS11YsgramorsSoupSpoon
|
; Default inclusion list:
|
||||||
|
; - all playable weapons,
|
||||||
|
; - all playable apparel,
|
||||||
|
; - all books, excluding spell tomes, notes, and journals,
|
||||||
|
; - misc items without keywords, when KID is not loaded,
|
||||||
|
; - OR all misc items, when KID is loaded (excluding lockpicks and gold, exclude more items by keywords in the INI).
|
||||||
|
|
||||||
|
; Ingredients, potions/food, and soul gems are excluded by default and can be included explicitly.
|
||||||
|
|
||||||
|
; Filters below further customize the list of artifacts. Keyword Item Distributor is required for them to work.
|
||||||
|
; ETR_ExtraArtifact enables tracking of items, ETR_NotArtifact - disables. The order of evaluation vary from type to type, consult the source code.
|
||||||
|
|
||||||
|
|
||||||
|
; Include DB01Plate, NordWarHorn, ImperialWarHorn, DBTortureTools, DB06OlavaToken, dunUniqueBeeInJar, dunWaywardPassSkull01, dunUniqueFireflyInJar, dunUniqueDragonflyInJar, dunUniqueButterflyInJar, dunUniqueMothInJar, DancersFlute, BalbusForkNonEquip, MS11YsgramorsSoupSpoon
|
||||||
Keyword = ETR_ExtraArtifact|Misc Item|0x1F6D4,0x200B6,0x200BA,0x20949,0x59654,0xB08C7,0xF6767,0xFBC3A,0xFBC3B,0xFBC3C,0xFBC3D,0x105109,0x1058AA,0x105A4E
|
Keyword = ETR_ExtraArtifact|Misc Item|0x1F6D4,0x200B6,0x200BA,0x20949,0x59654,0xB08C7,0xF6767,0xFBC3A,0xFBC3B,0xFBC3C,0xFBC3D,0x105109,0x1058AA,0x105A4E
|
||||||
|
|
||||||
; Treasure Maps
|
; Include treasure maps
|
||||||
Keyword = ETR_ExtraArtifact|Book|0xEF07A,0xF33CD,0xF33CE,0xF33CF,0xF33D0,0xF33D1,0xF33D2,0xF33D3,0xF33D4,0xF33D5,0xF33E0
|
Keyword = ETR_ExtraArtifact|Book|0xEF07A,0xF33CD,0xF33CE,0xF33CF,0xF33D0,0xF33D1,0xF33D2,0xF33D3,0xF33D4,0xF33D5,0xF33E0
|
||||||
|
|
||||||
; Soul Gem Fragments
|
; Include recipes
|
||||||
Keyword = ETR_NotArtifact|Misc Item|0x67181,0x67182,0x67183,0x67184,0x67185
|
Keyword = ETR_ExtraArtifact|Book|VendorItemRecipe
|
||||||
|
|
||||||
; Dummy items
|
; Exclude dummy items. You never encounter vanilla dummy items, but who knows what modders do in their mods, right?
|
||||||
Keyword = ETR_NotArtifact|Weapon|Dummy
|
Keyword = ETR_NotArtifact|Weapon|Dummy
|
||||||
Keyword = ETR_NotArtifact|Armor|Dummy
|
Keyword = ETR_NotArtifact|Armor|Dummy
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|Dummy
|
||||||
|
|
||||||
; ClothingPoor
|
; Exclude clutter
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemClutter
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemTool
|
||||||
|
|
||||||
|
; Exclude crafting supplies
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemOreIngot
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemAnimalPart
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemAnimalHide
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|VendorItemFireword
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|BYOHHouseCraftingCategorySmithing
|
||||||
|
|
||||||
|
; Exclude soul gem fragments
|
||||||
|
Keyword = ETR_NotArtifact|Misc Item|0x67181,0x67182,0x67183,0x67184,0x67185
|
||||||
|
|
||||||
|
; Include gems
|
||||||
|
Keyword = ETR_ExtraArtifact|Misc Item|VendorItemGem,-0x67181,-0x67182,-0x67183,-0x67184,-0x67185
|
||||||
|
|
||||||
|
; Exclude ClothingPoor. Keep in mind, its coverage is far from ideal. WACCF slightly improves situation, but many items, perceived as clothing for the poor, will still lack this keyword.
|
||||||
Keyword = ETR_NotArtifact|Armor|ClothingPoor
|
Keyword = ETR_NotArtifact|Armor|ClothingPoor
|
||||||
|
|
||||||
; Disenchantable items, minus daedric artifacts just in case
|
; Exclude disenchantable weapons and armor, minus daedric artifacts just in case
|
||||||
Keyword = ETR_NotArtifact|Weapon|-MagicDisallowEnchanting,-DaedricArtifact,-WeapTypeStaff|E
|
Keyword = ETR_NotArtifact|Weapon|-MagicDisallowEnchanting,-DaedricArtifact,-WeapTypeStaff|E
|
||||||
Keyword = ETR_NotArtifact|Armor|-MagicDisallowEnchanting,-DaedricArtifact|E
|
Keyword = ETR_NotArtifact|Armor|-MagicDisallowEnchanting,-DaedricArtifact|E
|
||||||
|
|
||||||
; Unenchanted staves
|
; Exclude unenchanted staves
|
||||||
Keyword = ETR_NotArtifact|Weapon|WeapTypeStaff|-E
|
Keyword = ETR_NotArtifact|Weapon|WeapTypeStaff|-E
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -18,7 +18,7 @@ namespace ArtifactTracker
|
|||||||
std::unordered_map<RE::FormID, RE::TESObjectREFR*> g_persistentMap;
|
std::unordered_map<RE::FormID, RE::TESObjectREFR*> g_persistentMap;
|
||||||
RE::TESObjectREFR* g_cellStorage;
|
RE::TESObjectREFR* g_cellStorage;
|
||||||
|
|
||||||
bool Init()
|
bool Init(bool bKID)
|
||||||
{
|
{
|
||||||
if (g_bLoaded) {
|
if (g_bLoaded) {
|
||||||
return true;
|
return true;
|
||||||
@ -43,25 +43,23 @@ namespace ArtifactTracker
|
|||||||
|
|
||||||
g_homeKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xFC1A3, "Skyrim.esm"); // LocTypePlayerHouse
|
g_homeKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xFC1A3, "Skyrim.esm"); // LocTypePlayerHouse
|
||||||
|
|
||||||
const auto recipeKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xF5CB0, "Skyrim.esm"); // VendorItemRecipe
|
|
||||||
const auto excludeKeywords = dataHandler->LookupForm<RE::BGSListForm>(0x801, "Artifact Tracker.esp"); // ETR_ExcludeMiscKeywords
|
|
||||||
const auto extraArtifactKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xAFC11A, "Update.esm"); // ETR_ExtraArtifact
|
const auto extraArtifactKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xAFC11A, "Update.esm"); // ETR_ExtraArtifact
|
||||||
const auto notArtifactKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xAFC11C, "Update.esm"); // ETR_NotArtifact
|
const auto notArtifactKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0xAFC11C, "Update.esm"); // ETR_NotArtifact
|
||||||
const auto npcRaceKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0x13794, "Skyrim.esm"); // ActorTypeNPC
|
const auto npcRaceKeyword = dataHandler->LookupForm<RE::BGSKeyword>(0x13794, "Skyrim.esm"); // ActorTypeNPC
|
||||||
|
|
||||||
if (!g_cellContainer || !g_listNew || !g_listStored || !g_listFound || !g_persistentStorage || !g_homeKeyword || !recipeKeyword || !excludeKeywords || !extraArtifactKeyword || !notArtifactKeyword || !npcRaceKeyword) {
|
if (!g_cellContainer || !g_listNew || !g_listStored || !g_listFound || !g_persistentStorage || !g_homeKeyword || !extraArtifactKeyword || !notArtifactKeyword || !npcRaceKeyword) {
|
||||||
SKSE::log::warn("Unable to load data from Artifact Tracker.esp");
|
SKSE::log::warn("Unable to load data from Artifact Tracker.esp");
|
||||||
RE::DebugMessageBox("Unable to load data from Artifact Tracker.esp, the mod is disabled.");
|
RE::DebugMessageBox("Unable to load data from Artifact Tracker.esp, the mod is disabled.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preloading item lists
|
|
||||||
|
|
||||||
std::map<std::string, bool> settings {
|
std::map<std::string, bool> settings {
|
||||||
{ "DumpItemList", false },
|
{ "DumpItemList", false },
|
||||||
};
|
};
|
||||||
LoadINI(&settings, "Data/SKSE/Plugins/ArtifactTracker.ini");
|
LoadINI(&settings, "Data/SKSE/Plugins/ArtifactTracker.ini");
|
||||||
|
|
||||||
|
// Preloading item lists
|
||||||
|
|
||||||
g_artifactFormTypes.insert(RE::FormType::Weapon);
|
g_artifactFormTypes.insert(RE::FormType::Weapon);
|
||||||
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectWEAP>()) {
|
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectWEAP>()) {
|
||||||
if (form->GetPlayable() && !form->IsBound() && !form->weaponData.flags.all(RE::TESObjectWEAP::Data::Flag::kCantDrop) && !form->IsDeleted()) {
|
if (form->GetPlayable() && !form->IsBound() && !form->weaponData.flags.all(RE::TESObjectWEAP::Data::Flag::kCantDrop) && !form->IsDeleted()) {
|
||||||
@ -86,14 +84,14 @@ namespace ArtifactTracker
|
|||||||
|
|
||||||
g_artifactFormTypes.insert(RE::FormType::Book);
|
g_artifactFormTypes.insert(RE::FormType::Book);
|
||||||
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectBOOK>()) {
|
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectBOOK>()) {
|
||||||
if (!form->TeachesSpell() && !form->IsDeleted() && (form->HasKeyword(recipeKeyword) || form->HasKeyword(extraArtifactKeyword) || BookCheck::IsBook(form)) && !form->HasKeyword(notArtifactKeyword)) {
|
if (!form->IsDeleted() && (form->HasKeyword(extraArtifactKeyword) || (!form->TeachesSpell() && BookCheck::IsBook(form))) && !form->HasKeyword(notArtifactKeyword)) {
|
||||||
g_artifactMap[form->formID] = form;
|
g_artifactMap[form->formID] = form;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_artifactFormTypes.insert(RE::FormType::Misc);
|
g_artifactFormTypes.insert(RE::FormType::Misc);
|
||||||
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectMISC>()) {
|
for (const auto& form : dataHandler->GetFormArray<RE::TESObjectMISC>()) {
|
||||||
if (form->GetPlayable() && !form->IsDeleted() && (form->HasKeyword(extraArtifactKeyword) || !form->HasKeywordInList(excludeKeywords, false)) && !form->HasKeyword(notArtifactKeyword) && strlen(form->GetName()) > 0) {
|
if (form->GetPlayable() && !form->IsDeleted() && (form->GetNumKeywords() == 0 || (!bKID && form->HasKeyword(extraArtifactKeyword)) || (bKID && (!form->HasKeyword(notArtifactKeyword) || form->HasKeyword(extraArtifactKeyword)))) && strlen(form->GetName()) > 0) {
|
||||||
g_artifactMap[form->formID] = form;
|
g_artifactMap[form->formID] = form;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ namespace ArtifactTracker
|
|||||||
extern std::unordered_map<RE::FormID, RE::TESObjectREFR*> g_persistentMap;
|
extern std::unordered_map<RE::FormID, RE::TESObjectREFR*> g_persistentMap;
|
||||||
extern RE::TESObjectREFR* g_cellStorage;
|
extern RE::TESObjectREFR* g_cellStorage;
|
||||||
|
|
||||||
bool Init();
|
bool Init(bool bKID = false);
|
||||||
|
|
||||||
bool IsArtifact(const RE::TESForm* a_item);
|
bool IsArtifact(const RE::TESForm* a_item);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ auto EventListener::ProcessEvent(
|
|||||||
-> RE::BSEventNotifyControl
|
-> RE::BSEventNotifyControl
|
||||||
{
|
{
|
||||||
if (a_event->eventName == "KID_KeywordDistributionDone") {
|
if (a_event->eventName == "KID_KeywordDistributionDone") {
|
||||||
ArtifactTracker::Init();
|
ArtifactTracker::Init(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return RE::BSEventNotifyControl::kContinue;
|
return RE::BSEventNotifyControl::kContinue;
|
||||||
|
Loading…
Reference in New Issue
Block a user