Jump to content
Sclerocephalus

FO4: Unlimited Settlements/Settlers - A Caveat for Mod Users

Recommended Posts

A while ago, I returned to playing FO4 after two months of abstinence with the intent of focusing on settlements. I started with a hitherto unmodded save at a point where the main quest line and most of the side quests were already completed and installed two mods, one to uncap the size limit and another one to increase the maximum settler population (I chose a rather moderate value of 50 settlers) and played on. While playing, I also installed the unofficial patch and a few other mods, but none of these applied any further modifications to the settlements. Meanwhile, I have invested 9 real-time days in settlement improvements, but what appeared to have no side-effects at the beginning turned out to have some nasty consequences in the long run. Increasing the maximum population was a very bad idea, because the scripts are not designed to handle the extra resources needed to maintain the higher population properly.

 

The following summary will list the glitches that occur and will also ecxplain why they are happening, so users who are considering to use such mods will know what they have to expect:

 

There are two categories of items that can be constructed at settlements: scripted items and non-scripted ones. Scripted items (they all have a WorkShopObjectScript attached) include everything that produces resources (including radios etc.) or can be assigned to an NPC (including beds), while non-scripted ones include all walls, fences, shack parts, most decorations, etc. Concerning this latter group, the only limit appears to be the performance of your machine. If this is fast enough, you can build structures of an impressive size without noticing any issues, but this holds only as long as you keep the number of scripted items sufficiently low.

 

All scripted items are associated to their respective workshops by links that are created at run-time. Each item is linked with an item-specific keyword to discern the various item types and to allow for quick access  by new papyrus functions that have been specifically designed for that purpose. It turned out that there are sensitive limits for scripted items, and they relate to the way in which the scripts are handling them: this is done almost exclusively by filling them into arrays. A neat new papyrus function has been designed exclusively for this purpose:

http://www.creationkit.com/fallout4/index.php?title=GetWorkshopResourceObjects_-_ObjectReference

 

As you may know, the size of arrays is limited at 128 elements ...

 

Now, what happens if you have, say, 200 settlers and the WorkShopScript runs its DailyUpdate function that fills all workshop NPCs in an array ? The purpose of this operation is to find all unassigned actors (by looping through the array) and assign them to the available resources.

 

The script will not throw any errors, but it will stop working as expected: the array will be filled to the max, i.e. it will have 128 settlers in it, and only those undergo further processing. The remaining 72 settllers will not be handled. Now, which settlers make it in the array and which not is entirely random (tested!); the selection will be different each time the function runs. No need to say that the same consequences apply to any item type when the number of those items at a settlement exceeds the 128 limit.

 

However, this doesn't mean that you can still easily handle 128 people per settlement (which is quite a lot), because you need to built resources (crops, turrets, beds, etc.) to keep them happy, At present, the ultimate limit is imposed by a function on WorkshopParentScript, which fills all resource-producing objects in an array at once. These objects include crops, water pumps/purifiers, generators and turrets, and if the sum of these objects in your settlement exceeds the magical value, much of the workshop system's functionality will break.

 

This usually leads to the following glitches:

(1) Auto-assignment of settlers to new resources will stop working.

(2) Settlers assigned by yourself will not start working on the respective object, or they will do so only after an exceedingly long time. Sometimes,, the 'This resource is now assigned' message will appear with a significant delay, occasionally some time after you left the settlement.

(3) Resources assigned to settlers before leaving from a settlement will be unassigned when you return (this is beacuse the WorkshopParentScript runs a reset and a subsequent reassignment of all actors and resource objects every time you arrive at a settlement).

 

Interestingly, the stats may still be displayed correctly (but this will also stop eventually). This is because the function that recalculates the stats in regular intervals is addressing the resource types separately. Now one could argue that this is flaw of the scripts and that they need improvement. Though, while some improvements are certainly possible, there's no way to circumvent the 128 limit for each item type, unless you find another way to access the objects at a comparable speed (which is pretty unlikely).

 

In all cases, the limiting object type will be the crops: at 6 crops per settler, you cannot assign more than 21 people as farm workers. If you like settlers as mere scene fillers, this is probably not of any importance to you, but if you go for 100% happiness, there is a minimum of food to be produced per settler, which in turn means that the crop limit will limit your maximum population - and this is probably not very far from the vanilla settings.

 

Conclusions:

- Increasing the settlement budget (i.e. the number of objects that can be build) alone  does not necessarily lead to game-breaking behaviour. If your machine can handle it, you can build structures of an impressive size without noticing any issues, as long as you keep the number of crops, turrets, etc. sufficiently low. However, there should be no need for building too many of these as long as you keep the maximum population at the vanilla settings..

- Increasing the maximum population has always unpleasant consequences in the long run.

Share this post


Link to post
Share on other sites

At present, the ultimate limit is imposed by a function on WorkshopParentScript, which fills all resource-producing objects in an array at once.

 

Sounds like the array needs to be chunked (e.g., fill multiple arrays and process each array with a loop) so this function can handle >128 objects. Do you have a solution?

 

Also:

 

two months of abstinence

 

:bunny:

Share this post


Link to post
Share on other sites

Sounds like the array needs to be chunked (e.g., fill multiple arrays and process each array with a loop) so this function can handle >128 objects. Do you have a solution?

 

Note that  the function that returns the array does this at engine level, so to say. It is not papyrus scripted.

 

From this point of view, any workaround - as it would need to be scripted to circumvent the format restrictions - could never compete in terms of performance. After all, you need to scan all references at a given location (how to make sure to catch all of them ?) and check them for links to the workshop (they're not linked from the workshop). Honestly, I think that this would be a performance killer.  Maybe something to implement in F4SE ?

 

While talking about performance killing: the scripts run a fair bit of code on each actor when they loop through the array, and doing this on a very large number of items (compared to vanilla settings) will slow down performance significantly. In addition, every workshop runs a full update every game day (in addition to the updates running when the player arrives at a settlement, and when he enters or leaves workshop mode). There is a thread lock on the update function, so only one update may run at any time (otherwise, the stats get messed up even in an un-modded game). Calls of the update function are timer controlled to make calls from different instances at the same time unlikely, but if processing of a single update takes an overly long time, you may end up with several unprocessed calls waiting and if this builds up over time, you'll inevitably get a stack overflow.

 

Not to forget that the AI of so many actors also increases the workload on the engine.

Share this post


Link to post
Share on other sites

From this point of view, any workaround - as it would need to be scripted to circumvent the format restrictions - could never compete in terms of performance. After all, you need to scan all references at a given location (how to make sure to catch all of them ?) and check them for links to the workshop (they're not linked from the workshop). Honestly, I think that this would be a performance killer.  Maybe something to implement in F4SE ?

The native FindAllReferences* functions are surprisingly fast. They run almost constantly in Auto Loot.

Here's what I was thinking in terms of working on >128 settlers: FindAllSettlers.psc

 

There's probably a better approach, but I'm in the middle of other stuff.

 

Ugh, they never expanded on the 128 element limit for an array?

Nope.

"There is still an internal 128 limit on array items. Attempting to make an array larger than that will spit out an error at runtime." —SmkViper

Share this post


Link to post
Share on other sites

The native FindAllReferences* functions are surprisingly fast. They run almost constantly in Auto Loot.

Here's what I was thinking in terms of working on >128 settlers: FindAllSettlers.psc

 

There's probably a better approach, but I'm in the middle of other stuff.

 

Since the workshop scripts are not running any 3D sensitive functions on the actors, there is no need to check for 3D loaded. Actually, they only access properties on WorkshopNPCScript. Checking <returned reference> As WorkshopNPCScript != None will probably make a few of your condition checks superfluous.

 

Another thought: Does the GetWorkshopResourceObjects function actually check whether it really runs on a workshop ?

After all, it's a member function of ObjectReferenceScript and therefore expected to run on any object reference. Thus, why not make an XMarker to link all actors exceeding the limit and running GetWorkshopResourceObjects on this and the workshop when the actors have to be retrieved ?

 

Otherwise, I have bad news: The GetWorkshopResourceObjects also reliably returns all supply caravan actors, even when they are not anywhere near the location (and they are processed too). This is unlikely to get accomplished with a scripted function unless you search the whole world space ... It also invalidates my assumption that the function loops through all references at a location. More likely is that it has access to the 'linked from' entry (this should also run much faster): in the editor , there always will be a 'linked from' reference listed on all references something is linked to, but you can't access this from papyrus. So far, scripts can access linked references only from the other direction.

Share this post


Link to post
Share on other sites

As a side note for those of you who want to monitor what the workshop scripts are doing:

 

Recompiling the scripts in debug mode is not sufficient for getting any logs. This is because the scripts are writing to their own user log, and this log is only ever opened in the OnInit() event of WorkshopParent Script. You therefore have to add an OpenUserLog command somwhere (best in the OnLocationChange event, so it will start logging when you travel to a settlement).

 

 

Also interesting:

You cannot easily revert the population limit to vanilla settings by disabling the mod, although it only modifies a game setting. This is because the WorkShopParentScript  writes the charisma-adjusted game setting in one of its properties in its OnInit() event and subsequently only increments or decrements that value based on the player's charisma changes. That is, you're always stuck with the base value you chose at game start. Resetting it requires a script or to start a new game.

Share this post


Link to post
Share on other sites

Since the workshop scripts are not running any 3D sensitive functions on the actors, there is no need to check for 3D loaded. Actually, they only access properties on WorkshopNPCScript. Checking <returned reference> As WorkshopNPCScript != None will probably make a few of your condition checks superfluous.

 

I ripped all of that code from various scripts in Auto Loot, so yeah, it's rough and only intended as an idea. I'll wake up before looking at the rest of your post.

Share this post


Link to post
Share on other sites

A reply from SmkViper:
 

GetWorkshopOwnedObjects and GetWorkshopResourceObjects (along with all other native functions that return arrays) are not limited to 128 items. Neither are editor-filled array properties.
 
The 128 limit only applies to what scripts can create themselves, either via the new operation or the add function.
 
These functions will also only run on workshop containers - as they will quite happily tell you in the error log.

 

Emphasis is mine. I need to put that on the wiki.

Share this post


Link to post
Share on other sites

Exactly what items go into a settlement's array of resource-producing objects. This includes crops, water pumps/purifiers, generators, turrets, guard posts, traps, spotlights, dogs, and beds in the settlement and every provisioner  in the game, yes? What about brahmin, scrap stations, shops, cages, cats, and a recruitment beacon? Anything else?

 

It is possible to get a settlement population of 42 without using mods or glitches so the limit of 128 resource-producing objects can impact even vanilla game settlements and could be a problem even for populations as small as 25. You should definitely get your food from mutfruit and not be like the guy who grows only carrots.

 

This limitation explains a lot a complaints about settlements. See http://www.gameskinny.com/ysbn7/why-i-restarted-fallout-4-and-began-completely-ignoring-settlements\

Share this post


Link to post
Share on other sites

A reply from SmkViper:

 

 

Emphasis is mine. I need to put that on the wiki.

 

This are great news.

 

So far, I've never seen this happening though. Setllements in the conditions at the time of my last post were (and still are when I go back to these saves) completely bugged and apparently do not process object lists or actor lists properly.

 

In addition, I get repeatedly an error on the script logs that tells me that one of the settlements has disappeared from the workshop array:

[05/30/2016 - 02:21:48AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B19D)>]
[05/30/2016 - 02:21:48AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00024A26)>]
[05/30/2016 - 02:21:48AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1D1)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0016D28E)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00019956)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1DB)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (001654D5)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B197)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1A5)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (001654CF)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1AC)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (000250FE)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1F1)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0006F5C5)>]
[05/30/2016 - 02:21:49AM]  GetLinkedPopulation: ERROR - workshop location [Location < (00024F96)>] not found in workshop location array
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00168945)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (001E81EA)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (001654BD)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (001654B8)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00161F4B)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B18F)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00054BAE)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00164321)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (0009B1BE)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00066EB6)>]
[05/30/2016 - 02:21:49AM]  [workshopscript < (001F0711)>] found linked workshop [workshopscript < (00135A90)>]

I have no clue how this could happen.

 

It was at least questionable therefore whether any further experimenting with those settlements would lead to any conclusive results, so I threw a few mods overboard (I'm running about 20 mods now, most of which are texture replacers) and started a fresh new game to monitor workshops from the beginning.

 

It turned out in the meanwhile that there is an issue with the workshop reset function.

 

All details in the next post. This will be rather lengthy but I'll try to get it posted until tomorrow.

Share this post


Link to post
Share on other sites

One week ago, I was still struggling with a satisfying explanation for the glitches in the workshop system. Array size limit appeared to be a good starter (there was no evidence whatsoever that oversized arrays could even exist in FO4), but it didn't explain why the glitches already occurred in settlements that are far below the limit, sometimes even below the vanilla population limit. It's good news that it is not the array size (I really mean it), but this only strengthens my assumption that there are other things going wrong - and they are settlement size related.

 

A good point to proceed with appeared to be the workshop script activities while the player is at a settlement location. Since there isn't much workshop activity on my freshly started game, I went back to a save of my 'bugged' large settlements and started logging them. First thing I noticed for Red Rocket station (22 NPCs) was that the workshop reset function apparently took 15 minutes to complete (that is an incredibly long time).  After a close inspection of the logs (those settlements produce around 500 KB of workshop log per hour), it turned out that this was actually not the time for one reset, but there were three resets running in short succession and the time for one reset was actually 'only' 4-5 minutes (still far too long for my taste though). I then checked other settlements and they behaved the same: resets were running almost continuously and often in a quick succession.

 

This is bad and very unlikely to have been intended by the developers as it has severe implications. To understand this, some background information is needed, so let me explain a few things before proceeding:

 

Much of the workshop-related data is not stored on the scripts. Which object or NPC is associated with which workshop (if at all) is handled by linking them to the respective workbench at run time. Every link can be associated with a keyword, and those keywords can hold additional data. When you enter a settlement location, all those data are retrieved and stored in script variables, so they are readily available when you go into workshop mode to build new stuff or simply to assign new tasks to NPCs. This is basically what the workshop reset is supposed to do. It is a function that runs on WorkshopParentScript (which in turn is attached to WorkshopParent quest) whenever the player enters a settlement location. This is handled by monitoring the player's OnLocationChange event (actually, that event is only received by the player, but there is a script command to pass it on to another script, so any time the player changes locations, the event fires on WorkshopParent script as well). The function also does some extra stuff: it checks for objects that are not yet assigned [NB: it appears that it does not care about unassigned shops though] and tries to assign them to available actors, and likewise checks for unemployed settlers and tries to find objects for them to work on. Metaphorically speaking, the workshop reset prepares the construction site for you. When it has finished running, all prerequisites for doing settlement stuff are fulfilled, and there is no need for it to run again.

 

Construction of new objects and their assignment to the workshop and/or NPCs is handled separately (to make this clear: the reset function is NOT needed for assignment tasks): every time a new object is built, an event fires on the WorkShopScript (i.e. on the respective workbench) that links the object to the workshop and checks whether it is an object type that needs to be assigned to an NPC (e.g. crops, shops, etc.). If so, it runs its own assignment function to get this done.

 

Now, the problem is that this assignment function will have to call the WorkshopParent script at some point, in order to update the workshop data, but when the reset function is running at the same time, those data are already in use. Allowing several users to modify the same data data at the same time is never a good idea, as it always results in a big mess. Therefore, the script will lock the access to sub-functions that modify the workshop data for all potential users when an instance starts running them. In other words, while the reset function runs, all other functions that want to access the workshop data have to wait (likewise though, any calls of the reset function have to wait as well when another function found a time window to slip in).

 

This is not a big problem at game start, when settlements are small and the whole reset takes not more than around 30 seconds real time (two values from a freshly started game:a reset on Abernathy farm (3 NPCs, 30 crops) took 31 seconds, on Tenpines Bluff (2 NPCs, less crops) still 24 seconds). When settlements grow, the time to complete will quickly get longer though and may easily reach several minutes at large settlements (from my own experiences with 20-30 NPCs and the resource objects needed to maintain them). Unfortunately, I cannot presently contribute a value for settlements with > 100 NPCs and an appropriate number of resources. Maybe, an author of one of the population size uncapper mods could help us out here (you did test that before release, didn't you ???).

 

This leads to detrimental effects in the long run, because the time window in which other users than the reset function have a chance to access the workshop data can become very narrow. Any calls that do not get through will be queued, but there is evidence from the logs that there is also a queue of reset functions (whatever calls the reset function accidentally does this pretty frequently) and these queues may take an exceedingly long time to complete. You may see rapid changes of the pip-boy stats for settlements you left a very long time ago.

 

This also explains the various glitches that appear later in the game:

* In a new game, a crop you built will be auto-assigned within a few seconds. Later in the game, it may not even be assigned within several minutes. This is because the calls from WorkShopScript (from the event that fires when a new object is built) are locked out by reset functions that do not only run without any need but also take an exceedingly long time to complete.

* Once you notice that auto-assignment apparently stopped working, you try to assign an actor yourself - only to see that this doesn't work either. This is no suprise, because this assignment has to be written in the workshop data. The call to do this is from another function now, but that is locked out as well.

* Eventually, one of the NPCs you repeatedly tried to assign to a crop will walk over and start working on it - but when you return to the settlement, this NPC is stilll unassigned and another NPC is working on the crop, or there is no NPC working on it at all ...  This is because you had a long queue of function calls that did eventually complete when the resets stopped running a while after you left the settlement, and one or more of them did override your last orders.

 

Needless to say that the reset function cannot have been intended by the developers to run in a seemingly endless sequence. This is a major bug (potentially game-breaking) and needs to be fixed. Remains the question WHY this happens ....

 

It turned out that this is because WorkshopParentScript receives a whole bunch of OnLocationChange events WHILE I am staying,at a settlement location (yep, I did not leave it. Stood always near the workbench) ... The culprit is the damn workbench: every time you activate it (not only when you enter workshop mode, but also when you simply unload some scrap), you generate an OnLocationChange event (with akOldLoc being the settlement location and akNewLoc = none; the WorkshopParentScript takes this as a location exit) and when you leave the menu (or the workshop mode) again, another OnLocationChange event will fire (with akOldLoc = none and akNewLoc being the settlement location). The WorkshopParentScript interprets the latter event as a valid arrival to a new settlement location and immediately starts running the reset function again.

 

A simple test scenario: travel to a settlement, then wait five minutes real time (just wait, do NOT touch the workbench) to make sure that the reset has finished running. Drop a few items, go into workshop mode to scrap them, then leave again - and you'll get something like this on the log:

------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:44PM]   RemoveObject: [ObjectReference < (00031B42)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:45:45PM]   OnLocationChange: exited workshop location [Location < (00024F96)>]
[05/26/2016 - 11:45:46PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:46PM]   RemoveObject: [ObjectReference < (00031B41)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:45:49PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:49PM]   RemoveObject: [ObjectReference < (00031B44)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:45:51PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:51PM]   RemoveObject: [ObjectReference < (00031B43)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:45:54PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:54PM]   RemoveObject: [ObjectReference < (00031B45)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:45:59PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:45:59PM]   RemoveObject: [ObjectReference < (00031B33)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:46:00PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:46:00PM]   RemoveObject: [ObjectReference < (0008C304)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:46:02PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:46:02PM]   RemoveObject: [ObjectReference < (00031B3C)>] from [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:46:02PM]   OnLocationChange: entered workshop settlement location [Location < (00024F96)>]
[05/26/2016 - 11:46:02PM]  ------------------------------------------------------------------------------ 
[05/26/2016 - 11:46:02PM]   RESET WORKSHOP
[05/26/2016 - 11:46:02PM]      Begin reset for [workshopscript < (0001D0E2)>]
[05/26/2016 - 11:46:02PM]  ------------------------------------------------------------------------------ 

The 'RemoveObject' traces are from scrapping objects. While I was happily scrapping, the script received an OnLocationChange event and interpreted this as a location exit (because akOldLoc was a valid settlement location and akNewLoc = none), but the location I supposedly left was the same as the one I was very obviously still working at (don't get confused by the different IDs: one is for the location, the other is for the script that runs on the workbench; it is the same settlement). In fact this event was logged with some delay: it fired when I entered workshop mode. Upon leaving workshop mode, another OnLocationChange fired (this time an enter event: akOldLoc = none while akNewLoc was a valid settlement location) and the location I supposedly entered was the same as the one I did previously not leave .... subsequently, the reset started running again.

 

To stop this nonsense, I added two tracking variables to WorkshopParentScript and modified the offending event as follows:

;----------------------
;EDIT: Added by UFO4P:
;----------------------

;The game time when the last ResetWorkshop function finished
Float UFO4P_GameTimeOfLastResetFinished = 0.0

;The last workshop location visited by the player
Location UFO4P_PreviousWorkshopLocation = None

;----------------------

:
:

Event Actor.OnLocationChange(Actor akSender, Location akOldLoc, Location akNewLoc)
	;;debug.trace(self + " OnLocationChange: akNewLoc=" + akNewLoc)

	;EDITS - GENERAL NOTES:
	;----------------------
	;While monitoring this script's activities in debug mode, it was found that this event fires when the player activates the workbench (this is handled as a
	;location exit event below) and again when he leaves the menu/workshop mode (handled as a location enter event below). As a result, the reset procedure could
	;be repeated over and over again. This is not a problem at game start when settlements are small and the reset takes less than a minute. Though later on, when
	;the settlements grow, the function draws much performance and may take several minutes to complete. Sine other functions are locked out from editing work-
	;shop-related data while it's rtunning, this could lead to assignment of settlers to newly built objects taking an exceedingly long time or not working at
	;all. To prevent unnecessary resets from being carried out, this event has been modified as follows:
	;
	;(1) When the player apparently leaves from a settlement location, this location is stored in the new tracking variable UFO4P_PreviousWorkshopLocation
	;(2) When the reset function has finished running, the game time is stored in the new variable UFO4P_GameTimeOfLastResetFinished
	;
	;When the player apparently enters a settlement location, the event now checks whether this is the same as the one he just left (by comparing akNewLoc
	;to UFO4P_PreviousWorkshopLocation). If this is true AND the last reset finished less than a game day before, it will not be run again. Note that short
	;leaves from the location (with 'valid' change location events), e.g. to check the environment after the turrets started shooting at something, will also
	;not result in repeated resets carried out, but travels to other (non-settlement) locations and back still do, no matter how long they take.

	if akNewLoc

		If akNewLoc.HasKeyword(LocTypeWorkshopSettlement)
			wsTrace(" OnLocationChange: entered workshop settlement location " + akNewLoc)
			; when player enters a workshop location, recalc the workbench ratings
			; get the workbench
			WorkshopScript workshopRef = GetWorkshopFromLocation(akNewLoc)
			if !workshopRef
				wsTrace(" ERROR - OnLocationChange: failed to find workshop matching " + akNewLoc + " which has the LocTypeWorkshopSettlement keyword", 2)
				return
			else
				;EDIT: Check whether the player really entered a new location.
				;If NOT, skip the reset if the last reset of this location ran less than a game day ago.
				If UFO4P_PreviousWorkshopLocation && (UFO4P_PreviousWorkshopLocation == akNewLoc)
					Float UFO4P_GameTimeSinceLastReset = Utility.GetCurrentGameTime() - UFO4P_GameTimeOfLastResetFinished
					wsTrace(" OnLocationChange: New workshop settlement location is the same as the location just left by the player.")
					wsTrace(" OnLocationChange: Game time since last reset=" + UFO4P_GameTimeSinceLastReset)
					If UFO4P_GameTimeSinceLastReset < 1
						wsTrace(" OnLocationChange: Skipping reset.")
						Return
					EndIf
				EndIf

				ResetWorkshop(workshopRef)
				; send change location script event
				; OBSOLETE - moved to always use MinRadiantStart
;				WorkshopEventChangeLocation.SendStoryEvent(akNewLoc, workshopRef)
			
				;EDIT: Remember the current game time as the time when the last reset finished:
				UFO4P_GameTimeOfLastResetFinished = Utility.GetCurrentGameTime()
			EndIf

		;EDIT: If player has entered a valid location that is not a settlement location, reset UFO4P_PreviousWorkshopLocation to none
		else
			UFO4P_PreviousWorkshopLocation = None
		endif

	endif


	if akOldLoc && akOldLoc.HasKeyword(LocTypeWorkshopSettlement)		
		wsTrace(" OnLocationChange: exited workshop location " + akOldLoc)
		; when player leaves a workshop location, recalc the workbench ratings
		; get the workbench
		WorkshopScript workshopRef = GetWorkshopFromLocation(akOldLoc)
		if !workshopRef
			wsTrace(" ERROR - OnLocationChange: failed to find workshop matching " + akOldLoc + " which has the LocTypeWorkshopSettlement keyword", 2)
			return
		else
			;EDIT: Remember this location as the last workshop visited by the player
			UFO4P_PreviousWorkshopLocation = akOldLoc
			; reset days since last visit for this workshop
			workshopRef.DaysSinceLastVisit = 0
		endif
	endif

EndEvent

I have been testing this for three days now, and it does a pretty good job in taking a significant workload from the papyrus engine. It's worthwhile to note that short leaves from the location (e.g. to search the environment for dead bodies after an attack) won't trigger any resets either now (previously, they did), unless they take more than a game day. However, short visits to another valid location still do, no matter how long they take. This is because I do not know yet whether the data on the script are always written in the save no matter where you are (unless you enter another settlement location - then a new reset will run on that location) or whether they are eventually discarded (how far do Beth's performance optimizations go ?). If so, this likely happens when the player enters another location and to stay on the safe side, the tracking variables are better cleared in those cases.

 

A final note:  This fix should cure many problems with large settlements, but it will not prevent the time for reset completion from steadily increasing when the settlement grows. There is not much one can do about this (maybe some performance optimizations, but I do not expect that we can realize a significant speed up here). Therefore, I still believe that there is a limit to the maximum population that is probably far below the theoretically possible 999 NPCs per settlement (or was it even more ?). With the reset function not permanently repeating, you can probably still play the game with that many settlers, but at the prize of waiting for a long time until the first reset completes. Only then, the glitches in workshop mode will be gone.

Share this post


Link to post
Share on other sites

Found this in WorkShopScript:

; helper function to recalc
; we don't normally want to do this when unloaded or everything will be 0
; TRUE = we did recalc; FALSE = we didn't
bool function RecalculateWorkshopResources(bool bOnlyIfLocationLoaded = true)
	if bOnlyIfLocationLoaded == false || myLocation.IsLoaded()
		;WorkshopParent.wstrace(self + " RecalculateWorkshopResources=TRUE")
		RecalculateResources()
		return true
	else
		;WorkshopParent.wstrace(self + " RecalculateWorkshopResources=FALSE")
		return false
	endif
endFunction

Confusing ...

 

EDIT:

I should add that this works as intended. It's just ... well, confusing.

Share this post


Link to post
Share on other sites

There is another function that is repeated almost endlessly:

[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:47AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:13:52AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:55AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:13:55AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:13:59AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:01AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:04AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:05AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:07AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:10AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:11AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:13AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:16AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:20AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:24AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:26AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:30AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:32AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:36AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:38AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] UpdateMinutemenRecruitmentAvailable:
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[0]=[workshopscript < (00168945)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[1]=[workshopscript < (00024A26)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[2]=[workshopscript < (0009B1BE)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1BE)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[3]=[workshopscript < (001E81EA)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (001E81EA)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[4]=[workshopscript < (001654BD)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[5]=[workshopscript < (00066EB6)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[6]=[workshopscript < (0009B1AC)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1AC)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[7]=[workshopscript < (001F0711)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[8]=[workshopscript < (000E0505)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000E0505)>]: valid workshop settlement, population rating = 8.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[9]=[workshopscript < (00161F4B)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[10]=[workshopscript < (00054BAE)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[11]=[workshopscript < (0001D0E2)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[12]=[workshopscript < (00164321)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[13]=[workshopscript < (0009B1F1)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1F1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[14]=[workshopscript < (00019956)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (00019956)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[15]=[workshopscript < (0009B1D1)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1D1)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[16]=[workshopscript < (000250FE)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (000250FE)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[17]=[workshopscript < (0016D28E)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[18]=[workshopscript < (001654B8)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[19]=[workshopscript < (0009B1A5)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1A5)>]: valid workshop settlement, population rating = 5.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[20]=[workshopscript < (0009B19D)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B19D)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[21]=[workshopscript < (0009B18F)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B18F)>]: valid workshop settlement, population rating = 6.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[22]=[workshopscript < (000B3506)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[23]=[workshopscript < (00135A90)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[24]=[workshopscript < (001654CF)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[25]=[workshopscript < (001654D5)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[26]=[workshopscript < (0009B1DB)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B1DB)>]: valid workshop settlement, population rating = 2.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[27]=[workshopscript < (0009B197)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0009B197)>]: valid workshop settlement, population rating = 4.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 		- not owned by player - add to neutral count
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] Workshops[28]=[workshopscript < (0006F5C5)>]
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>] 	[workshopscript < (0006F5C5)>]: valid workshop settlement, population rating = 3.000000
[06/01/2016 - 01:14:42AM]  [workshopparentscript <WorkshopParent (0002058E)>]UpdateMinutemenRecruitmentAvailable: 11 neutral, 14 total
[06/01/2016 - 01:14:44AM]   CaravanActorBrahminCheck: caravan actor [workshopnpcscript < (0001A4D7)>], bShouldHaveBrahmin=True

Share this post


Link to post
Share on other sites

Thanks for this. I long suspected that the size of the settlement was not the only cause of this bug, as I expressed in the thread on Nexus. I also have noticed that sometimes even my small settlements with 5-6 settlers will exhibit this bug.

 

Thank you for sharing what you found. In my own settlements, I notice that the game will auto-assign settlers only to food. I remember reading that it will sometimes generate a "guard" settler with higher HP than normal settlers, and auto-assign this settler to a guard station if present, but I have not yet experienced this in-game.

 

Also, the only way I get around this bug is by never visiting the settlement. If a settlement has this issue, I walk away from the settlement until I am well out of range of its recruitment beacon. Only once far away do I check the workshop to see if it has become bugged. If not, I can safely fast travel away. If it has, I have to go back and try again.

 

Once all my settlements are in a non-bugged state, I simply can't visit them ever again, or risk them becoming bugged (which you can see is a problem when responding to raids). As long as I never visit the settlements again, they gain happiness like normal and never become bugged.

 

Thanks for your insight about activating the workshop. I will try to visit these settlements when responding to raids and not activating the workshop, to see if that helps.

 

This is a major bug (potentially game-breaking) and needs to be fixed. Remains the question WHY this happens ....

 

I completely agree--and it Is game-breaking for players like me who spend much time on settlements. For players with high charisma, and who wear charisma boosting gear to get more settlers, settlements with 30+ settlers is not uncommon at all. And yet these are still considered "large" settlements that bog up the workshop, making it grind to a halt. I think this is reason enough to consider this a legitimate bug--NOT just an artifact experienced only by PC players who use mods to uncap settlement budget. 

 

I, for one, am completely fine with suffering from waiting long times for settlers to become assigned, just as long as this game-breaking bug that destroys settlement happiness is fixed.

Share this post


Link to post
Share on other sites

We never said it wasn't a bug, it clearly is. The only reason I balked at such high numbers is because it's not widely accepted that you can pull down 75-100 settlers using nothing but the vanilla game. The fact is, even with easily obtainable 20-30 settler population counts, this script is chewing up a ton of time in the Papyrus VM. So it's obviously borking up the settlements something fierce.

 

This also leads to the other question - how badly is it borking up the rest of the game too? If stuff is piling up behind these updates in the script queue what else is getting screwed up along with it?

Share this post


Link to post
Share on other sites

This also leads to the other question - how badly is it borking up the rest of the game too? If stuff is piling up behind these updates in the script queue what else is getting screwed up along with it?

 

I think the widely reported bug with settlement stats not updating is caused by this issue. I'm not sure if Sclero mentioned that.

 

And if my reading of his explanation is right, anything that tries to access settlement resources via Papyrus will be delayed.

 

Prior to the launch of XB1 mod support, I forwarded this thread to Ziegfelding to pass on to the settlement lead, but I think Sclero or someone should make a thread in the CK forum with the entire explanation to make doubly sure they see this.

Share this post


Link to post
Share on other sites

I think the widely reported bug with settlement stats not updating is caused by this issue. I'm not sure if Sclero mentioned that.

 

Not really ...

 

There are daily updates running on WorkShopScript to recalculate stats of all workshops (ideally, one per day, but there may be delays) and those values are displayed in your pip-boy stats. Those are the values that get updated even when you're far away from the respective settlements.

 

The endless reset procedures will mainly affect the workshop you're currently staying at. They do also delay the daily updates (these are locked out and have to find a window of no reset activity to slip in), but they still do update eventually.

 

The messed-up pip-boy stats (i.e. the daily updates) had their own bug (a borked thread lock) that was entirely unrelated to the reset issue.

Share this post


Link to post
Share on other sites

Maybe I should add that it is even worse in survival mode, because of the friendly messages ("you need water", "you need food") that may display even when you're in workshop mode. So you leave workshop mod for a while to have a drink .... and BINGO - another reset starts running ....

 

You would never have thought that survival mode is going that far, would you ?

Share this post


Link to post
Share on other sites

Maybe I should add that it is even worse in survival mode, because of the friendly messages ("you need water", "you need food") that may display even when you're in workshop mode. So you leave workshop mod for a while to have a drink .... and BINGO - another reset starts running ....

 

What does this mean for the player?

Share this post


Link to post
Share on other sites

The more reset calls that pile up, the longer the wait for resource assignments to get done. Which leads back to everything spiraling out of control.

Share this post


Link to post
Share on other sites
A final note:  This fix should cure many problems with large settlements, but it will not prevent the time for reset completion from steadily increasing when the settlement grows.

 

I'm happy with a fix even if I have to wait a while between commands. Even though my settlements on average have more than 30 settlers, I never have to wait more than 1-2 minutes to assign a settler. I find that if I wait, say, 5 minutes or so after opening the workshop to issue a command, that I don't have to wait at all between commands--it's instant, even with many settlers.

 

So what does this mean for the patch? Is it an easy fix that we will see in a new patch release soon, or is it complicated that will take a while?

Share this post


Link to post
Share on other sites

				;EDIT: Check whether the player really entered a new location.
				;If NOT, skip the reset if the last reset of this location ran less than a game day ago.
				If UFO4P_PreviousWorkshopLocation && (UFO4P_PreviousWorkshopLocation == akNewLoc)
					Float UFO4P_GameTimeSinceLastReset = Utility.GetCurrentGameTime() - UFO4P_GameTimeOfLastResetFinished
					wsTrace(" OnLocationChange: New workshop settlement location is the same as the location just left by the player.")
					wsTrace(" OnLocationChange: Game time since last reset=" + UFO4P_GameTimeSinceLastReset)
					If UFO4P_GameTimeSinceLastReset < 1
						wsTrace(" OnLocationChange: Skipping reset.")
						Return
					EndIf
				EndIf

This stops a reset from getting queued up if one recently completed, but what about if one just started? Until it finishes, you could still wind up queuing up multiple resets, and the longer it takes the first reset to finish, the more resets you could queue up, each taking just as long...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Support us on Patreon!

×