Decompiled source of AdditiveDatablockLoader v0.0.2

AdditiveDatablockLoader.dll

Decompiled 5 days ago
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AdditiveDatablockLoader.Constructors;
using AdditiveDatablockLoader.Handlers;
using AdditiveDatablockLoader.Util;
using BepInEx;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using EWC.API;
using GTFO.API;
using GameData;
using Il2CppSystem;
using Localization;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("AdditiveDatablockLoader")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+gitf0c1c8e-master.f0c1c8e8631370db224a909b1b78b148edd61d51")]
[assembly: AssemblyProduct("AdditiveDatablockLoader")]
[assembly: AssemblyTitle("AdditiveDatablockLoader")]
[assembly: TargetPlatform("Windows7.0")]
[assembly: SupportedOSPlatform("Windows7.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace AdditiveDatablockLoader
{
	[BepInPlugin("AdditiveDatablockLoader.GUID", "AdditiveDatablockLoader", "0.0.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	internal class EntryPoint : BasePlugin
	{
		public override void Load()
		{
			EventAPI.OnManagersSetup += OnGameLoaded;
		}

		internal void OnGameLoaded()
		{
			JsonHandler.SetupJson();
		}
	}
	internal static class Logger
	{
		private static readonly ManualLogSource _Logger;

		static Logger()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			_Logger = new ManualLogSource("AdditiveDatablockLoader");
			Logger.Sources.Add((ILogSource)(object)_Logger);
		}

		private static string Format(object msg)
		{
			return msg.ToString();
		}

		public static void Info(BepInExInfoLogInterpolatedStringHandler handler)
		{
			_Logger.LogInfo(handler);
		}

		public static void Info(string str)
		{
			_Logger.LogMessage((object)str);
		}

		public static void Info(object data)
		{
			_Logger.LogMessage((object)Format(data));
		}

		public static void Debug(BepInExDebugLogInterpolatedStringHandler handler)
		{
			_Logger.LogDebug(handler);
		}

		public static void Debug(string str)
		{
			_Logger.LogDebug((object)str);
		}

		public static void Debug(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}

		public static void Error(BepInExErrorLogInterpolatedStringHandler handler)
		{
			_Logger.LogError(handler);
		}

		public static void Error(string str)
		{
			_Logger.LogError((object)str);
		}

		public static void Error(object data)
		{
			_Logger.LogError((object)Format(data));
		}

		public static void Fatal(BepInExFatalLogInterpolatedStringHandler handler)
		{
			_Logger.LogFatal(handler);
		}

		public static void Fatal(string str)
		{
			_Logger.LogFatal((object)str);
		}

		public static void Fatal(object data)
		{
			_Logger.LogFatal((object)Format(data));
		}

		public static void Warn(BepInExWarningLogInterpolatedStringHandler handler)
		{
			_Logger.LogWarning(handler);
		}

		public static void Warn(string str)
		{
			_Logger.LogWarning((object)str);
		}

		public static void Warn(object data)
		{
			_Logger.LogWarning((object)Format(data));
		}

		[Conditional("DEBUG")]
		public static void DebugOnly(object data)
		{
		}
	}
	[GeneratedCode("VersionInfoGenerator", "2.1.3+git35c0c2a-master")]
	[CompilerGenerated]
	internal static class VersionInfo
	{
		public const string RootNamespace = "AdditiveDatablockLoader";

		public const string Version = "1.0.0";

		public const string VersionPrerelease = null;

		public const string VersionMetadata = "gitf0c1c8e-master";

		public const string SemVer = "1.0.0+gitf0c1c8e-master";

		public const string GitRevShort = "f0c1c8e";

		public const string GitRevLong = "f0c1c8e8631370db224a909b1b78b148edd61d51";

		public const string GitBranch = "master";

		public const string GitTag = null;

		public const int GitCommitsSinceTag = 0;

		public const bool GitIsDirty = false;
	}
}
namespace AdditiveDatablockLoader.Util
{
	internal class JsonHandler
	{
		private static string ADBL_CustomPath;

		private static readonly JsonSerializerSettings _settings = CreateSettings();

		internal static void SetupJson()
		{
			ADBL_CustomPath = Path.Combine(Paths.BepInExRootPath, "GameData", "AdditiveDatablocks");
			if (!Directory.Exists(ADBL_CustomPath))
			{
				Directory.CreateDirectory(ADBL_CustomPath);
			}
			Log.Info("Loading additive datablocks");
			EnsureAndLoadDatablocks<PlayerOfflineGearDataBlock>("PlayerOfflineDB", Constructor.PlayerOfflineGearDataBlockTemplate);
			EnsureAndLoadDatablocks<GearCategoryDataBlock>("GearCategoryDB", Constructor.GearCategoryDatablockTemplate);
			EnsureAndLoadDatablocks<ArchetypeDataBlock>("ArchetypeDB", Constructor.ArchetypeDatablockTemplate);
			EnsureAndLoadDatablocks<ItemDataBlock>("ItemDB", Constructor.ItemDatablockTemplate);
			EnsureAndLoadDatablocks<ItemFPSSettingsDataBlock>("ItemFPSDB", Constructor.ItemFPSDatablockTemplate);
			EnsureAndLoadDatablocks<RecoilDataBlock>("RecoilDB", Constructor.RecoilDatablockTemplate);
			EnsureAndLoadDatablocks<GearFrontPartDataBlock>("GearFrontPartDB", Constructor.GearFrontPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearReceiverPartDataBlock>("GearReceiverPartDB", Constructor.GearReceiverPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearStockPartDataBlock>("GearStockPartDB", Constructor.GearStockPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearMagPartDataBlock>("GearMagPartDB", Constructor.GearMagPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearFlashlightPartDataBlock>("GearFlashlightPartDB", Constructor.GearFlashlightPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearSightPartDataBlock>("GearSightPartDB", Constructor.GearSightPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolMainPartDataBlock>("GearToolMainPartDB", Constructor.GearToolMainPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolGripPartDataBlock>("GearToolGripPartDB", Constructor.GearToolGripPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolDeliveryPartDataBlock>("GearToolDelivaryPartDB", Constructor.GearToolDelivaryPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolPayloadPartDataBlock>("GearToolPayloadPartDB", Constructor.GearToolPayloadPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolTargetingPartDataBlock>("GearToolTargetingPartDB", Constructor.GearToolTargetingPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearToolScreenPartDataBlock>("GearToolScreenPartDB", Constructor.GearToolScreenPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearMeleeHeadPartDataBlock>("GearMeleeHeadPartDB", Constructor.GearMeleeHeadPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearMeleeNeckPartDataBlock>("GearMeleeNeckPartDB", Constructor.GearMeleeNeckPartDatablockTemplate);
			EnsureAndLoadDatablocks<GearMeleeHandlePartDataBlock>("GearMeleeHandlePartDB", Constructor.GearMeleeHandlePartDatablockTemplate);
			EnsureAndLoadDatablocks<GearMeleePommelPartDataBlock>("GearMeleePommelPartDB", Constructor.GearMeleePommelPartDatablockTemplate);
			EnsureAndLoadDatablocks<MeleeAnimationSetDataBlock>("MeleeAnimationDB", Constructor.MeleeAnimationDatablockTemplate);
			EnsureAndLoadDatablocks<MeleeArchetypeDataBlock>("MeleeArchetypeDB", Constructor.MeleeArchetypeDatablockTemplate);
			EnsureAndLoadDatablocks<WeaponMuzzleFlashDataBlock>("WeaponMuzzleFlashDB", Constructor.WeaponMuzzleFlashDatablockTemplate);
			EnsureAndLoadDatablocks<WeaponShellCasingDataBlock>("WeaponShellCasingDB", Constructor.WeaponShellCasingDatablockTemplate);
			EnsureAndLoadDatablocks<WeaponAudioDataBlock>("WeaponAudioDB", Constructor.WeaponAudioDatablockTemplate);
			EnsureAndLoadDatablocks<MiningMarkerDataBlock>("MiningMarkerDB", Constructor.MiningMarkerDatablockTemplate);
			EnsureAndLoadDatablocks<TechMarkerDataBlock>("TechMarkerDB", Constructor.TechMarkerDatablockTemplate);
			EnsureAndLoadDatablocks<ServiceMarkerDataBlock>("ServiceMarkerDB", Constructor.ServiceMarkerDatablockTemplate);
			InteropAPI.ExecuteWhenPluginExists("Dinorush.ExtraWeaponCustomization", (Action<PluginInfo>)delegate
			{
				LoadEWCBlocks();
			});
		}

		private static void LoadEWCBlocks()
		{
			Log.Info("EWC Detected loading additive EWC blocks");
			string text = Path.Combine(ADBL_CustomPath, "ExtraWeaponCustomization");
			if (!Directory.Exists(text))
			{
				Directory.CreateDirectory(text);
				File.WriteAllText(text + "/ReadThis.txt", "Just copy the default EWC template file as I won't generate it here");
			}
			DataAPI.ReadDirectory(text, true);
		}

		private static void EnsureAndLoadDatablocks<T>(string subFolder, string templateFileContents = "") where T : GameDataBlockBase<T>, new()
		{
			string text = Path.Combine(ADBL_CustomPath, subFolder);
			if (!Directory.Exists(text))
			{
				Directory.CreateDirectory(text);
				CreateIfNotReal(text + "/Template.json", new T(), templateFileContents);
			}
			LoadJsonDatablocks<T>(text);
		}

		private static void LoadJsonDatablocks<T>(string directory) where T : GameDataBlockBase<T>, new()
		{
			string[] files = Directory.GetFiles(directory);
			if (files.Length == 0)
			{
				return;
			}
			string[] array = files;
			foreach (string text in array)
			{
				if (!text.Contains("Template"))
				{
					AdditiveBlockLoader.TryAddDatablock(Deserialize(text, new T()));
				}
			}
		}

		private static T Deserialize<T>(string jsonPath, T data)
		{
			if (!File.Exists(jsonPath))
			{
				Log.Error("Tried to load a JSON file that doesn't exist");
				return default(T);
			}
			return JsonConvert.DeserializeObject<T>(File.ReadAllText(jsonPath), _settings);
		}

		private static void CreateIfNotReal<T>(string jsonPath, T data, string templateFileContents = "")
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			if (!File.Exists(jsonPath))
			{
				if (!string.IsNullOrEmpty(templateFileContents))
				{
					File.WriteAllText(jsonPath, templateFileContents);
					return;
				}
				string contents = JsonConvert.SerializeObject((Object)(object)data, _settings);
				File.WriteAllText(jsonPath, contents);
			}
		}

		private static JsonSerializerSettings CreateSettings()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			return new JsonSerializerSettings
			{
				Formatting = (Formatting)1,
				ReferenceLoopHandling = (ReferenceLoopHandling)1
			};
		}

		public static void DoesTheBlockExist()
		{
			ArchetypeDataBlock block = GameDataBlockBase<ArchetypeDataBlock>.GetBlock(100002u);
			if (block != null)
			{
				Log.Info("Block does exist public name: " + LocalizedText.op_Implicit(block.PublicName));
			}
			else
			{
				Log.Error("Block does not exist something is fucked");
			}
		}
	}
	internal static class Log
	{
		private static readonly ManualLogSource _Logger;

		static Log()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			_Logger = new ManualLogSource("AdditiveDatablockLoader");
			Logger.Sources.Add((ILogSource)(object)_Logger);
		}

		private static string Format(object msg)
		{
			return msg.ToString();
		}

		public static void Info(BepInExInfoLogInterpolatedStringHandler handler)
		{
			_Logger.LogInfo(handler);
		}

		public static void Info(string str)
		{
			_Logger.LogMessage((object)str);
		}

		public static void Info(object data)
		{
			_Logger.LogMessage((object)Format(data));
		}

		public static void Debug(BepInExDebugLogInterpolatedStringHandler handler)
		{
			_Logger.LogDebug(handler);
		}

		public static void Debug(string str)
		{
			_Logger.LogDebug((object)str);
		}

		public static void Debug(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}

		public static void Error(BepInExErrorLogInterpolatedStringHandler handler)
		{
			_Logger.LogError(handler);
		}

		public static void Error(string str)
		{
			_Logger.LogError((object)str);
		}

		public static void Error(object data)
		{
			_Logger.LogError((object)Format(data));
		}

		public static void Fatal(BepInExFatalLogInterpolatedStringHandler handler)
		{
			_Logger.LogFatal(handler);
		}

		public static void Fatal(string str)
		{
			_Logger.LogFatal((object)str);
		}

		public static void Fatal(object data)
		{
			_Logger.LogFatal((object)Format(data));
		}

		public static void Warn(BepInExWarningLogInterpolatedStringHandler handler)
		{
			_Logger.LogWarning(handler);
		}

		public static void Warn(string str)
		{
			_Logger.LogWarning((object)str);
		}

		public static void Warn(object data)
		{
			_Logger.LogWarning((object)Format(data));
		}
	}
}
namespace AdditiveDatablockLoader.Handlers
{
	internal class AdditiveBlockLoader
	{
		public static void TryAddDatablock<T>(T block) where T : GameDataBlockBase<T>
		{
			if (!GameDataBlockBase<T>.s_blockByID.ContainsKey(((GameDataBlockBase<T>)block).persistentID))
			{
				GameDataBlockBase<T>.AddBlock(block, -1);
			}
			else
			{
				Log.Error("Tried adding block that does not exist \nblock name: " + ((GameDataBlockBase<T>)block).name);
			}
		}
	}
}
namespace AdditiveDatablockLoader.Constructors
{
	internal static class Constructor
	{
		public static string ArchetypeDatablockTemplate = "{\r\n  \"PublicName\": \"Template\",\r\n  \"Description\": \"Template\",\r\n  \"FireMode\": 0,\r\n  \"RecoilDataID\": 12,\r\n  \"DamageBoosterEffect\": 53,\r\n  \"Damage\": 3.0,\r\n  \"DamageFalloff\": {\r\n    \"x\": 25.0,\r\n    \"y\": 100.0\r\n  },\r\n  \"StaggerDamageMulti\": 2.0,\r\n  \"PrecisionDamageMulti\": 1.0,\r\n  \"DefaultClipSize\": 25,\r\n  \"DefaultReloadTime\": 2.0,\r\n  \"CostOfBullet\": 2.6,\r\n  \"ShotDelay\": 0.12,\r\n  \"ShellCasingSize\": 1.0,\r\n  \"ShellCasingSpeedRange\": {\r\n    \"x\": 3.0,\r\n    \"y\": 5.0\r\n  },\r\n  \"PiercingBullets\": false,\r\n  \"PiercingDamageCountLimit\": 5,\r\n  \"HipFireSpread\": 1.0,\r\n  \"AimSpread\": 0.0,\r\n  \"EquipTransitionTime\": 0.35,\r\n  \"EquipSequence\": [\r\n    {\r\n      \"TriggerTime\": 0.0,\r\n      \"Type\": 0,\r\n      \"StringData\": \"Front_Rifle_equip_weaponmovement\"\r\n    },\r\n    {\r\n      \"TriggerTime\": 2.0,\r\n      \"Type\": 7\r\n    }\r\n  ],\r\n  \"AimTransitionTime\": 0.25,\r\n  \"AimSequence\": [],\r\n  \"BurstDelay\": 0.0,\r\n  \"BurstShotCount\": 0,\r\n  \"ShotgunBulletCount\": 0,\r\n  \"ShotgunConeSize\": 0,\r\n  \"ShotgunBulletSpread\": 0,\r\n  \"SpecialChargetupTime\": 0.0,\r\n  \"SpecialCooldownTime\": 0.0,\r\n  \"SpecialSemiBurstCountTimeout\": 0.0,\r\n  \"Sentry_StartFireDelay\": 1.0,\r\n  \"Sentry_RotationSpeed\": 4.0,\r\n  \"Sentry_DetectionMaxRange\": 25.0,\r\n  \"Sentry_DetectionMaxAngle\": 30.0,\r\n  \"Sentry_FireTowardsTargetInsteadOfForward\": false,\r\n  \"Sentry_ForceAimTowardsBody\": false,\r\n  \"Sentry_LongRangeThreshold\": 999.0,\r\n  \"Sentry_ShortRangeThreshold\": 0.0,\r\n  \"Sentry_LegacyEnemyDetection\": true,\r\n  \"Sentry_FireTagOnly\": false,\r\n  \"Sentry_PrioTag\": false,\r\n  \"Sentry_StartFireDelayTagMulti\": 1.0,\r\n  \"Sentry_RotationSpeedTagMulti\": 1.0,\r\n  \"Sentry_DamageTagMulti\": 1.0,\r\n  \"Sentry_StaggerDamageTagMulti\": 1.0,\r\n  \"Sentry_CostOfBulletTagMulti\": 1.0,\r\n  \"Sentry_ShotDelayTagMulti\": 1.0,\r\n  \"name\": \"Archetype_Template\",\r\n  \"internalEnabled\": true,\r\n  \"persistentID\": 100001\r\n}";

		public static string GearCategoryDatablockTemplate = "{\r\n      \"PublicName\": 0,\r\n      \"Description\": 0,\r\n      \"BaseItem\": 108,\r\n      \"HUDIcon\": \"\",\r\n      \"IconRotationOffset\": 0.0,\r\n      \"IconZoomOffset\": 0.0,\r\n      \"FPSArmPoseName\": \"\",\r\n      \"ThirdPersonFullbodyMovement\": 0,\r\n      \"SemiArchetype\": 1,\r\n      \"BurstArchetype\": 3,\r\n      \"AutoArchetype\": 5,\r\n      \"SemiBurstArchetype\": 16,\r\n      \"MeleeArchetype\": 0,\r\n      \"PartAlignPriority\": [],\r\n      \"name\": \"Template\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 100001\r\n}";

		public static string GearFlashlightDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Flashlights/Flashlight_A.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 70,\r\n        \"BundleShard\": 7\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Flashlight_Template\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 100001\r\n}";

		public static string GearFrontPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/Death_Sentence_II_Gear/Front/Front_M134.prefab\",\r\n        \"Children\": [],\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 20,\r\n        \"BundleShard\": 3\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 0,\r\n          \"AlignName\": \"Front_M\"\r\n        },\r\n        {\r\n          \"AlignType\": 1,\r\n          \"AlignName\": \"Front_SE\"\r\n        },\r\n        {\r\n          \"AlignType\": 5,\r\n          \"AlignName\": \"Front_Flash\"\r\n        },\r\n        {\r\n          \"AlignType\": 8,\r\n          \"AlignName\": \"RightHand\"\r\n        },\r\n        {\r\n          \"AlignType\": 7,\r\n          \"AlignName\": \"LeftHand\"\r\n        }\r\n      ],\r\n      \"FireSequence\": [\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 1,\r\n          \"StringData\": \"Front_M134_01_Fire\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 11\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.06,\r\n          \"Type\": 7\r\n        }\r\n      ],\r\n      \"ReloadSequence\": [\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 0,\r\n          \"StringData\": \"Front_Precision_2_reload\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 9,\r\n          \"StringData\": \"Front_Precision_2_reload\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 2,\r\n          \"StringData\": \"Front_Precision_2_reload\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 1,\r\n          \"StringData\": \"Front_Precision_2_reload\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.0,\r\n          \"Type\": 5,\r\n          \"StringData\": \"cannon_reload_foley_move\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.1,\r\n          \"Type\": 5,\r\n          \"StringData\": \"generic_reload_foley_quick\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.4,\r\n          \"Type\": 5,\r\n          \"StringData\": \"cannon_reload_mag_out\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 0.7,\r\n          \"Type\": 5,\r\n          \"StringData\": \"cannon_reload_grab_mag\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.0,\r\n          \"Type\": 5,\r\n          \"StringData\": \"carbine_mag_bump\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.3,\r\n          \"Type\": 5,\r\n          \"StringData\": \"cannon_reload_mag_in\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.35,\r\n          \"Type\": 6\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.8,\r\n          \"Type\": 5,\r\n          \"StringData\": \"carbine_reload_5_pull_slide\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.9,\r\n          \"Type\": 5,\r\n          \"StringData\": \"carbine_reload_5_release_slide\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 1.95,\r\n          \"Type\": 5,\r\n          \"StringData\": \"generic_reload_grab_heavy_weapon_soft\"\r\n        },\r\n        {\r\n          \"TriggerTime\": 2.0,\r\n          \"Type\": 7\r\n        }\r\n      ],\r\n      \"name\": \"Front_M134\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 100001\r\n    }";

		public static string GearMagPartDatablockTemplate = "{\r\n      \"ClipSizeMultiplier\": 1.0,\r\n      \"ReloadTimeMultiplier\": 1.0,\r\n      \"ReloadLeftHandGripAnim\": \"\",\r\n      \"DropSoundType\": 1,\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Mags/Mag_9mm_20rdns_A.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 60,\r\n        \"BundleShard\": 16\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Mag_9mm_20rdns_A\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 100001\r\n}";

		public static string PlayerOfflineGearDataBlockTemplate = "{\r\n      \"Type\": 1,\r\n      \"GearJSON\": \"{\\\"Ver\\\":1,\\\"Name\\\":\\\"Shelling Nano\\\",\\\"Packet\\\":{\\\"Comps\\\":{\\\"Length\\\":15,\\\"a\\\":{\\\"c\\\":1,\\\"v\\\":1},\\\"b\\\":{\\\"c\\\":2,\\\"v\\\":8},\\\"c\\\":{\\\"c\\\":3,\\\"v\\\":108},\\\"d\\\":{\\\"c\\\":4,\\\"v\\\":8},\\\"e\\\":{\\\"c\\\":5,\\\"v\\\":1},\\\"f\\\":{\\\"c\\\":6,\\\"v\\\":1},\\\"g\\\":{\\\"c\\\":7,\\\"v\\\":1},\\\"h\\\":{\\\"c\\\":8,\\\"v\\\":16},\\\"i\\\":{\\\"c\\\":9,\\\"v\\\":15},\\\"j\\\":{\\\"c\\\":10,\\\"v\\\":27},\\\"k\\\":{\\\"c\\\":11,\\\"v\\\":27},\\\"l\\\":{\\\"c\\\":12,\\\"v\\\":45},\\\"m\\\":{\\\"c\\\":19,\\\"v\\\":22},\\\"n\\\":{\\\"c\\\":25,\\\"v\\\":3}},\\\"MatTrans\\\":{\\\"tDecalA\\\":{\\\"position\\\":{\\\"x\\\":-0.098,\\\"y\\\":-0.07,\\\"normalized\\\":{\\\"x\\\":-0.813733459,\\\"y\\\":-0.5812382,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":0.120432548,\\\"sqrMagnitude\\\":0.014504},\\\"scale\\\":0.05},\\\"tDecalB\\\":{\\\"position\\\":{\\\"x\\\":-0.098,\\\"y\\\":-0.07,\\\"normalized\\\":{\\\"x\\\":-0.813733459,\\\"y\\\":-0.5812382,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":0.120432548,\\\"sqrMagnitude\\\":0.014504},\\\"scale\\\":0.04},\\\"tPattern\\\":{\\\"position\\\":{\\\"x\\\":-0.09,\\\"y\\\":-0.03,\\\"normalized\\\":{\\\"x\\\":-0.9486833,\\\"y\\\":-0.316227764,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":0.09486833,\\\"sqrMagnitude\\\":0.009000001},\\\"angle\\\":-90.0,\\\"scale\\\":0.1}},\\\"publicName\\\":{\\\"data\\\":\\\"Pistol Burst\\\"}}}\",\r\n      \"name\": \"PistolBurst\",\r\n      \"internalEnabled\": false,\r\n      \"persistentID\": 67\r\n    }";

		public static string ItemDatablockTemplate = "{\r\n      \"publicName\": \"Collection Case\",\r\n      \"LocalizedName\": 0,\r\n      \"terminalItemShortName\": \"COLLECTION_CASE\",\r\n      \"terminalItemLongName\": 2779390528,\r\n      \"addSerialNumberToName\": false,\r\n      \"registerInTerminalSystem\": true,\r\n      \"DimensionWarpType\": 0,\r\n      \"Shard\": 4,\r\n      \"inventorySlot\": 8,\r\n      \"FPSSettings\": 36,\r\n      \"crosshair\": 0,\r\n      \"HUDIcon\": \"\",\r\n      \"ShowCrosshairWhenAiming\": false,\r\n      \"GUIShowAmmoClip\": false,\r\n      \"GUIShowAmmoPack\": false,\r\n      \"GUIShowAmmoTotalRel\": false,\r\n      \"GUIShowAmmoInfinite\": false,\r\n      \"canMoveQuick\": false,\r\n      \"BlockToolAmmoRefill\": false,\r\n      \"ClassAmmoCostFactor\": 1.0,\r\n      \"ConsumableAmmoMin\": 0,\r\n      \"ConsumableAmmoMax\": 0,\r\n      \"audioEventEquip\": \"\",\r\n      \"FirstPersonPrefabs\": [\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/CarryItemGeneric_FirstPerson.prefab\",\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/Sedatives_Case_FirstPerson.prefab\"\r\n      ],\r\n      \"ThirdPersonPrefabs\": [\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/CarryItemGeneric_ThirdPerson.prefab\",\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/Sedatives_Case_ThirdPerson.prefab\"\r\n      ],\r\n      \"PickupPrefabs\": [\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/CarryItemGeneric_Pickup.prefab\",\r\n        \"Assets/AssetPrefabs/Items/MiscPickups/Sedatives_Case_Pickup.prefab\"\r\n      ],\r\n      \"InstancePrefabs\": [],\r\n      \"EquipTransitionTime\": 0.5,\r\n      \"AimTransitionTime\": 0.5,\r\n      \"FPSArmsAnim\": \"\",\r\n      \"ThirdPersonFullbodyMovementSet\": 0,\r\n      \"LeftHandGripAlign\": \"LeftHand\",\r\n      \"LeftHandGripAnim\": \"Generator_Cell\",\r\n      \"RightHandGripAlign\": \"RightHand\",\r\n      \"RightHandGripAnim\": \"Generator_Cell\",\r\n      \"SightLookAlign\": \"\",\r\n      \"MuzzleAlign\": \"\",\r\n      \"BackpackAlign\": \"\",\r\n      \"name\": \"Carry_Sedatives_Case\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 173\r\n    }";

		public static string ItemFPSDatablockTemplate = "{\r\n      \"localPosHip\": {\r\n        \"x\": 0.08,\r\n        \"y\": -0.1,\r\n        \"z\": 0.31\r\n      },\r\n      \"localRotHip\": {\r\n        \"x\": 0.0,\r\n        \"y\": 0.0,\r\n        \"z\": -2.59\r\n      },\r\n      \"SwayAmount\": 1.0,\r\n      \"crouchTiltAngle\": -5.0,\r\n      \"localPosRelaxed\": {\r\n        \"x\": 0.048,\r\n        \"y\": -0.13,\r\n        \"z\": 0.4\r\n      },\r\n      \"localRotRelaxed\": {\r\n        \"x\": 8.0,\r\n        \"y\": -14.7,\r\n        \"z\": -29.3\r\n      },\r\n      \"localPosZoom\": {\r\n        \"x\": 0.0,\r\n        \"y\": -0.154,\r\n        \"z\": 0.35\r\n      },\r\n      \"localRotZoom\": {\r\n        \"x\": 0.0,\r\n        \"y\": 0.0,\r\n        \"z\": 0.0\r\n      },\r\n      \"bodyOffsetLocal\": {\r\n        \"x\": 0.0,\r\n        \"y\": 0.1,\r\n        \"z\": -0.1\r\n      },\r\n      \"bodyRotationOffsetLocal\": {\r\n        \"x\": 0.0,\r\n        \"y\": 18.0,\r\n        \"z\": 0.0\r\n      },\r\n      \"ItemCameraFOVDefault\": 35,\r\n      \"ItemCameraFOVZoom\": 15,\r\n      \"LookCameraFOVZoom\": 53,\r\n      \"canAim\": true,\r\n      \"onlyStartAimOnPressed\": false,\r\n      \"canRelax\": true,\r\n      \"customDelayUntilRelax\": 0.0,\r\n      \"allowRotToAimPos\": true,\r\n      \"rotToAimPosMinDis\": 1.0,\r\n      \"transitionToAim\": 1,\r\n      \"RecoilAnimation\": 24,\r\n      \"IdleAnimation\": 21,\r\n      \"WalkAnimation\": 9,\r\n      \"RunAnimation\": 15,\r\n      \"JumpAnimation\": 7,\r\n      \"LandAnimation\": 8,\r\n      \"ChargeCancelAnimation\": 0,\r\n      \"DofDefault\": {\r\n        \"enabled\": true,\r\n        \"focusDistance\": 1.0,\r\n        \"aperture\": 1.0,\r\n        \"focalLength\": 6.0\r\n      },\r\n      \"DofAim\": {\r\n        \"enabled\": true,\r\n        \"focusDistance\": 1.0,\r\n        \"aperture\": 1.0,\r\n        \"focalLength\": 7.6\r\n      },\r\n      \"name\": \"MachineGun\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 3\r\n    }";

		public static string RecoilDatablockTemplate = "{\r\n      \"power\": {\r\n        \"Min\": 0.275,\r\n        \"Max\": 0.375\r\n      },\r\n      \"spring\": 3.5,\r\n      \"dampening\": 15.0,\r\n      \"hipFireCrosshairSizeDefault\": 60.0,\r\n      \"hipFireCrosshairRecoilPop\": 20.0,\r\n      \"hipFireCrosshairSizeMax\": 120.0,\r\n      \"horizontalScale\": {\r\n        \"Min\": 0.3,\r\n        \"Max\": -0.6\r\n      },\r\n      \"verticalScale\": {\r\n        \"Min\": 0.4,\r\n        \"Max\": 0.5\r\n      },\r\n      \"directionalSimilarity\": 0.0,\r\n      \"worldToViewSpaceBlendHorizontal\": 0.4,\r\n      \"worldToViewSpaceBlendVertical\": 0.4,\r\n      \"recoilPosImpulse\": {\r\n        \"x\": 0.0,\r\n        \"y\": 0.0,\r\n        \"z\": -0.15\r\n      },\r\n      \"recoilPosShift\": {\r\n        \"x\": 0.0,\r\n        \"y\": 0.0,\r\n        \"z\": -0.02\r\n      },\r\n      \"recoilPosShiftWeight\": 1.0,\r\n      \"recoilPosStiffness\": 350.0,\r\n      \"recoilPosDamping\": 30.0,\r\n      \"recoilPosImpulseWeight\": 1.0,\r\n      \"recoilCameraPosWeight\": 1.0,\r\n      \"recoilAimingWeight\": 2.2,\r\n      \"recoilRotImpulse\": {\r\n        \"x\": 0.0,\r\n        \"y\": 2.0,\r\n        \"z\": 5.0\r\n      },\r\n      \"recoilRotStiffness\": 80.0,\r\n      \"recoilRotDamping\": 8.0,\r\n      \"recoilRotImpulseWeight\": 200.0,\r\n      \"recoilCameraRotWeight\": 1.0,\r\n      \"concussionIntensity\": 1.0,\r\n      \"concussionFrequency\": 15.0,\r\n      \"concussionDuration\": 0.2,\r\n      \"name\": \"SMGAuto_v2\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 2\r\n    }";

		public static string GearReceiverPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Receivers/Receiver_SMG_2.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 30,\r\n        \"BundleShard\": 14\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 4,\r\n          \"AlignName\": \"Receiver_Sight\"\r\n        }\r\n      ],\r\n      \"FireSequence\": [],\r\n      \"name\": \"Receiver_SMG_2\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 6\r\n    }";

		public static string GearStockPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Stocks/Stock_SMG_1.prefab\",\r\n        \"Children\": [],\r\n        \"GearCategoryFilter\": 0,\r\n        \"RightHandGripAnim\": \"SMG_Front_4_Idle\",\r\n        \"AssetBundle\": 40,\r\n        \"BundleShard\": 14\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 8,\r\n          \"AlignName\": \"RightHand\"\r\n        }\r\n      ],\r\n      \"FireSequence\": [],\r\n      \"ReloadSequence\": [],\r\n      \"name\": \"Stock_SMG_1\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 5\r\n    }";

		public static string GearFlashlightPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Flashlights/Flashlight_A.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 70,\r\n        \"BundleShard\": 7\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Flashlight_A\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 2\r\n    }";

		public static string GearSightPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Sights/Sight_17.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 50,\r\n        \"BundleShard\": 4\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 6,\r\n          \"AlignName\": \"Sight_Align\"\r\n        }\r\n      ],\r\n      \"SightProperties\": {\r\n        \"GearFovZoom\": 20,\r\n        \"WorldFovZoom\": 41,\r\n        \"ZoomSensitivityModifier\": 1.0\r\n      },\r\n      \"name\": \"Sight_17\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 18\r\n    }";

		public static string GearToolMainPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Main/Main_Mine_1.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 80,\r\n        \"BundleShard\": 3\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Main_Mine_1\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 12\r\n    }";

		public static string GearToolGripPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Grip/Grip_2.prefab\",\r\n        \"Children\": [],\r\n        \"GearCategoryFilter\": 0,\r\n        \"LeftHandGripAnim\": \"Tool_Grip_2\",\r\n        \"RightHandGripAnim\": \"Tool_Grip_2\",\r\n        \"AssetBundle\": 90,\r\n        \"BundleShard\": 5\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 7,\r\n          \"AlignName\": \"LeftHand\"\r\n        },\r\n        {\r\n          \"AlignType\": 8,\r\n          \"AlignName\": \"RightHand\"\r\n        }\r\n      ],\r\n      \"name\": \"Grip_2\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 3\r\n    }";

		public static string GearToolDelivaryPartDatablockTemplate = "{\r\n      \"ModelDataPerType\": {\r\n        \"DirectPlacement\": {\r\n          \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Delivery/Delivery_Bio_Tracker_1.prefab\",\r\n          \"Children\": [\r\n            \"Assets/Source/Graphics/Gear/ToolParts/delivery/Delivery_Bio_Tracker_1_GripAlign.FBX\"\r\n          ],\r\n          \"GearCategoryFilter\": 0,\r\n          \"LeftHandGripAnim\": \"Delivery_Bio_Tracker_1\",\r\n          \"AssetBundle\": 100,\r\n          \"BundleShard\": 6\r\n        }\r\n      },\r\n      \"GeneralDatas\": [\r\n        {\r\n          \"Type\": 0,\r\n          \"Data\": {\r\n            \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Delivery/Delivery_Bio_Tracker_1.prefab\",\r\n            \"Children\": [\r\n              \"Assets/Source/Graphics/Gear/ToolParts/delivery/Delivery_Bio_Tracker_1_GripAlign.FBX\"\r\n            ],\r\n            \"GearCategoryFilter\": 0,\r\n            \"LeftHandGripAnim\": \"Delivery_Bio_Tracker_1\",\r\n            \"AssetBundle\": 100,\r\n            \"BundleShard\": 6\r\n          }\r\n        }\r\n      ],\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 15,\r\n          \"AlignName\": \"Bio_Tracker_1_Targeting\"\r\n        },\r\n        {\r\n          \"AlignType\": 16,\r\n          \"AlignName\": \"Bio_Tracker_1_Screen\"\r\n        },\r\n        {\r\n          \"AlignType\": 7,\r\n          \"AlignName\": \"LeftHand\"\r\n        }\r\n      ],\r\n      \"name\": \"Delivery_Bio_Tracker\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 3\r\n    }";

		public static string GearToolPayloadPartDatablockTemplate = "{\r\n      \"ModelDataPerType\": {\r\n        \"Glue\": {\r\n          \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Payload/Payload_Glue_1.prefab\",\r\n          \"GearCategoryFilter\": 0,\r\n          \"AssetBundle\": 110,\r\n          \"BundleShard\": 0\r\n        },\r\n        \"Explosive\": {\r\n          \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Payload/Payload_Mine_1.prefab\",\r\n          \"GearCategoryFilter\": 0,\r\n          \"AssetBundle\": 110,\r\n          \"BundleShard\": 0\r\n        }\r\n      },\r\n      \"GeneralDatas\": [\r\n        {\r\n          \"Type\": 1,\r\n          \"Data\": {\r\n            \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Payload/Payload_Glue_1.prefab\",\r\n            \"GearCategoryFilter\": 0,\r\n            \"AssetBundle\": 110,\r\n            \"BundleShard\": 0\r\n          }\r\n        },\r\n        {\r\n          \"Type\": 0,\r\n          \"Data\": {\r\n            \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Payload/Payload_Mine_1.prefab\",\r\n            \"GearCategoryFilter\": 0,\r\n            \"AssetBundle\": 110,\r\n            \"BundleShard\": 0\r\n          }\r\n        }\r\n      ],\r\n      \"Aligns\": [],\r\n      \"name\": \"Payload_a\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 2\r\n    }";

		public static string GearToolTargetingPartDatablockTemplate = "{\r\n      \"ModelDataPerType\": {\r\n        \"Alpha\": {\r\n          \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Targeting/Targeting_2.prefab\",\r\n          \"GearCategoryFilter\": 0,\r\n          \"AssetBundle\": 120,\r\n          \"BundleShard\": 5\r\n        }\r\n      },\r\n      \"GeneralDatas\": [\r\n        {\r\n          \"Type\": 0,\r\n          \"Data\": {\r\n            \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Targeting/Targeting_2.prefab\",\r\n            \"GearCategoryFilter\": 0,\r\n            \"AssetBundle\": 120,\r\n            \"BundleShard\": 5\r\n          }\r\n        }\r\n      ],\r\n      \"Aligns\": [],\r\n      \"name\": \"Targeting_2\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 2\r\n    }";

		public static string GearToolScreenPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Tools/Screen/Screen_4.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 130,\r\n        \"BundleShard\": 3\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Screen_4\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 6\r\n    }";

		public static string GearMeleeHeadPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Bat_1.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 140,\r\n        \"BundleShard\": 10\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Head_Bat_1\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 14\r\n    }";

		public static string GearMeleeNeckPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_10.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 150,\r\n        \"BundleShard\": 1\r\n      },\r\n      \"Aligns\": [\r\n        {\r\n          \"AlignType\": 20,\r\n          \"AlignName\": \"Head_align\"\r\n        }\r\n      ],\r\n      \"name\": \"Neck_Hammer_10\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 4\r\n    }";

		public static string GearMeleeHandlePartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_6.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 160,\r\n        \"BundleShard\": 15\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Handle_Hammer_6\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 9\r\n    }";

		public static string GearMeleePommelPartDatablockTemplate = "{\r\n      \"General\": {\r\n        \"Model\": \"Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Knife_1.prefab\",\r\n        \"GearCategoryFilter\": 0,\r\n        \"AssetBundle\": 170,\r\n        \"BundleShard\": 19\r\n      },\r\n      \"Aligns\": [],\r\n      \"name\": \"Pommel_Knife_1\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 10\r\n    }";

		public static string MeleeAnimationDatablockTemplate = "{\r\n      \"HoldToChargeTime\": 0.2,\r\n      \"MaxDamageChargeTime\": 1.8,\r\n      \"AutoAttackTime\": 4.2,\r\n      \"AutoAttackWarningTime\": 3.7,\r\n      \"FPIdleAnim\": {\r\n        \"Name\": \"sledgehammer_idle\"\r\n      },\r\n      \"FPSettleAnim\": {\r\n        \"Name\": \"sledgehammer_settle\"\r\n      },\r\n      \"FPWalkAnim\": {\r\n        \"Name\": \"sledgehammer_walk\"\r\n      },\r\n      \"FPRunAnim\": {\r\n        \"Name\": \"sledgehammer_run\"\r\n      },\r\n      \"FPJumpAnim\": {\r\n        \"Name\": \"sledgehammer_jump\"\r\n      },\r\n      \"FPLandAnim\": {\r\n        \"Name\": \"sledgehammer_land\"\r\n      },\r\n      \"FPChargeCancelAnimRight\": {\r\n        \"Name\": \"sledgehammer_chargeup_cancel\"\r\n      },\r\n      \"FPChargeCancelAnimLeft\": {\r\n        \"Name\": \"sledgehammer_chargeup2_cancel\"\r\n      },\r\n      \"FPAttackMissRight\": {\r\n        \"AttackLengthTime\": 1.0,\r\n        \"AttackHitTime\": 0.333333343,\r\n        \"DamageStartTime\": 0.333333343,\r\n        \"DamageEndTime\": 0.766666651,\r\n        \"AttackCamFwdHitTime\": 0.5,\r\n        \"ComboEarlyTime\": 0.6666667,\r\n        \"Side\": 1,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_miss\"\r\n        },\r\n        \"AnimBlendIn\": 0.2,\r\n        \"AttackLengthFrameTime\": 30.0,\r\n        \"AttackHitFrameTime\": 10.0,\r\n        \"DamageStartFrameTime\": 10.0,\r\n        \"DamageEndFrameTime\": 23.0,\r\n        \"AttackCamFwdHitFrameTime\": 15.0,\r\n        \"ComboEarlyFrameTime\": 20.0\r\n      },\r\n      \"FPAttackMissLeft\": {\r\n        \"AttackLengthTime\": 1.0,\r\n        \"AttackHitTime\": 0.333333343,\r\n        \"DamageStartTime\": 0.333333343,\r\n        \"DamageEndTime\": 0.766666651,\r\n        \"AttackCamFwdHitTime\": 0.5,\r\n        \"ComboEarlyTime\": 0.6666667,\r\n        \"Side\": 2,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_miss2\"\r\n        },\r\n        \"AnimBlendIn\": 0.2,\r\n        \"AttackLengthFrameTime\": 30.0,\r\n        \"AttackHitFrameTime\": 10.0,\r\n        \"DamageStartFrameTime\": 10.0,\r\n        \"DamageEndFrameTime\": 23.0,\r\n        \"AttackCamFwdHitFrameTime\": 15.0,\r\n        \"ComboEarlyFrameTime\": 20.0\r\n      },\r\n      \"FPAttackHitRight\": {\r\n        \"AttackLengthTime\": 0.5,\r\n        \"AttackHitTime\": 0.5,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.4,\r\n        \"Side\": 1,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_hit\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 15.0,\r\n        \"AttackHitFrameTime\": 15.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 12.0\r\n      },\r\n      \"FPAttackHitLeft\": {\r\n        \"AttackLengthTime\": 0.5,\r\n        \"AttackHitTime\": 0.5,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.4,\r\n        \"Side\": 2,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_hit2\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 15.0,\r\n        \"AttackHitFrameTime\": 15.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 12.0\r\n      },\r\n      \"FPAttackPush\": {\r\n        \"AttackLengthTime\": 0.6666667,\r\n        \"AttackHitTime\": 0.0,\r\n        \"DamageStartTime\": 0.13333334,\r\n        \"DamageEndTime\": 0.266666681,\r\n        \"AttackCamFwdHitTime\": 0.333333343,\r\n        \"ComboEarlyTime\": 0.5,\r\n        \"Side\": 3,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_push\"\r\n        },\r\n        \"AnimBlendIn\": 0.2,\r\n        \"AttackLengthFrameTime\": 20.0,\r\n        \"AttackHitFrameTime\": 0.0,\r\n        \"DamageStartFrameTime\": 4.0,\r\n        \"DamageEndFrameTime\": 8.0,\r\n        \"AttackCamFwdHitFrameTime\": 10.0,\r\n        \"ComboEarlyFrameTime\": 15.0\r\n      },\r\n      \"FPAttackChargeUpRight\": {\r\n        \"AttackLengthTime\": 0.0,\r\n        \"AttackHitTime\": 0.0,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.0,\r\n        \"Side\": 1,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_chargeup\"\r\n        },\r\n        \"AnimBlendIn\": 0.23,\r\n        \"AttackLengthFrameTime\": 0.0,\r\n        \"AttackHitFrameTime\": 0.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 0.0\r\n      },\r\n      \"FPAttackChargeUpLeft\": {\r\n        \"AttackLengthTime\": 0.0,\r\n        \"AttackHitTime\": 0.0,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.0,\r\n        \"Side\": 2,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_chargeup2\"\r\n        },\r\n        \"AnimBlendIn\": 0.3,\r\n        \"AttackLengthFrameTime\": 0.0,\r\n        \"AttackHitFrameTime\": 0.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 0.0\r\n      },\r\n      \"FPAttackChargeUpReleaseRight\": {\r\n        \"AttackLengthTime\": 0.366666675,\r\n        \"AttackHitTime\": 0.13333334,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.366666675,\r\n        \"AttackCamFwdHitTime\": 0.13333334,\r\n        \"ComboEarlyTime\": 0.3,\r\n        \"Side\": 1,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_chargeup_release\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 11.0,\r\n        \"AttackHitFrameTime\": 4.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 11.0,\r\n        \"AttackCamFwdHitFrameTime\": 4.0,\r\n        \"ComboEarlyFrameTime\": 9.0\r\n      },\r\n      \"FPAttackChargeUpReleaseLeft\": {\r\n        \"AttackLengthTime\": 0.366666675,\r\n        \"AttackHitTime\": 0.13333334,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.366666675,\r\n        \"AttackCamFwdHitTime\": 0.13333334,\r\n        \"ComboEarlyTime\": 0.3,\r\n        \"Side\": 2,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_chargeup2_release\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 11.0,\r\n        \"AttackHitFrameTime\": 4.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 11.0,\r\n        \"AttackCamFwdHitFrameTime\": 4.0,\r\n        \"ComboEarlyFrameTime\": 9.0\r\n      },\r\n      \"FPAttackChargeUpHitRight\": {\r\n        \"AttackLengthTime\": 0.5,\r\n        \"AttackHitTime\": 0.5,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.4,\r\n        \"Side\": 1,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_hit\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 15.0,\r\n        \"AttackHitFrameTime\": 15.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 12.0\r\n      },\r\n      \"FPAttackChargeUpHitLeft\": {\r\n        \"AttackLengthTime\": 0.5,\r\n        \"AttackHitTime\": 0.5,\r\n        \"DamageStartTime\": 0.0,\r\n        \"DamageEndTime\": 0.0,\r\n        \"AttackCamFwdHitTime\": 0.0,\r\n        \"ComboEarlyTime\": 0.4,\r\n        \"Side\": 2,\r\n        \"Anim\": {\r\n          \"Name\": \"sledgehammer_hit2\"\r\n        },\r\n        \"AnimBlendIn\": 0.0,\r\n        \"AttackLengthFrameTime\": 15.0,\r\n        \"AttackHitFrameTime\": 15.0,\r\n        \"DamageStartFrameTime\": 0.0,\r\n        \"DamageEndFrameTime\": 0.0,\r\n        \"AttackCamFwdHitFrameTime\": 0.0,\r\n        \"ComboEarlyFrameTime\": 12.0\r\n      },\r\n      \"TPAnimHashIdle\": {\r\n        \"Name\": \"Sledgehammer_Idle\"\r\n      },\r\n      \"TPAnimHashIdleCrouch\": {\r\n        \"Name\": \"Sledgehammer_Idle_crouch\"\r\n      },\r\n      \"TPAnimHashAttackLeft\": {\r\n        \"Name\": \"Sledgehammer_SwingLeft\"\r\n      },\r\n      \"TPAnimHashAttackLeftCrouch\": {\r\n        \"Name\": \"Sledgehammer_SwingLeft_crouch\"\r\n      },\r\n      \"TPAnimHashAttackLeftCharge\": {\r\n        \"Name\": \"Sledgehammer_Charge_Left_Start\"\r\n      },\r\n      \"TPAnimHashAttackLeftChargeCrouch\": {\r\n        \"Name\": \"Sledgehammer_Charge_Left_Start_Crouch\"\r\n      },\r\n      \"TPAnimHashAttackLeftRelease\": {\r\n        \"Name\": \"Sledgehammer_Charge_Left_Release\"\r\n      },\r\n      \"TPAnimHashAttackLeftReleaseCrouch\": {\r\n        \"Name\": \"Sledgehammer_Charge_Left_Release_Crouch\"\r\n      },\r\n      \"name\": \"Hammer\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 1\r\n    }";

		public static string MeleeArchetypeDatablockTemplate = "{\r\n      \"PublicName\": \"Hammer\",\r\n      \"NoiseLevel\": 0,\r\n      \"ChargedAttackDamage\": 20.0,\r\n      \"LightAttackDamage\": 3.0,\r\n      \"LightStaggerMulti\": 1.0,\r\n      \"ChargedStaggerMulti\": 1.3,\r\n      \"LightPrecisionMulti\": 1.0,\r\n      \"ChargedPrecisionMulti\": 1.0,\r\n      \"LightEnvironmentMulti\": 3.0,\r\n      \"ChargedEnvironmentMulti\": 3.0,\r\n      \"LightBackstabberMulti\": 1.0,\r\n      \"ChargedBackstabberMulti\": 1.0,\r\n      \"LightSleeperMulti\": 1.0,\r\n      \"ChargedSleeperMulti\": 1.0,\r\n      \"SkipLimbDestruction\": false,\r\n      \"CameraDamageRayLength\": 1.8,\r\n      \"AttackSphereRadius\": 0.3,\r\n      \"PushDamageSphereRadius\": 1.0,\r\n      \"CanHitMultipleEnemies\": false,\r\n      \"EvaluateHoldBeforeAttack\": false,\r\n      \"PlayImpactEffect\": true,\r\n      \"AllowRunningWhenCharging\": true,\r\n      \"PlayerRunSpeedMultiWhileCharging\": 1.0,\r\n      \"MeleeAnimationSet\": 1,\r\n      \"MeleeSFXSet\": 1,\r\n      \"ChargedAttackStaminaCost\": {\r\n        \"baseStaminaCostInCombat\": 0.05,\r\n        \"baseStaminaCostOutOfCombat\": 0.05,\r\n        \"resetRestingTimerInCombat\": true,\r\n        \"resetRestingTimerOutOfCombat\": true\r\n      },\r\n      \"LightAttackStaminaCost\": {\r\n        \"baseStaminaCostInCombat\": 0.0,\r\n        \"baseStaminaCostOutOfCombat\": 0.0,\r\n        \"resetRestingTimerInCombat\": false,\r\n        \"resetRestingTimerOutOfCombat\": false\r\n      },\r\n      \"PushStaminaCost\": {\r\n        \"baseStaminaCostInCombat\": 0.05,\r\n        \"baseStaminaCostOutOfCombat\": 0.05,\r\n        \"resetRestingTimerInCombat\": false,\r\n        \"resetRestingTimerOutOfCombat\": false\r\n      },\r\n      \"name\": \"Hammer\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 1\r\n    }";

		public static string WeaponMuzzleFlashDatablockTemplate = "{\r\n      \"muzzleFlashFPS\": \"Assets/AssetPrefabs/Effects/Weapon/MuzzleFlash/AssaultRifle_MuzzleFlash_FPS.prefab\",\r\n      \"muzzleFlash3RD\": \"Assets/AssetPrefabs/Effects/Weapon/MuzzleFlash/AssaultRifle_MuzzleFlash_3RD.prefab\",\r\n      \"AssetBundleName\": 5,\r\n      \"AssetBundleShard\": 6,\r\n      \"name\": \"GaussRifle\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 36\r\n    }";

		public static string WeaponShellCasingDatablockTemplate = "{\r\n      \"ShellCasingType\": 3,\r\n      \"name\": \"Shell_338\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 3\r\n    }";

		public static string WeaponAudioDatablockTemplate = "{\r\n      \"eventOnSemiFire2D\": [\r\n        \"PistolBodyB\",\r\n        \"PistolNoiseB\",\r\n        \"PistolMechB\",\r\n        \"PistolReverb\",\r\n        \"pistol_kick_semi_a\"\r\n      ],\r\n      \"eventOnBurstFire2D\": [\r\n        \"PistolBodyA\",\r\n        \"PistolNoiseA\",\r\n        \"PistolMechA\",\r\n        \"PistolReverb\",\r\n        \"pistol_kick_semi_a\"\r\n      ],\r\n      \"eventOnAutoFireStart2D\": [\r\n        \"PistolBodyBAuto\",\r\n        \"PistolMechBAuto\",\r\n        \"PistolNoiseBAuto\",\r\n        \"PistolAutoWet\",\r\n        \"pistol_kick_auto_a\"\r\n      ],\r\n      \"eventOnAutoFireEnd2D\": [\r\n        \"PistolAutoEnd \"\r\n      ],\r\n      \"eventOnBurstFireOneShot2D\": [],\r\n      \"eventOnChargeup2D\": [\r\n        \"GaussPistolChargeUp\"\r\n      ],\r\n      \"eventOnCooldown2D\": [\r\n        \"GaussPistolCooldown\"\r\n      ],\r\n      \"eventOnChargeupEnd2D\": \"GaussPistolChargeUpEnd\",\r\n      \"eventOnCooldownEnd2D\": \"GaussPistolCooldownEnd\",\r\n      \"eventOnSemiFire3D\": [\r\n        \"PistolBodyB3D\",\r\n        \"PistolNoiseB3D\",\r\n        \"PistolMechB3D \",\r\n        \"PistolReverb3D\"\r\n      ],\r\n      \"eventOnBurstFire3D\": [\r\n        \"PistolBodyA3D\",\r\n        \"PistolNoiseA3D\",\r\n        \"PistolMechA3D \",\r\n        \"PistolReverb3D\"\r\n      ],\r\n      \"eventOnAutoFireStart3D\": [\r\n        \"PistolBodyBAuto3D\",\r\n        \"PistolMechBAuto3D\",\r\n        \"PistolNoiseBAuto3D\",\r\n        \"PistolAutoWet3D\"\r\n      ],\r\n      \"eventOnAutoFireEnd3D\": [\r\n        \"PistolAutoEnd3D\"\r\n      ],\r\n      \"eventOnChargeup3D\": [\r\n        \"GaussPistolChargeUp\"\r\n      ],\r\n      \"eventOnCooldown3D\": [\r\n        \"GaussPistolCooldown\"\r\n      ],\r\n      \"eventOnChargeupEnd3D\": \"GaussPistolChargeUpEnd\",\r\n      \"eventOnCooldownEnd3D\": \"GaussPistolCooldownEnd\",\r\n      \"eventOnSyncedBurstFirePerShot3D\": [\r\n        \"PistolBodyB3D\",\r\n        \"PistolMechB3D\",\r\n        \"PistolNoiseB3D\",\r\n        \"PistolReverb3D\"\r\n      ],\r\n      \"eventOnSyncedAutoFirePerShot3D\": [\r\n        \"PistolBodyB3D\",\r\n        \"PistolMechB3D\",\r\n        \"PistolNoiseB3D\",\r\n        \"PistolReverb3D\"\r\n      ],\r\n      \"eventClick\": \"PistolDryFire\",\r\n      \"eventReload\": \"PistolReload\",\r\n      \"TriggerBurstAudioForEachShot\": true,\r\n      \"TriggerAutoAudioForEachShot\": false,\r\n      \"eventEquip\": \"PistolEquip\",\r\n      \"eventZoomIn\": \"PistolIronsightIn\",\r\n      \"eventZoomOut\": \"PistolIronsightOut\",\r\n      \"name\": \"Handgun\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 1\r\n    }";

		public static string MiningMarkerDatablockTemplate = "{\r\n      \"CommonData\": {\r\n        \"FunctionComponentLinks\": [\r\n          [],\r\n          [],\r\n          [],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4,\r\n            0,\r\n            1,\r\n            7\r\n          ],\r\n          [],\r\n          [\r\n            3,\r\n            0,\r\n            1,\r\n            2,\r\n            4,\r\n            5,\r\n            6\r\n          ],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4\r\n          ],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4,\r\n            0,\r\n            1,\r\n            7\r\n          ],\r\n          [\r\n            3,\r\n            0,\r\n            1,\r\n            2,\r\n            4,\r\n            5,\r\n            6,\r\n            7\r\n          ],\r\n          [],\r\n          [\r\n            3,\r\n            0,\r\n            1,\r\n            2,\r\n            4,\r\n            5,\r\n            6,\r\n            7\r\n          ],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4,\r\n            0,\r\n            1,\r\n            7\r\n          ],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4,\r\n            0,\r\n            1,\r\n            7\r\n          ],\r\n          [],\r\n          [\r\n            0,\r\n            1,\r\n            2,\r\n            3,\r\n            4,\r\n            5,\r\n            6,\r\n            7\r\n          ],\r\n          [\r\n            5,\r\n            6,\r\n            2,\r\n            3,\r\n            4\r\n          ],\r\n          [],\r\n          [\r\n            1,\r\n            2,\r\n            3,\r\n            4,\r\n            5,\r\n            7\r\n          ],\r\n          [],\r\n          [],\r\n          [\r\n            0,\r\n            1,\r\n            2,\r\n            3,\r\n            4,\r\n            5,\r\n            6,\r\n            7\r\n          ],\r\n          []\r\n        ],\r\n        \"Compositions\": [\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_a_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 4\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_b_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 1\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_c_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 2\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_d_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 3\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_e_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 4\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_f_gh.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 1\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_g.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 1\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Mining/Props/storage/storage_open_2500x2000x800/storage_open_2500x2000x800_h.prefab\",\r\n            \"function\": 0,\r\n            \"Shard\": 2\r\n          }\r\n        ],\r\n        \"AssetBundleName\": 2,\r\n        \"Group\": 2,\r\n        \"FunctionPotential\": 20.0,\r\n        \"RotationSnap\": 0,\r\n        \"RotationNoise\": 0.0,\r\n        \"EditorMesh\": \"Markerproducers/Mining/M_storage_open_2500x2000x800\",\r\n        \"BoundingVolume\": 4000000.0\r\n      },\r\n      \"name\": \"mining_storage_open_2500x2000x800\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 37\r\n    }";

		public static string TechMarkerDatablockTemplate = "{\r\n      \"CommonData\": {\r\n        \"FunctionComponentLinks\": [\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          []\r\n        ],\r\n        \"Compositions\": [\r\n          {\r\n            \"weight\": 2.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Generic/Signs/sign_2x2_tech_wallflat.prefab\",\r\n            \"function\": 9,\r\n            \"Shard\": 19\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"function\": 0,\r\n            \"Shard\": 19\r\n          }\r\n        ],\r\n        \"AssetBundleName\": 3,\r\n        \"Group\": 10,\r\n        \"FunctionPotential\": 1.0,\r\n        \"RotationSnap\": 0,\r\n        \"RotationNoise\": 0.0,\r\n        \"EditorMesh\": \"Markerproducers/Mining/M_mining_sign_200x50x200\",\r\n        \"BoundingVolume\": 2000.0\r\n      },\r\n      \"name\": \"Tech_sign_200x50x200\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 9\r\n    }";

		public static string ServiceMarkerDatablockTemplate = "{\r\n      \"CommonData\": {\r\n        \"FunctionComponentLinks\": [\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          [],\r\n          []\r\n        ],\r\n        \"Compositions\": [\r\n          {\r\n            \"weight\": 1.0,\r\n            \"prefab\": \"Assets/AssetPrefabs/Complex/Generic/Signs/sign_2x2_service_textonly.prefab\",\r\n            \"function\": 9,\r\n            \"Shard\": 0\r\n          },\r\n          {\r\n            \"weight\": 1.0,\r\n            \"function\": 0,\r\n            \"Shard\": 0\r\n          }\r\n        ],\r\n        \"AssetBundleName\": 4,\r\n        \"Group\": 12,\r\n        \"FunctionPotential\": 1.0,\r\n        \"RotationSnap\": 0,\r\n        \"RotationNoise\": 0.0,\r\n        \"EditorMesh\": \"Markerproducers/Mining/M_mining_sign_200x50x200\",\r\n        \"BoundingVolume\": 2000.0\r\n      },\r\n      \"name\": \"service_sign_200x50x200\",\r\n      \"internalEnabled\": true,\r\n      \"persistentID\": 2\r\n    }";
	}
}