Change Log History - kinggath/WorkshopFramework GitHub Wiki

1.0.1 - Post Launch Quick Fix

  • Eliminated all vanilla edits to forms. Now the only edits are to the Workshop Scripts, this should fix incompatibilities with multiple mods that were editing the WorkshopParent quest properties.
  • Adjusted Settler injectable Actor record to inherit the Base Data and Spell List from NPCs sent to it. This will allow mods to inject named settlers and handles a corner case introduced by Far Harbor.
  • Fixed an issue where assigning an NPC to a vanilla crop would fail to assign them to additional crops forcing you to assign each crop one at a time.
  • Fixed an issue that could prevent items from being consumed which would negatively affect happiness.
  • Put in a temporary fix to allow the mod Unique NPCs to work. Will add a better method for a mod like it to be injected in the future.

1.0.2 - Hotfix

  • Fixed an infinite loop bug found in the UFO4P code.

1.0.3 - Happy Robots

  • The same temporary fix used for the mod Unique NPCs, will now also apply to the mod Better Settlers.
  • Reduced log output during production in WorkshopFramework.log to make it easier to analyze.
  • Fixed a bug with the Food and Water detection which could result in happiness penalties.
  • Fixed a bug in food and water production.
  • Fixed a bug with the Robot Happiness code, you will likely need to visit each settlement that was affected for the fix to take place. Though first try sleeping 24 hours to see if it resolves itself remotely.
  • Fixed several issues with Interior workshops in player homes.
  • Fixed compatibility issue with the mod Basement Living.

1.0.4 - Happy People

  • Fixed an issue that could cause food and water to overproduce.
  • Restored the vanilla function signature for SetUnassignedPopulationRating and created a new version of the function for UFO4P’s alternate call.
  • Fixed an issue with the Adjust Max NPCs by Charisma setting.
  • WSFW should now work correctly with Northland Diggers and other mods that altered the WorkshopParent food types array.
  • Fixed several issues that could occur with production for some players.
    • Note that this may result in an excessive amount of resources that were stuck in the queue suddenly appearing in your workbenches, even beyond the vanilla max storage values. Any production that was meant to occur since you installed 1.0.3, will likely have ignored the storage values and been queuing up this whole time. Enjoy the freebies!
  • Fixed a bug with Happiness that could cause players to lose control of settlements.
    • In order to rectify this, you will need to either wait for a Radiant quest to help the settlement again OR you can use the new WSFW tool to Claim Settlement. It is available in MCM as well as the holotape.
  • Added new MCM/Holotape control to disable the Lose Control of Low Happiness Settlements part of the workshop gameplay.

1.0.4a

  • Fixed an issue where settlements with no food or no water could have their happiness constantly climbing up and down each day.
  • Fixed an issue with the scrap threading code so that it will correctly disconnect linked items and prevent them from becoming persistent.

1.0.4b

  • Added code to reset the workshops array on ResourceManager as a one time patch run. Something had caused the workshops array to be added to it twice.
  • Added code to prevent the same workshop ending up in the array twice.

1.0.4c

  • Removed a debugging line that ended up causing resource calculation to fail.

1.0.5 - Better Locks and Threading

  • Switched to Utility.WaitMenuMode for the locking mechanism in all control quests.
  • GetLock on all quests extended from LockableQuest now use a variable wait time. Rather than waiting 0.1 seconds, before the loop starts, a random value between 0.10 and 0.50 is assigned as the wait time, then each loop that the lock is still being held that much time will be allowed to pass. This should greatly reduce the likelihood of a quest becoming dead-locked due to an excessive number of simultaneous calls.
  • GetLock on all quests extended from LockableQuest now have an auto-clearing lock feature after a request has lasted a certain amount of time, any extending quest may override the total wait time. The default time is currently very long (between 10 and 50 seconds - see previous change to wait time), and is not expected to be hit unless a large burst of requests come in that cause the quest to essentially become dead-locked.
  • Added more streamlined version of the batch object creation code to the API.
  • Thread_PlaceObject now has a bFadeIn property. When set to false, and bStartEnabled = true, the item will pop into existence - this is much faster than fading.
  • API calls to create settlement objects will use the new bFadeIn property to ensure the items are created as quickly as possible.
  • HUDFramework Wrapper will now return on all functions if it is not installed, rather than allowing the calls to error out.
  • WorkshopResourceManager now uses a queue to handle resource objects built in remote settlements. Before it was using an edit lock function in the WorkshopObjectBuilt event handler - which when hit with something like a Sim Settlements City Plan or Transfer Settlements blueprint would completely lock up.
  • Added WorkshopObjectManager quest to handle special case workshop objects that require a lot of handling. In the future, this will be used to centralize some of the things currently being handled by events on individual objects via WorkshopObjectScript - which can end up causing bursts of threaded activity which can occasionally put too heavy a load on the VM.
  • Added WorkshopObjectScript extended script called InvisibleWorkshopObject. This allows for creating workshop objects that act as handles for something that is normally invisible, such as Animation Markers. The InvisibleWorkshopObject has a new field called ControlledObjectForm which will hold the base form of the item that should remain visible - a reference of this will be created when the InvisibleWorkshopObject is placed. The InvisibleWorkshopObject will automatically disappear when the player exits workshop mode, leaving the ControlledObject it spawns enabled.
  • Added new Holotape/MCM option to disable the Shelter Mechanic so that you no longer receive happiness penalties from not having a roof over your beds.
    • The Shelter Mechanic is a system in the base game that is very buggy. For many users, this system does not correctly detect roofs and it can feel like the happiness penalty is permanent no matter where beds are.

1.0.6 - Scrap Crash Prevention

  • Added new argument to AssignmentRulesOverridden CustomEvent, the new 4th argument includes the last item to be assigned. This will allow handlers to decide if they want to prioritize maintaining the last requested assignment or not.
  • Argument 0 of AssignmentRulesOverridden will now be WorkshopCaravanKeyword instead of None when the rule is for overriding caravan unassignment. Handlers will need to test casting as a keyword or a WorkshopObjectScript to determine what was overridden.
  • Added new function UnassignActor_Private_SkipExclusionsV2, which replaces UnassignActor_Private_SkipExclusions (old version now points to the new for backwards compatibility). The new version adds a field to accept the last assigned form (either the workshopObjectScript or WorkshopCaravanKeyword), so that if an unassign exclusion is triggered, the AssignmentRulesOverridden event will have the information it needs.
  • Thread_ScrapObject now tests objects before deleting them to ensure they don’t have the keywords/AVs that could potentially include them in the power grid.

1.0.7 - “Last” Bug Squashed

  • Fixed a bug where some players would stop recruiting new settlers beyond 10 at their settlements.
  • Added a new option called “Consume Basic Resources Only”.
    • This makes settlers only consume Purified Water and vanilla crop foods daily. By default, settlers are allowed to eat any type of food or water, which can lead them to consume rarer resources.
  • Added a new option to enable/disable the Workshop Tutorial Messages.
    • Note that once disabled, enabling again will reset all of the tutorial messages as if you haven’t seen them yet.

1.0.8 - Message Queue

  • Altered functions involved with consuming workshop resources in WorkshopProductionManager. There is now a V2 of each of them that accepts an argument abCheckOnly for the sake of simply testing if enough resources exist without actually consuming them.
  • Added GetContainerKeyword and GetContainerForItem functions for querying for the container to use based on the workshop and base item that would be involved with that container.
  • Added ResourceShortage system.
    • ResourceShortages are a way for mods to report that a settlement resource is too low. This gives a centralized location for mods to check for additional needs in a settlement beyond the normal rules governing settlements (ie. Food must be higher than population, Defense must be higher than food+water, etc).
      • This could be used for things like reports, or dynamic systems like auto-assignment, or dynamic resource generation/construction. Ex. Sim Settlements could use this information to prioritize which plots/work objects to build first from a City Plan.
    • To report a shortage, call RegisterResourceShortage(WorkshopScript akWorkshopRef, ActorValue aResourceAV, Float afTargetWorkshopValue) on WorkshopResourceManager.
      • Note that afTargetWorkshopValue is the total value it should have for that shortage to be considered resolved. Ex. If your mod logic requires settlement food be at 40 to no longer be considered short, you would send WorkshopResourceManager.RegisterResourceShortage(someWorkshopRef, FoodAV, 40.0).
      • Only the highest shortage for each AV is stored. For example, if you report a shortage of 2 food, and another mod reports a shortage of 4 food, the shortage of 4 will take priority. If a higher shortage already exists, RegisterResourceShortage will return false, otherwise it will return true. (Note it will also return false if akWorkshopRef or aResourceAV are None)
    • ResourceShortages will be tested after new workshop objects are built, on demand when WorkshopResourceManager.UpdateResourceShortages(WorkshopScript akWorkshopRef) is called, and daily on a timer.
      • The test checks for two things: Is the shortage resolved, has the shortage expired.
        • A shortage is resolved if the workshop’s AV matches or exceeds the amount reported as needed.
        • A shortage expires after 2 in-game days. This is to ensure that a shortage doesn’t become permanent if circumstances change and the mod that registered doesn’t correctly refresh the shortage.
          • Registering the shortage again will refresh it. Mods should plan on re-registering shortages periodically, or reacting to the ResourceShortageExpired event in order to ensure their shortages remain relevant.
    • Only the largest shortage for each AV is stored.
    • Once a shortage is resolved a custom event (ResourceShortageResolved) will be fired with the workshop, ActorValue, and current value of that AV. Mods can register for this Event to react to the resolution.
    • Once a shortage expires, a custom event (ResourceShortageExpired) will be fired with the workshop, ActorValue, and current value of that AV. Mods can register for this Event to react to the expiration (perhaps by re-registering the shortage if it still exists according to the mod’s gameplay logic).
  • ScrapObject thread will now move items deep below the world before enabling them to test for AVs to hide this from the player.
  • Added a MessageManager quest which allows the player to control circumstances when messages show up. Many workshop messages have been routed through this system, and any mod may make use of it as well to display their own messages.
    • If a message is sent and the player’s settings are set to suppress that message, for example - they can arrange so messages don’t come up during combat, they will instead be queued.
    • Depending on the player’s settings, Queued messages will either be displayed shortly after circumstances allow them to, or when triggered to display via a holotape control.
    • All raid messages from the base game are routed through this system.
  • Filled the missing script properties in the APIQuest.

1.1.0 - Settlement Control

  • Added new WorkshopControlManager quest.
    • This allows for easily assigning control of a settlement to a particular faction. This includes things like transferring ownership of turrets, removing or changing settlers, changing supply lines, capturing containers, and more.
  • Added new AssaultManager quest.
    • This provides a simple method to generate custom raids and player lead assaults on settlements without having to do much quest setup to manage the details.
    • Works with WorkshopControlManager to offer options for these to result in faction control changing based on the results.
  • Fixed a bug that could cause the production code to fail to cleanup certain data it no longer needs.
  • Fixed a bug that could prevent fertilizer from being produced in settlements.

1.1.1 - Assault Cleanup

  • Assault quests will now correctly fail and clear out of the quest log when failure conditions are met.
  • Attackers and Defenders that need to be killed in order to complete Assault quests will now have protected status cleared.
  • Added bForceDefendersKillable and bForceAttackersKillable options to the Assault quests which allow for toggling the Protected status off during Assaults.
  • Defenders during a Subdue assault, will no longer remain in the RemainingDefenders alias, which will prevent them from tracking via quest markers when a certain percentage are down.

1.1.2 - More Assault Fixes

  • Assault quests should now permanently change the aggression and allegiance of spawned defenders so they don’t attack settlers or animals after the assaults end.
  • Assault quests will now automatically clear any objectives if the quest is stopped for any reason.

1.1.3 - Assault Fixing Continues

  • Captive, Caravan, and non-workshop NPCs will no longer be required to be defeated to complete Assaults. This should eliminate an issue where an assault could become stuck if the wrong type of NPC ended up in the list of defenders.
  • Attackers on assaults will now be removed from the default Crime Faction for that settlement, which will fix an issue where the attackers could end up turning on the player as well.

1.1.4 - WorkshopNPCScript

  • Added PreventLooting script which can be added to forms to force an object to return to where it was originally or just be deleted if the player loots it. This is particularly useful for book type objects that mods are using to display information via script, but don’t want the player keeping the item.
  • The NPC flagged as the settlement leader can now longer be made immortal during an assault unless they are a settler type.
  • Added WorkshopNPCScript to WorkshopFramework.
    • Currently only makes a few small changes - will likely enhance further in a future patch.
    • Most useful change is that there is now a custom event on WorkshopParent called WSFW_WorkshopNPCTransfer which is triggered by WorkshopNPCScript when the player transfers an NPC between settlements. Previously there was no way to know this other than to monitor every single settler individually for its OnWorkshopNPCTransfer event.

1.1.4a

  • Cleaned a wild edit on quest COMPreston.
  • Fixed a problem with PreventLooting script.

1.1.5

  • Added new bForceWorkshopItemLink property to the Thread_PlaceObject. This is true by default.
    • This was added so that not all items have to automatically linked to the workshop if sent.
    • If set to false, the created item will only be linked if it has the WorkshopObjectScript (or extended version) or if it has WorkshopResourceObject > 0. Since script type checks and av checks can only be checked after an objectreference has been created, this allows for scripts using this threading system that only need the link in these specific scenarios, to use the threading asynchronously.
  • Added Message suppression options to the holotape, previously these had only been available via MCM.
  • Added bApplyDrawCount and bApplyTriCount properties to Thread_PlaceObject. These are false by default.
    • When set to true, if the placed object have the corresponding WorkshopCurrentDraws or WorkshopCurrentTriangles AVs set, these will be applied to the workshop which will update the build limit meter.
    • This is disabled by default because each of these adds an additional query to the item and two more to the workshop ref, which means they are going to slow the thread. In other words, these should not be used for large batch operations.

1.1.6

  • Turrets will now be added to the defending faction during assaults.
  • Turrets are now checked based on the ActorTypeTurret keyword rather than searching for a particular script. This will make the system more reliable in detecting which found objects are actually turrets.

1.1.7

  • Added a small loop at the quest startup phase for the library quest script “ControllerQuest” to ensure that the PlayerRef property has filled. After a lot of testing, it was determined that properties can fail to load on startup if too many things are referencing them. This while loop will ensure none of these controller quests fail their expected operations due to missing properties.
  • Improved Enter/Exit settlement detection so it will be more responsive and less likely to fire false positives.
  • ResourceManager will now call RecalculateWorkshopResources on the workshop instead of manually adding the values if the location is loaded when ApplyObjectSettlementResources is called. This will ensure the resources are updated without double-counting things.
  • Fixed a bug in the HUDFramework wrapper code that would result in the SendCustomMessage function to fail.
  • Assaults will now correctly clean up NPCs that were spawned as attackers and defenders after the assault quest has been shut down.
  • Attackers and Defenders spawned by assaults should no longer be hostile towards domestic animals.
  • Altered Assault factions slightly to prevent attacking defenders to cause the player to become permanently hostile with all NPCs living at that settlement.
  • Added new AV WSFW_Safety.
    • By default, the game treats the Safety value on unowned workshops as 0. Which ends up causing things like happiness calculations to be incorrect. Even manually setting Safety to another value is ignored.
    • WSFW_Safety value be automatically updated whenever Safety is updated on a workbench, and whenever GetValue(Safety) or GetBaseValue(Safety) is called on a workbench WSFW_Safety value will be returned if the workbench is unowned. The same treatment has been applied to ModValue, SetValue, RepairValue, and DamageValue.

1.1.8

  • Added new AV called WSFW_PowerRequired, this is a resource type so it will be auto-applied to the workbench. This will allow mods to call GetBaseValue(WSFW_PowerRequired) to determine the total power needs in a settlement.
  • Fixed a bug where removed workshop objects would not have their stats updated correctly in the pipboy until after you returned to the settlement.
  • Improved detection of settlement enter/exit to help the PlayerEnteredSettlement and PlayerExitedSettlement events fire more accurately.

1.1.9

  • Added new field to AssaultSettlement script: bAutoShutdownQuest.
    • This defaults to true and triggers the timer that shuts down the quest 10 seconds after completion conditions are reached.
    • This allows other scripts to stop the auto-shutdown (they will be responsible for handling the shutdown), which is useful when large amounts of processing needs to be done before surviving NPCs are restored from bleedout in a subdue raid.
  • The code that was mentioned in the 1.1.8 build to improve detection of settlement exit/enter events is now actually in place.
  • MasterQuest library script will now clear the PreviousLocation or LatestLocation alias if the corresponding location is None. This should happen in wilderness cells which might not have a location record associated with them.

1.1.10

  • WSFW_WorkshopNPC is now flagged as protected. Previously this was set up to inherit the protected flag from the leveled character list, but that appears to be bugged at the engine level.
  • Changed the myFurnitureMarkerRefs to a property so that extended scripts can access it.
  • Fixed a bug with the Assault Settlement system that could cause an assault quest to get stuck under certain circumstances.
    • Any currently stuck assaults should resolve themselves shortly after this patch is installed.
  • Defend quests now have a map marker that will show up when the player is more than 2000 units away from the settlement’s center.
  • Incorporated workshop script changes from UFO4P 2.1.0.
  • Now compatible with the following settler altering mods: Unique NPCs, Better Settlers, Spawnable Unique Settlers, Orphans of the Commonwealth, Lots More Settlers and Enemies, Beautiful Female Settlers.
    • If you have an additional mod that alters the Settlers leveled list that is not listed here, please message me and I will ensure compatibility for a future update.

1.1.11 (global version 25)

  • “New Settlers A Plus Overhaul Vanilla” added to compatibility list.
  • Fixed a bug that would prevent akPositionRelativeTo argument in CreateObjectImmediately function from the API from working correctly.
  • Added new function to the NPCManager quest called GetSettlerForm which can be used to get the ActorBase record a settlement should use for generating settlers based on all game rules WSFW is managing.
  • Added new utility function: WorkshopFramework:UtilityFunctions.CheckForPlugin which allows for calling Game.IsPluginInstalled and automatically also checking for esl/esm versions of a plugin.
  • Added new globals that are set to 1 if certain plugins are installed. Currently these are configured for all 6 DLC.
    • This was done to make it easier to place a Condition on various things based on the availability of certain plugins.
    • In the future, this list may be expanded to include community mods and Creation Club content.
  • Added new utility function: WorkshopFramework:UtilityFunctions.CleanFormListRecursively which will clear out any missing entries in a formlist and also recurse through any sub-formlists and clean them as well.
  • Added new Workshop Menu Manager which handles registration of workshop menus and automatically cleans any broken workshop menus when the game is loaded.
    • No need for uninstall chems ever again.
    • Any mod using Workshop Framework as a master can duplicate the WSFW_MenuInjectionTemplate quest and fill out the script property to inject their new menus safely.

1.2.0 (global version 26)

  • Added Manage alternate activation option to settlement workbenches.
    • This brings up a menu with additional options to handle things in that settlement.
    • Settlement Layout: This brings up the Settlement Layout system menu (see below for description).
    • Scrap Settlement: This will scrap all items linked to the settlement on the WorkshopItemKeyword (effectively, anything the player built, as well as any vanilla resource type objects such as assignables and workbenches).
    • This alternate activation can be disabled in the MCM Menu and the Workshop Framework Controls Holotape.
  • Added new Settlement Layout system for importing/exporting settlement designs.
    • Allows for exporting settlement designs to a log file which can be converted online to a mod that can be shared with others for import. https://www.simsettlements.com/layoutcreator.php
    • Import can be used on PC and Xbox.
    • Export is PC only and requires F4SE, and Papyrus logging to be enabled.
    • This system is available by choosing the new Manage alternate activation option on settlement workbenches.
    • This system can also be accessed by standing in a settlement and using the Manage Workshop Menu option from MCM > Workshop Framework > Tools, or in the Workshop Framework Controls Holotape under Tools.
    • Layouts can be refreshed once applied from the same menu. Doing so will rebuild all items from the layout.
    • Layouts support scrap profiles to allow for targeted scrapping of items.
    • Built in support for Sim Settlements version 4.2.5 or higher.
    • Web Tool can convert Workshop Framework exports to Transfer Settlements Blueprints for use with that system.
    • Web Tool supports Transfer Settlements Blueprints as well as Workshop Framework exports.
    • Layouts do not enforce mod requirements, but instead warn the player of missing mods before they choose to use a layout. This allows for using layouts with missing mods to get the layout’s items that are installed.
  • Altered MCM Menu and Holotape to better organize the options available.
  • Added Max Threads control for adjusting the available thread counts WSFW’s threading engine will make available.
  • Added new Progress Bar system which allows easily displaying progress bars for anything without needing to do any Flash work.
    • Interfaces with HUDFramework automatically.
    • Allows sending a label for the progress meter, as well as a small flash (swf) file to act as the icon (display size is very small, approximately 30 x 30; supports animated swfs so long as they are set to autoplay)..
  • When F4SE is installed, any objects Workshop Framework is used to scrap will have attached wires cleaned up for as well.
  • Scrapping handled by WSFW will now correctly call OnWorkshopObjectDestroyed as a function to any workshop objects. This will not actually trigger the event, but will run the corresponding code defined on those items to ensure they clean up extra pieces.

1.2.0a (global version 27)

  • Fixed Max Threads setting in the MCM config file.
  • Added Max Threads controls to the holotape.
  • Fixed a bug where F4SE was not being detected fast enough for some quests.
  • Added settler mod “Facials” (despite the name, it’s not a porn mod…) to the exception list for settler overrides.

1.2.0d (global version 28)

  • Thread runners will now clear their lock and attempt to process the queue on game start to ensure they are never locked out by uninstalled mods that had used the threading engine.

2.0.0 (global version 29)

  • Added new UIManager quest. This will be used for things related to user interaction, specifically useful framework code for common things that need to be done in mods.
    • UIManager can dynamically present a barter window as a select screen to allow the player to choose from a large number of options. This is useful for dynamic menus or when multiple simultaneous selections need to be made. This functionality is available in multiple forms, each resulting in a Custom Event being fired after the player has finished letting the calling mod know it can retrieve the selection. To make use of this system, see the functions with BarterSelectMenu in the name for usage, and define a catch for event “BarterSelectMenu_SelectionMade” which is called in the function ProcessBarterSelection.
    • UIManager also has a function “ShowSettlementBarterSelectMenu”, which accepts an optional argument to override the vendor name, and another to exclude an array of settlements. This will display all settlements the player has installed as a barter select menu. Once they finish selecting settlements, the custom event Settlement_SelectionMade will be fired returning a callback ID, number of selected settlements and an entry for each selected settlement, up to a max of 126.
  • PlaceObjectManager now includes code for creating grids of objects via CreateObjectGrid. When the function is called, a callback ID will be returned. When all creation is complete, a custom event “GridCreated” will be fired with the callback ID for reference.
  • SettlementLayoutManager now fires an event called ExportStarting, any script may call PreExportHold to tell WorkshopFramework to delay the export, once the caller is done with preparation, it should call PreExportHold(true) to release the hold. This will give mods that need it time to do any background work before an export occurs.
    • To prevent a mod from breaking the user experience, If any hold lasts more than 30 seconds, the exporter will ignore all holds and continue.
  • Added ClaimAllSettlements code to MainQuest script, this unlocks all fast travel points and claims ownership of all settlements. Ideal for setting up test saves or for people who want to get straight to settlement building in a fresh save.
    • This can be accessed from the Tools section of MCM/Holotape.
  • Added a new set of story manager quests called FetchLocationData. These can be used to grab location refs for a location. Currently they just support MapMarker but can easily be expanded to grab additional common location refs.
  • Added GetMapMarker function to the WSFW_API script, this leverages the FetchLocationData story events to grab a map marker from a single function call.
  • Added UpdatePowerUpPhaseStatus function to SettlementLayoutManager, this allows external calls to flag the power up phase as incomplete so that corresponding programatic calls to refresh the layout will correctly re-run the power.
  • Layout Refresh now delays the build phase until after scrapping is complete, this should reduce the amount of time the threading engine stays at max capacity.
  • Added new DoorManager quest. This will allow the player to enable auto closing/opening doors.
    • This system is disabled by default and can be turned on in the MCM/Holotape settings.
    • Once enabled, each time a settlement is visited, all settlement doors will be registered in the system, and any workshop built doors will be added as they are built.
    • Options are available to auto open and close doors on workshop mode enter/exit.
  • Added new library script called ProtectedObjectRef. This is an extension of the LockableObjectRef which extends ObjectReference.
    • Using this as a base for an object overrides the default Disable and Delete functions adding in a boolean check before they will successfully run the native behavior. The intention of this is to prevent scripts from other mods accidentally disabling or deleting important data.
    • These booleans can be set to true by first calling AllowDisable and Allow Delete to enable the usage of Disable and Delete, respectively.
  • Added WorkshopFramework:ObjectRefs:RealInventoryDisplay script. These allow for configuring a series of RealInventoryDisplayPoint objects for showing inventory from the settlement’s vendor containers.
    • RealInventoryDisplayNodes allows for defining the points at the nif level whereas RealInventoryDisplayData allows for defining the points in relative 3d coordinates.
    • RealInventoryDisplayPoint objects are simple activators with the WorkshopFramework:ObjectRefs:RealInventoryDisplayPoint script attached. It accepts one property which is a formlist of all eligible items that can be displayed at that point.
    • Whenever the player purchases items that are displayed, they will be removed from display and new ones will take their place if the vendor has additional eligible objects for sale.
  • Added quest to hook into the new Canary Save File Monitor mod for monitoring for save file data loss.
  • Fixed a bug where immediately after installing Workshop Framework until the next time the save was loaded, settlers could be spawned as rad roaches.
  • Fixed a bug that could prevent Workshop Framework from detecting HUDFramework if the two were not installed at the same time initially.
  • Threading engine will now check for stuck threads during game load to ensure none of the threads becomes permanently backed up.
  • Added WorkshopFramework:Library:ObjectRefs:ExportExtraData script for easily adding extra data to objects without having to do any explicit coding.
  • Placing objects with the InvisibleWorkshopObject script attached will now correctly evaluate whether the player is in workshop mode when placed via scripts rather than by the player.
  • Rewrote large portions of all of the Workshop related scripts to support the possibility of NPCs without the WorkshopNPCScript applied being recruited into the settler system. This will allow for dynamic support for all NPCs to become settlers. The goal is not for WorkshopFramework to add such gameplay, only to make it possible for other mods to achieve without vanilla edits.
    • This was done after determining that none of the gameplay mechanics at engine level required the script, and that everything was controlled by keywords, actor values, and other systems that could be run without the WorkshopNPCScript.
  • Greatly expanded the WorkshopFramework:WorkshopFunctions API. This now includes tons of alternate versions of functions from various workshop scripts, as well as new utility functions to handle common tasks.
    • These can be used to reduce load on the WorkshopParentScript, which currently sees the vast majority of traffic in the system and can cause a bottleneck.
    • These also provide alternate signatures for many functions to expand control and eliminate the WorkshopNPCScript requirement many functions have.
  • The default settler AI packages will now only be applied when an NPC is first added to a settlement, and will not be reapplied when they are transferred to a different settlement.
    • This opens up the possibility of mods using the WorkshopFramework:WorkshopFunctions api to remove the default settler AI packages stamp, and apply their own to settlers.
  • Minutemen workshop count will now correctly include outposts and vassals controlled by the Minutemen through mods such as Conqueror.
  • Added WorkshopFramework:ObjectRefs:ClutteredItem script. This allows for establishing positions and formlists of items to be randomly attached to an object when it is spawned, and even re-randomize again whenever the player arrives in the settlement.
  • Added WorkshopFramework:ObjectRefs:DisplayRack script. This allows for creating dynamic display racks for any number of items by defining position and object type data to tell the object where to put those items. These items will then be attached to the object in such a way that they will move with the rack in workshop mode, and can be looted again by the player.

2.0.1 (global version 30)

  • Fixed a bug that could prevent certain startup and location change code from running correctly on quests with multiple scripts attached.
  • Added functions for sending events from WorkshopParent: SendWorkshopActorAssignedToWorkEvent, SendWorkshopActorCaravanAssignEvent, SendWorkshopActorUnassignedEvent.
  • NPCManager quest will now relay assignments that are sent via the WorkshopFunctions API to WorkshopParent.
  • WorkshopParent will now send the WorkshopActorAssignedToWorkEvent when an NPC is assigned to a bed as well.
  • Settlers that are secretly Synths will now be accounted for by the assault system.
  • Fixed a bug that could allow settlers to be auto-assigned to too much food or defense.
  • Fixed a bug that prevented settlers from being correctly marked with food/defense assignment numbers when assigned manually.

2.0.2 (global version 31)

  • Added several missing return statements in various functions. (Thank you EyeDeck!)
  • Fixed a bug that could cause the number of settlers to report incorrectly. This issue would exist in the Unofficial Patch as well and has been reported to their team. (Thank you EyeDeck!)
  • Fixed a bug with workshop consumption related to scrap where it would consume entire junk items rather than first scrapping them to get components. This would not have impacted any known mods yet.

2.0.3 (global version 32)

  • Marked WorkshopParent as a mandatory property on WorkshopNPCScript to ensure mod authors notice this field, as several mechanics break if this is not configured.
  • Fixed a bug that could cause some settlements to fail to correctly establish initial population counts. This could result in Preston failing to give The First Step quest.
    • This bug was only introduced in 2.0.2 and would only affect games started from the New Game screen.
  • NPCManager.CreateNPC will now automatically spawn at the spawn point if the workshop is sent as the akSpawnAtRef argument.
  • WorkshopAddActor event will now fire for all newly added NPCs to a settlement. Previously it would only fire for unique NPCs.
  • Fixed a bug that would prevent the game from correctly auto-assigning an NPC to their max amount of food/defense worth of objects.
  • Fixed a bug where after an NPC that was a farmer or guard is unassigned to those objects they will always require manual individual assignment to each of those objects if attempting to reassign them to that object type later.

2.0.4 (global version 33)

  • Removed obsolete FixSettlerCount calls as this issue should no longer be a problem as of 2.0.2.
  • Fixed a bug with the threaded version of ScrapObject which could result in the item not being correctly scrapped.
  • Settlement Layout objects should no longer be created at the player’s feet, or in the workshop workbench.
  • Fixed a bug that would prevent custom AssignActor functions from being called.
  • Added Build Limit controls to the Manage settlement menu. (thank you pra!)

2.0.5

  • Recompiled all scripts

2.0.6 (global version 34)

  • Fixed a bug where NPCs removed from the workshop system could end up with the workshop factions still applied.
  • Custom Vendor data will now be updated if re-registered with the same ID.
  • Improved dynamic barter select system code.

2.0.7 (global version 35)

  • Invisible Workshop Object scripts will now call the OnRelease event code on any objects they control when UpdateDisplay is called so that any spawned object can be scripted to react to the event.
  • Fixed a bug that could cause an NPC to be assigned to food or defense objects in addition to their other assignment.
  • Fixed a bug that could cause an NPC to be assigned to more and more food/defense objects each time the player returned to a settlement.
  • Fixed a vanilla game bug where creature workshop NPCs that got into a “wander-loop” in their sandbox package could never break free when transferred to a different settlement, so they would stay in the previous one forever.

2.0.8 (global version 36)

  • Vendor factions for custom vendors will now default to the MiscVendorFaction if no other is defined to ensure they have dialogue even if the mod author failed to define one.
  • Changed a utility function (WorkshopFunctions.GetPlayerOwnedSettlements) that fetches all player owned settlements to account for misconfigured mod added settlements that were incorrectly flagged as OwnedByPlayer in the script properties.
  • Added ProduceItemsArray function to WorkshopProductionManager to allow for bulk production in a settlement workbench.
  • UIManager’s Barter Menu system now have several additional optional parameters to increase functionality. Each of the original calls were maintained to ensure backward compatibility and the new parameters were added to a function of the same name with V2 at the end. For example, ShowCachedBarterSelectMenu should now be called as ShowCachedBarterSelectMenuV2.
    • Formlist aStartBarterSelectedFormlist: This accepts a formlist with all of the entries that should start as selected options.
    • Bool abVendorSideEqualsChoice: This reverses the selection so that the vendor side represents the items the player is choosing instead of the player side.
    • Bool abUsingReferences: This flag should be set to true if the items you are sending are unique ObjectReferences instead of just forms.
  • Added “AndWait” versions of the Barter Menu system which allow for simpler use cases that don’t require monitoring for events.
  • Added Message Selector system, which allows presenting the player with a Message Box that has Next, Previous, Select, More Info, and Cancel buttons. This can be found in the UIManager quest - there are two versions: ShowMessageSelectorMenu and ShowMessageSelectorMenuFormlist.
  • Added bEnablePlayerComments field to WorkshopObjectScript. This will allow some workshop items to prevent the player commenting about the item needing power or assignment when the player uses it themselves.
  • Added new TaskManager system. This allows for setting up threads that run their code after a timer, and can be set to have that timer and code repeat X number of times.
  • Added new StoryEventManager system. This allows for centralizing calls for SendStoryEventAndWait, so that the event manager can handle multiple quests that are set up under the same conditions in the Story Manager for redundancy. It will also ensure that if multiple of the exact same request are made, only one Story Event Quest needs to run.
    • Making use of this requires the actual quests that are rigged up to run in the StoryManager use the WorkshopFramework:Library:StoryEventQuest as their extends.
  • Adjusted the way the DoorManager quest works slightly to allow doors that are not part of the workshop system, but appear in settlements to be controlled. To take advantage of this in your mod, add the keyword LinkTerminalDoor to your door, if it is within a settlement bounds and the player has the Door Management enabled it will be used with the system.

2.0.9 (global version 37)

  • Fixed a bug with the inverted Barter Menu system which would prevent all references from being detected as selected by the player.
  • Fixed a bug that was causing a large amount of script log spam from the DoorManager.
  • UIManager “AndWait” barter menu functions now correctly support all arguments.
  • Modified threaded object scrapping to do all of the necessary work without needing to go through a locking function in WorkshopParent. This will dramatically reduce the script lock backups caused by large numbers of scrapping operations handled by WorkshopFramework’s threading system.
  • Added MCM/Holotape tool “Reset HUD Widgets”, which will tell HUDFramework to reload all HUD widgets that were routed through Workshop Framework’s HUDFrameworkManager wrapper layer.
    • This will resolve errors where certain HUDFramework powered HUD elements seem to get stuck visually.
  • Siren’s will now be turned off after the power-up sequence from a Settlement Layout.

2.0.10 (global version 38)

  • Fixed a bug with the inverted Barter Menu system which would result in some options being ignored.
  • Removed several “Identical to Master” records which were causing overrides to Unofficial Patch changes.
  • Fixed a bug that would cause Unique settlers to frequently avoid their assigned objects and instead just sandbox randomly throughout the settlement.
  • Fixed a bug that could cause NPCs to remain assigned to furniture markers for objects that had been scrapped or assigned to someone else. This will not fix previous cases of this, but should prevent it from happening in the future.

2.0.11 (global version 39)

  • Added a new property to the WorldObject struct called fExtraDataFlag, this can be used by any system making use of this structure to store additional information.
  • Settlement Layouts now make use of iExtraDataFlag and a value of 1 will tell it to not link the item as a WorkshopItemKeyword settlement object, and instead will only link them on LinkCustom10 for the sake of being able to retrieve them in the future.
    • There are various use-cases where this can be helpful, and should only be used by advanced users who understand the impact of not linking an object to a settlement on WorkshopItemKeyword.

2.0.12 (global version 40)

  • Added support for Location KeywordData checks through the utility functions.
  • Fixed a bug that was causing the update to workshop build limit from script placed items to use the draw data instead of the triangle count.
  • Added new setting Cap Settlers By Bed Count, which will only allow as many settlers to appear as beds exist. Note that this setting does not increase the default limit max, so building more beds does not bypass things like the Charisma tie-in from the base game.
    • [Sim Settlements Players] Residential plots that are unbuilt do not have beds, so this setting will not work well with them, but SS1 and SS2 also have their own recruitment systems that will generally override this anyway.
  • Vendor produced caps now correctly use the leveled list WorkshopProduceVendorIncome allowing other mods, such as Horizon, to impact this without needing a patch.
  • Fixed a bug in the utility function GenerateRandomizedIntegerRangeArray which would cause it to return an ordered array instead of a randomized one.

2.0.12a

  • Fixed a bug in the utility function GenerateRandomizedIntegerRangeArray which would cause it to not return anything if the range was a single number, when instead, it should have just returned an array with that number.

2.0.13 (global version 41)

  • Changed the scrap threading code to do an additional check to try and identify powered items that may have been in the grid.
  • NPCManager.GetSettlerForm will now confirm that the leveled list injector setup the initial settler records, if not, it will return the default vanilla settler record. This will avoid an issue where before WSFW finished initialization, if it was asked to spawn a settler, it could spawn rad roaches instead.

2.0.14 (global version 42)

  • Altered UtilityFunctions.Mod to use the % operator.
  • Added HexDigit and IntToHex functions to UtilityFunctions script.
  • On load of this patch, all vendor container arrays will be cleaned up of duplicates that may have been created for some players due to a bug in Sim Settlements 2.

2.0.15 (global version 43)

  • Fixed a bug with UIManager.ShowMessageSelectorMenuFormlistAndWait that would cause it to fail.
  • UIManager.ShowMessageSelectorMenuAndWait and UIManager.ShowMessageSelectorMenuFormlistAndWait can now correctly accept ObjectReferences as the aMessageTitleNameHolder argument.
  • Fixed a bug that could prevent a scrap profile from being collected properly during a Settlement Layout export.
  • Fixed a bug when using UIManager’s barter menu system with object references.
  • UIManager’s message and barter menu functions now have an extra parameter available, by using the new V2 or V3 versions of those functions, which will make UIManager hold the call to the function in a loop if another call is still being resolved. This acts as a sort of virtual queue so multiple requests can be made to the system before the previous one has finished, it will simply wait until the previous call is finished before presenting the menu to the player.

2.0.16 (global version 44)

  • NPCs that are completely removed as settlers should no longer be flagged as part of that settlement’s faction. This should prevent an issue where NPCs that turn on the player, such as some main quest companions, will no longer aggro the entire settlement - so long as the NPC is correctly removed from the settlement first.
  • myMapMarker property on WorkshopScript is now exposed so it can be set in the CK. -- This will allow for filling it for settlement’s where the game fails to find the marker on its own, which can happen with certain settlement configurations.
  • WorkshopParent will no longer overwrite the myMapMarker property on workshop’s if the game failed to find the map marker.
  • Updated FetchLocationData quests, which were used for some API functions, to use the StoryEventQuest management system that was added several patches ago.
  • Added new API function: GetLocationCenter which accepts a location, and an optional boolean to accept the map marker if the location center could not be found. This will return the reference for a location with the LocationCenterMarker RefType.

2.0.17 (global version 45)

  • Added LockableWorkshopObjectScript and ProtectedWorkshopObjectScript to the WSFW library of scripts. The former allows for a workshopobjectscript that has locking functions to help prevent race conditions, the latter extends the former and protects the form from deletion by other scripts.
  • Fixed a bug in UIManager.ShowFormlistBarterSelectMenuV3 that would cause all unselected items to be returned to the player instead of disposing them. Added RestartTimer functionality to the task system, this can also be used to change the time on a timer.
  • Extended the set of Filter by Keyword function set by adding FilterByKeywordArray variations that will filter by a match of one or all keywords in the array depending on the abAnyMatch parameter.
  • Added UnregisterMenu function to WorkshopMenuManager, which will safely remove a registered entry to the workshop menus.
  • [F4SE Users] Workshop Framework now has code to repair/reset the power grid.
  • By default, WSFW automatically repairs/resets corrupt power power grids when entering a settlement. These options can be turned off in MCM or the Workshop Framework Controls holotape.
  • Note that when a power grid is repaired or reset, it will prevent the game from crashing due to corrupt power grid nodes, but some of those grids will need to be refreshed to make the power work again visually - such as lights being on. To do this, either rewire something on the grid, or pick up an item in the grid and put it down again.
  • [F4SE Users] MCM and the Workshop Framework Controls holotape have a new section under Tools: Power Grid Tools. This offers four options:
  • Repair Power Grid: This will analyze the local power grid and attempt to remove any invalid nodes so that the power grid functions once more.
  • Reset Power Grid: This removes the local power grid, ensuring all corruptions are eliminated.
  • Scan Power Grid: This will dump the details of the power grid to wsfw_identifier log inside of the Documents\My Games\Fallout4\F4SE\ folder.
  • Force Transmit Power: This will attempt to cause all power involved items to transfer power, triggering animations - this can be useful after running a layout or Sim Settlements City Plan where some of the items failed to power up correctly.
  • MCM and the Workshop Framework Controls holotape now have an option to disable auto-showing invisible objects.
  • Fixed a bug that could cause settlement layouts placement and exporting to stop working after several exports were done in a single save.

2.0.18 (Global version 46)

  • Made slight adjustment to auto-repair power grid code to ensure the entire cell is loaded before the code is run, which should reduce the likelihood of false positives.
  • Power Grid Auto-Destroy and Auto-Repair are now disabled by default.
  • This system is designed to prevent corrupt power grids from causing crashes, and can be turned on for most players. For some players, it is destroying power grids that don’t appear to be corrupt in-game, despite what the code is reporting.
    
  • Fixed a bug that prevented the Workshop Framework settlement vendor injection from functioning correctly. This fix is not retroactive and will only impact settlements the player acquires after this patch.

2.0.18a (global version 47)

  • Some calculations will now be bypassed for settlements with the WorkshopHideHappinessBarAV set, which is used to mark player home workshops (mods that convert these to normal settlements will already have removed this value, thus ignoring this change). This will save a bit of processing time on those settlements from daily update scripts.

2.0.19 (Global version 48)

  • Added new Remote Settlement Recovery tool to the WSFW holotape and the MCM menu. This adds a menu for remotely affecting settlements in various ways. * Currently includes:
  • Reset Location: This is an emergency tool that removes all items in the settlement. The goal is to attempt to fix a crashing settlement location.
  • [F4SE Users] Scan Power Grid: This will attempt to scan and log the power grid, searching for corruptions.
  • [F4SE Users] Repair Power Grid: This will attempt to scan and repair the power grid.
  • [F4SE Users] Destroy Power Grid: This will destroy the power grid. This is meant as an emergency tool if the repair fails. After destroying the grid, players will need to manually rewire and pick up/place down powered items to restore a working grid.

2.0.20 (global version 49)

  • UIManager now supports Messages as a viable naming forms when using the ShowMessageSelectorMenu system.
  • Added ShowMessageSelectorMenuFormlistAndWaitV3, this adds an additional field to the signature: aiStartingIndex, which allows for starting the message loop at a particular index.
  • Fixed a bug in the workshop consumption code that would cause all calls to use resources from the settlement’s caravan network, even if the consumption call explicitly requested to use local resources only. This would only have impacted mods calling the ConsumeFromWorkshop functions.
  • Fixed a bug that would cause settlement vendor injection through Workshop Framework to not correctly reset every 48 hours alongside the default vendor wares.
  • Added new script to library called SimpleInjectionManager. This can be used to inject items from a formlist into a leveled item.

2.0.21 (global version 50)

  • Added boolean to the RecalculateWorkshopResources function to prevent it from running again while a previous call was running.
  • RecalculateWorkshopResources function will now reset the WorkshopItemKeyword link for all settlers. This will fix an issue that can occur with Provisioners or radiant kidnapped settlers where they end up not counting towards the population any longer and can become unassigned from their beds or other work objects.
  • Fixed a vanilla bug that would prevent turning off a Settlement Recruitment Beacon from actually changing the transmission of the radio signal.

2.0.22 (global version 51)

  • Added function FauxPowerWorkshopItem to WorkshopFunctions utility script which will make workshop object self-powered.
  • Added an MCM hotkey option to start workshop mode. Unlike the vanilla game’s button to start the workshop, you won’t have to hold down the button, just press it once.

2.1.0 (global version 53)

  • Added ShowSettlementBarterSelectMenuV2 to UIManager, which adds an additional parameter for telling which settlements to show as pre-selected.
  • Added several sanity checks to avoid log spam in the MainQuest script when a settlement isn’t detected as the current workshop.
  • Fixed a bug with auto closing doors feature that would cause the NPC and Player versions of the settings to act in reverse of what the player set.
  • Fixed a bug that would prevent more than 128 doors found in a settlement from working with the Auto Close Door feature.
  • Fresh Facials and Orphans of the Commonwealth removed from the list of mods to disable injection for. Both of these mods now have patches available to work with the WSFW injection system.
  • Added ShowCachedBarterSelectMenuV4, ShowFormlistBarterSelectMenuV4, ShowBarterSelectMenuV4, ShowFormlistBarterSelectMenuAndWaitV3, ShowCachedBarterSelectMenuAndWaitV3, and ShowBarterSelectMenuAndWaitV3 functions to UIManager. These versions break up the the previous abUsingReferences parameter into 3 separate ones, giving more flexibility to how the system can be used.
  • --- abAvailableOptionItemsAreReferences: Which means the options the player to choose from should be treated as references.
  • --- abStartBarterSelectedFormlistAreReferences: Which means the forms sent in the aStartBarterSelectedFormlist should be treated as references.
  • --- abStoreResultsAsReferences: Which means that references should be returned in aStoreResultsIn rather than base forms. This option only matters when abAvailableOptionItemsAreReferences is true, as otherwise there are no references to return.
  • UIManager will now mark new references it creates for the barter menu system as stolen if the calling function requested stolen only. This should resolve an issue with using selectable references and stolen only options together.
  • Overhauled the way UIManager’s barter menus work to use individual vendors for each combination of filtering. Previously, the system relied on reconfiguring a specific vendor to match the setting, but certain combinations of settings could cause the vendor’s barter config to get stuck until the save was reloaded.

2.2.0 (global version 54)

  • [F4SE Users] Workshop Framework now includes a copy of PowerGridTools.dll with permission from registrator2000 which adds some new functions that enhance portions of Workshop Framework’s power tools.
  • [F4SE Users] Destroy Power Grid and Repair Power Grid will now flag a settlement for rewiring and warn the player when this is needed.
  • [F4SE Users] Workshop Framework can now automatically regenerate the power grid for a settlement, including recreating all wires. This will be automatically offered when arriving in a settlement which was detected to have an unrepairable power grid. It can also be accessed from the new Power Tools section of the settlement workbench’s Manage menu.
  • [F4SE Users] Power Grid Auto-Destroy and Auto-Repair are once again enabled by default on new saves. This change was made due to the aforementioned improvements to the power grid toolset.
  • Added Power Tools section to the workbench’s Manage menu. This grants access to the following tools:
  • --- [F4SE Users] Auto-Wire Settlement: This will attempt to automatically wire up all settlement objects that can receive wires based on the closest connectable object, placing all of them in a complete network.
  • --- [F4SE Users] Rebuild Power Grid and Wiring: This will recreate all existing wiring and retransmit power across the settlement, regenerating a fresh set of grids. This can be used after a call to Destroy Power Grid to completely recover a settlement’s power grids to what they were before the corruption occurred.
  • --- Convert Settlement To Faux Powered: This will find all powered items and eliminate the need for power so the items effectively power themselves.
  • --- [F4SE Users] Repair Power Grid: This will check for power grid corruption and attempt to repair it.
  • --- [F4SE Users] Destroy Power Grid: This will completely eliminate the power grid and is an emergency option to deal with unrepairable corruption.
  • --- [F4SE Users] Destroy All Wires: This will destroy all the wires built in the settlement.
  • Added Settlement Ownership option to the workbench’s Manage menu. This will offer to claim or unclaim the current settlement.
  • Reorganized the workshop’s Manage menu to be alphabetical.
  • Progress Bars will now detect if Sim Settlements 2 is installed and adjust their position to the right slightly to avoid overlapping with the default Resource Panel.
  • Added script “WorkshopFramework:ObjectRefs:InteriorWorkshopRoomboundHelper” which mod authors can use to solve a problem where items built in interior settlements with Roombounds end up invisible.
  • Door Manager will now correctly unpersist scrapped or deleted doors that are found in a settlement.
  • Added SetupAttackersV2 and SetupDefendersV2 to AssaultManager to allow for setting up the assault system to spawn multiple types of NPC as attackers and defenders, respectively.

2.2.1 (global version 54)

  • Added several form types used by the base game for marker and control objects to a list of unscrappable items so that the layout code will not accidentally destroy things it shouldn’t - such as build areas or collision planes.
  • Modified Thread_ScrapObject code to try and eliminate an issue where layout’s placed while the player is outside of the settlement could sometimes end up in the wrong cell.
  • Added Cleanup Misplaced Items tool to MCM/Holotape Tools section. This will attempt to find and remove any layout (or Sim Settlements 2 City Plan) items that were placed in the wrong cell.
  • Fixed a bug with UIManager’s ShowBarterSelectMenu and ShowFormlistBarterSelectMenu systems which would cause them to ignore many of the parameters.
  • Fixed a bug with UIManager barter select systems that could result in extra items being added to one side or the other.
  • Added WSFW_AIToggle_AssaultAttackers and WSFW_AIToggle_AssaultDefenders globals, which mods can use to toggle the AI packages from the assault system on and off.

2.2.2 (global version 56)

  • Fixed a bug in the Task Manager system that would cause a task that failed to complete its execution code to continue to run again.
  • Added option to Task code “bCountFailedIterations”, which allows a task to not count failed runs towards its max iteration count. This defaults to true to maintain existing expected behavior.
  • Fixed a bug with the “WorkshopFunctions.OpenKeywordFilteredWorkshopSettlementMenuEx” function that would prevent it from showing any results if akIncludeFilterKeywords was sent as an empty array.
  • Auto-assign will now be skipped on settlements with the vanilla keyword IgnoreAccuracyBonusInUI applied. This will allow for mods to disable autoassign on individual settlements.
  • Added several loop breaks to UIManager’s systems to ensure an infinite loop couldn’t be caused due to terminated scripts.
  • Added ShowBarterSelectMenuV5, ShowFormlistBarterSelectMenuV5, ShowBarterSelectMenuAndWaitV4, and ShowFormlistBarterSelectMenuAndWaitV5 which add a new boolean: abDestroyNonCachedBarterSelectReferences. Setting this to true will cause unselected references that were sent to the barter select system to be disposed of when caching isn’t used. Otherwise, these items will be returned to the player for the calling function to handle.
  • UIManager now uses its own log file “WSFW_UI”.
  • Thread_PlaceObject now confirms kSpawnAt was set by the caller, and if not, defaults to the player.
  • Thread_PlaceObject will now use kPositionRelativeTo as the worldspace target if one is not set.
  • Workshop Framework will now test the 4 major Workshop Scripts to see if any is being overwritten by another mod. If so, a warning will pop up.
  • Fixed a bug that would cause total power required in a settlement to be miscalculated when processed remotely.
  • Released a new companion mod called Workshop Framework Script Override (this is just an optional file on Nexus). This is a fake esp mod with all of the vanilla workshop scripts Workshop Framework depends on included and is meant to be put at the bottom of load orders for players who are unable to determine the conflicting mod causing the pop-up warning mentioned above.

2.2.3 (global version 57)

  • If Workshop Mode is force started in order to safely run power for a layout, it will now immediately close out again instead of forcing the player to exit.
  • Fixed a bug that would cause bed auto-assignment to occur when a settler was spawned or transferred to a settlement, even if auto assign beds was disabled.
  • Increasing the build limit on a settlement that previously had its build limit set to an invalid value will first restore it to the default max value before attempting to increase it. This will resolve bugs caused by mods that attempt to bypass the build limit by setting it to -1.
  • Settlement workbenches with the vanilla keyword “IgnoreAccuracyBonusInUI” will no longer be claimed by the Claim Settlement functions. This can allow mod added settlements with special functionality that to avoid problems that might occur when claimed in the traditional sense - for example, Sim Settlements 2 HQ workshops.
  • Doubled the number of items the power tools can now support in a settlement, up to 1024 wires and 2048 powered items.
  • Removed a fix from 2.2.1 that may have been the source of NPCs being temporarily unassigned from the settlement for brief periods.
  • Added new tool to the holotape/MCM: Reset Settler Links. This will attempt to correct an issue where NPCs living at a settlement are not being counted correctly.
  • --There is a rare issue where things can be linked to the workbench, but are not correctly returned when calls to GetWorkshopResourceObjects are made. This tool temporarily breaks and resets the WorkshopItemKeyword links from settlers to the workbench.
  • Fixed a bug after Assault quests where defending NPCs could end up stuck in a bleed out state.
  • Added GetWorkshopHomeMarker function to WorkshopFunctions script.

2.2.4 (Global version 58)

  • Removed an unnecessary edit to the quest record WorkshopParent, which will prevent a mod conflict with UFO4P.
  • Fixed a bug that would cause WorkshopAddActor events to be lacking the iOldWorkshopID parameter.
  • Fixed a bug that would cause settler recruitment to be much slower than the base game rate.
  • When settlers are set to be defenders in Assaults, this will now include unique settlers as well, without the mod managing the assault needing to specify them manually.

2.3.0 (Global version 59)

  • Added new Persistence system. This code will ensure all resource providing and power grid related items are persisted. This will help alleviate, if not eliminate several vanilla game issues: Resource values jumping around when the player is out of distance from certain cells in the settlement- for example items built on one end of Spectacle Island while the player is on the other; Form IDs for object references in the power grid being reused and thus causing grid corruption; and will make the “4294 resource bug” displayed in pipboy workshops screen less likely to occur.
  • --The cost of this is the game will use slightly more memory. As such this option can be disabled in the Framework Controls section of the holotape/MCM, the option is called “Persist Workshop Resources”.
  • --Existing saves will need to visit each settlement once to trigger this system in order to experience the full benefit. Players should walk around the perimeter of extremely large settlements such as Spectacle Island, or those expanded via border expanding mods such as Annex the Commonwealth or All Settlements Extended.
  • Modified the WSFW additions to WorkshopRecalculateResources, separating them out to their own function call that is only triggered off of a timer called by the original WorkshopRecalculateResources function. This should eliminate an issue where many rapid fire calls by workshop created could items could become backed up by calls to WorkshopRecalculateResoures, as the WSFW additions were much slower than the vanilla call alone.
  • Renamed formlist WSFW_VanillaBuildableCrops to WSFW_BasicConsumptionLimiter_Food to better reflect what its being used for.
  • Added new formlist WSFW_BasicConsumptionLimiter_Water. This new formlist is used instead of “PurifiedWater” directly when the Basic Consumption option is turned on. This will allow mod authors to inject other things to count towards fulfilling thirst needs of settlers.
  • Added new IsJob function to WorkshopObjectScript. This is used in the assignment code for multi-resource objects to fix a bug where NPCs assigned to things like Sim Settlements plots as their bed could end up unassigned because the Workshop scripts treat that assignment as a job, even though it’s more akin to a bed.
  • --The idea is for other mods to override the IsJob function if their assigned object is not meant to replace assignment to crops and guard posts.
  • Fixed an issue with the base game where settlers being given commands in workshop mode would report being assigned to everything in the settlement.

2.3.1 (Global version 60)

  • Added custom vault boy icon for the Assault system.
  • Layouts should now be able to spawn spotlights without the player needing to allow actors to be spawned.
  • Fixed a bug where auto-wiring in a settlement with all powerable items in the settlement at the same z-position would fail.
  • Fixed a bug that could prevent some items from being used in the calculations of the auto-wiring system.
  • Fixed a bug that could cause a large amount of log spam if the UIManager’s barter select system was used in a particular way.
  • Fixed happiness calculation to correctly use additional safety needs system.
  • Fixed a bug with the persistence system that could cause a large amount of log spam.
  • Workshop Framework Script Override optional file is now an esl flagged esp.
  • Fixed a bug with the persistence system that would prevent it from unpersisting items if the player decided to turn it off later.

2.3.2 (Global version 61)

  • Added ShowRefCollectionBarterSelectMenu and ShowRefCollectionBarterSelectMenuAndWait functions to UIManager which will handle barter selection with a set of references held in a Reference Alias Collection.
  • UIManager will now drop item references used by the Barter Select Menu systems when there is no cache container, and abDestroyNonCachedBarterSelectReferences is false. The assumption being that the player wouldn’t have deposited reference items as their default inventory will all be non-ref forms only, so if any references were left they were those cached by other systems but maybe weren’t stored in a container. This will provide an option for systems where the cache is stored in a RefCollection rather than a container.
  • -- Previously these items would be returned to the player, which would have been confusing to the player and likely resulted in them selling or stashing the items and breaking the cache they were from.
  • Modified Consts in AssaultSettlement to be autoReadOnly properties instead which will make extending AssaultSettlement easier.
  • GetNearestWorkshop will now filter out objects with WorkshopKeyword keyword but that don’t have the WorkshopRefType. This was done to filter out non-standard workbenches that aren’t part of the WorkshopParent registered array.
  • Added GetWorkshopLocation function to UtilityFunctions. This will fetch the current location from a workshop if the myLocation property isn’t set for some reason.

2.3.3 (Global version 62)

  • Added StopAssault function to AssaultManager to provide an easy interface for safely shutting down assaults.
  • Added SetupSpawnedAttacker and SetupSpawnedDefender functions to AssaultSettlement. This was done to make it easier for external systems to spawn their own attackers or defenders and still have them work using the same automated rules as spawned NPCs created by AssaultSettlement itself.
  • Added StartingAttackers and StartingDefenders ref collections to the assault scripts/quests. Previously, the only way to determine the starting attackers and defenders was to check the PlayerAllies/Enemies collections.
  • The power grid repair system, including the automatic version, is now capable of repairing all power grids. Previously, some power grid corruptions couldn’t be repaired and the grid would be destroyed when this occurred.
  • --The destroy option is still in place as an option in case there are corner cases our updated code doesn’t account for.

2.3.4 (Global version 63)

  • Added new events to AssaultManager: AssaultAttackersDown and AssaultDefendersDown.
  • Added SetupOptionsV3 to AssaultManager which adds the additional argument abAutoCompleteAssaultWhenOneSideIsDown. When this argument is false, assaults will no longer auto fail/succeed after all enemies/allies are down. This will allow mods to manually determine when an assault fails/succeeds by calling the ForceComplete function on the assault or on AssaultManager.
  • Modified code that triggers the “PlayerEnteredSettlement” event to try and reduce the likelihood of it firing when the player is actually leaving the settlement. (This can occur if the player is hanging out near the edge of a settlement and triggers multiple events in quick succession)
  • Fixed an assault system bug that could sometimes result in the player being set as the enemy of their allies during the assault.
  • Added TryToAutoResolveAssault function to AssaultSettlement, this will allow other mods to extend and override the requirements for auto resolving an assault.
  • Defending NPCs during an assault should now keep their weapons out and act alert as soon as the attackers start moving, rather than waiting for them to be engaged.
  • Added new function to UtilityFunctions script: Safe_RemoveItem. This functions identically to the base function RemoveItem, except that when transferring items to another container it will safely handle the fact that AddItem only works with up to 65535 items at a time and so will transfer them in chunks of 65535.
  • Added new function to UtilityFunctions script: Safe_RemoveAllItems. This functions similarly to the base function RemoveAllItems, except that it uses Safe_RemoveItem to move each item in lots of 65535 to avoid surplus of a particular item over 65535 from being lost.

2.3.5 (Global version 64)

  • Assault system will now clear crime faction on attacking actors to ensure attackers retaking their home settlement won’t trigger combat with their allies.
  • Added new hidden property to WorkshopNPCScript OverrideBossLocRefType, which allows for dynamically changing the LocationRefType used by the NPC when SetAsBoss is called.
  • Changed the WorkshopNPCScript.SetSynth function so that if it is used to unset someone as a synth, it uses the SetAsBoss function instead of directly changing the LocationRefType for that NPC.
  • WorkshopParent’s WorkshopRemoveActor event now has a 3rd argument, which is a boolean telling whether the NPC was transferred or not. This will allow event handlers to react differently if the NPC was only removed because they were added to another settlement.
  • Added V5 and V6 versions of the BarterSelect system functions in UIManager, these new versions include a new parameter: abCallerWillHandleBarterSelectLeftovers, which if true will require the caller to clean up any leftover selectors in the player or vendor’s inventory.
  • Assault objectives will now show “Wipe Out” verbiage when there are no enemies set to be subdued.
  • Fixed a bug with InvisibleWorkshopObject which would cause those items to become unassigned shortly after assigning them.
  • Assault objectives will now be marked as hostile and will only show on undefeated enemies.
  • Fixed a bug in WorkshopParentscript where settlers transferred from one settlement to another could remain in the original settlement’s faction as well.
  • Added new event “AssaultFirstBlood” to AssaultManager which triggers when the first NPC (player side or enemy side) is downed during an assault. Assaults will now correctly have a map marker when the player is far from the settlement involved.
  • Fixed a bug with the export tool that would cause items that were connected to another by WorkshopStackedItemParentKEYWORD and were disabled because their parent item was scrapped, to end up part of the export as if the player had built the items.
  • Fixed a bug with the export tool that could cause items to incorrectly be flagged in a way that would cause the Transfer Settlements conversion tool online to not create correct results.
  • Export tool will now correctly export non-workshop traps and chained doors within the settlement boundary.

2.3.6 (Global version 100)

  • Added code to check for workshops that are set up incorrectly and adds warnings to the WorkshopFrameworkLog file if there are failures. This was done to help mod authors working on new settlement mods to be able to quickly tell if they correctly did all of the steps necessary to make a settlement fully functional.
  • WorkshopParentScript will no longer allow settlements to register to invalid locations, which include the parent worldspace locations (Commonwealth, Far Harbor, Nukaworld), and locations that are already registered to by another settlement.
  • Added sanity checking to some code that could cause log spam on startup.
  • Fixed a bug that could cause excessive persistence from the Persistence Manager.
  • Added additional iCompareMethod to the Check utility functions: -3 will check that the tested value is anything but fValue.

2.3.7 (Global version 102)

  • Fixed a bug that could cause NPCs involved in the assault system to sometimes be made essential when they were meant to be killable.

2.3.7a (Global version 103)

  • Add mechanism for suppressing location change triggers.

2.3.8 (Global version 104)

  • Enemies in the Assault system that are meant to be subdued as part of the objective will no longer automatically recover from bleedout in the middle of the fight.
  • Fixed a bug that could prevent the assault system from running install update code.

2.3.9 (Global version 105)

  • Enemies that are part of an assault will periodically be moved to the navmesh when loaded but out of sight from the player, this should help eliminate an issue where NPCs sometimes fall beneath the world.

2.3.10 (Global version 106)

  • Modified assault code to allow for preventing calling of TurnSettlementAgainstPlayer (which handles things such as turret aggression). This was done so mods using the Assault system can have more control over that behavior.
  • Added SetupOptionsV4 to AssaultManager to add new abAutoTurnTargetSettlementAgainstPlayer parameter which will allow setting an assault to not automatically modify turret behavior and other things associated with the player attacking a settlement.

2.3.11 (Global version 107)

  • NPCs that are part of assaults will now be moved to the nearest navmesh location at the start if they are in the loaded area.
  • Fixed a bug with the assault system where the code to ensure enemies don’t end up stuck under the world due to being unloaded would only run on one NPC at a time, leaving it appear as a trickle of NPCs was flowing in every 30 seconds.
  • The unused vanilla keyword WISabotageStart when added to a workshop object will now prevent WSFW’s layout system from ever scrapping that item.
  • Codsworth and Nick Valentine will now have their WorkshopRatingPopulation av set correctly after WSFW is first loaded (or this patch for existing saves) so they can correctly function as Workshop NPCs. This is a fix for a bug in the base game.

2.3.12 (Global version 108)

  • Player enemy NPCs during assaults will no longer have the barter option for the player if they are able to get close enough to activate.
  • When the player is the defender during an assault, or the defenders are in a reinforcements phase, the fallback teleport system to prevent under the world NPCs will use the attack point rather than the defend point as the target.

2.3.13 (Global version 109)

  • Player soldiers in assaults will now be immune to radiation until the player reaches them or combat is triggered.
  • Added new scripts: PreventExportingRefHolder and PreventScrappingVanillaRefHolder. Each of these is designed to be added to an object reference or form, placed in the world and point to other vanilla object refs that should be prevented from exporting or scrapping by the layout system.
  • The benefit of these being references, as opposed to normal script properties on something like a control quest, is patch mods can be easily made for these references to remove or alter them if someone would prefer to be able to export or scrap the items in question.
  • Used new scripts to prevent the Castle radio and Artillery plans from being scrapped or exported. This should eliminate issues where players break the Minutemen questline or create duplicates of the items by using the Layout system.
  • Exporting them was prevented because new copies created will NOT retain the functionality of the originals and so exporting and recreating them serves no purpose other than visual - and for that it is better to use a mod that creates constructible versions of those items.
    
  • Sim Settlements 2 players note that City Plans are built on top of the layout system, so this will affect you as well.
    
  • Added five additional copies of the AssaultSettlement quest to ensure the system could handle a larger collection of simultaneous assaults.

2.3.14 (Global version 110)

  • Modified assault code meant to detect NPCs under the world to try and eliminate an issue where the NPCs would teleport back to their origin whenever the player looked away from them.

2.3.15 (Global version 111)

  • When using the Configure Build Limit menu, any negative numbers found will be corrected. This should ensure settlements that were not configured correctly, or had been incorrectly edited will still work as expected with the Configure Build Limit system.
  • Added several functions/vars to MasterQuest to help prevent startup issues.
  • bQuestStartupInProgress: Set at the top of StartQuests() and cleared at the end, used as a basic mutex lock.
    
  • IsQuestStartupInProgress: function for external checks to test bQuestStartupInProgress.
    
  • IsTriggerGameLoadRunning: function for external checks to test bTriggerGameLoadRunning, which has been in WSFW as a mutex lock for some time but was not checkable externally.
    

2.3.16 (Global version 112)

  • Assaults will now periodically check for enemies being deleted or disabled by external quests/systems. This should prevent an issue where an Assault could display a quest marker to kill a seemingly non-existent enemy.
  • Adding the keyword VatsCCNoCloseUps to a workbench will now prevent that workshop from being registered in the Workshops array. This will allow for workshops that enable construction in an area, but don’t act as settlements or player homes.
  • Fixed a bug during framework startup that could cause some quests to fail to start until after the player saved and reloaded.
  • WSFW_Main will now set stage 10 once it completes initial framework startup. This will give a simple default event other mods can test for to know its safe for them to access WSFW framework quests.

2.3.17 (Global version 113)

  • Workshop Framework’s fix for the production cap bug in the base game is no longer enabled by default.
  • This is keeping in line with the goal of Workshop Framework to maintain vanilla behavior as much as possible while expanding possibilities. While we do want to fix bugs, this one isn’t an obvious or detrimental bug and so to most players it feels as if Workshop Framework is nerfing vanilla production rather than fixing an issue.
    
  • Added new setting called Enable Production Fix which restores the fix.

2.3.17a

  • Fixed a bug with the Configure Build Limits tool that would cause it to set the current build limit usage to the previous maximum value.

2.3.18

  • [MCM] Moved the Persist Workshop Resource Objects setting to the Workshop Item Options section.
  • Modified code that handles changing the build limit via the Manage menu on the Workshop to better handle cases where negative numbers are found.

2.3.19

  • SelfResettingRef script now checks that the reference is still valid and if not, exits its timer loop.
  • Added new script Thread_AddNPCToWorkshop as well as an activator using this script for using the threading engine to transfer NPCs.
  • Fixed a bug that could sometimes cause NPCs to fail to unassign from all objects in previous settlement when transferred.
  • Removed several debug.trace calls.

2.3.20

  • Modified the code that detects when the player enters/exits a settlement to try and more accurately reflect when this occurs. This should cause the PlayerEnteredSettlement and PlayerExitedSettlement events to be more reliable and accurate.

2.4.0

  • Added a sanity check to SettlementLayoutManager to greatly reduce log spam.
  • Further modified enter/exit settlement code to improve detection.
  • Modified persistence system to ensure it does not persist dead actors.

2.4.1

  • Modifying the build limit of a settlement will now repair a situation in some saves where the current values are negative, which can cause the build limit to mark permanently full.
  • Fixed a bug with the object placement system that could cause it to apply negative build limit.

2.4.3 (2.4.2 was skipped externally)

  • Fixed a bug that could cause many scrapped workshop objects to remain persisted.
  • Fixed a bug with the Door Management system that would prevent it from closing doors under most circumstances.

2.4.4

  • Modified layout code to fix an issue with restoring extra data mods store in layouts.

2.4.5

  • Modified layout code further to better handle layout recreation.

2.4.6

  • Improved DisplayRack script to prevent a race condition and to handle object reference inventory items.