From e6fdde028eb01ab7ae459dd1aa71e822ace75e7c Mon Sep 17 00:00:00 2001 From: MetricExpansion <> Date: Mon, 10 Oct 2022 21:48:48 -0700 Subject: [PATCH] Create body slot policy native funcs --- .../skyrimoutfitsystem_english.txt | Bin 19116 -> 21126 bytes src/OutfitSystem.cpp | 48 +++++++++++++++++- src/papyrus/skyrimoutfitsystemnativefuncs.psc | 3 ++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/mod_files/interface/translations/skyrimoutfitsystem_english.txt b/mod_files/interface/translations/skyrimoutfitsystem_english.txt index 5192b46936f78a6f0228caed022539e0e6cf3f1d..375c9f79dd262b3a6604403fe2c459201873974d 100644 GIT binary patch delta 293 zcmZ28m9cFp(armor); if (pFullName) data.armorNames.emplace_back(pFullName->fullName.data()); @@ -364,6 +363,39 @@ namespace OutfitSystem { return result; } }// namespace BodySlotListing + namespace BodySlotPolicy { + std::vector BodySlotPoliciesForOutfit(RE::BSScript::IVirtualMachine* registry, + std::uint32_t stackId, + RE::StaticFunctionTag*, + RE::BSFixedString name) { + std::vector result; + auto& service = ArmorAddonOverrideService::GetInstance(); + auto& outfit = service.getOutfit(name.data()); + for (const auto policy : outfit.slotPolicies) { + result.emplace_back(SlotPolicy::g_policiesMetadata.at(static_cast(policy)).translationKey()); + } + return result; + } + void SetBodySlotPoliciesForOutfit(RE::BSScript::IVirtualMachine* registry, + std::uint32_t stackId, + RE::StaticFunctionTag*, + RE::BSFixedString name, + std::uint32_t slot, + std::uint32_t policy) { + auto& service = ArmorAddonOverrideService::GetInstance(); + auto& outfit = service.getOutfit(name.data()); + outfit.setSlotPolicy(static_cast(slot), static_cast(policy)); + } + void SetBodySlotPolicyToDefaultForOutfit(RE::BSScript::IVirtualMachine* registry, + std::uint32_t stackId, + RE::StaticFunctionTag*, + RE::BSFixedString name) { + auto& service = ArmorAddonOverrideService::GetInstance(); + auto& outfit = service.getOutfit(name.data()); + outfit.setDefaultSlotPolicy(); + } + + } namespace StringSorts { std::vector NaturalSort_ASCII(RE::BSScript::IVirtualMachine* registry, std::uint32_t stackId, @@ -1088,6 +1120,20 @@ bool OutfitSystem::RegisterPapyrus(RE::BSScript::IVirtualMachine* registry) { "SkyrimOutfitSystemNativeFuncs", BodySlotListing::Clear); } + {//body slot policy + registry->RegisterFunction( + "BodySlotPoliciesForOutfit", + "SkyrimOutfitSystemNativeFuncs", + BodySlotPolicy::BodySlotPoliciesForOutfit); + registry->RegisterFunction( + "SetBodySlotPoliciesForOutfit", + "SkyrimOutfitSystemNativeFuncs", + BodySlotPolicy::SetBodySlotPoliciesForOutfit); + registry->RegisterFunction( + "SetBodySlotPolicyToDefaultForOutfit", + "SkyrimOutfitSystemNativeFuncs", + BodySlotPolicy::SetBodySlotPolicyToDefaultForOutfit); + } {// string sorts registry->RegisterFunction( "NaturalSort_ASCII", diff --git a/src/papyrus/skyrimoutfitsystemnativefuncs.psc b/src/papyrus/skyrimoutfitsystemnativefuncs.psc index dbe69bd..a67c05c 100644 --- a/src/papyrus/skyrimoutfitsystemnativefuncs.psc +++ b/src/papyrus/skyrimoutfitsystemnativefuncs.psc @@ -75,6 +75,9 @@ Bool Function GetOutfitPassthroughStatus(String asOutfitName) Global Native Function SetOutfitPassthroughStatus(String asOutfitName, Bool abPassthrough) Global Native Bool Function GetOutfitEquipRequiredStatus(String asOutfitName) Global Native Function SetOutfitEquipRequiredStatus(String asOutfitName, Bool asEquipRequired) Global Native +String[] Function BodySlotPoliciesForOutfit(String asOutfitName) Global Native + Function SetBodySlotPoliciesForOutfit(String asOutfitName, Int aiSlot, Int aiPolicy) Global Native + Function SetBodySlotPolicyToDefaultForOutfit(String asOutfitName) Global Native String Function GetSelectedOutfit (Actor actor) Global Native Bool Function IsEnabled () Global Native String[] Function ListOutfits (Bool favoritesOnly = False) Global Native