Wasteland 2: now with improved modding capabilities!

For community content (fan-art, fanfic, etcetera) for Wasteland 2.

Moderator: Ranger Team Alpha

Post Reply
Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » December 18th, 2017, 11:51 am

Thanks a lot, Executor_!

Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » December 27th, 2017, 2:07 pm

Hi again, Executor_) As usual I have a couple of questions:
1. I've noticed that if I change default slot of a visible mod (e.g. turn Silencer's modSlot from Barrel to Suppressor) it still works but it becomes invisible. Can this be fixed via msons or it requires tinkering with a game's code?
2. Is it possible to somehow limit mods compatibility within the same slot? (e.g. rifles can use Big Scope and Small Scope but pistol can only use Small Scope while they both share the same mod slot for scopes)
3. As I noticed in traits you can set what types of equipment(or skills) receive trait's effects via "allowedItems". I tried to use same approach in mod but game failed to load save. It is impossible at all to use allowedItems while creating/editing mods or I am doing something wrong?

Thank you!

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » December 27th, 2017, 8:10 pm

Hey, executor! First let me say thank you very much! You did really a good job! I think many of us have great hopes when the full version finally released, many a great mod would come.

Btw, I tried changing the value of allowedInCharacterCreation from false to true in ItemTemplate_Wearable but all characters turned up naked. Not that I'm complaining. Hehe. Anyway just want to mention it. Oh I also tried changing some clothes so they could stack but same thing happened.

Well, that's all of my report.

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » December 28th, 2017, 2:11 am

Shadow Jack wrote:
December 27th, 2017, 2:07 pm
1. I've noticed that if I change default slot of a visible mod (e.g. turn Silencer's modSlot from Barrel to Suppressor) it still works but it becomes invisible. Can this be fixed via msons or it requires tinkering with a game's code?
Can you post an example of a weapon & mod combo that becomes invisible? I was testing silencers on a SMG, but the silencer seemed to be invisible always, even in the base game.
Shadow Jack wrote:
December 27th, 2017, 2:07 pm
2. Is it possible to somehow limit mods compatibility within the same slot? (e.g. rifles can use Big Scope and Small Scope but pistol can only use Small Scope while they both share the same mod slot for scopes)
No. Right now, there's no way to differentiate below the ModSlot level. It would require quite a bit of work to allow that, and a way of informing the user about the additional item compatibility requirements would need to be implemented.
Shadow Jack wrote:
December 27th, 2017, 2:07 pm
3. As I noticed in traits you can set what types of equipment(or skills) receive trait's effects via "allowedItems". I tried to use same approach in mod but game failed to load save. It is impossible at all to use allowedItems while creating/editing mods or I am doing something wrong?
Can you post the contents of a MSON override file that is failing to work?

Also, try looking in the debug_import.txt file in the "Mods" folder. Are there any errors listed? Alternatively, you can check the "Mods\ExportImport" folder for the matching MSON file to see what the object looks like to the game after the MSON override is applied.
scramjetbooster wrote:
December 27th, 2017, 8:10 pm
Btw, I tried changing the value of allowedInCharacterCreation from false to true in ItemTemplate_Wearable but all characters turned up naked. Not that I'm complaining. Hehe. Anyway just want to mention it. Oh I also tried changing some clothes so they could stack but same thing happened.
Are there any errors shown in debug_import.txt in the "Mods" folder? Can you post an example of a MSON file that you were using that was causing the characters to end up naked?

While looking into this, I also noticed that the characterInfos field in ItemTemplate_Wearable is never used by the game. Additionally, I disabled Mesh/Material object linking a while back because UnityEngine.Object.FindObjectsOfType wasn't detecting them. I'm guessing Unity doesn't fully load them until they're actually needed, which might be why FindObjectsOfType isn't finding them even though the WearableInfo object has a reference to them. I'll just have the game grab all the Mesh/Material references from the WearableInfos in the next version so that object linking will work if you modify a WearableInfo.

Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » December 28th, 2017, 3:57 am

1. There are some SMGs where silencer is not visible in vanilla game(e.g. PPSH and Mac). SMG_Tier_6_2(or Handgun_Tier_2) + Mod_Barrel_Silencer is visible(if modslot is Barrel). If I change modslot to a custom one(e.g. Suppressor instead of Barrel) it becomes invisible.
3. Below is error log and example of mson.
//**********************************************************************************************************************************************************************
F:/Games/Wasteland 2 - Director's Cut/WL2_Data/Mods/Import/ItemTemplate/ItemTemplate_Mod/ItemTemplate_ModVisible/Mod_Beretta_Suppressor.mson
Error [Line 51 at 'allowedItems'] No field or property named 'allowedItems' in class Mod_Beretta_Suppressor (ItemTemplate_ModVisible).
Info [Line 54 at 'name'] Resuming parsing on line 54 at property 'name' after previous error.
Warning [Line 54 at 'name'] The property 'name' is for run-time use only and should not be modified.
Warning [Line 55 at 'tag'] The property 'tag' is for run-time use only and should not be modified.
FATAL [Line 55] Exception has been thrown by the target of an invocation., stack trace:
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
at System.Reflection.MonoProperty.SetValue (System.Object obj, System.Object value, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] index, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in <filename unknown>:0
at MemberData.SetValue (System.Object classInstance, System.Object value) [0x00000] in <filename unknown>:0
at MSON_Reader.SetValue (System.Object value, .MemberData destinationMember, System.Collections.Generic.List`1 destinationList) [0x00000] in <filename unknown>:0
at MSON_Reader.AssignValue (Int32 tokenIndex, ValueCategory acceptedCategory, System.Type acceptedType, .MemberData destinationMember, System.Collections.Generic.List`1 destinationList) [0x00000] in <filename unknown>:0
at MSON_Reader.Deserialize () [0x00000] in <filename unknown>:0
at MSON_Reader..ctor (System.Object objectToOverride, System.String filePath, Boolean isSceneSpecific, Boolean isINIFile) [0x00000] in <filename unknown>:0

Override was a FAILURE: "F:/Games/Wasteland 2 - Director's Cut/WL2_Data/Mods/Import/ItemTemplate/ItemTemplate_Mod/ItemTemplate_ModVisible/Mod_Beretta_Suppressor.mson"

//*******************************************************************************************
"{
displayName : "<@>Beretta Suppressor"
grammaticalName : "<@>(a/[COUNT]) suppressor(/s)"
description : "<@>Silent, but deadly."

prefab : Mod_Silencer // 3D model

soundCategory : ""

atlas : WL2_Equipment // sprite database
spriteName : T_Inv_Icon_Silencer // name of the image to use from the sprite collection
gridWidth : 1
gridHeight : 1
modSlot : Barrel
maxStackSize : 5
partyNoDrop : false

tags : [ ] // ItemTags.Tags has list of keywords
tier : 4
price : 160
weight : 1.0
rare : true
junk : false

skillToRemove : 8 // required Weaponsmithing level
requiredStatValues : {
weaponSmith : 6
}

statModifiers : [
{
when : [ Situation.Always ]
statName : criticalHitChance
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : 5.0
}
{
when : [ Situation.Always ]
statName : noiseRadius
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Multiply
value : 0.1
}
]

allowedItems : [
{
itemTemplateType : ItemTemplateType.WeaponRanged
name : "" // accepts partial matches
tag : ""

// any fields left as 'None' or blank will be ignored
equipmentSlot : EquipmentSlot.None
armorType : ArmorType.None
weaponSkill : handgun
weaponType : WeaponType.None
weaponAnimType : WeaponAnimType.None
inventoryWeaponType : InventoryWeaponType.None
damageType : DamageType.None
}
]

wsUByteToIncrement : "" // name of World State variable to increase when added to party inventory, decreased when removed
}"

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » December 28th, 2017, 5:11 am

Yeah, there does seem to be a bug there. I'll look into it.

Btw, there's no allowedItems field in the ItemTemplate_ModVisible class, which is why you're getting all those errors in debug_import.txt. Only the Trait class has allowedItems.

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » December 29th, 2017, 7:30 am

scramjetbooster wrote:
December 27th, 2017, 8:10 pm
Hey, executor! First let me say thank you very much! You did really a good job! I think many of us have great hopes when the full version finally released, many a great mod would come.

Btw, I tried changing the value of allowedInCharacterCreation from false to true in ItemTemplate_Wearable but all characters turned up naked. Not that I'm complaining. Hehe. Anyway just want to mention it. Oh I also tried changing some clothes so they could stack but same thing happened.

Well, that's all of my report.
Scratch all that. Don't know what happened or what I did, when I started the game 5 min ago, it all worked. :shock:

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » December 29th, 2017, 5:20 pm

Heya, executor! Another day, another report! I recently encountered this error...

Code: Select all

Using universal file path "VendorSet/VendorSet_AZ0_StartingVendor.mson" as scene-specific path "Arizona/AZ00_Ranger_Citadel/VendorSet/VendorSet_AZ0_StartingVendor.mson" was not found

D:/Games/Wasteland 2 - Director's Cut/WL2_Data/Mods/Import/VendorSet/VendorSet_AZ0_StartingVendor.mson
	Warning [Line 12]                         Ampersand ('&') encountered outside of quoted string. Use quotation marks ('"') around strings that contain structural or control characters.
	Error   [Line 12 at '&']                  The field 'skus' is of type List and needs to have its values enclosed in square brackets ('[' and ']').
	Error   [Line 12 at '[']                  Invalid syntax, open square brackets ('[') are used to initialize an Array or List.
	Info    [Line 220 at '}']                 Resuming parsing on line 220 at '}' after previous error.
What I was trying to do was adding some items to vendor stock without touching her original stock. According to the modding guide, I should be able to achieve that by adding '&' in the skus field before the '['. But it showed error and the vendor still has her original stock and my items didn't show up. This was fine before in the unmodded game.

The vendor.mson file:

Code: Select all

{
	uniqueName : "<@>Cpl. Solveig Sefors"
	
	currencyInitial : 3200
	buyScale : 0.3
	sellScale : 1.0
	
	priceMultipliers : [
		{ itemTemplate: Wearable_80sNW_Legs_A, scope: ItemCategory, scale: 0.0 }
	]
	
	skus : [		
		{ itemTemplate: Wearable_80sNW_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Legs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Torso_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Amigo_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Amigo_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Amigo_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Bonzo_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Bonzo_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Bonzo_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Hair_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cardinal_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Clown_Hair, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Clown_Head, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Clown_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Clown_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cult_Bomber_Hair, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cult_Bomber_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cult_Bomber_Packs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Cult_Bomber_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Default_A_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Default_A_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Diamondback_Militia_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Diamondback_Militia_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Diamondback_Militia_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Evangelist_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_Diamondback_Militia_Packs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_G, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_H, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_I, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Legs_J, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_G, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Fem_UndWear_Torso_H, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Gipper_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hobo_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Bond_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Bond_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Bond_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Bond_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Bond_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Trad_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Trad_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Trad_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Trad_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Hooker_Trad_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Junkie_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Junkie_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Junkie_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Kathy_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Kathy_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Hair_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Hair_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Hair_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_D1, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_D2, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_D3, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_E1, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Leather_Jerks_Torso_E2, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Mad_Monk_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Mad_Monk_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Doctor_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Mann_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_MannGuard_Hair, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_MannGuard_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_MannGuard_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Male_Robb_Torso_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Matt_F_Pants, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Matt_F_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Matthias_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Matthias_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_MR_Manners_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_MR_Manners_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Hair_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Legs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Nuns_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ollie_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ollie_Nancy_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ollie_Nancy_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ollie_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_Larson_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_Larson_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_P_P_Priest_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Pres_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Pres_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Hair_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Hair_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Hair_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Legs_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Packs_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Ranger_A_Torso_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Red_Skorpion_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Red_Skorpion_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Red_Skorpion_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Red_Skorpion_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Red_Skorpion_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Topekan_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Topekan_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Topekan_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Topekan_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Hair_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Hair_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Vargas_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Hair_F, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Legs_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Legs_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Torso_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Torso_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Torso_C, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Torso_D, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_WLander_Torso_E, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Wrecker_Legs, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_Wrecker_Torso, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
	]
}

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » December 30th, 2017, 12:42 am

Put the ampersand immediately before or after the colon. eg.

Code: Select all

{
...
	skus &: [
		{ itemTemplate: Wearable_80sNW_Legs_A, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
		{ itemTemplate: Wearable_80sNW_Legs_B, count: 4, isRestockable : true, DaysPerRestock :  0.0, minReplenish : 1, maxReplenish : 1 }
...
	]
}

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » January 1st, 2018, 6:46 pm

Hey thanks. I feel kinda embarrassed making such a trivial mistake :oops:

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » January 3rd, 2018, 3:49 pm

0.9.4 now available here.

Make sure to also download the Localization.zip and extract the contents into your "...\Steam\steamapps\common\Wasteland 2 Director's Cut\Build\WL2_Data\StreamingAssets\Localization" folder.

Like always after a new release, delete your "Export" folder if it exists.

CHANGELOG
BASE GAME BUG FIXES
  • when hovering over a portrait in the HUD, the keycode (eg. "[F2]") wasn't being displayed on the tooltip because the display code was interpreting it as a text formatting command
  • on the vendor screen, the comparison tooltip showing a currently equipped item was treating the equipped item as if it was a vendor-owned item when calculating the price
  • several minor bugs fixed in the portrait panel during character creation
  • fixed bug with visible mods often not appearing on the avatar's weapon in the inventory screen
  • visible weapon mods will now be shown on weapons carried on a character's back
  • when a CNPC was being asked to rejoin a full squad, the stats and equipment from the base CNPC were being displayed, even if the CNPC had leveled up or now had different equipment
UPDATED GAME BUG FIXES
  • in combat, Leadership Skill bonuses were often being applied even if a character had moved out of the Leadership radius
  • outside of combat, CNPC rogue chance values were taking a while to be updated on the character screen after a Leadership Skill increase
  • corrected issue with changing the ModSlot for an ItemTemplate_ModVisible causing it to no longer appear on the weapon model
GENERAL CHANGES
  • additional settings added to to the Gameplay tab on the Options menu
    • Staehrminator's Free Combat Camera mod now integrated
    • "Bird's-Eye View Camera" option available if you want to zoom the camera out even further
    • "Allow revisiting shrines" replaces the old TrackShrinesIndividually setting from "Table\Game.mson"
  • Modding tab added to the Options menu
    • settings.ini no longer used, any changes will need to be re-done using the new Modding Options panel
  • during character creation, can now select portraits for any gender or NPC
    • game now supports "Male" and "Female" directories in the "Import\Portrait\" and "Custom Portraits" (usually at "Documents\My Games\Wasteland2DC\Custom Portraits\") folders; portraits in the base folders are assumed to be Neuter gender
    • Image
  • encumbrance now shown on loot windows
    • Image
    • Image
  • extra tooltips added to weapon stats on the HUD and inventory
    • Image
  • level and XP now shown on the tooltip when hovering over a portrait in the HUD
  • game no longer generates the text for every tooltip (hundreds of them!) each time the attributes/skills window is brought up or an attribute/skill is increased
MODDING
  • UI can now show more than 4 ModSlots for a weapon
  • localization now supports multiple files for each language
    • any previous entries with the same key will be overwritten by later files
    • loaded in alphabetical order
    • eg. Main_en.txt --> Main_en2.txt --> Main_en5.txt
  • BrawlingLevelBonus setting from "Table\Game" moved to "BaseStat\MiscStat\"
AVAILABLE MODS
Found here
Extract them so they overwrite your "Mods" folder, default location is "...\Steam\steamapps\common\Wasteland 2 Director's Cut\Build\WL2_Data\Mods\".
  • TraitMod: (unchanged from 0.9.3) perks now cost multiple points, but you receive 2 perk points per level
  • BrawlingMod: (updated for 0.9.4) Brawling no longer gets +1 damage per character level, instead the Brawling Skill now gives a damage bonus
Last edited by Executor_ on January 7th, 2018, 5:27 am, edited 1 time in total.

Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » January 5th, 2018, 5:28 am

Executor_, thanks a lot - you are the best!

Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » January 5th, 2018, 5:44 am

Sorry to bother you but I have some questions as usual)
1. It is impossible to add more than two firingmods to a weapon right?
2. As I understand now it is possible to alter damage depending on wheather was armor penetrated or not. Which is very cool. But does game allows similar trick with status effects? For example is it possible to apply Wound_SuperBleed1 effect to the target if bullet penetrates armor(or succesfull critical roll took place)?

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » January 5th, 2018, 9:48 am

1. You should be able to add as many FiringModes as you like. If more than 2 isn't working, than it's a bug.
2. No. But those are good ideas and I'll see if I can get something simple added.

Shadow Jack
Novice
Posts: 33
Joined: October 25th, 2017, 7:53 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Shadow Jack » January 5th, 2018, 2:01 pm

I think I found a bug. When you attach silencer into to a custom ModSlot - mod is visble now but PC holds it in the hand it is not attched to the barrel. I've tried it on two assault rifles.
1. Create mod slot "WeaponName_Suppressor".
1.b Not sure that it matters but change "Barrel" to "WeaponName_Barrel"
2. Change Silencer's mod slot from "Barrel" to "Suppressor".
3. Attach silencer to a weapon.
4. Silencer is in hand. Not attached to the barrel.

/************Weapon Template .mson
{
//F:\Games\Wasteland 2 - Director's Cut\WL2_Data\Mods\Import\ItemTemplate\ItemTemplate_Equipment\ItemTemplate_Weapon\ItemTemplate_WeaponRanged\ AssaultRifle_Tier_1_1
displayName : "<@>Ruger Mini14"
grammaticalName : "<@>(a/[COUNT]) Ruger Mini14(/s)"
description : "<@>A venerable military long rifle. "

prefab : W_M1 // 3D model
animType : WeaponAnimType.TwoHand_Ranged
shake : WeaponShake.Ranged_Medium
bloodyMessChance : 0.0

soundCategory : M1
missSFX : MissSFXType.AUTO_TYPE

atlas : WL2_Weapons // sprite database
spriteName : T_icon_W_M1 // name of the image to use from the sprite collection
gridWidth : 3
gridHeight : 1
slot : EquipmentSlot.WeaponR
inventoryWeaponType : InventoryWeaponType.AssaultRifle
maxStackSize : 0
isNotLootable : false
isDestroyable : true
partyNoDrop : false

tags : [ weapon, gun ] // ItemTags.Tags has list of keywords
tier : 1
upgradeTier : 0
price : 70
weight : 9.5
rare : false
junk : false

skill : rifle // Assault Rifles skill
requiredAttributeValues : { }

weaponType : WeaponType.Ranged_2H
caliber : Cal556
clipSize : 5
actionPointCostToReload : 5
canJam : true
chanceToJam : 2.0
actionPointCostToUnjam : 5

minDamage : 7
maxDamage : 12
damageType : DamageType.Bullet
canCritical : true
criticalHitDamageMultiplier : 1.5
criticalHitBonusChance : 0
ignoresArmor : false
armorPenetration : 2

firingModeInfos : [
{
actionPointCost : 4
shotsPerAttack : 1
chanceToHitPenalty : 0

statModifiers : [ ]
}
{
actionPointCost : 6
shotsPerAttack : 2
chanceToHitPenalty : 10

statModifiers : [ ]
}
{
actionPointCost : 7
shotsPerAttack : 5
chanceToHitPenalty : 25

statModifiers : [ ]
}
]
delayBetweenBullets : 0.20
bulletSpeed : 100.0
noiseRadius : 30

pointBlankRange : 5
optimalRange : 14
attackRange : 20

underPressure : -20
hitChanceAtPointBlankRange : -25
hitChanceBeyondOptimalRange : -20
baseMissAngle : 4 // default miss cone angle size
burstingAdditionalMissAngle : [ ]
alwaysHits : false
canPrecisionAttack : true

statModifiers : [
{
when : [ Situation.Always ]
statName : chanceToJam
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : -2.0
}
{
when : [ Situation.Always ]
statName : actionPointCost_Reload
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : 0.0
}
{
when : [ Situation.Always ]
statName : actionPointCost_Attack
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : 0.0
}
{
when : [ Situation.Always ]
statName : actionPointCost_Unjam
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : -1.0
}
]
percentToApplyStatusEffect : 10.0
statusEffect : [ Wound_SuperBleed1 ]
knockback : false
knockbackDistance : 1.6
knockDown : false

modClass : AssaultRifle
validModSlots : [ Ruger_Mini14_Suppressor, Ruger_Mini14_Barrel, UnderBarrel, Scope, Ruger_Mini14_Magazine ]
stripDropSet : FieldStripping_Rifle_T1 // items received after field-stripping weapon

wsUByteToIncrement : "" // name of World State variable to increase when added to party inventory, decreased when removed
}
/********************Mod .mson
{
//F:\Games\Wasteland 2 - DRuger_Mini14_Silencer
displayName : "<@>Ruger Mini14 Silencer"
grammaticalName : "<@>(a/[COUNT]) Ruger Mini14 Silencer(/s)"
description : "<@>Silent, but deadly."

prefab : Mod_Silencer // 3D model

soundCategory : ""

atlas : WL2_Equipment // sprite database
spriteName : T_Inv_Icon_Silencer // name of the image to use from the sprite collection
gridWidth : 1
gridHeight : 1
modSlot : Ruger_Mini14_Suppressor
maxStackSize : 5
partyNoDrop : false

tags : [ ] // ItemTags.Tags has list of keywords
tier : 4
price : 160
weight : 1.0
rare : true
junk : false

skillToRemove : 8 // required Weaponsmithing level
requiredStatValues : {
weaponSmith : 6
}

statModifiers : [
{
when : [ Situation.Always ]
statName : criticalHitChance
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Add
value : 5.0
}
{
when : [ Situation.Always ]
statName : noiseRadius
tooltipId : ""

subset : [ Situation.Always ]
operation : Operation.Multiply
value : 0.1
}
]

wsUByteToIncrement : "" // name of World State variable to increase when added to party inventory, decreased when removed
}
/**********************ModSlot .mson
{
// F:\Games\Wasteland 2 - Director's Cut\WL2_Data\Mods\Import\ModSlotRuger_Mini14_Suppressor
displayName : "<@>Ruger_Mini14_Suppressor"
description : "" // unused
compatibleItems : [ "<@>Pistols", "<@>SMGs", "<@>Assault Rifles", "<@>Sniper Rifles" ] // only for tooltip display use

atlas : Suppressor_Icon // sprite database
spriteName : Suppressor_Icon // name of the image to use from the sprite collection
}

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » January 5th, 2018, 4:32 pm

I added a new field to ItemTemplate_ModVisible in 0.9.4 called attachPoint. For the silencer it should be set to "Mod_Mount_Barrel". You can also look at the exported ItemTemplate_ModVisibles.

eg.

Code: Select all

{
	displayName : "<@>Suppressor"
	grammaticalName : "<@>(a/[COUNT]) suppressor(/s)"
	description : "<@>Silent, but deadly."
	
	prefab : Mod_Silencer                                    // 3D model
	attachPoint : Mod_Mount_Barrel                           // location name on the weapon GameObject to adhere to
	
	soundCategory : ""
...
}

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » January 6th, 2018, 3:49 pm

Wow, great job as always Executor! I was wondering when you would implement the free battle camera. And I see that you re link the wearable info of the wearable items. Great job!

I've also been experimenting with the new custom weapon icon feature lately..

StG 44 (Replacing HK33):
Image

FFS Benetto:
Image

Uzi:
Image

M16:
Image

M4:
Image

User avatar
sear
Developer
Posts: 2572
Joined: March 21st, 2012, 8:30 am

Re: Wasteland 2: now with improved modding capabilities!

Post by sear » January 6th, 2018, 9:02 pm

Nice icons!

scramjetbooster
Initiate
Posts: 12
Joined: December 15th, 2017, 5:48 pm

Re: Wasteland 2: now with improved modding capabilities!

Post by scramjetbooster » January 7th, 2018, 1:48 am

Thanks, sear! Though I didn't design those icons. Each were merely a 10-minutes-googling work. I just delete the background creating some transparency and then slap 'em with some shadows. Heck, some icons even already have transparent background so that makes them a 10-second-work of adding the shadows.

Anyway, bug report. A very minor one in the UI. The bomberman perk text tooltip shows up on every items whether they're affected by it (grenades) or not (virtually everything else).
  • Image
  • Image
  • Image

Executor_
Scholar
Posts: 171
Joined: August 11th, 2014, 5:38 am

Re: Wasteland 2: now with improved modding capabilities!

Post by Executor_ » January 7th, 2018, 3:59 am

I agree with sear, those icons look really good. They'd fit seamlessly into the base game.

The Bomberman issue is due to the Trait having the itemTooltipString field set while allowedItems is empty so it's being applied to every item. I'll fix the Bomberman perk in the next update, but in the meantime you can correct it yourself by putting a file called Trait_Bomberman.mson in "...\Mods\Import\BaseStat\Trait\" whose contents are

Code: Select all

{
	allowedItems : [
		{
			itemTemplateType : ItemTemplateType.WeaponAoe
		}
	]
}

Post Reply

Who is online

Users browsing this forum: No registered users and 3 guests