diff --git a/mod_files/interface/translations/skyrimoutfitsystem_english.txt b/mod_files/interface/translations/skyrimoutfitsystem_english.txt index 5192b46..375c9f7 100644 Binary files a/mod_files/interface/translations/skyrimoutfitsystem_english.txt and b/mod_files/interface/translations/skyrimoutfitsystem_english.txt differ diff --git a/src/OutfitSystem.cpp b/src/OutfitSystem.cpp index 449ddcd..fcfb7df 100644 --- a/src/OutfitSystem.cpp +++ b/src/OutfitSystem.cpp @@ -314,7 +314,6 @@ namespace OutfitSystem { data.bodySlots.push_back(i); data.armors.push_back(armor); {// name - // TESFullName* pFullName = DYNAMIC_CAST(armor, RE::TESObjectARMO, TESFullName); auto pFullName = skyrim_cast(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