ghorsington 3 years ago
parent
commit
04bd438242
82 changed files with 4160 additions and 647 deletions
  1. 5 5
      Assembly-CSharp.sln
  2. 30 17
      Assembly-CSharp/Assembly-CSharp.csproj
  3. 2 2
      Assembly-CSharp/BaseKagManager.cs
  4. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  5. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  6. 38 0
      Assembly-CSharp/BigThumbnail.cs
  7. 56 2
      Assembly-CSharp/BoneMorph_.cs
  8. 11 0
      Assembly-CSharp/CM3.cs
  9. 4 4
      Assembly-CSharp/CMSystem.cs
  10. 9 7
      Assembly-CSharp/CharacterMgr.cs
  11. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  12. 8 3
      Assembly-CSharp/DailyCtrl.cs
  13. 6 1
      Assembly-CSharp/DailyMgr.cs
  14. 1 1
      Assembly-CSharp/DeskManager.cs
  15. 3 3
      Assembly-CSharp/DynamicBone.cs
  16. 1 1
      Assembly-CSharp/DynamicSkirtBone.cs
  17. 1 1
      Assembly-CSharp/EditMod.cs
  18. 1 1
      Assembly-CSharp/EmpireLifeModeManager.cs
  19. 22 10
      Assembly-CSharp/FaceWindow.cs
  20. 1 1
      Assembly-CSharp/FacilityManager.cs
  21. 1 1
      Assembly-CSharp/GameInShopMain.cs
  22. 20 4
      Assembly-CSharp/GameMain.cs
  23. 1 1
      Assembly-CSharp/GameModeManager.cs
  24. 20 46
      Assembly-CSharp/GameUty.cs
  25. 2 2
      Assembly-CSharp/HandSignShortcut.cs
  26. 3 3
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  27. 17 0
      Assembly-CSharp/MPN.cs
  28. 8 8
      Assembly-CSharp/MPN_TYPE_RANGE.cs
  29. 133 32
      Assembly-CSharp/Maid.cs
  30. 30 6
      Assembly-CSharp/MaidParts.cs
  31. 4 3
      Assembly-CSharp/MaidProp.cs
  32. 17 5
      Assembly-CSharp/MaidStatus/PersonalEventBlocker.cs
  33. 26 5
      Assembly-CSharp/MaidStatus/Status.cs
  34. 14 10
      Assembly-CSharp/MaidStatus/YotogiClass.cs
  35. 53 0
      Assembly-CSharp/MayuAlphaWindow.cs
  36. 199 149
      Assembly-CSharp/Menu.cs
  37. 1 1
      Assembly-CSharp/Misc.cs
  38. 3 3
      Assembly-CSharp/ModCompile.cs
  39. 2 2
      Assembly-CSharp/OvrIK.cs
  40. 5 2
      Assembly-CSharp/PhotoManEditManager.cs
  41. 25 2
      Assembly-CSharp/PhotoModeMain.cs
  42. 1 1
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  43. 7 10
      Assembly-CSharp/PhotoWindowManager.cs
  44. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  45. 1 0
      Assembly-CSharp/PresetServer.cs
  46. 35 23
      Assembly-CSharp/ProfileCtrl.cs
  47. 2 2
      Assembly-CSharp/ProfileMgr.cs
  48. 12 0
      Assembly-CSharp/RandomPresetContent.cs
  49. 195 40
      Assembly-CSharp/SceneEdit.cs
  50. 43 0
      Assembly-CSharp/SceneEditInfo.cs
  51. 37 18
      Assembly-CSharp/SceneEditWindow/CustomViewItem.cs
  52. 3 0
      Assembly-CSharp/SceneEditWindow/CustomViewItemData.cs
  53. 2 1
      Assembly-CSharp/SceneEditWindow/CustomViewWindow.cs
  54. 26 5
      Assembly-CSharp/SceneFreeModeSelectManager.cs
  55. 1 1
      Assembly-CSharp/SceneNPCEdit/SaveData.cs
  56. 54 19
      Assembly-CSharp/SceneUserEditMain.cs
  57. 15 19
      Assembly-CSharp/Schedule/ScheduleAPI.cs
  58. 1 1
      Assembly-CSharp/ScheduleTaskViewer.cs
  59. 47 1
      Assembly-CSharp/ScriptManager.cs
  60. 12 6
      Assembly-CSharp/SystemShortcut.cs
  61. 53 31
      Assembly-CSharp/TBody.cs
  62. 50 25
      Assembly-CSharp/TBodySkin.cs
  63. 244 60
      Assembly-CSharp/TMorph.cs
  64. 25 6
      Assembly-CSharp/WindowPartsFaceMorph.cs
  65. 1 1
      Assembly-CSharp/WindowPartsFingerPreset.cs
  66. 1 1
      Assembly-CSharp/YotogiParamBasicBar.cs
  67. 79 27
      Assembly-CSharp/Yotogis/Skill.cs
  68. 9 0
      Assembly-CSharp/com/workman/cm3d2/scene/dailyEtc/DailyAPI.cs
  69. 31 0
      Assembly-CSharp/scoutmode/LockData.cs
  70. 77 0
      Assembly-CSharp/scoutmode/SceneScoutScreenManager.cs
  71. 181 0
      Assembly-CSharp/scoutmode/ScoutCharacterSelectCtrl.cs
  72. 123 0
      Assembly-CSharp/scoutmode/ScoutInstanceData.cs
  73. 344 0
      Assembly-CSharp/scoutmode/ScoutMaidData.cs
  74. 263 0
      Assembly-CSharp/scoutmode/ScoutMaidOverrideData.cs
  75. 334 0
      Assembly-CSharp/scoutmode/ScoutMainScreenManager.cs
  76. 418 0
      Assembly-CSharp/scoutmode/ScoutManager.cs
  77. 278 0
      Assembly-CSharp/scoutmode/ScoutOption.cs
  78. 32 0
      Assembly-CSharp/scoutmode/ScoutOptionData.cs
  79. 117 0
      Assembly-CSharp/scoutmode/ScoutProgressInformation.cs
  80. 149 0
      Assembly-CSharp/scoutmode/ScoutStatusPanel.cs
  81. 22 0
      Assembly-CSharp/uGUIListViewer.cs
  82. 47 0
      Assembly-CSharp/wf/CsvCommonIdManager.cs

+ 5 - 5
Assembly-CSharp.sln

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.28729.10
 VisualStudioVersion = 16.0.28729.10
 MinimumVisualStudioVersion = 10.0.40219.1
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{A26CA03A-4339-487D-875B-38D0FBCFEDDB}"
 EndProject
 EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A26CA03A-4339-487D-875B-38D0FBCFEDDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A26CA03A-4339-487D-875B-38D0FBCFEDDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A26CA03A-4339-487D-875B-38D0FBCFEDDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A26CA03A-4339-487D-875B-38D0FBCFEDDB}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 30 - 17
Assembly-CSharp/Assembly-CSharp.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{2815CB53-56FE-4331-A6F6-B4F864C9A9B7}</ProjectGuid>
+    <ProjectGuid>{A26CA03A-4339-487D-875B-38D0FBCFEDDB}</ProjectGuid>
     <OutputType>Library</OutputType>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -34,52 +34,52 @@
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <Reference Include="Assembly-CSharp-firstpass">
     <Reference Include="Assembly-CSharp-firstpass">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="Assembly-UnityScript-firstpass">
     <Reference Include="Assembly-UnityScript-firstpass">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="FoveUnityPlugin">
     <Reference Include="FoveUnityPlugin">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="Ionic.Zlib">
     <Reference Include="Ionic.Zlib">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="JsonFx.Json">
     <Reference Include="JsonFx.Json">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="LeapCSharp.NET3.5">
     <Reference Include="LeapCSharp.NET3.5">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System">
     <Reference Include="System">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Core">
     <Reference Include="System.Core">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Drawing">
     <Reference Include="System.Drawing">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Windows.Forms">
     <Reference Include="System.Windows.Forms">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Xml">
     <Reference Include="System.Xml">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Xml.Linq">
     <Reference Include="System.Xml.Linq">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="UnityEngine">
     <Reference Include="UnityEngine">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="UnityEngine.UI">
     <Reference Include="UnityEngine.UI">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="Win32">
     <Reference Include="Win32">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\Win32.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\Win32.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="zxing.unity">
     <Reference Include="zxing.unity">
-      <HintPath>A:\com3d2_up147.1\data\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
+      <HintPath>A:\com3d2_up148\data\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
@@ -760,6 +760,7 @@
     <Compile Include="MaterialColorChanger.cs" />
     <Compile Include="MaterialColorChanger.cs" />
     <Compile Include="MathCM.cs" />
     <Compile Include="MathCM.cs" />
     <Compile Include="MatPropSave.cs" />
     <Compile Include="MatPropSave.cs" />
+    <Compile Include="MayuAlphaWindow.cs" />
     <Compile Include="McSkip.cs" />
     <Compile Include="McSkip.cs" />
     <Compile Include="Menu.cs" />
     <Compile Include="Menu.cs" />
     <Compile Include="MessageClass.cs" />
     <Compile Include="MessageClass.cs" />
@@ -1146,6 +1147,18 @@
     <Compile Include="Schedule\WorkResultSceneMode.cs" />
     <Compile Include="Schedule\WorkResultSceneMode.cs" />
     <Compile Include="Schedule\WorkResultSlot.cs" />
     <Compile Include="Schedule\WorkResultSlot.cs" />
     <Compile Include="Score_Mgr.cs" />
     <Compile Include="Score_Mgr.cs" />
+    <Compile Include="scoutmode\LockData.cs" />
+    <Compile Include="scoutmode\SceneScoutScreenManager.cs" />
+    <Compile Include="scoutmode\ScoutCharacterSelectCtrl.cs" />
+    <Compile Include="scoutmode\ScoutInstanceData.cs" />
+    <Compile Include="scoutmode\ScoutMaidData.cs" />
+    <Compile Include="scoutmode\ScoutMaidOverrideData.cs" />
+    <Compile Include="scoutmode\ScoutMainScreenManager.cs" />
+    <Compile Include="scoutmode\ScoutManager.cs" />
+    <Compile Include="scoutmode\ScoutOption.cs" />
+    <Compile Include="scoutmode\ScoutOptionData.cs" />
+    <Compile Include="scoutmode\ScoutProgressInformation.cs" />
+    <Compile Include="scoutmode\ScoutStatusPanel.cs" />
     <Compile Include="ScreenLoading.cs" />
     <Compile Include="ScreenLoading.cs" />
     <Compile Include="ScreenTrophyMain.cs" />
     <Compile Include="ScreenTrophyMain.cs" />
     <Compile Include="ScriptManager.cs" />
     <Compile Include="ScriptManager.cs" />

+ 2 - 2
Assembly-CSharp/BaseKagManager.cs

@@ -2892,7 +2892,7 @@ public class BaseKagManager : IDisposable
 		}
 		}
 		if (tag_data.IsValid("allwear"))
 		if (tag_data.IsValid("allwear"))
 		{
 		{
-			for (int i = 67; i <= 96; i++)
+			for (int i = 81; i <= 110; i++)
 			{
 			{
 				maidAndMan.ResetProp((MPN)i, true);
 				maidAndMan.ResetProp((MPN)i, true);
 			}
 			}
@@ -5502,7 +5502,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	public void Serialize(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_KAG");
 		binary.Write("CM3D2_KAG");
-		binary.Write(1470);
+		binary.Write(1480);
 		byte[] array = this.kag_.Serialize();
 		byte[] array = this.kag_.Serialize();
 		int value = array.Length;
 		int value = array.Length;
 		binary.Write(value);
 		binary.Write(value);

+ 1 - 1
Assembly-CSharp/BasePhotoCustomObject.cs

@@ -173,7 +173,7 @@ public abstract class BasePhotoCustomObject : MonoBehaviour, IComparable<BasePho
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			{
 			{
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
-				binaryWriter.Write(1470);
+				binaryWriter.Write(1480);
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.scale_);
 				binaryWriter.Write(this.scale_);
 				binaryWriter.Write(this.enabledTextureColor_);
 				binaryWriter.Write(this.enabledTextureColor_);

+ 1 - 1
Assembly-CSharp/BasePhotoWindowManager.cs

@@ -153,7 +153,7 @@ public abstract class BasePhotoWindowManager : MonoBehaviour
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			{
 			{
 				binaryWriter.Write(this.save_header_uidata);
 				binaryWriter.Write(this.save_header_uidata);
-				binaryWriter.Write(1470);
+				binaryWriter.Write(1480);
 				binaryWriter.Write(this.save_data_.Count);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{
 				{

+ 38 - 0
Assembly-CSharp/BigThumbnail.cs

@@ -81,6 +81,44 @@ public class BigThumbnail : MonoBehaviour
 		this.alpha = 1f;
 		this.alpha = 1f;
 	}
 	}
 
 
+	public void SetFile(params string[] files)
+	{
+		if (!this.isEnabled)
+		{
+			return;
+		}
+		this.Init();
+		this.alpha = 0f;
+		if (this.sprite_.sprite2D != null && this.sprite_.sprite2D.texture != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.sprite_.sprite2D.texture);
+		}
+		this.sprite_.sprite2D = null;
+		this.draw_tex_ = null;
+		if (files == null || files.Length <= 0)
+		{
+			return;
+		}
+		foreach (string text in files)
+		{
+			if (File.Exists(text))
+			{
+				this.draw_tex_ = UTY.LoadTexture(text);
+				break;
+			}
+		}
+		if (this.draw_tex_ == null)
+		{
+			return;
+		}
+		this.LoadFrameAndBG();
+		Sprite sprite = Sprite.Create(this.draw_tex_, new Rect(0f, 0f, (float)this.draw_tex_.width, (float)this.draw_tex_.height), default(Vector2));
+		sprite.name = "_thum_";
+		this.sprite_.sprite2D = sprite;
+		this.sprite_.SetDimensions(this.draw_tex_.width, this.draw_tex_.height);
+		this.alpha = 1f;
+	}
+
 	public float alpha
 	public float alpha
 	{
 	{
 		get
 		get

+ 56 - 2
Assembly-CSharp/BoneMorph_.cs

@@ -30,6 +30,13 @@ public class BoneMorph_
 
 
 	public void InitBoneMorphEdit(Transform t, MPN f_mpn, TBody.SlotID f_slot)
 	public void InitBoneMorphEdit(Transform t, MPN f_mpn, TBody.SlotID f_slot)
 	{
 	{
+		TBodySkin slot = t.GetComponentsInParent<TBody>(true)[0].GetSlot((int)f_slot);
+		this.InitBoneMorphEdit(t, f_mpn, f_slot, slot);
+	}
+
+	public void InitBoneMorphEdit(Transform t, MPN f_mpn, TBody.SlotID f_slot, TBodySkin tbskin)
+	{
+		this.m_tbSkin = tbskin;
 		Func<string, Transform, BoneMorph_.BoneMorphPos> func = delegate(string propertyName, Transform boneTrans)
 		Func<string, Transform, BoneMorph_.BoneMorphPos> func = delegate(string propertyName, Transform boneTrans)
 		{
 		{
 			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == propertyName);
 			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == propertyName);
@@ -55,6 +62,17 @@ public class BoneMorph_
 			if (flag)
 			if (flag)
 			{
 			{
 				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
 				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
+				if (this.m_tbSkin.PartsVersion < 120)
+				{
+					HashSet<string> gp001AddPropNames = new HashSet<string>(new string[]
+					{
+						"MayuLongL",
+						"MayuLongR"
+					});
+					this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => gp001AddPropNames.Contains(f.strPropName));
+					this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => gp001AddPropNames.Contains(f.strPropName));
+					this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => gp001AddPropNames.Contains(f.strPropName));
+				}
 			}
 			}
 			else
 			else
 			{
 			{
@@ -69,7 +87,9 @@ public class BoneMorph_
 					"Mayupos_L",
 					"Mayupos_L",
 					"Mayupos_R",
 					"Mayupos_R",
 					"Mayurot_L",
 					"Mayurot_L",
-					"Mayurot_R"
+					"Mayurot_R",
+					"MayuLongL",
+					"MayuLongR"
 				});
 				});
 				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => gp001AddPropNames.Contains(f.strPropName));
 				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => gp001AddPropNames.Contains(f.strPropName));
 				this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => gp001AddPropNames.Contains(f.strPropName));
 				this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => gp001AddPropNames.Contains(f.strPropName));
@@ -137,6 +157,20 @@ public class BoneMorph_
 				boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
 				boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
 				boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
 				boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
 			}
 			}
+			if (120 <= tbskin.PartsVersion)
+			{
+				Transform transform9 = CMT.SearchObjName(t, "Mayupos_L", false);
+				Transform transform10 = CMT.SearchObjName(t, "Mayupos_R", false);
+				if (transform9 != null && transform10 != null)
+				{
+					BoneMorph_.BoneMorphScl boneMorphScl3 = func3("MayuLongL", transform9);
+					boneMorphScl3.m_vAddMin += new Vector3(0f, 0f, -0.25f);
+					boneMorphScl3.m_vAddMax += new Vector3(0f, 0f, 0.25f);
+					BoneMorph_.BoneMorphScl boneMorphScl4 = func3("MayuLongR", transform10);
+					boneMorphScl4.m_vAddMin += new Vector3(0f, 0f, -0.25f);
+					boneMorphScl4.m_vAddMax += new Vector3(0f, 0f, 0.25f);
+				}
+			}
 		}
 		}
 	}
 	}
 
 
@@ -164,7 +198,9 @@ public class BoneMorph_
 				"EyeBallPosXR",
 				"EyeBallPosXR",
 				"EyeBallPosYR",
 				"EyeBallPosYR",
 				"EyeBallSclYL",
 				"EyeBallSclYL",
-				"EyeBallSclYR"
+				"EyeBallSclYR",
+				"MayuLongL",
+				"MayuLongR"
 			});
 			});
 			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => removeTargetPropNames.Contains(f.strPropName));
 			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => removeTargetPropNames.Contains(f.strPropName));
 			this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => removeTargetPropNames.Contains(f.strPropName));
 			this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => removeTargetPropNames.Contains(f.strPropName));
@@ -391,6 +427,10 @@ public class BoneMorph_
 				localScale2.y = y;
 				localScale2.y = y;
 				boneMorphScl.trBone.localScale = localScale2;
 				boneMorphScl.trBone.localScale = localScale2;
 			}
 			}
+			else if (boneMorphScl.strPropName == "MayuLongL" || boneMorphScl.strPropName == "MayuLongR")
+			{
+				boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.MayuLong);
+			}
 		}
 		}
 		foreach (BoneMorph_.BoneMorphRotatio boneMorphRotatio in this.m_listBoneMorphRot)
 		foreach (BoneMorph_.BoneMorphRotatio boneMorphRotatio in this.m_listBoneMorphRot)
 		{
 		{
@@ -403,6 +443,14 @@ public class BoneMorph_
 				boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Mayu);
 				boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Mayu);
 			}
 			}
 		}
 		}
+		if (this.Yorime <= 0.5f)
+		{
+			this.m_tbSkin.body.m_editYorime = 2f * ((this.Yorime - 0.5f) / 0.5f);
+		}
+		else
+		{
+			this.m_tbSkin.body.m_editYorime = 5f * ((this.Yorime - 0.5f) / 0.5f);
+		}
 	}
 	}
 
 
 	private TextAsset textUserDef1;
 	private TextAsset textUserDef1;
@@ -461,12 +509,18 @@ public class BoneMorph_
 
 
 	private bool m_bMayuOffs;
 	private bool m_bMayuOffs;
 
 
+	public float MayuLong = 0.5f;
+
+	public float Yorime = 0.5f;
+
 	private List<BoneMorph_.BoneMorphPos> m_listBoneMorphPos = new List<BoneMorph_.BoneMorphPos>();
 	private List<BoneMorph_.BoneMorphPos> m_listBoneMorphPos = new List<BoneMorph_.BoneMorphPos>();
 
 
 	private List<BoneMorph_.BoneMorphScl> m_listBoneMorphScl = new List<BoneMorph_.BoneMorphScl>();
 	private List<BoneMorph_.BoneMorphScl> m_listBoneMorphScl = new List<BoneMorph_.BoneMorphScl>();
 
 
 	private List<BoneMorph_.BoneMorphRotatio> m_listBoneMorphRot = new List<BoneMorph_.BoneMorphRotatio>();
 	private List<BoneMorph_.BoneMorphRotatio> m_listBoneMorphRot = new List<BoneMorph_.BoneMorphRotatio>();
 
 
+	private TBodySkin m_tbSkin;
+
 	private static StringBuilder sbMinM = new StringBuilder(32);
 	private static StringBuilder sbMinM = new StringBuilder(32);
 
 
 	private static StringBuilder sbMinP = new StringBuilder(32);
 	private static StringBuilder sbMinP = new StringBuilder(32);

+ 11 - 0
Assembly-CSharp/CM3.cs

@@ -3,6 +3,17 @@ using System.Collections.Generic;
 
 
 public static class CM3
 public static class CM3
 {
 {
+	public static void Init()
+	{
+		if (PluginData.IsEnabled("GP001FB"))
+		{
+			CM3.dicDelItem.Add(MPN.matsuge_low, "_i_eyelashesunder_del.menu");
+			CM3.dicDelItem.Add(MPN.futae, "_i_eyelid_del.menu");
+			CM3.dicDelItem.Add(MPN.folder_matsuge_low, "_i_eyelashesunder_del_folder.menu");
+			CM3.dicDelItem.Add(MPN.folder_futae, "_i_eyelid_del_folder.menu");
+		}
+	}
+
 	public static Dictionary<MPN, string> dicDelItem = new Dictionary<MPN, string>
 	public static Dictionary<MPN, string> dicDelItem = new Dictionary<MPN, string>
 	{
 	{
 		{
 		{

+ 4 - 4
Assembly-CSharp/CMSystem.cs

@@ -855,7 +855,7 @@ public class CMSystem
 	{
 	{
 		XElement xelement = new XElement("Config", new object[]
 		XElement xelement = new XElement("Config", new object[]
 		{
 		{
-			new XAttribute("Version", 1470),
+			new XAttribute("Version", 1480),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			new XElement("Screen", new object[]
 			{
 			{
@@ -1204,7 +1204,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
 		{
@@ -1910,7 +1910,7 @@ public class CMSystem
 
 
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1470;
+			this.m_nVersion = 1480;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -1918,7 +1918,7 @@ public class CMSystem
 		}
 		}
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1470;
+		private int m_nVersion = 1480;
 
 
 		[SerializeField]
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";

+ 9 - 7
Assembly-CSharp/CharacterMgr.cs

@@ -224,6 +224,7 @@ public class CharacterMgr : MonoBehaviour
 
 
 	public void Init(GameMain f_gcGameMain)
 	public void Init(GameMain f_gcGameMain)
 	{
 	{
+		CM3.Init();
 		BoneMorph.Init();
 		BoneMorph.Init();
 		this.m_PlayerStatus = new PlayerStatus.Status();
 		this.m_PlayerStatus = new PlayerStatus.Status();
 		this.m_goCharacter = new GameObject("Character");
 		this.m_goCharacter = new GameObject("Character");
@@ -999,7 +1000,7 @@ public class CharacterMgr : MonoBehaviour
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		string result = string.Empty;
 		string result = string.Empty;
 		binaryWriter.Write("CM3D2_PRESET_S");
 		binaryWriter.Write("CM3D2_PRESET_S");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		binaryWriter.Write((char)presset_type);
 		binaryWriter.Write((char)presset_type);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
@@ -1016,7 +1017,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		binaryWriter.Write((int)f_type);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		if (texture2D != null)
 		{
 		{
@@ -1061,7 +1062,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		binaryWriter.Write((int)f_type);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		if (texture2D != null)
 		{
 		{
@@ -1103,6 +1104,7 @@ public class CharacterMgr : MonoBehaviour
 		File.WriteAllBytes(presetDirectory + "\\" + text, bytes);
 		File.WriteAllBytes(presetDirectory + "\\" + text, bytes);
 	}
 	}
 
 
+	[Obsolete("GameUty.RidMenuDic廃止により使用不可", true)]
 	public static CharacterMgr.Preset LoadePresetLowCapacityData(string data_text)
 	public static CharacterMgr.Preset LoadePresetLowCapacityData(string data_text)
 	{
 	{
 		if (string.IsNullOrEmpty(data_text) || data_text.IndexOf("^CM3D2P^") != 0)
 		if (string.IsNullOrEmpty(data_text) || data_text.IndexOf("^CM3D2P^") != 0)
@@ -1242,19 +1244,19 @@ public class CharacterMgr : MonoBehaviour
 		if (f_prest.ePreType == CharacterMgr.PresetType.Body)
 		if (f_prest.ePreType == CharacterMgr.PresetType.Body)
 		{
 		{
 			array = (from mp in f_prest.listMprop
 			array = (from mp in f_prest.listMprop
-			where (1 <= mp.idx && mp.idx <= 66) || (101 <= mp.idx && mp.idx <= 105)
+			where (1 <= mp.idx && mp.idx <= 80) || (115 <= mp.idx && mp.idx <= 122)
 			select mp).ToArray<MaidProp>();
 			select mp).ToArray<MaidProp>();
 		}
 		}
 		else if (f_prest.ePreType == CharacterMgr.PresetType.Wear)
 		else if (f_prest.ePreType == CharacterMgr.PresetType.Wear)
 		{
 		{
 			array = (from mp in f_prest.listMprop
 			array = (from mp in f_prest.listMprop
-			where 67 <= mp.idx && mp.idx <= 96
+			where 81 <= mp.idx && mp.idx <= 110
 			select mp).ToArray<MaidProp>();
 			select mp).ToArray<MaidProp>();
 		}
 		}
 		else
 		else
 		{
 		{
 			array = (from mp in f_prest.listMprop
 			array = (from mp in f_prest.listMprop
-			where (1 <= mp.idx && mp.idx <= 96) || (101 <= mp.idx && mp.idx <= 105)
+			where (1 <= mp.idx && mp.idx <= 110) || (115 <= mp.idx && mp.idx <= 122)
 			select mp).ToArray<MaidProp>();
 			select mp).ToArray<MaidProp>();
 		}
 		}
 		NDebug.Assert(array != null, "プリセットを実行する配列が空です。");
 		NDebug.Assert(array != null, "プリセットを実行する配列が空です。");
@@ -1322,7 +1324,7 @@ public class CharacterMgr : MonoBehaviour
 	public bool Serialize(BinaryWriter bwWrite)
 	public bool Serialize(BinaryWriter bwWrite)
 	{
 	{
 		bwWrite.Write("CM3D2_CHR_MGR");
 		bwWrite.Write("CM3D2_CHR_MGR");
-		bwWrite.Write(1470);
+		bwWrite.Write(1480);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)
 		for (int i = 0; i < this.m_listStockMan.Count; i++)

+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

@@ -33,7 +33,7 @@ public static class ControllerShortcutSettingData
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1470;
+			this.m_nVersion = 1480;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -261,7 +261,7 @@ public static class ControllerShortcutSettingData
 		private const string CONF_NAME = "OvrControllerShortcutConfig.json";
 		private const string CONF_NAME = "OvrControllerShortcutConfig.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1470;
+		private int m_nVersion = 1480;
 
 
 		[SerializeField]
 		[SerializeField]
 		private bool IsDirectShortcutMode = true;
 		private bool IsDirectShortcutMode = true;

+ 8 - 3
Assembly-CSharp/DailyCtrl.cs

@@ -4,6 +4,7 @@ using com.workman.cm3d2.button;
 using PlayerStatus;
 using PlayerStatus;
 using PrivateMaidMode;
 using PrivateMaidMode;
 using Schedule;
 using Schedule;
+using scoutmode;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -52,7 +53,8 @@ public class DailyCtrl : MonoBehaviour
 					DailyCtrl.ButtonType.ManEdit,
 					DailyCtrl.ButtonType.ManEdit,
 					DailyCtrl.ButtonType.Credit,
 					DailyCtrl.ButtonType.Credit,
 					DailyCtrl.ButtonType.NPCEdit,
 					DailyCtrl.ButtonType.NPCEdit,
-					DailyCtrl.ButtonType.PrivateMaidModeSetting
+					DailyCtrl.ButtonType.PrivateMaidModeSetting,
+					DailyCtrl.ButtonType.ScoutMode
 				};
 				};
 			}
 			}
 			else
 			else
@@ -85,7 +87,8 @@ public class DailyCtrl : MonoBehaviour
 				DailyCtrl.ButtonType.Credit,
 				DailyCtrl.ButtonType.Credit,
 				DailyCtrl.ButtonType.Dance,
 				DailyCtrl.ButtonType.Dance,
 				DailyCtrl.ButtonType.NPCEdit,
 				DailyCtrl.ButtonType.NPCEdit,
-				DailyCtrl.ButtonType.PrivateMaidModeSetting
+				DailyCtrl.ButtonType.PrivateMaidModeSetting,
+				DailyCtrl.ButtonType.ScoutMode
 			};
 			};
 		}
 		}
 		else
 		else
@@ -99,6 +102,7 @@ public class DailyCtrl : MonoBehaviour
 		}
 		}
 		this.GetMenuButton(DailyCtrl.ButtonType.NPCEdit).active = (!Product.isPublic && PluginData.IsEnabled("GP001"));
 		this.GetMenuButton(DailyCtrl.ButtonType.NPCEdit).active = (!Product.isPublic && PluginData.IsEnabled("GP001"));
 		this.GetMenuButton(DailyCtrl.ButtonType.PrivateMaidModeSetting).active = PluginData.IsEnabled("GP002");
 		this.GetMenuButton(DailyCtrl.ButtonType.PrivateMaidModeSetting).active = PluginData.IsEnabled("GP002");
+		this.GetMenuButton(DailyCtrl.ButtonType.ScoutMode).active = ScoutManager.isModeEnabled;
 		foreach (DailyCtrl.ButtonType type in array3)
 		foreach (DailyCtrl.ButtonType type in array3)
 		{
 		{
 			this.GetMenuButton(type).active = false;
 			this.GetMenuButton(type).active = false;
@@ -279,7 +283,8 @@ public class DailyCtrl : MonoBehaviour
 		Next,
 		Next,
 		MyRoomCustom,
 		MyRoomCustom,
 		NPCEdit,
 		NPCEdit,
-		PrivateMaidModeSetting
+		PrivateMaidModeSetting,
+		ScoutMode
 	}
 	}
 
 
 	[Serializable]
 	[Serializable]

+ 6 - 1
Assembly-CSharp/DailyMgr.cs

@@ -175,17 +175,22 @@ public class DailyMgr : BaseCreatePanel
 			dictionary.Add(DailyCtrl.ButtonType.ManEdit, "label_useredit");
 			dictionary.Add(DailyCtrl.ButtonType.ManEdit, "label_useredit");
 			dictionary.Add(DailyCtrl.ButtonType.NPCEdit, "label_npcedit");
 			dictionary.Add(DailyCtrl.ButtonType.NPCEdit, "label_npcedit");
 			dictionary.Add(DailyCtrl.ButtonType.PrivateMaidModeSetting, "label_privatemaidmodesetting");
 			dictionary.Add(DailyCtrl.ButtonType.PrivateMaidModeSetting, "label_privatemaidmodesetting");
+			dictionary.Add(DailyCtrl.ButtonType.ScoutMode, "label_scoutmode");
 			dictionary.Add(DailyCtrl.ButtonType.LegacyMode, "label_legacymode");
 			dictionary.Add(DailyCtrl.ButtonType.LegacyMode, "label_legacymode");
 			dictionary.Add(DailyCtrl.ButtonType.Karaoke, "label_karaoke");
 			dictionary.Add(DailyCtrl.ButtonType.Karaoke, "label_karaoke");
 			dictionary.Add(DailyCtrl.ButtonType.Credit, "label_credit");
 			dictionary.Add(DailyCtrl.ButtonType.Credit, "label_credit");
 			if (dictionary.ContainsKey(menuButton.type))
 			if (dictionary.ContainsKey(menuButton.type))
 			{
 			{
+				if (menuButton.type == DailyCtrl.ButtonType.LegacyMode)
+				{
+					GameMain.Instance.CMSystem.SetTmpGenericFlag("AddAllOffset_Ignore", 0);
+				}
 				DailyAPI.EndType f_eEndType = DailyAPI.EndType.NormalSceneChange;
 				DailyAPI.EndType f_eEndType = DailyAPI.EndType.NormalSceneChange;
 				if (menuButton.type == DailyCtrl.ButtonType.FreeMode)
 				if (menuButton.type == DailyCtrl.ButtonType.FreeMode)
 				{
 				{
 					f_eEndType = DailyAPI.EndType.ToFreeMode;
 					f_eEndType = DailyAPI.EndType.ToFreeMode;
 				}
 				}
-				else if (menuButton.type == DailyCtrl.ButtonType.Trophy || menuButton.type == DailyCtrl.ButtonType.PhotoMode || menuButton.type == DailyCtrl.ButtonType.DeskCustomize || menuButton.type == DailyCtrl.ButtonType.MaidManagement || menuButton.type == DailyCtrl.ButtonType.FacilityManagement)
+				else if (menuButton.type == DailyCtrl.ButtonType.Trophy || menuButton.type == DailyCtrl.ButtonType.PhotoMode || menuButton.type == DailyCtrl.ButtonType.DeskCustomize || menuButton.type == DailyCtrl.ButtonType.MaidManagement || menuButton.type == DailyCtrl.ButtonType.FacilityManagement || menuButton.type == DailyCtrl.ButtonType.ScoutMode)
 				{
 				{
 					f_eEndType = DailyAPI.EndType.TakeOver;
 					f_eEndType = DailyAPI.EndType.TakeOver;
 				}
 				}

+ 1 - 1
Assembly-CSharp/DeskManager.cs

@@ -143,7 +143,7 @@ internal class DeskManager
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_DeskCustomize");
 		binary.Write("CM3D2_DeskCustomize");
-		binary.Write(1470);
+		binary.Write(1480);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		{
 		{

+ 3 - 3
Assembly-CSharp/DynamicBone.cs

@@ -30,7 +30,7 @@ public class DynamicBone : MonoBehaviour
 			return false;
 			return false;
 		};
 		};
 		f_bw.Write("CM3D21_PHY");
 		f_bw.Write("CM3D21_PHY");
-		f_bw.Write(1470);
+		f_bw.Write(1480);
 		if (this.m_Root == null)
 		if (this.m_Root == null)
 		{
 		{
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
@@ -94,7 +94,7 @@ public class DynamicBone : MonoBehaviour
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	{
 	{
 		f_bw.Write("CM3D21_COL");
 		f_bw.Write("CM3D21_COL");
-		f_bw.Write(1470);
+		f_bw.Write(1480);
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		{
 		{
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
@@ -110,7 +110,7 @@ public class DynamicBone : MonoBehaviour
 			else
 			else
 			{
 			{
 				f_bw.Write(this.m_Colliders[i].TypeName);
 				f_bw.Write(this.m_Colliders[i].TypeName);
-				this.m_Colliders[i].Serialize(f_bw, 1470);
+				this.m_Colliders[i].Serialize(f_bw, 1480);
 			}
 			}
 		}
 		}
 		this.m_ColliderFileName = f_strFileName;
 		this.m_ColliderFileName = f_strFileName;

+ 1 - 1
Assembly-CSharp/DynamicSkirtBone.cs

@@ -18,7 +18,7 @@ public class DynamicSkirtBone : MonoBehaviour
 	public bool SerializeWrite(BinaryWriter f_bw)
 	public bool SerializeWrite(BinaryWriter f_bw)
 	{
 	{
 		f_bw.Write("CM3D21_PSK");
 		f_bw.Write("CM3D21_PSK");
-		f_bw.Write(1470);
+		f_bw.Write(1480);
 		f_bw.Write(this.m_fPanierRadius);
 		f_bw.Write(this.m_fPanierRadius);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;

+ 1 - 1
Assembly-CSharp/EditMod.cs

@@ -303,7 +303,7 @@ public class EditMod : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MOD");
 		binaryWriter.Write("CM3D2_MOD");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		binaryWriter.Write(value);
 		binaryWriter.Write(value);
 		binaryWriter.Write(text2.ToLower());
 		binaryWriter.Write(text2.ToLower());
 		binaryWriter.Write(value2);
 		binaryWriter.Write(value2);

+ 1 - 1
Assembly-CSharp/EmpireLifeModeManager.cs

@@ -477,7 +477,7 @@ public class EmpireLifeModeManager : MonoBehaviour
 	public bool Serialize(BinaryWriter brWrite)
 	public bool Serialize(BinaryWriter brWrite)
 	{
 	{
 		brWrite.Write("CM3D21_LIFE_MODE_MGR");
 		brWrite.Write("CM3D21_LIFE_MODE_MGR");
-		brWrite.Write(1470);
+		brWrite.Write(1480);
 		brWrite.Write("2");
 		brWrite.Write("2");
 		DataArray<int, byte> saveDataScenarioExecuteCountArray = this.m_SaveDataScenarioExecuteCountArray;
 		DataArray<int, byte> saveDataScenarioExecuteCountArray = this.m_SaveDataScenarioExecuteCountArray;
 		if (EmpireLifeModeManager.<>f__mg$cache1 == null)
 		if (EmpireLifeModeManager.<>f__mg$cache1 == null)

+ 22 - 10
Assembly-CSharp/FaceWindow.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using I2.Loc;
 using I2.Loc;
 using UnityEngine;
 using UnityEngine;
@@ -48,6 +49,16 @@ public class FaceWindow : BaseMaidPhotoWindow
 	public override void Start()
 	public override void Start()
 	{
 	{
 		base.Start();
 		base.Start();
+		GameMain.Instance.StartCoroutine(this.Setup());
+	}
+
+	private IEnumerator Setup()
+	{
+		do
+		{
+			yield return null;
+		}
+		while (!GameMain.Instance.MenuDataBase.JobFinished());
 		if (Product.isPublic)
 		if (Product.isPublic)
 		{
 		{
 			this.PartVisibleCheckBox.gameObject.SetActive(false);
 			this.PartVisibleCheckBox.gameObject.SetActive(false);
@@ -55,26 +66,26 @@ public class FaceWindow : BaseMaidPhotoWindow
 		this.placement_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Placement) as PlacementWindow);
 		this.placement_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Placement) as PlacementWindow);
 		this.motion_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Motion) as MotionWindow);
 		this.motion_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Motion) as MotionWindow);
 		this.man_edit_mgr_ = new PhotoManEditManager();
 		this.man_edit_mgr_ = new PhotoManEditManager();
-		List<SceneEdit.SMenuItem>[] array = new List<SceneEdit.SMenuItem>[]
+		List<SceneEdit.SMenuItem>[] itemLists = new List<SceneEdit.SMenuItem>[]
 		{
 		{
 			this.man_edit_mgr_.man_head_menu_list,
 			this.man_edit_mgr_.man_head_menu_list,
 			this.man_edit_mgr_.man_body_menu_list
 			this.man_edit_mgr_.man_body_menu_list
 		};
 		};
-		UIWFTabPanel[] array2 = new UIWFTabPanel[]
+		UIWFTabPanel[] tagetPanels = new UIWFTabPanel[]
 		{
 		{
 			this.HeadItemTabPanel,
 			this.HeadItemTabPanel,
 			this.BodyItemTabPanel
 			this.BodyItemTabPanel
 		};
 		};
-		EventDelegate.Callback[] array3 = new EventDelegate.Callback[]
+		EventDelegate.Callback[] callBackFunctions = new EventDelegate.Callback[]
 		{
 		{
 			new EventDelegate.Callback(this.OnSelectManHeadItem),
 			new EventDelegate.Callback(this.OnSelectManHeadItem),
 			new EventDelegate.Callback(this.OnSelectManHeadItem)
 			new EventDelegate.Callback(this.OnSelectManHeadItem)
 		};
 		};
-		for (int i = 0; i < array.Length; i++)
+		for (int i = 0; i < itemLists.Length; i++)
 		{
 		{
-			UIWFTabPanel uiwftabPanel = array2[i];
-			EventDelegate.Callback callback = array3[i];
-			foreach (SceneEdit.SMenuItem smenuItem in array[i])
+			UIWFTabPanel uiwftabPanel = tagetPanels[i];
+			EventDelegate.Callback callback = callBackFunctions[i];
+			foreach (SceneEdit.SMenuItem smenuItem in itemLists[i])
 			{
 			{
 				GameObject gameObject = Utility.CreatePrefab(uiwftabPanel.gameObject, "ScenePhotoMode/EditItemIcon", true);
 				GameObject gameObject = Utility.CreatePrefab(uiwftabPanel.gameObject, "ScenePhotoMode/EditItemIcon", true);
 				if (smenuItem.m_texIconRef != null)
 				if (smenuItem.m_texIconRef != null)
@@ -104,10 +115,10 @@ public class FaceWindow : BaseMaidPhotoWindow
 		this.CheckBoxFaceToCamera.enabled = flag;
 		this.CheckBoxFaceToCamera.enabled = flag;
 		checkBoxEyeToCamera.enabled = flag;
 		checkBoxEyeToCamera.enabled = flag;
 		this.add_option_dic_ = new Dictionary<string, WFCheckBox>();
 		this.add_option_dic_ = new Dictionary<string, WFCheckBox>();
-		Transform transform = UTY.GetChildObject(this.content_game_object.gameObject, "ContentParent/AddOption/Btns", false).transform;
-		for (int j = 0; j < transform.childCount; j++)
+		Transform add_option_parent = UTY.GetChildObject(this.content_game_object.gameObject, "ContentParent/AddOption/Btns", false).transform;
+		for (int j = 0; j < add_option_parent.childCount; j++)
 		{
 		{
-			WFCheckBox component2 = transform.GetChild(j).GetComponent<WFCheckBox>();
+			WFCheckBox component2 = add_option_parent.GetChild(j).GetComponent<WFCheckBox>();
 			component2.check = false;
 			component2.check = false;
 			component2.enabled = false;
 			component2.enabled = false;
 			if (!Product.supportMultiLanguage)
 			if (!Product.supportMultiLanguage)
@@ -140,6 +151,7 @@ public class FaceWindow : BaseMaidPhotoWindow
 		this.ContentParentMan.SetActive(false);
 		this.ContentParentMan.SetActive(false);
 		this.FaceMorphInput.SetFaceWindow(this);
 		this.FaceMorphInput.SetFaceWindow(this);
 		this.noCharaActive.ChangeMode(true, true);
 		this.noCharaActive.ChangeMode(true, true);
+		yield break;
 	}
 	}
 
 
 	public void OnDestroy()
 	public void OnDestroy()

+ 1 - 1
Assembly-CSharp/FacilityManager.cs

@@ -657,7 +657,7 @@ public class FacilityManager : MonoBehaviour
 		Stopwatch stopwatch = new Stopwatch();
 		Stopwatch stopwatch = new Stopwatch();
 		stopwatch.Start();
 		stopwatch.Start();
 		brWrite.Write("CM3D21_FACILITY_MGR");
 		brWrite.Write("CM3D21_FACILITY_MGR");
-		brWrite.Write(1470);
+		brWrite.Write(1480);
 		brWrite.Write("5");
 		brWrite.Write("5");
 		int num = 0;
 		int num = 0;
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)

+ 1 - 1
Assembly-CSharp/GameInShopMain.cs

@@ -644,7 +644,7 @@ public class GameInShopMain : WfScreenChildren
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi_r));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi_r));
-			for (int i = 67; i <= 96; i++)
+			for (int i = 81; i <= 110; i++)
 			{
 			{
 				this.backup_maid_prop_.Add(this.CreateData(maid, (MPN)i));
 				this.backup_maid_prop_.Add(this.CreateData(maid, (MPN)i));
 			}
 			}

+ 20 - 4
Assembly-CSharp/GameMain.cs

@@ -11,6 +11,7 @@ using MaidStatus;
 using PrivateMaidMode;
 using PrivateMaidMode;
 using SceneNPCEdit;
 using SceneNPCEdit;
 using Schedule;
 using Schedule;
+using scoutmode;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.SceneManagement;
 using UnityEngine.SceneManagement;
 using UnityEngine.VR;
 using UnityEngine.VR;
@@ -428,6 +429,7 @@ public class GameMain : MonoSingleton<GameMain>
 		this.m_ScenarioSelectMgr.InitScenarioData();
 		this.m_ScenarioSelectMgr.InitScenarioData();
 		CasinoDataMgr.Instance.InitShopData();
 		CasinoDataMgr.Instance.InitShopData();
 		VsDanceDataMgr.CreateInstance();
 		VsDanceDataMgr.CreateInstance();
+		ScoutManager.CreateInstance();
 		this.m_LipSyncMgr = base.gameObject.AddComponent<OVRLipSync>();
 		this.m_LipSyncMgr = base.gameObject.AddComponent<OVRLipSync>();
 		this.m_LipSyncMgr.Init();
 		this.m_LipSyncMgr.Init();
 		GameObject gameObject = GameObject.Find("SystemUI Root/Manager_SystemUI/MessageWindowMgr");
 		GameObject gameObject = GameObject.Find("SystemUI Root/Manager_SystemUI/MessageWindowMgr");
@@ -682,7 +684,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.strComment = f_strComment;
 		serializeHeader.strComment = f_strComment;
 		serializeHeader.productTypeID = (int)Product.type;
 		serializeHeader.productTypeID = (int)Product.type;
 		binaryWriter.Write("COM3D2_SAVE");
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -721,14 +723,16 @@ public class GameMain : MonoSingleton<GameMain>
 		CasinoDataMgr.Instance.Serialize(binaryWriter);
 		CasinoDataMgr.Instance.Serialize(binaryWriter);
 		VsDanceDataMgr.Instance.Serialize(binaryWriter);
 		VsDanceDataMgr.Instance.Serialize(binaryWriter);
 		SaveData.Serialize(binaryWriter);
 		SaveData.Serialize(binaryWriter);
-		binaryWriter.Write(1002);
+		binaryWriter.Write(1003);
 		PrivateModeMgr.Instance.Serialize(binaryWriter);
 		PrivateModeMgr.Instance.Serialize(binaryWriter);
 		this.m_CharacterMgr.SerializeAddition(binaryWriter);
 		this.m_CharacterMgr.SerializeAddition(binaryWriter);
+		ScoutManager.Instance.Serialize(binaryWriter);
 		string path = this.MakeSavePathFileName(f_nSaveNo);
 		string path = this.MakeSavePathFileName(f_nSaveNo);
 		File.WriteAllBytes(path, memoryStream.ToArray());
 		File.WriteAllBytes(path, memoryStream.ToArray());
 		memoryStream.Close();
 		memoryStream.Close();
 		memoryStream.Dispose();
 		memoryStream.Dispose();
 		memoryStream = null;
 		memoryStream = null;
+		ScoutManager.Instance.FixThumbnail();
 		this.UpdateSaveDataDay();
 		this.UpdateSaveDataDay();
 		return true;
 		return true;
 	}
 	}
@@ -802,7 +806,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		File.WriteAllBytes(path, memoryStream.ToArray());
 		File.WriteAllBytes(path, memoryStream.ToArray());
@@ -1113,8 +1117,14 @@ public class GameMain : MonoSingleton<GameMain>
 			{
 			{
 				this.m_CharacterMgr.DeserializeAddition(binaryReader);
 				this.m_CharacterMgr.DeserializeAddition(binaryReader);
 			}
 			}
+			ScoutManager.ReCreateInstance();
+			if (num3 >= 1003)
+			{
+				ScoutManager.Instance.DeSerialize(binaryReader);
+			}
 			binaryReader.Close();
 			binaryReader.Close();
 			binaryReader = null;
 			binaryReader = null;
+			ScoutManager.Instance.DeleteAllTempThumbnailFile();
 		}
 		}
 		catch (Exception ex)
 		catch (Exception ex)
 		{
 		{
@@ -1227,6 +1237,10 @@ public class GameMain : MonoSingleton<GameMain>
 	{
 	{
 		UnityEngine.Debug.Log("GameMain::OnFinalize Start");
 		UnityEngine.Debug.Log("GameMain::OnFinalize Start");
 		base.BroadcastMessage("OnPreFinalize", SendMessageOptions.DontRequireReceiver);
 		base.BroadcastMessage("OnPreFinalize", SendMessageOptions.DontRequireReceiver);
+		if (this.onFinalizeEvent != null)
+		{
+			this.onFinalizeEvent();
+		}
 		UnityEngine.Object.DestroyImmediate(this.CharacterMgr);
 		UnityEngine.Object.DestroyImmediate(this.CharacterMgr);
 		UnityEngine.Object.DestroyImmediate(this.SoundMgr);
 		UnityEngine.Object.DestroyImmediate(this.SoundMgr);
 		this.anm_parse_.Dispose();
 		this.anm_parse_.Dispose();
@@ -1399,7 +1413,7 @@ public class GameMain : MonoSingleton<GameMain>
 		Product.OnApplicationQuit();
 		Product.OnApplicationQuit();
 	}
 	}
 
 
-	private const int SaveDataVersion = 1002;
+	private const int SaveDataVersion = 1003;
 
 
 	private static GameMain m_objInstance;
 	private static GameMain m_objInstance;
 
 
@@ -1457,6 +1471,8 @@ public class GameMain : MonoSingleton<GameMain>
 
 
 	private bool m_bQuitting;
 	private bool m_bQuitting;
 
 
+	public Action onFinalizeEvent;
+
 	private long m_lNewSaveDataNo = -1L;
 	private long m_lNewSaveDataNo = -1L;
 
 
 	[SerializeField]
 	[SerializeField]

+ 1 - 1
Assembly-CSharp/GameModeManager.cs

@@ -32,7 +32,7 @@ public static class GameModeManager
 	public static bool Serialize(BinaryWriter brWrite)
 	public static bool Serialize(BinaryWriter brWrite)
 	{
 	{
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
-		brWrite.Write(1470);
+		brWrite.Write(1480);
 		brWrite.Write(1);
 		brWrite.Write(1);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		return true;
 		return true;

+ 20 - 46
Assembly-CSharp/GameUty.cs

@@ -1,7 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
-using System.Linq;
 using System.Text;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Text.RegularExpressions;
 using I2.Loc;
 using I2.Loc;
@@ -308,9 +307,9 @@ public class GameUty
 					{
 					{
 						GameUty.ExistCsvPathList.Add(text30);
 						GameUty.ExistCsvPathList.Add(text30);
 					}
 					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
+					for (int num13 = 2; num13 <= check_ver_no; num13++)
 					{
 					{
-						AddFolderOrArchive(text31 + "_" + num15);
+						AddFolderOrArchive(text31 + "_" + num13);
 					}
 					}
 				}
 				}
 			}
 			}
@@ -331,7 +330,7 @@ public class GameUty
 					{
 					{
 						GameUty.ExistCsvPathList.Add(text30);
 						GameUty.ExistCsvPathList.Add(text30);
 					}
 					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
+					for (int num13 = 2; num13 <= check_ver_no; num13++)
 					{
 					{
 						AddFolderOrArchive(string.Concat(new object[]
 						AddFolderOrArchive(string.Concat(new object[]
 						{
 						{
@@ -339,7 +338,7 @@ public class GameUty
 							"_",
 							"_",
 							text30,
 							text30,
 							"_",
 							"_",
-							num15
+							num13
 						}));
 						}));
 					}
 					}
 				}
 				}
@@ -355,7 +354,7 @@ public class GameUty
 					{
 					{
 						GameUty.ExistCsvPathList.Add(text30);
 						GameUty.ExistCsvPathList.Add(text30);
 					}
 					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
+					for (int num13 = 2; num13 <= check_ver_no; num13++)
 					{
 					{
 						AddFolderOrArchive(string.Concat(new object[]
 						AddFolderOrArchive(string.Concat(new object[]
 						{
 						{
@@ -363,7 +362,7 @@ public class GameUty
 							"_",
 							"_",
 							text30,
 							text30,
 							"_",
 							"_",
-							num15
+							num13
 						}));
 						}));
 					}
 					}
 				}
 				}
@@ -729,7 +728,11 @@ public class GameUty
 			AddFolderOrArchive("parts2");
 			AddFolderOrArchive("parts2");
 			Debug.Log("■■■■■■■■■■■■■■■■■■■■" + stopWatch.Stop().ToString() + " ms");
 			Debug.Log("■■■■■■■■■■■■■■■■■■■■" + stopWatch.Stop().ToString() + " ms");
 		}
 		}
-		GameUty.m_FileSystem.AddAutoPathForAllFolder();
+		GameUty.m_FileSystem.AddAutoPathForAllFolder(true);
+		while (!GameUty.m_FileSystem.IsFinishedAddAutoPathJob(true))
+		{
+		}
+		GameUty.m_FileSystem.ReleaseAddAutoPathJob();
 		if (Product.isPublic && !GameUty.m_FileSystem.IsExistentFile("21C399027026.dat"))
 		if (Product.isPublic && !GameUty.m_FileSystem.IsExistentFile("21C399027026.dat"))
 		{
 		{
 			NDebug.MessageBox("Error", Product.type.ToString() + " : 21C399027026.dat");
 			NDebug.MessageBox("Error", Product.type.ToString() + " : 21C399027026.dat");
@@ -792,49 +795,16 @@ public class GameUty
 				}
 				}
 			}
 			}
 		}
 		}
-		string[] fileListAtExtension = GameUty.m_FileSystem.GetFileListAtExtension(".menu");
-		List<string> list3 = new List<string>();
-		foreach (string path3 in fileListAtExtension)
-		{
-			list3.Add(Path.GetFileName(path3));
-		}
-		GameUty.m_aryMenuFiles = list3.ToArray();
 		if (GameUty.m_ModFileSystem != null)
 		if (GameUty.m_ModFileSystem != null)
 		{
 		{
-			string[] list4 = GameUty.m_ModFileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFile);
-			GameUty.m_aryModOnlysMenuFiles = Array.FindAll<string>(list4, (string i) => new Regex(".*\\.menu$").IsMatch(i));
-			GameUty.m_aryMenuFiles = GameUty.m_aryMenuFiles.Concat(GameUty.m_aryModOnlysMenuFiles).ToArray<string>();
+			string[] list3 = GameUty.m_ModFileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFile);
+			GameUty.m_aryModOnlysMenuFiles = Array.FindAll<string>(list3, (string i) => new Regex(".*\\.menu$").IsMatch(i));
 		}
 		}
 		if (GameUty.m_aryModOnlysMenuFiles != null && GameUty.m_aryModOnlysMenuFiles.Length != 0)
 		if (GameUty.m_aryModOnlysMenuFiles != null && GameUty.m_aryModOnlysMenuFiles.Length != 0)
 		{
 		{
 			GameUty.ModPriorityToModFolderInfo = string.Empty;
 			GameUty.ModPriorityToModFolderInfo = string.Empty;
 			Debug.Log(GameUty.ModPriorityToModFolderInfo + "■MOD有り。MODフォルダ優先モード" + GameUty.ModPriorityToModFolder.ToString());
 			Debug.Log(GameUty.ModPriorityToModFolderInfo + "■MOD有り。MODフォルダ優先モード" + GameUty.ModPriorityToModFolder.ToString());
 		}
 		}
-		if (GameUty.rid_menu_dic_.Count == 0)
-		{
-			string[] menuFiles = GameUty.MenuFiles;
-			GameUty.rid_menu_dic_ = new Dictionary<int, string>();
-			for (int num14 = 0; num14 < menuFiles.Length; num14++)
-			{
-				string fileName3 = Path.GetFileName(menuFiles[num14]);
-				int hashCode = fileName3.ToLower().GetHashCode();
-				if (!GameUty.rid_menu_dic_.ContainsKey(hashCode))
-				{
-					GameUty.rid_menu_dic_.Add(hashCode, fileName3);
-				}
-				else
-				{
-					NDebug.Assert(fileName3 == GameUty.rid_menu_dic_[hashCode], string.Concat(new string[]
-					{
-						"[",
-						fileName3,
-						"]と[",
-						GameUty.rid_menu_dic_[hashCode],
-						"]は同じハッシュキーです"
-					}));
-				}
-			}
-		}
 	}
 	}
 
 
 	public static void UpdateFileSystemPathToNewProduct()
 	public static void UpdateFileSystemPathToNewProduct()
@@ -1318,7 +1288,11 @@ public class GameUty
 		}
 		}
 		AddFolderOrArchive("voice2");
 		AddFolderOrArchive("voice2");
 		AddFolderOrArchive("voice3");
 		AddFolderOrArchive("voice3");
-		fileSystem.AddAutoPathForAllFolder();
+		fileSystem.AddAutoPathForAllFolder(true);
+		while (!fileSystem.IsFinishedAddAutoPathJob(true))
+		{
+		}
+		fileSystem.ReleaseAddAutoPathJob();
 		string[] list = fileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
 		string[] list = fileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
 		if (list != null && 0 < list.Length)
 		if (list != null && 0 < list.Length)
 		{
 		{
@@ -1404,14 +1378,14 @@ public class GameUty
 
 
 	public static string GetBuildVersionText()
 	public static string GetBuildVersionText()
 	{
 	{
-		int num = 1470;
+		int num = 1480;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 	}
 
 
 	public static string GetGameVersionText()
 	public static string GetGameVersionText()
 	{
 	{
 		string text = "COM3D2x64.exe";
 		string text = "COM3D2x64.exe";
-		int num = 1470;
+		int num = 1480;
 		string path = UTY.gameProjectPath + "\\update.lst";
 		string path = UTY.gameProjectPath + "\\update.lst";
 		string[] array = new string[0];
 		string[] array = new string[0];
 		if (File.Exists(path))
 		if (File.Exists(path))

+ 2 - 2
Assembly-CSharp/HandSignShortcut.cs

@@ -506,7 +506,7 @@ public class HandSignShortcut : MonoBehaviour
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1470;
+			this.m_nVersion = 1480;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -815,7 +815,7 @@ public class HandSignShortcut : MonoBehaviour
 		private const string CONF_NAME = "MaidFingerDataList.json";
 		private const string CONF_NAME = "MaidFingerDataList.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1470;
+		private int m_nVersion = 1480;
 
 
 		[SerializeField]
 		[SerializeField]
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();

+ 3 - 3
Assembly-CSharp/Kasizuki/KasizukiManager.cs

@@ -459,7 +459,7 @@ namespace Kasizuki
 			PlayerStatus.Status status = GameMain.Instance.CharacterMgr.status;
 			PlayerStatus.Status status = GameMain.Instance.CharacterMgr.status;
 			target.status.lastName = this.m_CachedOriginPlayerName;
 			target.status.lastName = this.m_CachedOriginPlayerName;
 			status.playerName = this.m_CachedOriginPlayerName;
 			status.playerName = this.m_CachedOriginPlayerName;
-			for (int i = 0; i < 114; i++)
+			for (int i = 0; i < 131; i++)
 			{
 			{
 				MPN mpn = (MPN)i;
 				MPN mpn = (MPN)i;
 				if (mpn != MPN.null_mpn)
 				if (mpn != MPN.null_mpn)
@@ -476,7 +476,7 @@ namespace Kasizuki
 		{
 		{
 			this.m_CachedOriginPlayerDataDic = new Dictionary<MPN, MaidProp>();
 			this.m_CachedOriginPlayerDataDic = new Dictionary<MPN, MaidProp>();
 			Maid man = GameMain.Instance.CharacterMgr.GetMan(0);
 			Maid man = GameMain.Instance.CharacterMgr.GetMan(0);
-			for (int i = 0; i < 114; i++)
+			for (int i = 0; i < 131; i++)
 			{
 			{
 				MPN mpn = (MPN)i;
 				MPN mpn = (MPN)i;
 				MaidProp maidProp = new MaidProp();
 				MaidProp maidProp = new MaidProp();
@@ -872,7 +872,7 @@ namespace Kasizuki
 		public void Serialize(BinaryWriter bw)
 		public void Serialize(BinaryWriter bw)
 		{
 		{
 			bw.Write("COM3D2_KASIZUKI");
 			bw.Write("COM3D2_KASIZUKI");
-			bw.Write(1470);
+			bw.Write(1480);
 			this.SerializeOriginHeader(bw);
 			this.SerializeOriginHeader(bw);
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			{
 			{

+ 17 - 0
Assembly-CSharp/MPN.cs

@@ -45,6 +45,17 @@ public enum MPN
 	MuneUpDown,
 	MuneUpDown,
 	MuneYori,
 	MuneYori,
 	MuneYawaraka,
 	MuneYawaraka,
+	MayuThick,
+	MayuLong,
+	Yorime,
+	MabutaUpIn,
+	MabutaUpIn2,
+	MabutaUpMiddle,
+	MabutaUpOut,
+	MabutaUpOut2,
+	MabutaLowIn,
+	MabutaLowUpMiddle,
+	MabutaLowUpOut,
 	body,
 	body,
 	moza,
 	moza,
 	head,
 	head,
@@ -69,6 +80,9 @@ public enum MPN
 	eyewhite,
 	eyewhite,
 	nose,
 	nose,
 	facegloss,
 	facegloss,
+	matsuge_up,
+	matsuge_low,
+	futae,
 	wear,
 	wear,
 	skirt,
 	skirt,
 	mizugi,
 	mizugi,
@@ -108,6 +122,9 @@ public enum MPN
 	folder_underhair,
 	folder_underhair,
 	folder_skin,
 	folder_skin,
 	folder_eyewhite,
 	folder_eyewhite,
+	folder_matsuge_up,
+	folder_matsuge_low,
+	folder_futae,
 	kousoku_upper,
 	kousoku_upper,
 	kousoku_lower,
 	kousoku_lower,
 	seieki_naka,
 	seieki_naka,

+ 8 - 8
Assembly-CSharp/MPN_TYPE_RANGE.cs

@@ -3,14 +3,14 @@
 public enum MPN_TYPE_RANGE
 public enum MPN_TYPE_RANGE
 {
 {
 	BODY_START = 1,
 	BODY_START = 1,
-	BODY_END = 66,
-	BODY_RELOAD_START = 44,
-	BODY_RELOAD_END = 100,
-	WEAR_START = 67,
-	WEAR_END = 96,
+	BODY_END = 80,
+	BODY_RELOAD_START = 55,
+	BODY_RELOAD_END = 114,
+	WEAR_START = 81,
+	WEAR_END = 110,
 	SET_START,
 	SET_START,
-	SET_END = 100,
+	SET_END = 114,
 	FOLDER_BODY_START,
 	FOLDER_BODY_START,
-	FOLDER_BODY_END = 105,
-	MAX = 114
+	FOLDER_BODY_END = 122,
+	MAX = 131
 }
 }

+ 133 - 32
Assembly-CSharp/Maid.cs

@@ -112,6 +112,36 @@ public class Maid : MonoBehaviour
 		}
 		}
 	}
 	}
 
 
+	public static string GetThumbnailFilePath(string guid, bool temp)
+	{
+		string thumbnailDictionary = Maid.ThumbnailDictionary;
+		if (Directory.Exists(thumbnailDictionary))
+		{
+			Directory.CreateDirectory(thumbnailDictionary);
+		}
+		return Path.Combine(thumbnailDictionary, ((!temp) ? string.Empty : "_tmp_thum_") + guid + ".png");
+	}
+
+	public static string GetIconThumbnailFilePath(string guid, bool temp)
+	{
+		string thumbnailDictionary = Maid.ThumbnailDictionary;
+		if (Directory.Exists(thumbnailDictionary))
+		{
+			Directory.CreateDirectory(thumbnailDictionary);
+		}
+		return Path.Combine(thumbnailDictionary, ((!temp) ? "icon_thum_" : "icon_thum_") + guid + ".png");
+	}
+
+	public static string GetKasizukiThumbnailFilePath(string guid, bool temp)
+	{
+		string thumbnailDictionary = Maid.ThumbnailDictionary;
+		if (Directory.Exists(thumbnailDictionary))
+		{
+			Directory.CreateDirectory(thumbnailDictionary);
+		}
+		return Path.Combine(thumbnailDictionary, ((!temp) ? "kasizuki_" : "_tmp_kasizuki_") + guid + ".png");
+	}
+
 	public static string ThumbnailDictionary
 	public static string ThumbnailDictionary
 	{
 	{
 		get
 		get
@@ -265,6 +295,17 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(0, 100, 10, MPN.MuneUpDown, 2),
 			Maid.CreateProp(0, 100, 10, MPN.MuneUpDown, 2),
 			Maid.CreateProp(0, 100, 40, MPN.MuneYori, 2),
 			Maid.CreateProp(0, 100, 40, MPN.MuneYori, 2),
 			Maid.CreateProp(0, 100, 50, MPN.MuneYawaraka, 2),
 			Maid.CreateProp(0, 100, 50, MPN.MuneYawaraka, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MayuThick, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MayuLong, 2),
+			Maid.CreateProp(0, 100, 50, MPN.Yorime, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaUpIn, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaUpIn2, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaUpMiddle, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaUpOut, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaUpOut2, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaLowIn, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaLowUpMiddle, 1),
+			Maid.CreateProp(0, 100, 50, MPN.MabutaLowUpOut, 1),
 			Maid.CreateProp(string.Empty, MPN.body, 3),
 			Maid.CreateProp(string.Empty, MPN.body, 3),
 			Maid.CreateProp(string.Empty, MPN.head, 3),
 			Maid.CreateProp(string.Empty, MPN.head, 3),
 			Maid.CreateProp(string.Empty, MPN.hairf, 3),
 			Maid.CreateProp(string.Empty, MPN.hairf, 3),
@@ -317,6 +358,9 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(string.Empty, MPN.eyewhite, 3),
 			Maid.CreateProp(string.Empty, MPN.eyewhite, 3),
 			Maid.CreateProp(string.Empty, MPN.nose, 3),
 			Maid.CreateProp(string.Empty, MPN.nose, 3),
 			Maid.CreateProp(string.Empty, MPN.facegloss, 3),
 			Maid.CreateProp(string.Empty, MPN.facegloss, 3),
+			Maid.CreateProp(string.Empty, MPN.matsuge_up, 3),
+			Maid.CreateProp(string.Empty, MPN.matsuge_low, 3),
+			Maid.CreateProp(string.Empty, MPN.futae, 3),
 			Maid.CreateProp(string.Empty, MPN.moza, 3),
 			Maid.CreateProp(string.Empty, MPN.moza, 3),
 			Maid.CreateProp(string.Empty, MPN.onepiece, 3),
 			Maid.CreateProp(string.Empty, MPN.onepiece, 3),
 			Maid.CreateProp(string.Empty, MPN.set_maidwear, 3),
 			Maid.CreateProp(string.Empty, MPN.set_maidwear, 3),
@@ -328,6 +372,9 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(string.Empty, MPN.folder_underhair, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_underhair, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_skin, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_skin, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_eyewhite, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_eyewhite, 3),
+			Maid.CreateProp(string.Empty, MPN.folder_matsuge_up, 3),
+			Maid.CreateProp(string.Empty, MPN.folder_matsuge_low, 3),
+			Maid.CreateProp(string.Empty, MPN.folder_futae, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_upper, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_upper, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_lower, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_lower, 3),
 			Maid.CreateProp(string.Empty, MPN.seieki_naka, 3),
 			Maid.CreateProp(string.Empty, MPN.seieki_naka, 3),
@@ -547,7 +594,7 @@ public class Maid : MonoBehaviour
 		flag = (prop.m_dicTBodyAttachPos.Count != 0);
 		flag = (prop.m_dicTBodyAttachPos.Count != 0);
 		flag2 = (prop.m_dicMaterialProp.Count != 0);
 		flag2 = (prop.m_dicMaterialProp.Count != 0);
 		flag3 = (prop.m_dicBoneLength.Count != 0);
 		flag3 = (prop.m_dicBoneLength.Count != 0);
-		if (mps.idx != 43)
+		if (mps.idx != 54)
 		{
 		{
 			this.SetProp((MPN)mps.idx, mps.strFileName, mps.nFileNameRID, false, false);
 			this.SetProp((MPN)mps.idx, mps.strFileName, mps.nFileNameRID, false, false);
 		}
 		}
@@ -559,7 +606,7 @@ public class Maid : MonoBehaviour
 			{
 			{
 				prop2.m_dicTBodySkinPos[keyValuePair.Key] = new KeyValuePair<int, BoneAttachPos>(keyValuePair.Value.Key, new BoneAttachPos(keyValuePair.Value.Value));
 				prop2.m_dicTBodySkinPos[keyValuePair.Key] = new KeyValuePair<int, BoneAttachPos>(keyValuePair.Value.Key, new BoneAttachPos(keyValuePair.Value.Value));
 			}
 			}
-			if (mps.idx != 43)
+			if (mps.idx != 54)
 			{
 			{
 				prop2.boDut = true;
 				prop2.boDut = true;
 			}
 			}
@@ -578,7 +625,7 @@ public class Maid : MonoBehaviour
 				}
 				}
 				prop3.m_dicTBodyAttachPos[keyValuePair2.Key] = dictionary;
 				prop3.m_dicTBodyAttachPos[keyValuePair2.Key] = dictionary;
 			}
 			}
-			if (mps.idx != 43)
+			if (mps.idx != 54)
 			{
 			{
 				prop3.boDut = true;
 				prop3.boDut = true;
 			}
 			}
@@ -592,7 +639,7 @@ public class Maid : MonoBehaviour
 			{
 			{
 				prop4.m_dicMaterialProp[keyValuePair4.Key] = new KeyValuePair<int, MatPropSave>(keyValuePair4.Value.Key, new MatPropSave(keyValuePair4.Value.Value));
 				prop4.m_dicMaterialProp[keyValuePair4.Key] = new KeyValuePair<int, MatPropSave>(keyValuePair4.Value.Key, new MatPropSave(keyValuePair4.Value.Value));
 			}
 			}
-			if (mps.idx != 43)
+			if (mps.idx != 54)
 			{
 			{
 				prop4.boDut = true;
 				prop4.boDut = true;
 			}
 			}
@@ -611,7 +658,7 @@ public class Maid : MonoBehaviour
 				}
 				}
 				prop5.m_dicBoneLength[keyValuePair5.Key] = new KeyValuePair<int, Dictionary<string, float>>(keyValuePair5.Value.Key, dictionary2);
 				prop5.m_dicBoneLength[keyValuePair5.Key] = new KeyValuePair<int, Dictionary<string, float>>(keyValuePair5.Value.Key, dictionary2);
 			}
 			}
-			if (mps.idx != 43)
+			if (mps.idx != 54)
 			{
 			{
 				prop5.boDut = true;
 				prop5.boDut = true;
 			}
 			}
@@ -638,12 +685,12 @@ public class Maid : MonoBehaviour
 				}
 				}
 				if (Product.isPublic)
 				if (Product.isPublic)
 				{
 				{
-					if (mp.idx == 71 && filename.ToLower() != "pants030_i_.menu")
+					if (mp.idx == 85 && filename.ToLower() != "pants030_i_.menu")
 					{
 					{
 						this.SetProp(mp, "pants030_i_.menu", 0, f_bTemp, f_bNoScale);
 						this.SetProp(mp, "pants030_i_.menu", 0, f_bTemp, f_bNoScale);
 						return;
 						return;
 					}
 					}
-					if (mp.idx == 70 && filename.ToLower() != "bra030_i_.menu")
+					if (mp.idx == 84 && filename.ToLower() != "bra030_i_.menu")
 					{
 					{
 						this.SetProp(mp, "bra030_i_.menu", 0, f_bTemp, f_bNoScale);
 						this.SetProp(mp, "bra030_i_.menu", 0, f_bTemp, f_bNoScale);
 						return;
 						return;
@@ -653,7 +700,7 @@ public class Maid : MonoBehaviour
 		}
 		}
 		else
 		else
 		{
 		{
-			if (mp.strFileName != filename || mp.bSubDut || (97 <= mp.idx && mp.idx <= 100))
+			if (mp.strFileName != filename || mp.bSubDut || (111 <= mp.idx && mp.idx <= 114))
 			{
 			{
 				mp.boDut = true;
 				mp.boDut = true;
 			}
 			}
@@ -685,7 +732,7 @@ public class Maid : MonoBehaviour
 				{
 				{
 					f_nFileNameRID = 0;
 					f_nFileNameRID = 0;
 				}
 				}
-				if (mp.idx == 96)
+				if (mp.idx == 110)
 				{
 				{
 					this.m_strBefOnepiceFileName = filename;
 					this.m_strBefOnepiceFileName = filename;
 					this.m_nBefOnepiceRID = f_nFileNameRID;
 					this.m_nBefOnepiceRID = f_nFileNameRID;
@@ -705,7 +752,7 @@ public class Maid : MonoBehaviour
 						}
 						}
 					}
 					}
 				}
 				}
-				else if (mp.idx == 67)
+				else if (mp.idx == 81)
 				{
 				{
 					this.m_strBefWearFileName = filename;
 					this.m_strBefWearFileName = filename;
 					this.m_nBefWearRID = f_nFileNameRID;
 					this.m_nBefWearRID = f_nFileNameRID;
@@ -718,7 +765,7 @@ public class Maid : MonoBehaviour
 						}
 						}
 					}
 					}
 				}
 				}
-				else if (mp.idx == 68)
+				else if (mp.idx == 82)
 				{
 				{
 					this.m_strBefSkirtFileName = filename;
 					this.m_strBefSkirtFileName = filename;
 					this.m_nBefSkirtRID = f_nFileNameRID;
 					this.m_nBefSkirtRID = f_nFileNameRID;
@@ -733,12 +780,12 @@ public class Maid : MonoBehaviour
 				}
 				}
 				else
 				else
 				{
 				{
-					if (mp.idx == 71 && filename.ToLower() != "pants030_i_.menu")
+					if (mp.idx == 85 && filename.ToLower() != "pants030_i_.menu")
 					{
 					{
 						this.SetProp(mp, "pants030_i_.menu", 0, f_bTemp, f_bNoScale);
 						this.SetProp(mp, "pants030_i_.menu", 0, f_bTemp, f_bNoScale);
 						return;
 						return;
 					}
 					}
-					if (mp.idx == 70 && filename.ToLower() != "bra030_i_.menu")
+					if (mp.idx == 84 && filename.ToLower() != "bra030_i_.menu")
 					{
 					{
 						this.SetProp(mp, "bra030_i_.menu", 0, f_bTemp, f_bNoScale);
 						this.SetProp(mp, "bra030_i_.menu", 0, f_bTemp, f_bNoScale);
 						return;
 						return;
@@ -956,19 +1003,19 @@ public class Maid : MonoBehaviour
 						this.body0.FixVisibleFlag(true);
 						this.body0.FixVisibleFlag(true);
 						this.boModelChg = true;
 						this.boModelChg = true;
 					}
 					}
-					if (this.boMAN && maidProp.idx == 43)
+					if (this.boMAN && maidProp.idx == 54)
 					{
 					{
-						for (int i = 44; i <= 100; i++)
+						for (int i = 55; i <= 114; i++)
 						{
 						{
 							this.GetProp((MPN)i).boDut = true;
 							this.GetProp((MPN)i).boDut = true;
 						}
 						}
 						this.GetProp(MPN.moza).boDut = true;
 						this.GetProp(MPN.moza).boDut = true;
 					}
 					}
-					else if (maidProp.idx == 50 || maidProp.idx == 46 || maidProp.idx == 47 || maidProp.idx == 49 || maidProp.idx == 48)
+					else if (maidProp.idx == 61 || maidProp.idx == 57 || maidProp.idx == 58 || maidProp.idx == 60 || maidProp.idx == 59)
 					{
 					{
 						this.GetProp(MPN.haircolor).boDut = true;
 						this.GetProp(MPN.haircolor).boDut = true;
 					}
 					}
-					else if (maidProp.idx == 45)
+					else if (maidProp.idx == 56)
 					{
 					{
 						MPN[] array = new MPN[]
 						MPN[] array = new MPN[]
 						{
 						{
@@ -995,14 +1042,25 @@ public class Maid : MonoBehaviour
 							MPN.eyewhite,
 							MPN.eyewhite,
 							MPN.nose,
 							MPN.nose,
 							MPN.facegloss,
 							MPN.facegloss,
-							MPN.lip
+							MPN.lip,
+							MPN.MayuThick,
+							MPN.MayuLong,
+							MPN.Yorime,
+							MPN.MabutaUpIn,
+							MPN.MabutaUpIn2,
+							MPN.MabutaUpMiddle,
+							MPN.MabutaUpOut,
+							MPN.MabutaUpOut2,
+							MPN.MabutaLowIn,
+							MPN.MabutaLowUpMiddle,
+							MPN.MabutaLowUpOut
 						};
 						};
 						foreach (MPN mpn in array)
 						foreach (MPN mpn in array)
 						{
 						{
 							this.GetProp(mpn).boDut = true;
 							this.GetProp(mpn).boDut = true;
 						}
 						}
 					}
 					}
-					else if (maidProp.idx == 52)
+					else if (maidProp.idx == 63)
 					{
 					{
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						prop.boDut = true;
 						prop.boDut = true;
@@ -1031,6 +1089,9 @@ public class Maid : MonoBehaviour
 						this.GetProp(MPN.lip).boDut = true;
 						this.GetProp(MPN.lip).boDut = true;
 						this.GetProp(MPN.nose).boDut = true;
 						this.GetProp(MPN.nose).boDut = true;
 						this.GetProp(MPN.facegloss).boDut = true;
 						this.GetProp(MPN.facegloss).boDut = true;
+						this.GetProp(MPN.matsuge_up).boDut = true;
+						this.GetProp(MPN.matsuge_low).boDut = true;
+						this.GetProp(MPN.futae).boDut = true;
 					}
 					}
 					break;
 					break;
 				}
 				}
@@ -1107,19 +1168,19 @@ public class Maid : MonoBehaviour
 						this.body0.FixVisibleFlag(true);
 						this.body0.FixVisibleFlag(true);
 						this.boModelChg = true;
 						this.boModelChg = true;
 					}
 					}
-					if (this.boMAN && maidProp.idx == 43)
+					if (this.boMAN && maidProp.idx == 54)
 					{
 					{
-						for (int j = 44; j <= 100; j++)
+						for (int j = 55; j <= 114; j++)
 						{
 						{
 							this.GetProp((MPN)j).boDut = true;
 							this.GetProp((MPN)j).boDut = true;
 						}
 						}
 						this.GetProp(MPN.moza).boDut = true;
 						this.GetProp(MPN.moza).boDut = true;
 					}
 					}
-					else if (maidProp.idx == 50 || maidProp.idx == 46 || maidProp.idx == 47 || maidProp.idx == 49 || maidProp.idx == 48)
+					else if (maidProp.idx == 61 || maidProp.idx == 57 || maidProp.idx == 58 || maidProp.idx == 60 || maidProp.idx == 59)
 					{
 					{
 						this.GetProp(MPN.haircolor).boDut = true;
 						this.GetProp(MPN.haircolor).boDut = true;
 					}
 					}
-					else if (maidProp.idx == 45)
+					else if (maidProp.idx == 56)
 					{
 					{
 						MPN[] array = new MPN[]
 						MPN[] array = new MPN[]
 						{
 						{
@@ -1146,14 +1207,25 @@ public class Maid : MonoBehaviour
 							MPN.eyewhite,
 							MPN.eyewhite,
 							MPN.nose,
 							MPN.nose,
 							MPN.facegloss,
 							MPN.facegloss,
-							MPN.lip
+							MPN.lip,
+							MPN.MayuThick,
+							MPN.MayuLong,
+							MPN.Yorime,
+							MPN.MabutaUpIn,
+							MPN.MabutaUpIn2,
+							MPN.MabutaUpMiddle,
+							MPN.MabutaUpOut,
+							MPN.MabutaUpOut2,
+							MPN.MabutaLowIn,
+							MPN.MabutaLowUpMiddle,
+							MPN.MabutaLowUpOut
 						};
 						};
 						foreach (MPN mpn in array)
 						foreach (MPN mpn in array)
 						{
 						{
 							this.GetProp(mpn).boDut = true;
 							this.GetProp(mpn).boDut = true;
 						}
 						}
 					}
 					}
-					else if (maidProp.idx == 52)
+					else if (maidProp.idx == 63)
 					{
 					{
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						prop.boDut = true;
 						prop.boDut = true;
@@ -1182,6 +1254,9 @@ public class Maid : MonoBehaviour
 						this.GetProp(MPN.lip).boDut = true;
 						this.GetProp(MPN.lip).boDut = true;
 						this.GetProp(MPN.nose).boDut = true;
 						this.GetProp(MPN.nose).boDut = true;
 						this.GetProp(MPN.facegloss).boDut = true;
 						this.GetProp(MPN.facegloss).boDut = true;
+						this.GetProp(MPN.matsuge_up).boDut = true;
+						this.GetProp(MPN.matsuge_low).boDut = true;
+						this.GetProp(MPN.futae).boDut = true;
 					}
 					}
 				}
 				}
 			}
 			}
@@ -1246,7 +1321,7 @@ public class Maid : MonoBehaviour
 		}
 		}
 		else if (mp.type == 3)
 		else if (mp.type == 3)
 		{
 		{
-			if (Product.isPublic && (mp.boTempDut || mp.boDut) && (mp.idx == 44 || mp.idx == 55 || mp.idx == 62 || mp.idx == 63 || mp.idx == 44 || mp.idx == 82 || mp.idx == 90 || mp.idx == 91 || mp.idx == 93))
+			if (Product.isPublic && (mp.boTempDut || mp.boDut) && (mp.idx == 55 || mp.idx == 66 || mp.idx == 73 || mp.idx == 74 || mp.idx == 55 || mp.idx == 96 || mp.idx == 104 || mp.idx == 105 || mp.idx == 107))
 			{
 			{
 				mp.boDut = false;
 				mp.boDut = false;
 				mp.boTempDut = false;
 				mp.boTempDut = false;
@@ -1274,7 +1349,7 @@ public class Maid : MonoBehaviour
 				}
 				}
 				result = true;
 				result = true;
 				mp.boTempDut = false;
 				mp.boTempDut = false;
-				if (97 <= mp.idx && mp.idx <= 100)
+				if (111 <= mp.idx && mp.idx <= 114)
 				{
 				{
 					mp.nTempFileNameRID = 0;
 					mp.nTempFileNameRID = 0;
 					mp.strTempFileName = string.Empty;
 					mp.strTempFileName = string.Empty;
@@ -1292,7 +1367,7 @@ public class Maid : MonoBehaviour
 				}
 				}
 				result = true;
 				result = true;
 				mp.boDut = false;
 				mp.boDut = false;
-				if (97 <= mp.idx && mp.idx <= 100)
+				if (111 <= mp.idx && mp.idx <= 114)
 				{
 				{
 					mp.nFileNameRID = 0;
 					mp.nFileNameRID = 0;
 					mp.strFileName = string.Empty;
 					mp.strFileName = string.Empty;
@@ -1366,6 +1441,31 @@ public class Maid : MonoBehaviour
 		}
 		}
 	}
 	}
 
 
+	public int MayuAlpha
+	{
+		get
+		{
+			string materialProperty = this.body0.GetMaterialProperty("head", 3, "_Color", "Color");
+			if (string.IsNullOrEmpty(materialProperty))
+			{
+				return 0;
+			}
+			string[] array = materialProperty.Split(new char[]
+			{
+				':'
+			});
+			if (array == null || array.Length != 4)
+			{
+				return 0;
+			}
+			return (int)(float.Parse(array[3]) * 100f);
+		}
+		set
+		{
+			this.body0.SetMaterialProperty("mayu", "head", 3, "_Color", "Color", "1.0:1.0:1.0:" + ((float)value / 100f).ToString(), true);
+		}
+	}
+
 	public void SubPropAlpha(MPN f_mpn, int f_nSubNo, float f_fTexMulAlpha)
 	public void SubPropAlpha(MPN f_mpn, int f_nSubNo, float f_fTexMulAlpha)
 	{
 	{
 		MaidProp maidProp = this.m_aryMaidProp[(int)f_mpn];
 		MaidProp maidProp = this.m_aryMaidProp[(int)f_mpn];
@@ -1386,7 +1486,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1470);
+		f_bwWrite.Write(1480);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		int num = 0;
 		int num = 0;
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
@@ -1420,7 +1520,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1470);
+		f_bwWrite.Write(1480);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		if (this.m_texIcon != null)
 		{
 		{
@@ -1445,7 +1545,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1470);
+		f_bwWrite.Write(1480);
 		return true;
 		return true;
 	}
 	}
 
 
@@ -1460,7 +1560,7 @@ public class Maid : MonoBehaviour
 			string tag = f_brRead.ReadString();
 			string tag = f_brRead.ReadString();
 			MaidProp prop = this.GetProp(tag);
 			MaidProp prop = this.GetProp(tag);
 			prop.Deserialize(f_brRead);
 			prop.Deserialize(f_brRead);
-			if (num <= 135 && prop.idx == 83 && Path.GetFileNameWithoutExtension(prop.strFileName.ToLower()) == "acckubi007_i_")
+			if (num <= 135 && prop.idx == 97 && Path.GetFileNameWithoutExtension(prop.strFileName.ToLower()) == "acckubi007_i_")
 			{
 			{
 				prop.boDut = true;
 				prop.boDut = true;
 				prop.strFileName = CM3.dicDelItem[MPN.acckubi];
 				prop.strFileName = CM3.dicDelItem[MPN.acckubi];
@@ -1615,6 +1715,7 @@ public class Maid : MonoBehaviour
 		return list;
 		return list;
 	}
 	}
 
 
+	[Obsolete("GameUty.RidMenuDic廃止により使用不可", true)]
 	public static List<MaidProp> DeserializePropLowCapacity(BinaryReader reader)
 	public static List<MaidProp> DeserializePropLowCapacity(BinaryReader reader)
 	{
 	{
 		List<MaidProp> list = Maid.CreateInitMaidPropList();
 		List<MaidProp> list = Maid.CreateInitMaidPropList();

+ 30 - 6
Assembly-CSharp/MaidParts.cs

@@ -8,7 +8,7 @@ public class MaidParts : MonoBehaviour
 	{
 	{
 		this.m_objMaid = f_objMaid;
 		this.m_objMaid = f_objMaid;
 		this.m_Maid = f_Maid;
 		this.m_Maid = f_Maid;
-		for (int i = 0; i < 10; i++)
+		for (int i = 0; i < 13; i++)
 		{
 		{
 			this.m_aryPartsColor[i] = MaidParts.m_aryPartsColorDefault[i];
 			this.m_aryPartsColor[i] = MaidParts.m_aryPartsColorDefault[i];
 			this.m_aryPartsColorTable[i] = new Texture2D(256, 1, TextureFormat.RGBA32, false);
 			this.m_aryPartsColorTable[i] = new Texture2D(256, 1, TextureFormat.RGBA32, false);
@@ -37,7 +37,7 @@ public class MaidParts : MonoBehaviour
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MULTI_COL");
 		f_bwWrite.Write("CM3D2_MULTI_COL");
-		f_bwWrite.Write(1470);
+		f_bwWrite.Write(1480);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		{
 		{
@@ -63,8 +63,8 @@ public class MaidParts : MonoBehaviour
 
 
 	public unsafe static MaidParts.PartsColor[] DeserializePre(BinaryReader f_brRead)
 	public unsafe static MaidParts.PartsColor[] DeserializePre(BinaryReader f_brRead)
 	{
 	{
-		MaidParts.PartsColor[] array = new MaidParts.PartsColor[10];
-		for (int i = 0; i < 10; i++)
+		MaidParts.PartsColor[] array = new MaidParts.PartsColor[13];
+		for (int i = 0; i < 13; i++)
 		{
 		{
 			array[i] = MaidParts.m_aryPartsColorDefault[i];
 			array[i] = MaidParts.m_aryPartsColorDefault[i];
 		}
 		}
@@ -207,12 +207,33 @@ public class MaidParts : MonoBehaviour
 			m_nShadowChroma = 79,
 			m_nShadowChroma = 79,
 			m_nShadowBrightness = 321,
 			m_nShadowBrightness = 321,
 			m_nShadowContrast = 0
 			m_nShadowContrast = 0
+		},
+		new MaidParts.PartsColor
+		{
+			m_nMainHue = 0,
+			m_nMainChroma = 56,
+			m_nMainBrightness = 185,
+			m_nMainContrast = 47
+		},
+		new MaidParts.PartsColor
+		{
+			m_nMainHue = 0,
+			m_nMainChroma = 56,
+			m_nMainBrightness = 185,
+			m_nMainContrast = 47
+		},
+		new MaidParts.PartsColor
+		{
+			m_nMainHue = 18,
+			m_nMainChroma = 60,
+			m_nMainBrightness = 200,
+			m_nMainContrast = 128
 		}
 		}
 	};
 	};
 
 
-	private MaidParts.PartsColor[] m_aryPartsColor = new MaidParts.PartsColor[10];
+	private MaidParts.PartsColor[] m_aryPartsColor = new MaidParts.PartsColor[13];
 
 
-	private Texture2D[] m_aryPartsColorTable = new Texture2D[10];
+	private Texture2D[] m_aryPartsColorTable = new Texture2D[13];
 
 
 	private GameObject m_objMaid;
 	private GameObject m_objMaid;
 
 
@@ -231,6 +252,9 @@ public class MaidParts : MonoBehaviour
 		HAIR_OUTLINE,
 		HAIR_OUTLINE,
 		SKIN_OUTLINE,
 		SKIN_OUTLINE,
 		EYE_WHITE,
 		EYE_WHITE,
+		MATSUGE_UP,
+		MATSUGE_LOW,
+		FUTAE,
 		MAX
 		MAX
 	}
 	}
 
 

+ 4 - 3
Assembly-CSharp/MaidProp.cs

@@ -8,7 +8,7 @@ public class MaidProp
 	public bool Serialize(BinaryWriter f_bwWrite)
 	public bool Serialize(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MPROP");
 		f_bwWrite.Write("CM3D2_MPROP");
-		f_bwWrite.Write(1470);
+		f_bwWrite.Write(1480);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.type);
 		f_bwWrite.Write(this.type);
@@ -189,7 +189,7 @@ public class MaidProp
 			this.strFileName = "_I_mayu_001_mugen.menu";
 			this.strFileName = "_I_mayu_001_mugen.menu";
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
 		}
 		}
-		if (num <= 208 && this.idx == 54 && this.strFileName.ToLower() == "_I_acctatoo_del.menu".ToLower())
+		if (num <= 208 && this.idx == 65 && this.strFileName.ToLower() == "_I_acctatoo_del.menu".ToLower())
 		{
 		{
 			this.strFileName = CM3.dicDelItem[MPN.accnail];
 			this.strFileName = CM3.dicDelItem[MPN.accnail];
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
@@ -284,7 +284,7 @@ public class MaidProp
 				}
 				}
 			}
 			}
 		}
 		}
-		if (num < 200 && this.idx == 47 && Path.GetFileNameWithoutExtension(this.strFileName.ToLower()) == "hair_r095_i_")
+		if (num < 200 && this.idx == 58 && Path.GetFileNameWithoutExtension(this.strFileName.ToLower()) == "hair_r095_i_")
 		{
 		{
 			this.strFileName = "hair_r110_i_.menu";
 			this.strFileName = "hair_r110_i_.menu";
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
@@ -296,6 +296,7 @@ public class MaidProp
 		return true;
 		return true;
 	}
 	}
 
 
+	[Obsolete("GameUty.RidMenuDic廃止により使用不可", true)]
 	public bool DeserializeLowCapacity(BinaryReader reader)
 	public bool DeserializeLowCapacity(BinaryReader reader)
 	{
 	{
 		this.value = reader.ReadInt32();
 		this.value = reader.ReadInt32();

+ 17 - 5
Assembly-CSharp/MaidStatus/PersonalEventBlocker.cs

@@ -12,11 +12,23 @@ namespace MaidStatus
 				return;
 				return;
 			}
 			}
 			PersonalEventBlocker.blockerDataList = new List<PersonalEventBlocker.Data>();
 			PersonalEventBlocker.blockerDataList = new List<PersonalEventBlocker.Data>();
-			if (Product.type != Product.Type.EnAdult)
+			string text = string.Empty;
+			string str = string.Empty;
+			if (Product.type == Product.Type.EnAdult)
+			{
+				text = "maid_personaleventblocker_list.nei";
+				str = "maid_personaleventblocker_unlocklist_";
+			}
+			else if (Product.type == Product.Type.JpAdult)
+			{
+				text = "maid_personaleventblocker_list_jp.nei";
+				str = "maid_personaleventblocker_unlocklist_jp_";
+			}
+			if (string.IsNullOrEmpty(text) || !GameUty.FileSystem.IsExistentFile(text))
 			{
 			{
 				return;
 				return;
 			}
 			}
-			using (AFileBase afileBase = GameUty.FileSystem.FileOpen("maid_personaleventblocker_list.nei"))
+			using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
 			{
 			{
 				using (CsvParser csvParser = new CsvParser())
 				using (CsvParser csvParser = new CsvParser())
 				{
 				{
@@ -36,9 +48,9 @@ namespace MaidStatus
 			if (GameUty.PathList != null)
 			if (GameUty.PathList != null)
 			{
 			{
 				HashSet<PersonalEventBlocker.Data> hashSet = new HashSet<PersonalEventBlocker.Data>();
 				HashSet<PersonalEventBlocker.Data> hashSet = new HashSet<PersonalEventBlocker.Data>();
-				foreach (string str in GameUty.PathList)
+				foreach (string str2 in GameUty.PathList)
 				{
 				{
-					string f_strFileName = "maid_personaleventblocker_unlocklist_" + str + ".nei";
+					string f_strFileName = str + str2 + ".nei";
 					if (GameUty.FileSystem.IsExistentFile(f_strFileName))
 					if (GameUty.FileSystem.IsExistentFile(f_strFileName))
 					{
 					{
 						using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen(f_strFileName))
 						using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen(f_strFileName))
@@ -105,7 +117,7 @@ namespace MaidStatus
 
 
 		public static bool IsEnabledLifeMode(Personal.Data personal)
 		public static bool IsEnabledLifeMode(Personal.Data personal)
 		{
 		{
-			return PersonalEventBlocker.GetData(personal) == null;
+			return Product.type != Product.Type.EnAdult || PersonalEventBlocker.GetData(personal) == null;
 		}
 		}
 
 
 		private static List<PersonalEventBlocker.Data> blockerDataList;
 		private static List<PersonalEventBlocker.Data> blockerDataList;

+ 26 - 5
Assembly-CSharp/MaidStatus/Status.cs

@@ -809,6 +809,18 @@ namespace MaidStatus
 			}
 			}
 		}
 		}
 
 
+		public bool isScoutMaid
+		{
+			get
+			{
+				return this.flags_["__is_scout_maid"] == 1;
+			}
+			set
+			{
+				this.flags_["__is_scout_maid"] = ((!value) ? 0 : 1);
+			}
+		}
+
 		public int inranGap
 		public int inranGap
 		{
 		{
 			get
 			get
@@ -912,14 +924,19 @@ namespace MaidStatus
 			return str;
 			return str;
 		}
 		}
 
 
-		public void Initialize(Maid maid)
+		public void SetNewGuidAndCreationTime(string guidText = null, string creationTimeText = null)
 		{
 		{
-			this.maid = maid;
-			this.guid = Guid.NewGuid().ToString();
-			this.creationTime = DateTime.Now.ToString("G", new CultureInfo("ja-JP")).Replace("/", string.Empty);
+			this.guid = ((!string.IsNullOrEmpty(guidText)) ? guidText : Guid.NewGuid().ToString());
+			this.creationTime = ((!string.IsNullOrEmpty(creationTimeText)) ? creationTimeText : DateTime.Now.ToString("G", new CultureInfo("ja-JP")).Replace("/", string.Empty));
 			string text = this.creationTime.Replace(":", string.Empty);
 			string text = this.creationTime.Replace(":", string.Empty);
 			text = text.Replace(" ", string.Empty);
 			text = text.Replace(" ", string.Empty);
 			this.creationTimeNum = ulong.Parse(text);
 			this.creationTimeNum = ulong.Parse(text);
+		}
+
+		public void Initialize(Maid maid)
+		{
+			this.maid = maid;
+			this.SetNewGuidAndCreationTime(null, null);
 			this.employmentDay = GameMain.Instance.CharacterMgr.status.days;
 			this.employmentDay = GameMain.Instance.CharacterMgr.status.days;
 			this.additionalRelation = AdditionalRelation.Vigilance;
 			this.additionalRelation = AdditionalRelation.Vigilance;
 			this.specialRelation = SpecialRelation.Null;
 			this.specialRelation = SpecialRelation.Null;
@@ -1355,7 +1372,7 @@ namespace MaidStatus
 		{
 		{
 			this.SetFlag("__1330_specialrelation__", (int)this.specialRelation);
 			this.SetFlag("__1330_specialrelation__", (int)this.specialRelation);
 			binary.Write("CM3D2_MAID_STATUS");
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1470);
+			binary.Write(1480);
 			binary.Write(this.guid);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);
 			binary.Write((short)this.heroineType);
@@ -1774,6 +1791,10 @@ namespace MaidStatus
 					this.yotogiSkill.Add(data2);
 					this.yotogiSkill.Add(data2);
 				}
 				}
 			}
 			}
+			if (this.GetFlag("処女喪失シナリオ初回") == 1 && this.initSeikeiken != Seikeiken.No_No)
+			{
+				this.initSeikeiken = Seikeiken.No_No;
+			}
 		}
 		}
 
 
 		public void Deserialize(StatusReader oldStatusReader, bool convertYotogiSkill)
 		public void Deserialize(StatusReader oldStatusReader, bool convertYotogiSkill)

+ 14 - 10
Assembly-CSharp/MaidStatus/YotogiClass.cs

@@ -290,12 +290,12 @@ namespace MaidStatus
 						{
 						{
 							bool condition3 = csvParser3.Open(afileBase3);
 							bool condition3 = csvParser3.Open(afileBase3);
 							NDebug.Assert(condition3, file_name + "\nopen failed.");
 							NDebug.Assert(condition3, file_name + "\nopen failed.");
-							for (int num = 1; num < csvParser3.max_cell_y; num++)
+							for (int num2 = 1; num2 < csvParser3.max_cell_y; num2++)
 							{
 							{
-								if (csvParser3.IsCellToExistData(0, num))
+								if (csvParser3.IsCellToExistData(0, num2))
 								{
 								{
-									string cellAsString2 = csvParser3.GetCellAsString(0, num);
-									string cellAsString3 = csvParser3.GetCellAsString(1, num);
+									string cellAsString2 = csvParser3.GetCellAsString(0, num2);
+									string cellAsString3 = csvParser3.GetCellAsString(1, num2);
 									if (!enabledIdListOld.ContainsKey(cellAsString2))
 									if (!enabledIdListOld.ContainsKey(cellAsString2))
 									{
 									{
 										enabledIdListOld.Add(cellAsString2, cellAsString3);
 										enabledIdListOld.Add(cellAsString2, cellAsString3);
@@ -331,19 +331,23 @@ namespace MaidStatus
 				Dictionary<string, int> dictionary2 = new Dictionary<string, int>();
 				Dictionary<string, int> dictionary2 = new Dictionary<string, int>();
 				for (int m = 1; m < array2[0].Value.max_cell_y; m++)
 				for (int m = 1; m < array2[0].Value.max_cell_y; m++)
 				{
 				{
-					int cellAsInteger = array2[0].Value.GetCellAsInteger(0, m);
-					if (!YotogiClass.basicDatas.ContainsKey(cellAsInteger))
+					int num = array2[0].Value.GetCellAsInteger(0, m);
+					if (num == 56 || num == 57)
+					{
+						num += 2;
+					}
+					if (!YotogiClass.basicDatas.ContainsKey(num))
 					{
 					{
 						string cellAsString = array2[0].Value.GetCellAsString(1, m);
 						string cellAsString = array2[0].Value.GetCellAsString(1, m);
 						string text3 = (!enabledIdListOld.ContainsKey(cellAsString)) ? cellAsString : enabledIdListOld[cellAsString];
 						string text3 = (!enabledIdListOld.ContainsKey(cellAsString)) ? cellAsString : enabledIdListOld[cellAsString];
 						YotogiClass.Data value2 = new YotogiClass.Data(cellAsString, text3, array2[0].Value, array2[1].Value, array2[2].Value, array2[3].Value);
 						YotogiClass.Data value2 = new YotogiClass.Data(cellAsString, text3, array2[0].Value, array2[1].Value, array2[2].Value, array2[3].Value);
-						YotogiClass.basicDatas.Add(cellAsInteger, value2);
-						dictionary.Add(cellAsInteger, new KeyValuePair<string, string>(cellAsString, text3));
-						dictionary2.Add(cellAsString, cellAsInteger);
+						YotogiClass.basicDatas.Add(num, value2);
+						dictionary.Add(num, new KeyValuePair<string, string>(cellAsString, text3));
+						dictionary2.Add(cellAsString, num);
 					}
 					}
 					else
 					else
 					{
 					{
-						YotogiClass.basicDatas[cellAsInteger].SetClassType(AbstractClassData.ClassType.Share);
+						YotogiClass.basicDatas[num].SetClassType(AbstractClassData.ClassType.Share);
 					}
 					}
 				}
 				}
 				Dictionary<int, KeyValuePair<string, string>> dictionary3 = new Dictionary<int, KeyValuePair<string, string>>(YotogiClass.commonIdManager.idMap);
 				Dictionary<int, KeyValuePair<string, string>> dictionary3 = new Dictionary<int, KeyValuePair<string, string>>(YotogiClass.commonIdManager.idMap);

+ 53 - 0
Assembly-CSharp/MayuAlphaWindow.cs

@@ -0,0 +1,53 @@
+using System;
+using UnityEngine;
+
+public class MayuAlphaWindow : BasePhotoWindow
+{
+	public override string windowName
+	{
+		get
+		{
+			return "MayuWindow";
+		}
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.SetWindowTitleFromLocalizeTerm("透明度");
+		this.m_goParent = base.transform.Find("Parent").gameObject;
+		this.maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		this.value = this.slider.value;
+		this.visible = false;
+	}
+
+	public void OnChangerValue(int value)
+	{
+		this.maid.MayuAlpha = value;
+	}
+
+	public override void Update()
+	{
+		if (SceneEdit.Instance.isFBFace && SceneEdit.Instance != null && SceneEdit.Instance.maid != null && SceneEdit.Instance.NowMPN == MPN.folder_mayu)
+		{
+			this.visible = true;
+			if (this.slider.value != this.value)
+			{
+				this.OnChangerValue((int)this.slider.value);
+				this.value = this.slider.value;
+			}
+		}
+		else
+		{
+			this.visible = false;
+		}
+	}
+
+	public PhotoSliderAndInput slider;
+
+	private GameObject m_goParent;
+
+	private float value;
+
+	private Maid maid;
+}

+ 199 - 149
Assembly-CSharp/Menu.cs

@@ -136,7 +136,7 @@ public class Menu : MonoBehaviour
 			text = mp.strFileName;
 			text = mp.strFileName;
 		}
 		}
 		TBody body = maid.body0;
 		TBody body = maid.body0;
-		if (mp.idx == 61 || mp.idx == 64 || mp.idx == 65 || mp.idx == 66)
+		if (mp.idx == 72 || mp.idx == 75 || mp.idx == 76 || mp.idx == 77)
 		{
 		{
 			TBodySkin slot = body.GetSlot(1);
 			TBodySkin slot = body.GetSlot(1);
 			if (slot.PartsVersion < 110)
 			if (slot.PartsVersion < 110)
@@ -195,18 +195,18 @@ public class Menu : MonoBehaviour
 				}
 				}
 				if (stringCom == "name")
 				if (stringCom == "name")
 				{
 				{
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "ver")
 				if (stringCom == "ver")
 				{
 				{
 					TBodySkin slot2 = body.GetSlot(stringList[1]);
 					TBodySkin slot2 = body.GetSlot(stringList[1]);
 					version = int.Parse(stringList[2]);
 					version = int.Parse(stringList[2]);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "アイテム")
 				if (stringCom == "アイテム")
 				{
 				{
 					Menu.SetMaidItemTemp(maid, stringList[1], f_bTemp);
 					Menu.SetMaidItemTemp(maid, stringList[1], f_bTemp);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "アイテム条件")
 				if (stringCom == "アイテム条件")
 				{
 				{
@@ -305,47 +305,69 @@ public class Menu : MonoBehaviour
 					NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
 					NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
 					goto IL_414;
 					goto IL_414;
 					IL_414:
 					IL_414:
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "if")
 				if (stringCom == "if")
 				{
 				{
-					if (stringList[1].IndexOf("maidprop[") != 0)
-					{
-						goto IL_594;
-					}
-					string value = stringList[1].Substring(9, stringList[1].Length - 9 - 1);
-					MPN mpn = (MPN)Enum.Parse(typeof(MPN), value, false);
-					MaidProp prop = maid.GetProp(mpn);
-					if (!(stringList[2] == "==") || !(stringList[3] == "nothing") || prop.nFileNameRID != 0 || !(stringList[4] == "?") || stringList[5].IndexOf("setprop[") != 0)
+					if (stringList[1].IndexOf("maidprop[") == 0)
 					{
 					{
+						string value = stringList[1].Substring(9, stringList[1].Length - 9 - 1);
+						MPN mpn = (MPN)Enum.Parse(typeof(MPN), value, false);
+						MaidProp prop = maid.GetProp(mpn);
+						if (!(stringList[2] == "==") || !(stringList[3] == "nothing") || prop.nFileNameRID != 0 || !(stringList[4] == "?") || stringList[5].IndexOf("setprop[") != 0)
+						{
+							goto IL_594;
+						}
+						string value2 = stringList[5].Substring(8, stringList[5].Length - 8 - 1);
+						MPN idx = (MPN)Enum.Parse(typeof(MPN), value2, false);
+						if (!(stringList[6] == "="))
+						{
+							goto IL_594;
+						}
+						string text10;
+						if (stringList[7].IndexOf("getprop[") == 0)
+						{
+							string value3 = stringList[7].Substring(8, stringList[7].Length - 8 - 1);
+							MPN mpn2 = (MPN)Enum.Parse(typeof(MPN), value3, false);
+							MaidProp prop2 = maid.GetProp(mpn2);
+							text10 = prop2.strFileName;
+						}
+						else
+						{
+							text10 = stringList[7];
+						}
+						if (!string.IsNullOrEmpty(text10))
+						{
+							maid.SetProp(idx, text10, 0, false, false);
+							goto IL_594;
+						}
 						goto IL_594;
 						goto IL_594;
+						IL_594:
+						goto IL_677;
 					}
 					}
-					string value2 = stringList[5].Substring(8, stringList[5].Length - 8 - 1);
-					MPN idx = (MPN)Enum.Parse(typeof(MPN), value2, false);
-					if (!(stringList[6] == "="))
+					if (stringList[1].IndexOf("slot[") != 0)
 					{
 					{
-						goto IL_594;
+						goto IL_677;
 					}
 					}
-					string text10;
-					if (stringList[7].IndexOf("getprop[") == 0)
+					string[] array = stringList[1].Split(new char[]
 					{
 					{
-						string value3 = stringList[7].Substring(8, stringList[7].Length - 8 - 1);
-						MPN mpn2 = (MPN)Enum.Parse(typeof(MPN), value3, false);
-						MaidProp prop2 = maid.GetProp(mpn2);
-						text10 = prop2.strFileName;
-					}
-					else
+						'.'
+					});
+					string value4 = array[0].Substring(5, array[0].Length - 5 - 1);
+					TBody.SlotID f_nSlotNo = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), value4, true);
+					TBodySkin slot6 = maid.body0.GetSlot((int)f_nSlotNo);
+					if (2 > array.Length || !(array[1] == "ver") || !(stringList[2] == "<"))
 					{
 					{
-						text10 = stringList[7];
+						goto IL_677;
 					}
 					}
-					if (!string.IsNullOrEmpty(text10))
+					int num4 = int.Parse(stringList[3]);
+					if (slot6.PartsVersion < num4 && stringList[4] == "?" && stringList[5] == "skip")
 					{
 					{
-						maid.SetProp(idx, text10, 0, false, false);
-						goto IL_594;
+						break;
 					}
 					}
-					goto IL_594;
-					IL_594:
-					goto IL_1546;
+					goto IL_677;
+					IL_677:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "アイテムパラメータ")
 				if (stringCom == "アイテムパラメータ")
 				{
 				{
@@ -360,26 +382,26 @@ public class Menu : MonoBehaviour
 							text12,
 							text12,
 							text13
 							text13
 						}));
 						}));
-						goto IL_609;
+						goto IL_6EC;
 					}
 					}
 					Debug.LogError("アイテムパラメータ 命令の引数が不正です。SlotNameを明示的に指定しする必要があります。アイテムパラメータ <スロット名> <変数名> <値> の順です。" + text7);
 					Debug.LogError("アイテムパラメータ 命令の引数が不正です。SlotNameを明示的に指定しする必要があります。アイテムパラメータ <スロット名> <変数名> <値> の順です。" + text7);
-					goto IL_609;
-					IL_609:
-					goto IL_1546;
+					goto IL_6EC;
+					IL_6EC:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "半脱ぎ" || stringCom == "リソース参照")
 				if (stringCom == "半脱ぎ" || stringCom == "リソース参照")
 				{
 				{
 					string key;
 					string key;
-					string value4;
+					string value5;
 					if (stringCom == "半脱ぎ")
 					if (stringCom == "半脱ぎ")
 					{
 					{
 						key = "半脱ぎ";
 						key = "半脱ぎ";
-						value4 = stringList[1];
+						value5 = stringList[1];
 					}
 					}
 					else
 					else
 					{
 					{
 						key = stringList[1];
 						key = stringList[1];
-						value4 = stringList[2];
+						value5 = stringList[2];
 					}
 					}
 					int hashCode = Path.GetFileName(text.ToLower()).ToLower().GetHashCode();
 					int hashCode = Path.GetFileName(text.ToLower()).ToLower().GetHashCode();
 					SortedDictionary<string, string> sortedDictionary;
 					SortedDictionary<string, string> sortedDictionary;
@@ -388,35 +410,35 @@ public class Menu : MonoBehaviour
 						string empty = string.Empty;
 						string empty = string.Empty;
 						if (sortedDictionary.TryGetValue(key, out empty))
 						if (sortedDictionary.TryGetValue(key, out empty))
 						{
 						{
-							sortedDictionary[key] = value4;
-							goto IL_6BB;
+							sortedDictionary[key] = value5;
+							goto IL_79E;
 						}
 						}
-						sortedDictionary.Add(key, value4);
-						goto IL_6BB;
-						IL_6BB:
-						goto IL_6E0;
+						sortedDictionary.Add(key, value5);
+						goto IL_79E;
+						IL_79E:
+						goto IL_7C3;
 					}
 					}
 					sortedDictionary = new SortedDictionary<string, string>();
 					sortedDictionary = new SortedDictionary<string, string>();
-					sortedDictionary.Add(key, value4);
+					sortedDictionary.Add(key, value5);
 					Menu.m_dicResourceRef.Add(hashCode, sortedDictionary);
 					Menu.m_dicResourceRef.Add(hashCode, sortedDictionary);
-					goto IL_6E0;
-					IL_6E0:
-					goto IL_1546;
+					goto IL_7C3;
+					IL_7C3:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "set")
 				if (stringCom == "set")
 				{
 				{
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "setname")
 				if (stringCom == "setname")
 				{
 				{
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "setslotitem")
 				if (stringCom == "setslotitem")
 				{
 				{
 					string tag = stringList[1];
 					string tag = stringList[1];
 					uint val = uint.Parse(stringList[2]);
 					uint val = uint.Parse(stringList[2]);
 					maid.SetProp(tag, (int)val, false);
 					maid.SetProp(tag, (int)val, false);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "additem")
 				if (stringCom == "additem")
 				{
 				{
@@ -457,25 +479,25 @@ public class Menu : MonoBehaviour
 					}
 					}
 					body.AddItem((MPN)Enum.Parse(typeof(MPN), text9, true), text14, stringList[1], attachSlot, attachName, f_bTemp, version);
 					body.AddItem((MPN)Enum.Parse(typeof(MPN), text9, true), text14, stringList[1], attachSlot, attachName, f_bTemp, version);
 					body.SetVisibleNodeSlot(text14, true, "_ALL_");
 					body.SetVisibleNodeSlot(text14, true, "_ALL_");
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "nofloory")
 				if (stringCom == "nofloory")
 				{
 				{
 					TBody.SlotID index = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					TBody.SlotID index = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					body.goSlot[(int)index].m_bHitFloorY = false;
 					body.goSlot[(int)index].m_bHitFloorY = false;
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "saveitem")
 				if (stringCom == "saveitem")
 				{
 				{
 					text5 = stringList[1];
 					text5 = stringList[1];
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "category")
 				if (stringCom == "category")
 				{
 				{
 					text9 = stringList[1];
 					text9 = stringList[1];
 					flag2 = (text9 == "skin");
 					flag2 = (text9 == "skin");
 					flag3 = (text9 == "haircolor");
 					flag3 = (text9 == "haircolor");
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "maskitem")
 				if (stringCom == "maskitem")
 				{
 				{
@@ -483,11 +505,11 @@ public class Menu : MonoBehaviour
 					{
 					{
 						string maskslot = stringList[1];
 						string maskslot = stringList[1];
 						body.AddMask(text9, maskslot);
 						body.AddMask(text9, maskslot);
-						goto IL_92C;
+						goto IL_A0F;
 					}
 					}
-					goto IL_92C;
-					IL_92C:
-					goto IL_1546;
+					goto IL_A0F;
+					IL_A0F:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "delitem")
 				if (stringCom == "delitem")
 				{
 				{
@@ -497,27 +519,27 @@ public class Menu : MonoBehaviour
 						slotname3 = stringList[1];
 						slotname3 = stringList[1];
 					}
 					}
 					body.DelItem((MPN)Enum.Parse(typeof(MPN), text9, true), slotname3);
 					body.DelItem((MPN)Enum.Parse(typeof(MPN), text9, true), slotname3);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "node消去")
 				if (stringCom == "node消去")
 				{
 				{
 					body.SetVisibleNodeSlot(text9, false, stringList[1]);
 					body.SetVisibleNodeSlot(text9, false, stringList[1]);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "node表示")
 				if (stringCom == "node表示")
 				{
 				{
 					body.SetVisibleNodeSlot(text9, true, stringList[1]);
 					body.SetVisibleNodeSlot(text9, true, stringList[1]);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "パーツnode消去")
 				if (stringCom == "パーツnode消去")
 				{
 				{
 					body.SetVisibleNodeSlotParts(text9, stringList[1], false, stringList[2]);
 					body.SetVisibleNodeSlotParts(text9, stringList[1], false, stringList[2]);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "パーツnode表示")
 				if (stringCom == "パーツnode表示")
 				{
 				{
 					body.SetVisibleNodeSlotParts(text9, stringList[1], true, stringList[2]);
 					body.SetVisibleNodeSlotParts(text9, stringList[1], true, stringList[2]);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "color")
 				if (stringCom == "color")
 				{
 				{
@@ -526,69 +548,97 @@ public class Menu : MonoBehaviour
 					string prop_name = stringList[3];
 					string prop_name = stringList[3];
 					Color col = new Color(float.Parse(stringList[4]) / 255f, float.Parse(stringList[5]) / 255f, float.Parse(stringList[6]) / 255f, float.Parse(stringList[7]) / 255f);
 					Color col = new Color(float.Parse(stringList[4]) / 255f, float.Parse(stringList[5]) / 255f, float.Parse(stringList[6]) / 255f, float.Parse(stringList[7]) / 255f);
 					body.ChangeCol(name, matno, prop_name, col);
 					body.ChangeCol(name, matno, prop_name, col);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "mancolor")
 				if (stringCom == "mancolor")
 				{
 				{
 					Color manColor = new Color(float.Parse(stringList[1]) / 255f, float.Parse(stringList[2]) / 255f, float.Parse(stringList[3]) / 255f, 1f);
 					Color manColor = new Color(float.Parse(stringList[1]) / 255f, float.Parse(stringList[2]) / 255f, float.Parse(stringList[3]) / 255f, 1f);
 					maid.ManColor = manColor;
 					maid.ManColor = manColor;
 					maid.ManColorUpdate();
 					maid.ManColorUpdate();
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "tex" || stringCom == "テクスチャ変更")
 				if (stringCom == "tex" || stringCom == "テクスチャ変更")
 				{
 				{
 					string text15 = stringList[1];
 					string text15 = stringList[1];
-					int num4 = int.Parse(stringList[2]);
-					string text16 = stringList[3];
+					string[] array2 = stringList[2].Split(new char[]
+					{
+						'&'
+					});
+					int num5 = -1;
+					if (2 <= array2.Length)
+					{
+						foreach (string text16 in array2)
+						{
+							string[] array4 = text16.Split(new char[]
+							{
+								'='
+							});
+							MPN mpn3 = (MPN)Enum.Parse(typeof(MPN), array4[0], true);
+							if (mpn3 == (MPN)mp.idx)
+							{
+								int.TryParse(array4[1], out num5);
+								break;
+							}
+						}
+						if (num5 == -1)
+						{
+							NDebug.Assert("tex mat no error.", false);
+						}
+					}
+					else
+					{
+						int.TryParse(array2[0], out num5);
+						if (mp.idx == 72)
+						{
+							num5 = 7;
+						}
+					}
+					string text17 = stringList[3];
 					string filename = stringList[4];
 					string filename = stringList[4];
 					MaidParts.PARTS_COLOR parts_COLOR = MaidParts.PARTS_COLOR.NONE;
 					MaidParts.PARTS_COLOR parts_COLOR = MaidParts.PARTS_COLOR.NONE;
 					if (stringList.Length == 6)
 					if (stringList.Length == 6)
 					{
 					{
-						string text17 = stringList[5];
+						string text18 = stringList[5];
 						try
 						try
 						{
 						{
-							parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text17.ToUpper());
+							parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text18.ToUpper());
 						}
 						}
 						catch
 						catch
 						{
 						{
-							NDebug.Assert("無限色IDがありません。" + text17, false);
+							NDebug.Assert("無限色IDがありません。" + text18, false);
 						}
 						}
 					}
 					}
-					if (mp.idx == 61)
-					{
-						num4 = 7;
-					}
 					if (flag2 && parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
 					if (flag2 && parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
 					{
 					{
-						if (text15 == "body" && num4 == 0 && text16.ToLower() == "_maintex")
+						if (text15 == "body" && num5 == 0 && text17.ToLower() == "_maintex")
 						{
 						{
-							body.ChangeShader(text15, num4, "CM3D2_Toony_Lighted_Outline_Tex");
+							body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex");
 							flag = true;
 							flag = true;
-							body.ChangeTex(text15, num4, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
-							body.ChangeTex(text15, num4, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
+							body.ChangeTex(text15, num5, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
+							body.ChangeTex(text15, num5, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
 						}
 						}
-						else if (text15 == "head" && num4 == 5 && text16.ToLower() == "_maintex")
+						else if (text15 == "head" && num5 == 5 && text17.ToLower() == "_maintex")
 						{
 						{
-							body.ChangeShader(text15, num4, "CM3D2_Toony_Lighted_Outline_Tex");
+							body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex");
 							flag = true;
 							flag = true;
-							body.ChangeTex(text15, num4, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
-							body.ChangeTex(text15, num4, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
+							body.ChangeTex(text15, num5, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
+							body.ChangeTex(text15, num5, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
 						}
 						}
 					}
 					}
-					if (Product.isEnglish && !Product.isPublic && flag2 && text15 == "body" && num4 == 0 && text16.ToLower() == "_maintex")
+					if (Product.isEnglish && !Product.isPublic && flag2 && text15 == "body" && num5 == 0 && text17.ToLower() == "_maintex")
 					{
 					{
 						if (parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
 						if (parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
 						{
 						{
-							body.ChangeShader(text15, num4, "CM3D2_Toony_Lighted_Outline_Tex_Texwidth");
+							body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex_Texwidth");
 						}
 						}
 						else
 						else
 						{
 						{
-							body.ChangeShader(text15, num4, "CM3D2_Toony_Lighted_Outline_Texwidth");
+							body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Texwidth");
 						}
 						}
-						body.ChangeTex(text15, num4, "_OutlineWidthTex", "skin_en_outline_width.tex", null, MaidParts.PARTS_COLOR.NONE);
+						body.ChangeTex(text15, num5, "_OutlineWidthTex", "skin_en_outline_width.tex", null, MaidParts.PARTS_COLOR.NONE);
 						flag = true;
 						flag = true;
 					}
 					}
-					body.ChangeTex(text15, num4, text16, filename, null, parts_COLOR);
+					body.ChangeTex(text15, num5, text17, filename, null, parts_COLOR);
 					if (parts_COLOR != MaidParts.PARTS_COLOR.NONE)
 					if (parts_COLOR != MaidParts.PARTS_COLOR.NONE)
 					{
 					{
 						maid.Parts.SetPartsColor(parts_COLOR, maid.Parts.GetPartsColor(parts_COLOR));
 						maid.Parts.SetPartsColor(parts_COLOR, maid.Parts.GetPartsColor(parts_COLOR));
@@ -596,22 +646,22 @@ public class Menu : MonoBehaviour
 					if ((flag2 || flag3) && !flag)
 					if ((flag2 || flag3) && !flag)
 					{
 					{
 						body.RestoreShader(text15);
 						body.RestoreShader(text15);
-						goto IL_D49;
+						goto IL_ED9;
 					}
 					}
-					goto IL_D49;
-					IL_D49:
-					goto IL_1546;
+					goto IL_ED9;
+					IL_ED9:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "prop")
 				if (stringCom == "prop")
 				{
 				{
 					string tag2 = stringList[1];
 					string tag2 = stringList[1];
 					string s = stringList[2];
 					string s = stringList[2];
 					maid.SetProp(tag2, int.Parse(s), false);
 					maid.SetProp(tag2, int.Parse(s), false);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "テクスチャ乗算")
 				if (stringCom == "テクスチャ乗算")
 				{
 				{
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "テクスチャ合成")
 				if (stringCom == "テクスチャ合成")
 				{
 				{
@@ -622,12 +672,12 @@ public class Menu : MonoBehaviour
 					if ((text9 == "accTatoo" || text9 == "hokuro") && !text.Contains("_del"))
 					if ((text9 == "accTatoo" || text9 == "hokuro") && !text.Contains("_del"))
 					{
 					{
 						body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, f_SubProp, 1f, 1024);
 						body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, f_SubProp, 1f, 1024);
-						goto IL_EAC;
+						goto IL_103C;
 					}
 					}
 					body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), false, 0, 0, 0f, 0f, false, null, 1f, 1024);
 					body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), false, 0, 0, 0f, 0f, false, null, 1f, 1024);
-					goto IL_EAC;
-					IL_EAC:
-					goto IL_1546;
+					goto IL_103C;
+					IL_103C:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "テクスチャセット合成")
 				if (stringCom == "テクスチャセット合成")
 				{
 				{
@@ -636,7 +686,7 @@ public class Menu : MonoBehaviour
 						NDebug.Assert("テクスチャセット合成 の引数が不正です。" + stringList.Length, false);
 						NDebug.Assert("テクスチャセット合成 の引数が不正です。" + stringList.Length, false);
 					}
 					}
 					body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, null, 1f, 1024);
 					body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, null, 1f, 1024);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "マテリアル変更")
 				if (stringCom == "マテリアル変更")
 				{
 				{
@@ -644,7 +694,7 @@ public class Menu : MonoBehaviour
 					int f_nMatNo = int.Parse(stringList[2]);
 					int f_nMatNo = int.Parse(stringList[2]);
 					string f_strFileName = stringList[3];
 					string f_strFileName = stringList[3];
 					body.ChangeMaterial(f_strSlotName, f_nMatNo, f_strFileName);
 					body.ChangeMaterial(f_strSlotName, f_nMatNo, f_strFileName);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "shader")
 				if (stringCom == "shader")
 				{
 				{
@@ -653,14 +703,14 @@ public class Menu : MonoBehaviour
 					string f_strShaderFileName = stringList[3];
 					string f_strShaderFileName = stringList[3];
 					body.ChangeShader(f_strSlotName2, f_nMatNo2, f_strShaderFileName);
 					body.ChangeShader(f_strSlotName2, f_nMatNo2, f_strShaderFileName);
 					flag = true;
 					flag = true;
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "アタッチポイントの設定")
 				if (stringCom == "アタッチポイントの設定")
 				{
 				{
 					if (stringList.Length < 5)
 					if (stringList.Length < 5)
 					{
 					{
 						Debug.LogError("アタッチポイントの設定引数の数が不正です。 " + text7 + " " + text3);
 						Debug.LogError("アタッチポイントの設定引数の数が不正です。 " + text7 + " " + text3);
-						goto IL_106F;
+						goto IL_11FF;
 					}
 					}
 					Vector3 v = new Vector3(float.Parse(stringList[2]), float.Parse(stringList[3]), float.Parse(stringList[4]));
 					Vector3 v = new Vector3(float.Parse(stringList[2]), float.Parse(stringList[3]), float.Parse(stringList[4]));
 					Quaternion q = Quaternion.identity;
 					Quaternion q = Quaternion.identity;
@@ -673,27 +723,27 @@ public class Menu : MonoBehaviour
 						Debug.LogError("アタッチポイントの設定引数に角度指定がありません。 " + text7 + "  " + text3);
 						Debug.LogError("アタッチポイントの設定引数に角度指定がありません。 " + text7 + "  " + text3);
 					}
 					}
 					body.SetAttachPoint(slotname, stringList[1], v, q, f_bTemp);
 					body.SetAttachPoint(slotname, stringList[1], v, q, f_bTemp);
-					goto IL_106F;
-					IL_106F:
-					goto IL_1546;
+					goto IL_11FF;
+					IL_11FF:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "blendset")
 				if (stringCom == "blendset")
 				{
 				{
 					string blendSetName = stringList[1];
 					string blendSetName = stringList[1];
-					int num5 = (stringList.Length - 2) / 2;
+					int num6 = (stringList.Length - 2) / 2;
 					body.Face.morph.NewBlendSet(blendSetName);
 					body.Face.morph.NewBlendSet(blendSetName);
-					for (int j = 0; j < num5; j++)
+					for (int k = 0; k < num6; k++)
 					{
 					{
-						string tag3 = stringList[2 + j * 2].ToLower();
-						float val2 = float.Parse(stringList[3 + j * 2]);
+						string tag3 = stringList[2 + k * 2].ToLower();
+						float val2 = float.Parse(stringList[3 + k * 2]);
 						body.Face.morph.SetValueBlendSet(blendSetName, tag3, val2);
 						body.Face.morph.SetValueBlendSet(blendSetName, tag3, val2);
 					}
 					}
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "paramset")
 				if (stringCom == "paramset")
 				{
 				{
 					body.Face.NewParamSet(text7);
 					body.Face.NewParamSet(text7);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "commenttype")
 				if (stringCom == "commenttype")
 				{
 				{
@@ -702,18 +752,18 @@ public class Menu : MonoBehaviour
 						maid.status.partsDic.Add(stringList[1], string.Empty);
 						maid.status.partsDic.Add(stringList[1], string.Empty);
 					}
 					}
 					maid.status.partsDic[stringList[1]] = stringList[2];
 					maid.status.partsDic[stringList[1]] = stringList[2];
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "useredit")
 				if (stringCom == "useredit")
 				{
 				{
 					if (stringList[2].ToLower() == "material")
 					if (stringList[2].ToLower() == "material")
 					{
 					{
 						body.SetMaterialProperty(text9, stringList[3], int.Parse(stringList[4]), stringList[5], stringList[6], stringList[7], false);
 						body.SetMaterialProperty(text9, stringList[3], int.Parse(stringList[4]), stringList[5], stringList[6], stringList[7], false);
-						goto IL_11C7;
+						goto IL_1357;
 					}
 					}
-					goto IL_11C7;
-					IL_11C7:
-					goto IL_1546;
+					goto IL_1357;
+					IL_1357:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "bonemorph")
 				if (stringCom == "bonemorph")
 				{
 				{
@@ -724,43 +774,43 @@ public class Menu : MonoBehaviour
 					if (stringList.Length == 9)
 					if (stringList.Length == 9)
 					{
 					{
 						body.bonemorph.ChangeMorphPosValue(stringList[1], stringList[2], new Vector3(float.Parse(stringList[3]), float.Parse(stringList[4]), float.Parse(stringList[5])), new Vector3(float.Parse(stringList[6]), float.Parse(stringList[7]), float.Parse(stringList[8])));
 						body.bonemorph.ChangeMorphPosValue(stringList[1], stringList[2], new Vector3(float.Parse(stringList[3]), float.Parse(stringList[4]), float.Parse(stringList[5])), new Vector3(float.Parse(stringList[6]), float.Parse(stringList[7]), float.Parse(stringList[8])));
-						goto IL_138D;
+						goto IL_151D;
 					}
 					}
-					string text18 = stringList[1].ToLower();
+					string text19 = stringList[1].ToLower();
 					string strPropName = stringList[2];
 					string strPropName = stringList[2];
 					string f_strBoneName = stringList[3];
 					string f_strBoneName = stringList[3];
 					Vector3 f_fAddMin = new Vector3(float.Parse(stringList[4]), float.Parse(stringList[5]), float.Parse(stringList[6]));
 					Vector3 f_fAddMin = new Vector3(float.Parse(stringList[4]), float.Parse(stringList[5]), float.Parse(stringList[6]));
 					Vector3 f_fAddMax = new Vector3(float.Parse(stringList[7]), float.Parse(stringList[8]), float.Parse(stringList[9]));
 					Vector3 f_fAddMax = new Vector3(float.Parse(stringList[7]), float.Parse(stringList[8]), float.Parse(stringList[9]));
-					if (text18 != null)
+					if (text19 != null)
 					{
 					{
-						if (text18 == "pos")
+						if (text19 == "pos")
 						{
 						{
 							body.bonemorph.ChangeMorphPosValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
 							body.bonemorph.ChangeMorphPosValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
-							goto IL_138D;
+							goto IL_151D;
 						}
 						}
-						if (text18 == "rot")
+						if (text19 == "rot")
 						{
 						{
 							body.bonemorph.ChangeMorphRotatioValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
 							body.bonemorph.ChangeMorphRotatioValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
-							goto IL_138D;
+							goto IL_151D;
 						}
 						}
-						if (text18 == "scl")
+						if (text19 == "scl")
 						{
 						{
 							body.bonemorph.ChangeMorphSclValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
 							body.bonemorph.ChangeMorphSclValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
-							goto IL_138D;
+							goto IL_151D;
 						}
 						}
 					}
 					}
 					Debug.LogError(string.Concat(new string[]
 					Debug.LogError(string.Concat(new string[]
 					{
 					{
 						"BoneMorpのタイプ指定が不正です[",
 						"BoneMorpのタイプ指定が不正です[",
-						text18,
+						text19,
 						"]\n",
 						"]\n",
 						text7,
 						text7,
 						" ",
 						" ",
 						text3
 						text3
 					}));
 					}));
-					goto IL_138D;
-					IL_138D:
-					goto IL_1546;
+					goto IL_151D;
+					IL_151D:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "length")
 				if (stringCom == "length")
 				{
 				{
@@ -769,7 +819,7 @@ public class Menu : MonoBehaviour
 						Debug.LogError("lengthの設定引数の数が不正です。 " + text7 + " " + text3);
 						Debug.LogError("lengthの設定引数の数が不正です。 " + text7 + " " + text3);
 					}
 					}
 					body.SetHairLengthDataList(stringList[1], stringList[2], stringList[3], stringList[4], new Vector3(float.Parse(stringList[5]), float.Parse(stringList[6]), float.Parse(stringList[7])), new Vector3(float.Parse(stringList[8]), float.Parse(stringList[9]), float.Parse(stringList[10])));
 					body.SetHairLengthDataList(stringList[1], stringList[2], stringList[3], stringList[4], new Vector3(float.Parse(stringList[5]), float.Parse(stringList[6]), float.Parse(stringList[7])), new Vector3(float.Parse(stringList[8]), float.Parse(stringList[9]), float.Parse(stringList[10])));
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "anime")
 				if (stringCom == "anime")
 				{
 				{
@@ -785,7 +835,7 @@ public class Menu : MonoBehaviour
 						f_bLoop = (stringList[3] == "loop");
 						f_bLoop = (stringList[3] == "loop");
 					}
 					}
 					body.ItemAnimationPlay(f_slot, stringList[2], f_bLoop);
 					body.ItemAnimationPlay(f_slot, stringList[2], f_bLoop);
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "param2")
 				if (stringCom == "param2")
 				{
 				{
@@ -793,23 +843,23 @@ public class Menu : MonoBehaviour
 					{
 					{
 						string slotname4 = stringList[1];
 						string slotname4 = stringList[1];
 						body.GetSlot(slotname4).SetParam2(stringList[2], stringList[3]);
 						body.GetSlot(slotname4).SetParam2(stringList[2], stringList[3]);
-						goto IL_1500;
+						goto IL_1690;
 					}
 					}
 					Debug.LogError("param2の設定引数の数が不正です。 " + text7 + " " + text3);
 					Debug.LogError("param2の設定引数の数が不正です。 " + text7 + " " + text3);
-					goto IL_1500;
-					IL_1500:
-					goto IL_1546;
+					goto IL_1690;
+					IL_1690:
+					goto IL_16D6;
 				}
 				}
 				if (stringCom == "animematerial")
 				if (stringCom == "animematerial")
 				{
 				{
 					TBody.SlotID f_slot2 = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					TBody.SlotID f_slot2 = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					string s2 = stringList[2];
 					string s2 = stringList[2];
 					body.MaterialAnimatorAdd(f_slot2, int.Parse(s2));
 					body.MaterialAnimatorAdd(f_slot2, int.Parse(s2));
-					goto IL_1546;
+					goto IL_16D6;
 				}
 				}
-				goto IL_1546;
-				IL_1546:
-				goto IL_15C9;
+				goto IL_16D6;
+				IL_16D6:
+				goto IL_1759;
 			}
 			}
 			catch (Exception ex)
 			catch (Exception ex)
 			{
 			{
@@ -827,19 +877,19 @@ public class Menu : MonoBehaviour
 					ex.StackTrace
 					ex.StackTrace
 				}));
 				}));
 				NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(text), true);
 				NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(text), true);
-				goto IL_15C9;
+				goto IL_1759;
 			}
 			}
-			IL_15C9:
+			IL_1759:
 			goto IL_108;
 			goto IL_108;
 		}
 		}
 		list.Sort((Menu.LastParam a, Menu.LastParam b) => a.nOrder - a.nOrder);
 		list.Sort((Menu.LastParam a, Menu.LastParam b) => a.nOrder - a.nOrder);
-		for (int k = 0; k < list.Count; k++)
+		for (int l = 0; l < list.Count; l++)
 		{
 		{
-			Menu.LastParam lastParam = list[k];
+			Menu.LastParam lastParam = list[l];
 			if (lastParam.strComm == "アイテムパラメータ")
 			if (lastParam.strComm == "アイテムパラメータ")
 			{
 			{
-				TBodySkin slot6 = body.GetSlot(lastParam.aryArgs[0]);
-				slot6.SetParam(lastParam.aryArgs[1], lastParam.aryArgs[2]);
+				TBodySkin slot7 = body.GetSlot(lastParam.aryArgs[0]);
+				slot7.SetParam(lastParam.aryArgs[1], lastParam.aryArgs[2]);
 			}
 			}
 		}
 		}
 		binaryReader.Close();
 		binaryReader.Close();
@@ -924,7 +974,7 @@ public class Menu : MonoBehaviour
 			Directory.CreateDirectory(text);
 			Directory.CreateDirectory(text);
 		}
 		}
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
-		streamWriter.WriteLine("出力バージョン\t" + 1470);
+		streamWriter.WriteLine("出力バージョン\t" + 1480);
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		try
 		try
 		{
 		{
@@ -1292,7 +1342,7 @@ public class Menu : MonoBehaviour
 
 
 	private static void ProcModScriptBin(Maid maid, byte[] cd, string filename, MaidProp mp, bool f_bTemp = false)
 	private static void ProcModScriptBin(Maid maid, byte[] cd, string filename, MaidProp mp, bool f_bTemp = false)
 	{
 	{
-		if (mp != null && maid.body0 != null && (mp.idx == 61 || mp.idx == 64 || mp.idx == 65 || mp.idx == 66))
+		if (mp != null && maid.body0 != null && (mp.idx == 72 || mp.idx == 75 || mp.idx == 76 || mp.idx == 77))
 		{
 		{
 			TBodySkin slot = maid.body0.GetSlot(1);
 			TBodySkin slot = maid.body0.GetSlot(1);
 			if (slot.PartsVersion < 110)
 			if (slot.PartsVersion < 110)
@@ -1421,7 +1471,7 @@ public class Menu : MonoBehaviour
 						}
 						}
 					}
 					}
 					int matno = int.Parse(array[2]);
 					int matno = int.Parse(array[2]);
-					if (mp != null && mp.idx == 61)
+					if (mp != null && mp.idx == 72)
 					{
 					{
 						matno = 7;
 						matno = 7;
 					}
 					}

+ 1 - 1
Assembly-CSharp/Misc.cs

@@ -2,7 +2,7 @@
 
 
 public class Misc
 public class Misc
 {
 {
-	public const int GAME_VERSION = 1470;
+	public const int GAME_VERSION = 1480;
 
 
 	public const string GAME_DATA_PATH = "GameData";
 	public const string GAME_DATA_PATH = "GameData";
 
 

+ 3 - 3
Assembly-CSharp/ModCompile.cs

@@ -20,7 +20,7 @@ public class ModCompile : MonoBehaviour
 			Directory.CreateDirectory(text);
 			Directory.CreateDirectory(text);
 		}
 		}
 		string path = text + "\\" + Path.GetFileNameWithoutExtension(f_strInMenuTextPathFileName);
 		string path = text + "\\" + Path.GetFileNameWithoutExtension(f_strInMenuTextPathFileName);
-		for (int i = 0; i < 114; i++)
+		for (int i = 0; i < 131; i++)
 		{
 		{
 			string[] aryDefCategoryName = ModCompile.m_aryDefCategoryName;
 			string[] aryDefCategoryName = ModCompile.m_aryDefCategoryName;
 			int num = i;
 			int num = i;
@@ -604,7 +604,7 @@ public class ModCompile : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MESH");
 		binaryWriter.Write("CM3D2_MESH");
-		binaryWriter.Write(1470);
+		binaryWriter.Write(1480);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(exObjIn2.strName);
 		binaryWriter.Write(exObjIn2.strName);
@@ -948,7 +948,7 @@ public class ModCompile : MonoBehaviour
 		return true;
 		return true;
 	}
 	}
 
 
-	private static string[] m_aryDefCategoryName = new string[114];
+	private static string[] m_aryDefCategoryName = new string[131];
 
 
 	private static string[] m_aryDefSlotName;
 	private static string[] m_aryDefSlotName;
 
 

+ 2 - 2
Assembly-CSharp/OvrIK.cs

@@ -1568,7 +1568,7 @@ public class OvrIK : MonoBehaviour
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1470;
+			this.m_nVersion = 1480;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -1628,7 +1628,7 @@ public class OvrIK : MonoBehaviour
 		private const string CONF_NAME = "OvrIK.json";
 		private const string CONF_NAME = "OvrIK.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1470;
+		private int m_nVersion = 1480;
 
 
 		[SerializeField]
 		[SerializeField]
 		private float solver_locomotion_weight = 1f;
 		private float solver_locomotion_weight = 1f;

+ 5 - 2
Assembly-CSharp/PhotoManEditManager.cs

@@ -11,10 +11,13 @@ public class PhotoManEditManager
 		this.man_body_menu_list_ = new List<SceneEdit.SMenuItem>();
 		this.man_body_menu_list_ = new List<SceneEdit.SMenuItem>();
 		if (PhotoManEditManager.menu_file_name_list_ == null)
 		if (PhotoManEditManager.menu_file_name_list_ == null)
 		{
 		{
+			MenuDataBase menuDataBase = GameMain.Instance.MenuDataBase;
 			PhotoManEditManager.menu_file_name_list_ = new HashSet<string>();
 			PhotoManEditManager.menu_file_name_list_ = new HashSet<string>();
-			foreach (string text in GameUty.MenuFiles)
+			for (int i = 0; i < menuDataBase.GetDataSize(); i++)
 			{
 			{
-				string text2 = text.ToLower();
+				menuDataBase.SetIndex(i);
+				string text = menuDataBase.GetMenuFileName().ToLower();
+				string text2 = text;
 				if (text2.Contains("mhead") || text2.Contains("mbody"))
 				if (text2.Contains("mhead") || text2.Contains("mbody"))
 				{
 				{
 					SceneEdit.SMenuItem smenuItem = new SceneEdit.SMenuItem();
 					SceneEdit.SMenuItem smenuItem = new SceneEdit.SMenuItem();

+ 25 - 2
Assembly-CSharp/PhotoModeMain.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections;
 using System.Xml.Linq;
 using System.Xml.Linq;
 using UnityEngine;
 using UnityEngine;
 
 
@@ -13,10 +14,23 @@ public class PhotoModeMain : WfScreenChildren
 	public override void Awake()
 	public override void Awake()
 	{
 	{
 		base.Awake();
 		base.Awake();
+		GameMain.Instance.StartCoroutine(this.Setup());
 	}
 	}
 
 
-	protected override void OnCall()
+	private IEnumerator Setup()
 	{
 	{
+		GameMain.Instance.LoadIcon.NextLoadIcontImmediatelyDisplay();
+		GameMain.Instance.LoadIcon.force_draw_new = true;
+		do
+		{
+			yield return null;
+		}
+		while (!GameMain.Instance.MenuDataBase.JobFinished());
+		for (int i = 0; i < 5; i++)
+		{
+			yield return null;
+		}
+		GameMain.Instance.LoadIcon.force_draw_new = false;
 		this.photo_mgr_ = this.RootPanel.GetComponentInChildren<PhotoWindowManager>();
 		this.photo_mgr_ = this.RootPanel.GetComponentInChildren<PhotoWindowManager>();
 		EventDelegate.Add(this.photo_mgr_.EndButton.onClick, new EventDelegate.Callback(this.OnEnd));
 		EventDelegate.Add(this.photo_mgr_.EndButton.onClick, new EventDelegate.Callback(this.OnEnd));
 		this.photo_mgr_.CallEditSceneFunction = new Action<Maid>(this.OnCallEdit);
 		this.photo_mgr_.CallEditSceneFunction = new Action<Maid>(this.OnCallEdit);
@@ -25,11 +39,18 @@ public class PhotoModeMain : WfScreenChildren
 			base.SetFadeStatus(WfScreenChildren.FadeStatus.Wait);
 			base.SetFadeStatus(WfScreenChildren.FadeStatus.Wait);
 			this.photo_mgr_.SaveAndLoadManager.ReadSave(PhotoModeMain.backupSaveData);
 			this.photo_mgr_.SaveAndLoadManager.ReadSave(PhotoModeMain.backupSaveData);
 		}
 		}
+		this.completedSetUp = true;
+		this.photo_mgr_.Initialize();
+		yield break;
+	}
+
+	protected override void OnCall()
+	{
 	}
 	}
 
 
 	protected override bool IsCallFadeIn()
 	protected override bool IsCallFadeIn()
 	{
 	{
-		return PhotoModeMain.backupSaveData == null;
+		return PhotoModeMain.backupSaveData == null && this.completedSetUp;
 	}
 	}
 
 
 	public void OnDestroy()
 	public void OnDestroy()
@@ -88,5 +109,7 @@ public class PhotoModeMain : WfScreenChildren
 
 
 	private static XDocument backupSaveData;
 	private static XDocument backupSaveData;
 
 
+	private bool completedSetUp;
+
 	private PhotoWindowManager photo_mgr_;
 	private PhotoWindowManager photo_mgr_;
 }
 }

+ 1 - 1
Assembly-CSharp/PhotoModeSaveAndLoad.cs

@@ -450,7 +450,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 	private XElement CreateCommonData(string title, string comment)
 	private XElement CreateCommonData(string title, string comment)
 	{
 	{
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
-		XElement xelement = new XElement("GameVersion", 1470);
+		XElement xelement = new XElement("GameVersion", 1480);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);
 		XElement xelement4 = new XElement("Comment", comment);

+ 7 - 10
Assembly-CSharp/PhotoWindowManager.cs

@@ -141,18 +141,17 @@ public class PhotoWindowManager : BasePhotoWindowManager
 		this.SaveAndLoadManager.folder_path = PhotoWindowManager.path_photo_save;
 		this.SaveAndLoadManager.folder_path = PhotoWindowManager.path_photo_save;
 		this.SaveAndLoadManager.onSerializeEvent = new Func<XElement>(this.OnSerializeEvent);
 		this.SaveAndLoadManager.onSerializeEvent = new Func<XElement>(this.OnSerializeEvent);
 		this.SaveAndLoadManager.onDeserializeEvent = new Action<XElement>(this.OnDeserializeEvent);
 		this.SaveAndLoadManager.onDeserializeEvent = new Action<XElement>(this.OnDeserializeEvent);
-		this.is_first_ = true;
+	}
+
+	public void Initialize()
+	{
+		this.OnMaidChangeEvent(null);
+		uGUITutorialPanel.OpenTutorial("ScenePhotoMode", null, false);
+		GameMain.Instance.SysShortcut.strSceneHelpName = "ScenePhotoMode";
 	}
 	}
 
 
 	public virtual void Update()
 	public virtual void Update()
 	{
 	{
-		if (this.is_first_)
-		{
-			this.OnMaidChangeEvent(null);
-			this.is_first_ = false;
-			uGUITutorialPanel.OpenTutorial("ScenePhotoMode", null, false);
-			GameMain.Instance.SysShortcut.strSceneHelpName = "ScenePhotoMode";
-		}
 	}
 	}
 
 
 	public void CallTutorial()
 	public void CallTutorial()
@@ -691,8 +690,6 @@ public class PhotoWindowManager : BasePhotoWindowManager
 
 
 	public List<Action<Maid>> onMaidChangeEventList = new List<Action<Maid>>();
 	public List<Action<Maid>> onMaidChangeEventList = new List<Action<Maid>>();
 
 
-	private bool is_first_;
-
 	private Maid select_maid_;
 	private Maid select_maid_;
 
 
 	private Dictionary<string, Dictionary<string, Dictionary<string, string>>> maid_store_data_ = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
 	private Dictionary<string, Dictionary<string, Dictionary<string, string>>> maid_store_data_ = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();

+ 1 - 1
Assembly-CSharp/PlayerStatus/Status.cs

@@ -831,7 +831,7 @@ namespace PlayerStatus
 		public void Serialize(BinaryWriter binary)
 		public void Serialize(BinaryWriter binary)
 		{
 		{
 			binary.Write("CM3D2_PLAYER_STATUS");
 			binary.Write("CM3D2_PLAYER_STATUS");
-			binary.Write(1470);
+			binary.Write(1480);
 			binary.Write(this.playerName_);
 			binary.Write(this.playerName_);
 			binary.Write(this.days_);
 			binary.Write(this.days_);
 			binary.Write(this.totalPurchasePrice_);
 			binary.Write(this.totalPurchasePrice_);

+ 1 - 0
Assembly-CSharp/PresetServer.cs

@@ -47,6 +47,7 @@ public class PresetServer : MonoBehaviour
 		this.tcpWEB = null;
 		this.tcpWEB = null;
 	}
 	}
 
 
+	[Obsolete("GameUty.RidMenuDic廃止により使用不可", true)]
 	public void Update()
 	public void Update()
 	{
 	{
 		if (this.m_listener == null)
 		if (this.m_listener == null)

+ 35 - 23
Assembly-CSharp/ProfileCtrl.cs

@@ -5,6 +5,7 @@ using Edit;
 using I2.Loc;
 using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using MaidStatus.CsvData;
 using MaidStatus.CsvData;
+using scoutmode;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 using Yotogis;
 using Yotogis;
@@ -97,36 +98,40 @@ public class ProfileCtrl : MonoBehaviour
 		GameObject childObject5 = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/Personal/PopupList", false);
 		GameObject childObject5 = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/Personal/PopupList", false);
 		this.m_pPersonal = childObject5.GetComponent<UIPopupList>();
 		this.m_pPersonal = childObject5.GetComponent<UIPopupList>();
 		this.m_lPersonal = UTY.GetChildObject(childObject5, "LabelParent/Label", false).GetComponent<UILabel>();
 		this.m_lPersonal = UTY.GetChildObject(childObject5, "LabelParent/Label", false).GetComponent<UILabel>();
-		bool flag = GameMain.Instance.CharacterMgr.status.GetFlag("オープニング終了") == 1;
+		bool flag = true;
+		flag = (GameMain.Instance.CharacterMgr.status.GetFlag("オープニング終了") == 1);
 		List<Personal.Data> allDatas = Personal.GetAllDatas(true);
 		List<Personal.Data> allDatas = Personal.GetAllDatas(true);
 		List<Personal.Data> list = new List<Personal.Data>();
 		List<Personal.Data> list = new List<Personal.Data>();
 		foreach (Personal.Data data in allDatas)
 		foreach (Personal.Data data in allDatas)
 		{
 		{
-			string a = data.uniqueName.ToLower();
-			if (data.oldPersonal)
+			if (SceneEdit.Instance.modeType != SceneEdit.ModeType.ScoutChara || LockData.personalEnabledIdList.Contains(data.uniqueName))
 			{
 			{
-				if (a == "pure" || a == "cool" || a == "pride")
+				string a = data.uniqueName.ToLower();
+				if (data.oldPersonal)
 				{
 				{
-					if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
+					if (a == "pure" || a == "cool" || a == "pride")
 					{
 					{
-						list.Add(data);
+						if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
+						{
+							list.Add(data);
+						}
 					}
 					}
-				}
-				else if (flag)
-				{
-					if (data.single)
-					{
-						list.Add(data);
-					}
-					else if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path) && data.compatible)
+					else if (flag)
 					{
 					{
-						list.Add(data);
+						if (data.single)
+						{
+							list.Add(data);
+						}
+						else if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path) && data.compatible)
+						{
+							list.Add(data);
+						}
 					}
 					}
 				}
 				}
-			}
-			else
-			{
-				list.Add(data);
+				else
+				{
+					list.Add(data);
+				}
 			}
 			}
 		}
 		}
 		this.m_pPersonal.items.Clear();
 		this.m_pPersonal.items.Clear();
@@ -523,7 +528,7 @@ public class ProfileCtrl : MonoBehaviour
 		if (ProfileCtrl.m_dicPersonal.TryGetValue(selectValue, out personal))
 		if (ProfileCtrl.m_dicPersonal.TryGetValue(selectValue, out personal))
 		{
 		{
 			this.m_maidStatus.SetPersonal(personal);
 			this.m_maidStatus.SetPersonal(personal);
-			if (SceneEdit.Instance != null && (SceneEdit.Instance.modeType == SceneEdit.ModeType.OriginalChara || SceneEdit.Instance.modeType == SceneEdit.ModeType.MainChara))
+			if (SceneEdit.Instance != null && (SceneEdit.Instance.modeType == SceneEdit.ModeType.OriginalChara || SceneEdit.Instance.modeType == SceneEdit.ModeType.MainChara || SceneEdit.Instance.modeType == SceneEdit.ModeType.ScoutChara))
 			{
 			{
 				this.m_maidStatus.additionalRelation = AdditionalRelation.Vigilance;
 				this.m_maidStatus.additionalRelation = AdditionalRelation.Vigilance;
 			}
 			}
@@ -550,10 +555,17 @@ public class ProfileCtrl : MonoBehaviour
 		{
 		{
 			if (EnumConvert.GetTerm(seikeiken) == selectValue)
 			if (EnumConvert.GetTerm(seikeiken) == selectValue)
 			{
 			{
-				Seikeiken initSeikeiken = Seikeiken.No_No;
-				if (ProfileCtrl.m_dicSexualExperience.TryGetValue(EnumConvert.GetString(seikeiken), out initSeikeiken))
+				Seikeiken seikeiken2 = Seikeiken.No_No;
+				if (ProfileCtrl.m_dicSexualExperience.TryGetValue(EnumConvert.GetString(seikeiken), out seikeiken2))
 				{
 				{
-					this.m_maidStatus.seikeiken = (this.m_maidStatus.initSeikeiken = initSeikeiken);
+					if (this.m_enabledInput)
+					{
+						this.m_maidStatus.seikeiken = (this.m_maidStatus.initSeikeiken = seikeiken2);
+					}
+					else
+					{
+						this.m_maidStatus.seikeiken = seikeiken2;
+					}
 				}
 				}
 				break;
 				break;
 			}
 			}

+ 2 - 2
Assembly-CSharp/ProfileMgr.cs

@@ -30,8 +30,8 @@ public class ProfileMgr : BaseMgr<ProfileMgr>
 		this.m_profileCtrl = this.m_goProfilePanel.GetComponent<ProfileCtrl>();
 		this.m_profileCtrl = this.m_goProfilePanel.GetComponent<ProfileCtrl>();
 		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
 		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
 		this.m_maidStatus = maid.status;
 		this.m_maidStatus = maid.status;
-		this.m_enabledInput = (this.sceneEdit.modeType == SceneEdit.ModeType.OriginalChara || this.sceneEdit.modeType == SceneEdit.ModeType.MainChara);
-		this.m_enabledPersonalityInput = (this.sceneEdit.modeType == SceneEdit.ModeType.OriginalChara);
+		this.m_enabledInput = (this.sceneEdit.modeType == SceneEdit.ModeType.OriginalChara || this.sceneEdit.modeType == SceneEdit.ModeType.MainChara || this.sceneEdit.modeType == SceneEdit.ModeType.ScoutChara);
+		this.m_enabledPersonalityInput = (this.sceneEdit.modeType == SceneEdit.ModeType.OriginalChara || this.sceneEdit.modeType == SceneEdit.ModeType.ScoutChara);
 		this.m_profileCtrl.Init(this.m_goProfilePanel, this.m_maidStatus);
 		this.m_profileCtrl.Init(this.m_goProfilePanel, this.m_maidStatus);
 		this.m_profileCtrl.SetActiveViewerAndButton(ProfileMgr.UpperButtonType.None);
 		this.m_profileCtrl.SetActiveViewerAndButton(ProfileMgr.UpperButtonType.None);
 		this.m_dicDividedPoint = this.InitDicDividedPoint();
 		this.m_dicDividedPoint = this.InitDicDividedPoint();

+ 12 - 0
Assembly-CSharp/RandomPresetContent.cs

@@ -401,6 +401,18 @@ public class RandomPresetContent
 		{
 		{
 			MPN.eyewhite,
 			MPN.eyewhite,
 			MPN.folder_eyewhite
 			MPN.folder_eyewhite
+		},
+		{
+			MPN.matsuge_up,
+			MPN.folder_matsuge_up
+		},
+		{
+			MPN.matsuge_low,
+			MPN.folder_matsuge_low
+		},
+		{
+			MPN.futae,
+			MPN.folder_futae
 		}
 		}
 	};
 	};
 
 

+ 195 - 40
Assembly-CSharp/SceneEdit.cs

@@ -102,6 +102,14 @@ public class SceneEdit : MonoBehaviour
 		}
 		}
 	}
 	}
 
 
+	public bool isFBFace
+	{
+		get
+		{
+			return this.maid != null && this.maid.body0 != null && 120 <= this.maid.body0.GetSlot(1).PartsVersion;
+		}
+	}
+
 	public List<SceneEdit.SCategory> CategoryList
 	public List<SceneEdit.SCategory> CategoryList
 	{
 	{
 		get
 		get
@@ -209,6 +217,11 @@ public class SceneEdit : MonoBehaviour
 				this.modeType = SceneEdit.ModeType.NpcEdit;
 				this.modeType = SceneEdit.ModeType.NpcEdit;
 				flag = true;
 				flag = true;
 			}
 			}
+			else if (tag_backup.TryGetValue("scout", out strScriptArg))
+			{
+				this.modeType = SceneEdit.ModeType.ScoutChara;
+				flag = true;
+			}
 			if (!flag)
 			if (!flag)
 			{
 			{
 				NDebug.Assert("エディットシーンのモード指定がありませんでした。次のうち必ず一つは指定してください[original|main|after|costume]", false);
 				NDebug.Assert("エディットシーンのモード指定がありませんでした。次のうち必ず一つは指定してください[original|main|after|costume]", false);
@@ -444,11 +457,16 @@ public class SceneEdit : MonoBehaviour
 		this.m_dicColor.Clear();
 		this.m_dicColor.Clear();
 		base.StartCoroutine(this.InitMenuNative());
 		base.StartCoroutine(this.InitMenuNative());
 		GameMain.Instance.TutorialPanel.SetImage(TutorialPanel.ImageSet.Edit, false);
 		GameMain.Instance.TutorialPanel.SetImage(TutorialPanel.ImageSet.Edit, false);
-		if (PluginData.IsEnabled("GP001") || Product.type == Product.Type.JpPublic)
+		if (Product.type == Product.Type.JpPublic || (PluginData.IsEnabled("GP001") && !PluginData.IsEnabled("GP001FB")))
 		{
 		{
 			uGUITutorialPanel.OpenTutorial("SceneEditGP01", null, false);
 			uGUITutorialPanel.OpenTutorial("SceneEditGP01", null, false);
 			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneEditGP01";
 			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneEditGP01";
 		}
 		}
+		else if (PluginData.IsEnabled("GP001FB"))
+		{
+			uGUITutorialPanel.OpenTutorial("SceneEditGPFB01", null, false);
+			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneEditGPFB01";
+		}
 		else
 		else
 		{
 		{
 			GameMain.Instance.SysShortcut.strSceneHelpName = string.Empty;
 			GameMain.Instance.SysShortcut.strSceneHelpName = string.Empty;
@@ -611,16 +629,16 @@ public class SceneEdit : MonoBehaviour
 		{
 		{
 			yield return null;
 			yield return null;
 		}
 		}
-		while (!GameMain.Instance.MenuDataBase.JobFinished())
+		MenuDataBase menuDataBase = GameMain.Instance.MenuDataBase;
+		while (!menuDataBase.JobFinished())
 		{
 		{
 			yield return null;
 			yield return null;
 		}
 		}
 		this.InitCategoryList();
 		this.InitCategoryList();
-		int fileCount = GameMain.Instance.MenuDataBase.GetDataSize();
+		int fileCount = menuDataBase.GetDataSize();
 		List<SceneEdit.SMenuItem> menuList = new List<SceneEdit.SMenuItem>(fileCount);
 		List<SceneEdit.SMenuItem> menuList = new List<SceneEdit.SMenuItem>(fileCount);
 		this.m_menuRidDic = new Dictionary<int, SceneEdit.SMenuItem>(fileCount);
 		this.m_menuRidDic = new Dictionary<int, SceneEdit.SMenuItem>(fileCount);
 		Dictionary<int, List<int>> menuGroupMemberDic = new Dictionary<int, List<int>>();
 		Dictionary<int, List<int>> menuGroupMemberDic = new Dictionary<int, List<int>>();
-		MenuDataBase menuDataBase = GameMain.Instance.MenuDataBase;
 		float time = Time.realtimeSinceStartup;
 		float time = Time.realtimeSinceStartup;
 		for (int i = 0; i < fileCount; i++)
 		for (int i = 0; i < fileCount; i++)
 		{
 		{
@@ -866,30 +884,34 @@ public class SceneEdit : MonoBehaviour
 					m_nSliderValue = 500,
 					m_nSliderValue = 500,
 					m_strCateName = keyValuePair2.Key.ToString(),
 					m_strCateName = keyValuePair2.Key.ToString(),
 					m_strMenuName = keyValuePair2.Value.m_strBtnPartsTypeName,
 					m_strMenuName = keyValuePair2.Value.m_strBtnPartsTypeName,
-					m_requestNewFace = keyValuePair2.Value.m_requestNewFace
+					m_requestNewFace = keyValuePair2.Value.m_requestNewFace,
+					m_requestFBFace = keyValuePair2.Value.m_requestFBFace
 				});
 				});
 			}
 			}
 		}
 		}
 		for (int nM = 0; nM < menuList.Count; nM++)
 		for (int nM = 0; nM < menuList.Count; nM++)
 		{
 		{
 			SceneEdit.SMenuItem mi = menuList[nM];
 			SceneEdit.SMenuItem mi = menuList[nM];
-			if (mi.m_eColorSetMPN != MPN.null_mpn)
+			if (SceneEditInfo.m_dicPartsTypePair.ContainsKey(mi.m_eColorSetMPN))
 			{
 			{
-				if (mi.m_strMenuNameInColorSet != null)
+				if (mi.m_eColorSetMPN != MPN.null_mpn)
 				{
 				{
-					mi.m_strMenuNameInColorSet = mi.m_strMenuNameInColorSet.Replace("*", ".*");
-					mi.m_listColorSet = this.m_dicColor[mi.m_eColorSetMPN].FindAll((SceneEdit.SMenuItem i) => new Regex(mi.m_strMenuNameInColorSet).IsMatch(i.m_strMenuFileName));
+					if (mi.m_strMenuNameInColorSet != null)
+					{
+						mi.m_strMenuNameInColorSet = mi.m_strMenuNameInColorSet.Replace("*", ".*");
+						mi.m_listColorSet = this.m_dicColor[mi.m_eColorSetMPN].FindAll((SceneEdit.SMenuItem i) => new Regex(mi.m_strMenuNameInColorSet).IsMatch(i.m_strMenuFileName));
+					}
+					else
+					{
+						mi.m_listColorSet = this.m_dicColor[mi.m_eColorSetMPN];
+					}
 				}
 				}
-				else
+				if (0.5f < Time.realtimeSinceStartup - time)
 				{
 				{
-					mi.m_listColorSet = this.m_dicColor[mi.m_eColorSetMPN];
+					yield return null;
+					time = Time.realtimeSinceStartup;
 				}
 				}
 			}
 			}
-			if (0.5f < Time.realtimeSinceStartup - time)
-			{
-				yield return null;
-				time = Time.realtimeSinceStartup;
-			}
 		}
 		}
 		for (int j = 0; j < this.m_listCategory.Count; j++)
 		for (int j = 0; j < this.m_listCategory.Count; j++)
 		{
 		{
@@ -1174,6 +1196,35 @@ public class SceneEdit : MonoBehaviour
 			return false;
 			return false;
 		}
 		}
 		SceneEditInfo.CCateNameType cateType;
 		SceneEditInfo.CCateNameType cateType;
+		if (!string.IsNullOrEmpty(f_mi.m_strMenuFileName) && Product.type == Product.Type.JpAdult)
+		{
+			if (SceneEditInfo.m_listCollaboCategory.Contains(f_mi.m_strMenuFileName.ToLower()))
+			{
+				if (mpn != MPN.null_mpn && SceneEditInfo.m_dicPartsTypePair.TryGetValue(mpn, out cateType))
+				{
+					cateType.m_strBtnPartsTypeName = "コラボ";
+					cateType.m_ePartsType = "set_collabo";
+				}
+			}
+			else if (mpn != MPN.null_mpn && SceneEditInfo.m_dicPartsTypePair.TryGetValue(mpn, out cateType) && cateType.m_strBtnPartsTypeName == "コラボ" && cateType.m_ePartsType == "set_collabo")
+			{
+				if (mpn == MPN.set_maidwear)
+				{
+					cateType.m_strBtnPartsTypeName = "メイド服";
+					cateType.m_ePartsType = "set_maidwear";
+				}
+				else if (mpn == MPN.set_mywear)
+				{
+					cateType.m_strBtnPartsTypeName = "コスチューム";
+					cateType.m_ePartsType = "set_mywear";
+				}
+				else if (mpn == MPN.set_underwear)
+				{
+					cateType.m_strBtnPartsTypeName = "下着";
+					cateType.m_ePartsType = "set_underwear";
+				}
+			}
+		}
 		if (mpn != MPN.null_mpn && SceneEditInfo.m_dicPartsTypePair.TryGetValue(mpn, out cateType))
 		if (mpn != MPN.null_mpn && SceneEditInfo.m_dicPartsTypePair.TryGetValue(mpn, out cateType))
 		{
 		{
 			if (cateType.m_eType == SceneEditInfo.CCateNameType.EType.Item || cateType.m_eType == SceneEditInfo.CCateNameType.EType.Set || cateType.m_eType == SceneEditInfo.CCateNameType.EType.Slider)
 			if (cateType.m_eType == SceneEditInfo.CCateNameType.EType.Item || cateType.m_eType == SceneEditInfo.CCateNameType.EType.Set || cateType.m_eType == SceneEditInfo.CCateNameType.EType.Slider)
@@ -1194,7 +1245,7 @@ public class SceneEdit : MonoBehaviour
 					{
 					{
 						f_strPartsTypeName = cateType.m_strBtnPartsTypeName;
 						f_strPartsTypeName = cateType.m_strBtnPartsTypeName;
 					}
 					}
-					spartsType = new SceneEdit.SPartsType(cateType.m_eType, mpn, f_strPartsTypeName, cateType.m_ePartsType);
+					spartsType = new SceneEdit.SPartsType(cateType.m_eType, mpn, f_strPartsTypeName, cateType.m_ePartsType, cateType.m_requestNewFace, cateType.m_requestFBFace);
 					if (this.enabledMpns.Count == 0)
 					if (this.enabledMpns.Count == 0)
 					{
 					{
 						spartsType.m_isEnabled = true;
 						spartsType.m_isEnabled = true;
@@ -1538,7 +1589,7 @@ public class SceneEdit : MonoBehaviour
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		{
 		{
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
-			if (MPN.EarNone <= spartsType.m_mpn && spartsType.m_mpn <= MPN.EarScl && !PluginData.IsEnabled("GP001"))
+			if ((!PluginData.IsEnabled("GP001") && !PluginData.IsEnabled("GP001FB") && spartsType.m_isGP01Face) || (!PluginData.IsEnabled("GP001FB") && spartsType.m_isFBFace))
 			{
 			{
 				this.m_listBtnPartsType.Add(null);
 				this.m_listBtnPartsType.Add(null);
 			}
 			}
@@ -1556,6 +1607,10 @@ public class SceneEdit : MonoBehaviour
 				buttonEdit.m_PartsType = spartsType;
 				buttonEdit.m_PartsType = spartsType;
 				UIButton uibutton = gameObject2.GetComponentsInChildren<UIButton>(true)[0];
 				UIButton uibutton = gameObject2.GetComponentsInChildren<UIButton>(true)[0];
 				uibutton.isEnabled = spartsType.m_isEnabled;
 				uibutton.isEnabled = spartsType.m_isEnabled;
+				if (spartsType.m_isFBFace && !this.isFBFace)
+				{
+					uibutton.isEnabled = false;
+				}
 				if (uibutton.isEnabled)
 				if (uibutton.isEnabled)
 				{
 				{
 					EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.ClickCallback));
 					EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.ClickCallback));
@@ -1666,29 +1721,64 @@ public class SceneEdit : MonoBehaviour
 				}
 				}
 				if (!flag || !smenuItem.m_bMember)
 				if (!flag || !smenuItem.m_bMember)
 				{
 				{
-					SceneEdit.MenuItemSet menuItemSet3 = new SceneEdit.MenuItemSet(uipanelSet.goGrid, smenuItem, f_strPrefabName, f_bSelectedFrame);
+					if (f_pt.m_ePartsType == "set_collabo" && m == 0)
+					{
+						SceneEdit.SPartsType spartsType = this.m_listCategory[5].m_listPartsType.Find((SceneEdit.SPartsType val) => val.m_ePartsType == "set_mywear");
+						SceneEdit.SMenuItem smenuItem2 = null;
+						if (spartsType != null)
+						{
+							smenuItem2 = spartsType.m_listMenu[0];
+						}
+						if (smenuItem2 != null)
+						{
+							SceneEdit.MenuItemSet menuItemSet3 = new SceneEdit.MenuItemSet(uipanelSet.goGrid, smenuItem2, f_strPrefabName, f_bSelectedFrame);
+							if (smenuItem2.m_boDelOnly)
+							{
+								this.m_misDelOnly = menuItemSet3;
+							}
+							if (menuItemSet3.mi.m_strCateName.IndexOf("set_") != -1 && menuItemSet3.mi.m_bGroupLeader && flag)
+							{
+								EventDelegate.Add(menuItemSet3.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallbackFromSetGroup));
+							}
+							else
+							{
+								EventDelegate.Add(menuItemSet3.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallback));
+							}
+							if (smenuItem.m_bGroupLeader && flag)
+							{
+								EventDelegate.Add(menuItemSet3.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallbackOnGroup));
+							}
+							else
+							{
+								EventDelegate.Add(menuItemSet3.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallback));
+							}
+							EventDelegate.Add(menuItemSet3.gcEvent.onHoverOut, new EventDelegate.Callback(this.HoverOutCallback));
+							this.m_listBtnMenuItem.Add(menuItemSet3);
+						}
+					}
+					SceneEdit.MenuItemSet menuItemSet4 = new SceneEdit.MenuItemSet(uipanelSet.goGrid, smenuItem, f_strPrefabName, f_bSelectedFrame);
 					if (smenuItem.m_boDelOnly)
 					if (smenuItem.m_boDelOnly)
 					{
 					{
-						this.m_misDelOnly = menuItemSet3;
+						this.m_misDelOnly = menuItemSet4;
 					}
 					}
-					if (menuItemSet3.mi.m_strCateName.IndexOf("set_") != -1 && menuItemSet3.mi.m_bGroupLeader && flag)
+					if (menuItemSet4.mi.m_strCateName.IndexOf("set_") != -1 && menuItemSet4.mi.m_bGroupLeader && flag)
 					{
 					{
-						EventDelegate.Add(menuItemSet3.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallbackFromSetGroup));
+						EventDelegate.Add(menuItemSet4.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallbackFromSetGroup));
 					}
 					}
 					else
 					else
 					{
 					{
-						EventDelegate.Add(menuItemSet3.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallback));
+						EventDelegate.Add(menuItemSet4.gcBtn.onClick, new EventDelegate.Callback(this.ClickCallback));
 					}
 					}
 					if (smenuItem.m_bGroupLeader && flag)
 					if (smenuItem.m_bGroupLeader && flag)
 					{
 					{
-						EventDelegate.Add(menuItemSet3.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallbackOnGroup));
+						EventDelegate.Add(menuItemSet4.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallbackOnGroup));
 					}
 					}
 					else
 					else
 					{
 					{
-						EventDelegate.Add(menuItemSet3.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallback));
+						EventDelegate.Add(menuItemSet4.gcEvent.onHoverOver, new EventDelegate.Callback(this.HoverOverCallback));
 					}
 					}
-					EventDelegate.Add(menuItemSet3.gcEvent.onHoverOut, new EventDelegate.Callback(this.HoverOutCallback));
-					this.m_listBtnMenuItem.Add(menuItemSet3);
+					EventDelegate.Add(menuItemSet4.gcEvent.onHoverOut, new EventDelegate.Callback(this.HoverOutCallback));
+					this.m_listBtnMenuItem.Add(menuItemSet4);
 				}
 				}
 			}
 			}
 			uipanelSet.gcUIGrid.GetComponent<UIGrid>().enabled = true;
 			uipanelSet.gcUIGrid.GetComponent<UIGrid>().enabled = true;
@@ -1710,17 +1800,17 @@ public class SceneEdit : MonoBehaviour
 			this.m_Panel_GroupSet.SetActive(false);
 			this.m_Panel_GroupSet.SetActive(false);
 			this.m_Panel_SliderItem.SetActive(true);
 			this.m_Panel_SliderItem.SetActive(true);
 			bool flag2 = false;
 			bool flag2 = false;
-			foreach (SceneEdit.SMenuItem smenuItem2 in f_pt.m_listMenu)
+			foreach (SceneEdit.SMenuItem smenuItem3 in f_pt.m_listMenu)
 			{
 			{
-				if (!smenuItem2.m_requestNewFace || this.isNewFace)
+				if ((!smenuItem3.m_requestNewFace || this.isNewFace) && (!smenuItem3.m_requestFBFace || this.isFBFace))
 				{
 				{
-					if (!Product.isPublic || smenuItem2.m_mpn != MPN.MuneYawaraka)
+					if (!Product.isPublic || smenuItem3.m_mpn != MPN.MuneYawaraka)
 					{
 					{
 						SceneEdit.SliderItemSet sliderItemSet2;
 						SceneEdit.SliderItemSet sliderItemSet2;
-						if (smenuItem2.m_mpn == MPN.EarNone)
+						if (smenuItem3.m_mpn == MPN.EarNone)
 						{
 						{
 							SceneEdit.SwitchItemSet switchItemSet = new SceneEdit.SwitchItemSet();
 							SceneEdit.SwitchItemSet switchItemSet = new SceneEdit.SwitchItemSet();
-							switchItemSet.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+							switchItemSet.Create(this.m_Panel_SliderItem.goGrid, smenuItem3);
 							switchItemSet.onClickEvent = delegate(bool earNone, SceneEdit.SMenuItem menu)
 							switchItemSet.onClickEvent = delegate(bool earNone, SceneEdit.SMenuItem menu)
 							{
 							{
 								int num2 = (!earNone) ? 0 : 1;
 								int num2 = (!earNone) ? 0 : 1;
@@ -1737,9 +1827,9 @@ public class SceneEdit : MonoBehaviour
 						else
 						else
 						{
 						{
 							sliderItemSet2 = new SceneEdit.SliderItemSet();
 							sliderItemSet2 = new SceneEdit.SliderItemSet();
-							sliderItemSet2.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+							sliderItemSet2.Create(this.m_Panel_SliderItem.goGrid, smenuItem3);
 							EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
 							EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
-							flag2 |= (smenuItem2.m_mpn == MPN.MuneYawaraka);
+							flag2 |= (smenuItem3.m_mpn == MPN.MuneYawaraka);
 						}
 						}
 						this.m_listSliderItem.Add(sliderItemSet2);
 						this.m_listSliderItem.Add(sliderItemSet2);
 					}
 					}
@@ -2296,6 +2386,10 @@ public class SceneEdit : MonoBehaviour
 			UIButton component6 = componentInChildren.GetComponent<UIButton>();
 			UIButton component6 = componentInChildren.GetComponent<UIButton>();
 			component6.defaultColor = new Color(component6.defaultColor.r, component6.defaultColor.g, component6.defaultColor.b, 1f);
 			component6.defaultColor = new Color(component6.defaultColor.r, component6.defaultColor.g, component6.defaultColor.b, 1f);
 			this.colorPaletteMgr.Close();
 			this.colorPaletteMgr.Close();
+			if (componentInChildren.m_PartsType.m_strPartsTypeName == "コラボ" && componentInChildren.m_PartsType.m_mpn == MPN.set_underwear)
+			{
+				componentInChildren.m_PartsType.m_mpn = MPN.set_maidwear;
+			}
 			this.PartsTypeWearMode(componentInChildren.m_PartsType.m_mpn);
 			this.PartsTypeWearMode(componentInChildren.m_PartsType.m_mpn);
 			this.PartsTypeCamera(componentInChildren.m_PartsType.m_mpn);
 			this.PartsTypeCamera(componentInChildren.m_PartsType.m_mpn);
 			if (componentInChildren.m_PartsType.m_mpn == MPN.accha)
 			if (componentInChildren.m_PartsType.m_mpn == MPN.accha)
@@ -2454,6 +2548,21 @@ public class SceneEdit : MonoBehaviour
 			}
 			}
 			else if (!this.m_bOpenSetGroupPanel)
 			else if (!this.m_bOpenSetGroupPanel)
 			{
 			{
+				if (componentInChildren.m_MenuItem.m_ParentPartsType.m_ePartsType == "set_collabo" && componentInChildren.m_MenuItem.m_mpn == MPN.set_mywear)
+				{
+					componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn = MPN.set_mywear;
+					this.PartsTypeWearMode(componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn);
+				}
+				else if (componentInChildren.m_MenuItem.m_ParentPartsType.m_ePartsType == "set_collabo" && componentInChildren.m_MenuItem.m_mpn == MPN.set_maidwear)
+				{
+					componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn = MPN.set_maidwear;
+					this.PartsTypeWearMode(componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn);
+				}
+				else if (componentInChildren.m_MenuItem.m_ParentPartsType.m_ePartsType == "set_collabo" && componentInChildren.m_MenuItem.m_mpn == MPN.set_underwear)
+				{
+					componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn = MPN.set_underwear;
+					this.PartsTypeWearMode(componentInChildren.m_MenuItem.m_ParentPartsType.m_mpn);
+				}
 				this.UpdateSelectedMenuItem(componentInChildren.m_MenuItem.m_ParentPartsType);
 				this.UpdateSelectedMenuItem(componentInChildren.m_MenuItem.m_ParentPartsType);
 			}
 			}
 			else
 			else
@@ -2705,9 +2814,11 @@ public class SceneEdit : MonoBehaviour
 			foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType)
 			foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType)
 			{
 			{
 				bool flag = 0 < spartsType.m_listMenu.Count;
 				bool flag = 0 < spartsType.m_listMenu.Count;
+				bool flag2 = false;
 				if (spartsType.m_eType == SceneEditInfo.CCateNameType.EType.Item)
 				if (spartsType.m_eType == SceneEditInfo.CCateNameType.EType.Item)
 				{
 				{
 					flag = SceneEditInfo.m_dicPartsTypePair[spartsType.m_mpn].m_requestNewFace;
 					flag = SceneEditInfo.m_dicPartsTypePair[spartsType.m_mpn].m_requestNewFace;
+					flag2 = SceneEditInfo.m_dicPartsTypePair[spartsType.m_mpn].m_requestFBFace;
 				}
 				}
 				else
 				else
 				{
 				{
@@ -2718,12 +2829,21 @@ public class SceneEdit : MonoBehaviour
 							flag = false;
 							flag = false;
 							break;
 							break;
 						}
 						}
+						if (!smenuItem.m_requestFBFace)
+						{
+							flag2 = false;
+							break;
+						}
 					}
 					}
 				}
 				}
 				if (flag)
 				if (flag)
 				{
 				{
 					spartsType.m_isEnabled = this.isNewFace;
 					spartsType.m_isEnabled = this.isNewFace;
 				}
 				}
+				else if (flag2)
+				{
+					spartsType.m_isEnabled = this.isFBFace;
+				}
 				if (spartsType.m_mpn == MPN.accmimi)
 				if (spartsType.m_mpn == MPN.accmimi)
 				{
 				{
 					spartsType.m_isEnabled = (this.maid.GetProp(MPN.EarNone).value == 0);
 					spartsType.m_isEnabled = (this.maid.GetProp(MPN.EarNone).value == 0);
@@ -2740,6 +2860,10 @@ public class SceneEdit : MonoBehaviour
 			{
 			{
 				ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
 				ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
 				SceneEdit.SPartsType partsType = buttonEdit.m_PartsType;
 				SceneEdit.SPartsType partsType = buttonEdit.m_PartsType;
+				if ((partsType.m_isFBFace && !this.isFBFace) || (partsType.m_isFBFace && this.isFBFace))
+				{
+					partsType.m_isEnabled = this.isFBFace;
+				}
 				UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
 				UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
 				uibutton.isEnabled = partsType.m_isEnabled;
 				uibutton.isEnabled = partsType.m_isEnabled;
 				if (uibutton.isEnabled && (uibutton.onClick == null || uibutton.onClick.Count == 0))
 				if (uibutton.isEnabled && (uibutton.onClick == null || uibutton.onClick.Count == 0))
@@ -2773,7 +2897,7 @@ public class SceneEdit : MonoBehaviour
 				this.customPartsWindowVisibleButton.windowVisible = false;
 				this.customPartsWindowVisibleButton.windowVisible = false;
 			}
 			}
 			maid.body0.SetMaskMode(TBody.MaskMode.None);
 			maid.body0.SetMaskMode(TBody.MaskMode.None);
-			if (this.modeType == SceneEdit.ModeType.OriginalChara || this.modeType == SceneEdit.ModeType.MainChara)
+			if (this.modeType == SceneEdit.ModeType.OriginalChara || this.modeType == SceneEdit.ModeType.MainChara || this.modeType == SceneEdit.ModeType.ScoutChara)
 			{
 			{
 				FFNameDialog.OnClick value = delegate()
 				FFNameDialog.OnClick value = delegate()
 				{
 				{
@@ -2844,7 +2968,7 @@ public class SceneEdit : MonoBehaviour
 		this.m_maid.boMabataki = false;
 		this.m_maid.boMabataki = false;
 		if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 		if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 		{
 		{
-			for (int i = 67; i <= 66; i++)
+			for (int i = 81; i <= 80; i++)
 			{
 			{
 				this.maid.ResetProp((MPN)i, true);
 				this.maid.ResetProp((MPN)i, true);
 			}
 			}
@@ -2988,9 +3112,20 @@ public class SceneEdit : MonoBehaviour
 			mpn = MPN.folder_skin;
 			mpn = MPN.folder_skin;
 			break;
 			break;
 		default:
 		default:
-			if (mpn == MPN.eyewhite)
+			switch (mpn)
 			{
 			{
+			case MPN.eyewhite:
 				mpn = MPN.folder_eyewhite;
 				mpn = MPN.folder_eyewhite;
+				break;
+			case MPN.matsuge_up:
+				mpn = MPN.folder_matsuge_up;
+				break;
+			case MPN.matsuge_low:
+				mpn = MPN.folder_matsuge_low;
+				break;
+			case MPN.futae:
+				mpn = MPN.folder_futae;
+				break;
 			}
 			}
 			break;
 			break;
 		case MPN.underhair:
 		case MPN.underhair:
@@ -3038,9 +3173,20 @@ public class SceneEdit : MonoBehaviour
 			mpn = MPN.folder_skin;
 			mpn = MPN.folder_skin;
 			break;
 			break;
 		default:
 		default:
-			if (mpn == MPN.eyewhite)
+			switch (mpn)
 			{
 			{
+			case MPN.eyewhite:
 				mpn = MPN.folder_eyewhite;
 				mpn = MPN.folder_eyewhite;
+				break;
+			case MPN.matsuge_up:
+				mpn = MPN.folder_matsuge_up;
+				break;
+			case MPN.matsuge_low:
+				mpn = MPN.folder_matsuge_low;
+				break;
+			case MPN.futae:
+				mpn = MPN.folder_futae;
+				break;
 			}
 			}
 			break;
 			break;
 		case MPN.underhair:
 		case MPN.underhair:
@@ -3411,7 +3557,8 @@ public class SceneEdit : MonoBehaviour
 		MainChara,
 		MainChara,
 		AfterEdit,
 		AfterEdit,
 		CostumeEdit,
 		CostumeEdit,
-		NpcEdit
+		NpcEdit,
+		ScoutChara
 	}
 	}
 
 
 	private enum TouchType
 	private enum TouchType
@@ -3552,6 +3699,8 @@ public class SceneEdit : MonoBehaviour
 
 
 		public bool m_requestNewFace;
 		public bool m_requestNewFace;
 
 
+		public bool m_requestFBFace;
+
 		public MPN m_mpn;
 		public MPN m_mpn;
 
 
 		public bool m_bColor;
 		public bool m_bColor;
@@ -3599,7 +3748,7 @@ public class SceneEdit : MonoBehaviour
 
 
 	public class SPartsType : IDisposable
 	public class SPartsType : IDisposable
 	{
 	{
-		public SPartsType(SceneEditInfo.CCateNameType.EType f_eType, MPN f_mpn, string f_strPartsTypeName, string f_ePartsType)
+		public SPartsType(SceneEditInfo.CCateNameType.EType f_eType, MPN f_mpn, string f_strPartsTypeName, string f_ePartsType, bool f_isGP01Face, bool f_isFBFace)
 		{
 		{
 			this.m_nIdx = SceneEditInfo.m_dicPartsTypePair[f_mpn].m_nIdx;
 			this.m_nIdx = SceneEditInfo.m_dicPartsTypePair[f_mpn].m_nIdx;
 			this.m_eType = f_eType;
 			this.m_eType = f_eType;
@@ -3607,6 +3756,8 @@ public class SceneEdit : MonoBehaviour
 			this.m_strPartsTypeName = f_strPartsTypeName;
 			this.m_strPartsTypeName = f_strPartsTypeName;
 			this.m_ePartsType = f_ePartsType;
 			this.m_ePartsType = f_ePartsType;
 			this.m_isEnabled = true;
 			this.m_isEnabled = true;
+			this.m_isGP01Face = f_isGP01Face;
+			this.m_isFBFace = f_isFBFace;
 		}
 		}
 
 
 		public void Dispose()
 		public void Dispose()
@@ -3671,6 +3822,10 @@ public class SceneEdit : MonoBehaviour
 
 
 		public bool m_isEnabled;
 		public bool m_isEnabled;
 
 
+		public bool m_isGP01Face;
+
+		public bool m_isFBFace;
+
 		public List<SceneEdit.SMenuItem> m_listMenu = new List<SceneEdit.SMenuItem>();
 		public List<SceneEdit.SMenuItem> m_listMenu = new List<SceneEdit.SMenuItem>();
 
 
 		public GameObject m_goButton;
 		public GameObject m_goButton;

+ 43 - 0
Assembly-CSharp/SceneEditInfo.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.IO;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -79,6 +80,7 @@ public static class SceneEditInfo
 								if (!flag || !Product.isPublic)
 								if (!flag || !Product.isPublic)
 								{
 								{
 									ccateNameType.m_requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
 									ccateNameType.m_requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
+									ccateNameType.m_requestFBFace = (csvParser.GetCellAsString(num++, i) == "〇");
 									NDebug.Assert(!SceneEditInfo.dicPartsTypePair_.ContainsKey(key), "MPN[" + key.ToString() + "]が重複しています");
 									NDebug.Assert(!SceneEditInfo.dicPartsTypePair_.ContainsKey(key), "MPN[" + key.ToString() + "]が重複しています");
 									if (!dictionary.ContainsKey(ccateNameType.m_eMenuCate))
 									if (!dictionary.ContainsKey(ccateNameType.m_eMenuCate))
 									{
 									{
@@ -192,12 +194,51 @@ public static class SceneEditInfo
 		}
 		}
 	}
 	}
 
 
+	public static List<string> m_listCollaboCategory
+	{
+		get
+		{
+			if (SceneEditInfo.m_listCollabo_Category == null)
+			{
+				string text = "edit_collabo_category.nei";
+				SceneEditInfo.m_listCollabo_Category = new List<string>();
+				using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+				{
+					using (CsvParser csvParser = new CsvParser())
+					{
+						bool condition = csvParser.Open(afileBase);
+						NDebug.Assert(condition, text + "\nopen failed.");
+						for (int i = 1; i < csvParser.max_cell_y; i++)
+						{
+							if (csvParser.IsCellToExistData(0, i))
+							{
+								string text2 = csvParser.GetCellAsString(0, i).Trim();
+								if (!string.IsNullOrEmpty(text2))
+								{
+									text2 = text2.ToLower();
+									if (string.IsNullOrEmpty(Path.GetExtension(text2)))
+									{
+										text2 += ".menu";
+									}
+									SceneEditInfo.m_listCollabo_Category.Add(text2);
+								}
+							}
+						}
+					}
+				}
+			}
+			return SceneEditInfo.m_listCollabo_Category;
+		}
+	}
+
 	private static Dictionary<MPN, SceneEditInfo.CCateNameType> dicPartsTypePair_;
 	private static Dictionary<MPN, SceneEditInfo.CCateNameType> dicPartsTypePair_;
 
 
 	private static Dictionary<MPN, TBody.MaskMode> dicPartsTypeWearMode_;
 	private static Dictionary<MPN, TBody.MaskMode> dicPartsTypeWearMode_;
 
 
 	private static Dictionary<MPN, SceneEditInfo.CamToBone> m_dicPartsTypeCamera_;
 	private static Dictionary<MPN, SceneEditInfo.CamToBone> m_dicPartsTypeCamera_;
 
 
+	private static List<string> m_listCollabo_Category;
+
 	public enum EMenuCategory
 	public enum EMenuCategory
 	{
 	{
 		頭,
 		頭,
@@ -242,6 +283,8 @@ public static class SceneEditInfo
 
 
 		public bool m_requestNewFace;
 		public bool m_requestNewFace;
 
 
+		public bool m_requestFBFace;
+
 		public enum EType
 		public enum EType
 		{
 		{
 			Item,
 			Item,

+ 37 - 18
Assembly-CSharp/SceneEditWindow/CustomViewItem.cs

@@ -49,7 +49,7 @@ namespace SceneEditWindow
 				}
 				}
 			}
 			}
 			bool flag2 = true;
 			bool flag2 = true;
-			if (this.requestNewFace && !this.sceneEdit.isNewFace)
+			if ((this.requestNewFace && !this.sceneEdit.isNewFace) || (this.requestFBFace && !this.sceneEdit.isFBFace))
 			{
 			{
 				this.settingRid = 0;
 				this.settingRid = 0;
 				num = -1;
 				num = -1;
@@ -104,6 +104,11 @@ namespace SceneEditWindow
 					this.iconTex.color = Color.white;
 					this.iconTex.color = Color.white;
 				}
 				}
 			}
 			}
+			if ((this.sceneEdit.modeType == SceneEdit.ModeType.CostumeEdit && this.requestNewFace) || (this.sceneEdit.modeType == SceneEdit.ModeType.CostumeEdit && this.requestFBFace))
+			{
+				this.button.isEnabled = false;
+				this.button.tweenTarget = this.buttonTweenTarget;
+			}
 			return flag;
 			return flag;
 		}
 		}
 
 
@@ -130,34 +135,45 @@ namespace SceneEditWindow
 			bool flag = false;
 			bool flag = false;
 			switch (mpn)
 			switch (mpn)
 			{
 			{
-			case MPN.skin:
-				mpn = MPN.folder_skin;
+			case MPN.chikubicolor:
+				mpn = MPN.chikubi;
+				flag = true;
+				break;
+			case MPN.eyewhite:
+				mpn = MPN.folder_eyewhite;
 				flag = true;
 				flag = true;
 				break;
 				break;
 			default:
 			default:
-				if (mpn != MPN.chikubicolor)
-				{
-					if (mpn == MPN.eyewhite)
-					{
-						mpn = MPN.folder_eyewhite;
-					}
-				}
-				else
+				switch (mpn)
 				{
 				{
-					mpn = MPN.chikubi;
+				case MPN.skin:
+					mpn = MPN.folder_skin;
+					flag = true;
+					break;
+				case MPN.underhair:
+					mpn = MPN.folder_underhair;
+					flag = true;
+					break;
+				case MPN.mayu:
+					mpn = MPN.folder_mayu;
 					flag = true;
 					flag = true;
+					break;
+				case MPN.eye:
+					mpn = MPN.folder_eye;
+					flag = true;
+					break;
 				}
 				}
 				break;
 				break;
-			case MPN.underhair:
-				mpn = MPN.folder_underhair;
+			case MPN.matsuge_up:
+				mpn = MPN.folder_matsuge_up;
 				flag = true;
 				flag = true;
 				break;
 				break;
-			case MPN.mayu:
-				mpn = MPN.folder_mayu;
+			case MPN.matsuge_low:
+				mpn = MPN.folder_matsuge_low;
 				flag = true;
 				flag = true;
 				break;
 				break;
-			case MPN.eye:
-				mpn = MPN.folder_eye;
+			case MPN.futae:
+				mpn = MPN.folder_futae;
 				flag = true;
 				flag = true;
 				break;
 				break;
 			}
 			}
@@ -221,6 +237,9 @@ namespace SceneEditWindow
 		[NonSerialized]
 		[NonSerialized]
 		public bool requestNewFace;
 		public bool requestNewFace;
 
 
+		[NonSerialized]
+		public bool requestFBFace;
+
 		private UIButton button;
 		private UIButton button;
 
 
 		private GameObject buttonTweenTarget;
 		private GameObject buttonTweenTarget;

+ 3 - 0
Assembly-CSharp/SceneEditWindow/CustomViewItemData.cs

@@ -38,6 +38,7 @@ namespace SceneEditWindow
 							}
 							}
 							item.iconTexName = Path.ChangeExtension(csvParser.GetCellAsString(num++, i).ToString(), "tex");
 							item.iconTexName = Path.ChangeExtension(csvParser.GetCellAsString(num++, i).ToString(), "tex");
 							item.requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
 							item.requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
+							item.requestFBFace = (csvParser.GetCellAsString(num++, i) == "〇");
 							CustomViewItemData.itemList.Add(item);
 							CustomViewItemData.itemList.Add(item);
 						}
 						}
 					}
 					}
@@ -54,6 +55,8 @@ namespace SceneEditWindow
 			public string iconTexName;
 			public string iconTexName;
 
 
 			public bool requestNewFace;
 			public bool requestNewFace;
+
+			public bool requestFBFace;
 		}
 		}
 	}
 	}
 }
 }

+ 2 - 1
Assembly-CSharp/SceneEditWindow/CustomViewWindow.cs

@@ -64,7 +64,7 @@ namespace SceneEditWindow
 			}
 			}
 			foreach (CustomViewItemData.ItemData itemData in CustomViewItemData.itemList)
 			foreach (CustomViewItemData.ItemData itemData in CustomViewItemData.itemList)
 			{
 			{
-				if (hashSet.Contains(itemData.mpn) && (!itemData.requestNewFace || PluginData.IsEnabled("GP001")))
+				if (hashSet.Contains(itemData.mpn) && (!itemData.requestNewFace || PluginData.IsEnabled("GP001") || PluginData.IsEnabled("GP001FB")) && (!itemData.requestFBFace || PluginData.IsEnabled("GP001FB")))
 				{
 				{
 					if (!this.texDic.ContainsKey(itemData.iconTexName))
 					if (!this.texDic.ContainsKey(itemData.iconTexName))
 					{
 					{
@@ -74,6 +74,7 @@ namespace SceneEditWindow
 					componentInChildren.sceneEdit = this.sceneEdit;
 					componentInChildren.sceneEdit = this.sceneEdit;
 					componentInChildren.mpn = itemData.mpn;
 					componentInChildren.mpn = itemData.mpn;
 					componentInChildren.requestNewFace = itemData.requestNewFace;
 					componentInChildren.requestNewFace = itemData.requestNewFace;
+					componentInChildren.requestFBFace = itemData.requestFBFace;
 					componentInChildren.defaultIconTexture = this.texDic[itemData.iconTexName];
 					componentInChildren.defaultIconTexture = this.texDic[itemData.iconTexName];
 					componentInChildren.GetComponentInChildren<UIWidget>().depth = 15;
 					componentInChildren.GetComponentInChildren<UIWidget>().depth = 15;
 					this.itemList.Add(componentInChildren);
 					this.itemList.Add(componentInChildren);

+ 26 - 5
Assembly-CSharp/SceneFreeModeSelectManager.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using MaidStatus;
 using MaidStatus;
+using Schedule;
 using UnityEngine;
 using UnityEngine;
 
 
 public class SceneFreeModeSelectManager : WfScreenManager
 public class SceneFreeModeSelectManager : WfScreenManager
@@ -76,6 +77,7 @@ public class SceneFreeModeSelectManager : WfScreenManager
 		}
 		}
 		else
 		else
 		{
 		{
+			childObject5.gameObject.SetActive(true);
 			if (maid.status.subCharaData != null)
 			if (maid.status.subCharaData != null)
 			{
 			{
 				if (childObject != null)
 				if (childObject != null)
@@ -86,11 +88,31 @@ public class SceneFreeModeSelectManager : WfScreenManager
 				{
 				{
 					childObject3.SetActive(false);
 					childObject3.SetActive(false);
 				}
 				}
+				if (childObject5 != null)
+				{
+					List<FreeModeItemVip> list = FreeModeItemVip.CreateItemVipList(maid.status);
+					if (list != null)
+					{
+						List<FreeModeItemVip> list2 = new List<FreeModeItemVip>();
+						foreach (FreeModeItemVip freeModeItemVip in list)
+						{
+							if (!GameMain.Instance.CharacterMgr.status.lockNTRPlay || !ScheduleCSVData.NetorareFlag.Contains(freeModeItemVip.vip_data.id))
+							{
+								if (ScheduleAPI.VisibleNightWork(freeModeItemVip.vip_data.id, maid, false))
+								{
+									list2.Add(freeModeItemVip);
+								}
+							}
+						}
+						list = list2;
+					}
+					childObject5.SetActive(list != null && 0 < list.Count);
+				}
 			}
 			}
 			else if (maid.status.mainChara)
 			else if (maid.status.mainChara)
 			{
 			{
-				List<FreeModeItemEveryday> list = FreeModeItemEveryday.CreateItemEverydayList(FreeModeItemEveryday.ScnearioType.Story, null);
-				if (list.Count <= 0)
+				List<FreeModeItemEveryday> list3 = FreeModeItemEveryday.CreateItemEverydayList(FreeModeItemEveryday.ScnearioType.Story, null);
+				if (list3.Count <= 0)
 				{
 				{
 					UIButton component2 = childObject.GetComponent<UIButton>();
 					UIButton component2 = childObject.GetComponent<UIButton>();
 					component2.isEnabled = false;
 					component2.isEnabled = false;
@@ -108,7 +130,6 @@ public class SceneFreeModeSelectManager : WfScreenManager
 					childObject6.SetActive(false);
 					childObject6.SetActive(false);
 				}
 				}
 			}
 			}
-			childObject5.gameObject.SetActive(true);
 			childObject4.gameObject.SetActive(false);
 			childObject4.gameObject.SetActive(false);
 		}
 		}
 		if (childObject3.gameObject.activeSelf)
 		if (childObject3.gameObject.activeSelf)
@@ -121,8 +142,8 @@ public class SceneFreeModeSelectManager : WfScreenManager
 		}
 		}
 		if (childObject2.gameObject.activeSelf)
 		if (childObject2.gameObject.activeSelf)
 		{
 		{
-			List<FreeModeItemEveryday> list2 = FreeModeItemEveryday.CreateItemEverydayList(FreeModeItemEveryday.ScnearioType.Nitijyou, maid.status);
-			if (list2.Count <= 0)
+			List<FreeModeItemEveryday> list4 = FreeModeItemEveryday.CreateItemEverydayList(FreeModeItemEveryday.ScnearioType.Nitijyou, maid.status);
+			if (list4.Count <= 0)
 			{
 			{
 				childObject2.gameObject.SetActive(false);
 				childObject2.gameObject.SetActive(false);
 			}
 			}

+ 1 - 1
Assembly-CSharp/SceneNPCEdit/SaveData.cs

@@ -10,7 +10,7 @@ namespace SceneNPCEdit
 		public static void Serialize(BinaryWriter binary)
 		public static void Serialize(BinaryWriter binary)
 		{
 		{
 			binary.Write("CM3D2_NPCEDIT");
 			binary.Write("CM3D2_NPCEDIT");
-			binary.Write(1470);
+			binary.Write(1480);
 			binary.Write(SaveData.presetData.Count);
 			binary.Write(SaveData.presetData.Count);
 			foreach (KeyValuePair<int, byte[]> keyValuePair in SaveData.presetData)
 			foreach (KeyValuePair<int, byte[]> keyValuePair in SaveData.presetData)
 			{
 			{

+ 54 - 19
Assembly-CSharp/SceneUserEditMain.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using com.workman.cm3d2.scene.dailyEtc;
 using com.workman.cm3d2.scene.dailyEtc;
 using UnityEngine;
 using UnityEngine;
@@ -25,27 +26,57 @@ public class SceneUserEditMain : WfScreenChildren
 			this.playerNameInput.value = MaidRandomName.GetPlayerName();
 			this.playerNameInput.value = MaidRandomName.GetPlayerName();
 		});
 		});
 		EventDelegate.Add(this.okButton.onClick, new EventDelegate.Callback(this.OnClickOK));
 		EventDelegate.Add(this.okButton.onClick, new EventDelegate.Callback(this.OnClickOK));
+	}
+
+	public void Start()
+	{
+		GameMain.Instance.StartCoroutine(this.SetupManEditManager());
+	}
+
+	public void OnDestroy()
+	{
+		if (this.manEditManager != null)
+		{
+			this.manEditManager.Destroy();
+			this.manEditManager = null;
+		}
+		if (GameMain.Instance.MainCamera != null)
+		{
+			GameMain.Instance.MainCamera.SetTargetOffset(Vector3.zero, false);
+		}
+	}
+
+	private IEnumerator SetupManEditManager()
+	{
+		GameMain.Instance.LoadIcon.NextLoadIcontImmediatelyDisplay();
+		GameMain.Instance.LoadIcon.force_draw_new = true;
+		do
+		{
+			yield return null;
+		}
+		while (!GameMain.Instance.MenuDataBase.JobFinished());
+		GameMain.Instance.LoadIcon.force_draw_new = false;
 		this.manEditManager = new PhotoManEditManager();
 		this.manEditManager = new PhotoManEditManager();
-		List<SceneEdit.SMenuItem>[] array2 = new List<SceneEdit.SMenuItem>[]
+		List<SceneEdit.SMenuItem>[] itemLists = new List<SceneEdit.SMenuItem>[]
 		{
 		{
 			this.manEditManager.man_head_menu_list,
 			this.manEditManager.man_head_menu_list,
 			this.manEditManager.man_body_menu_list
 			this.manEditManager.man_body_menu_list
 		};
 		};
-		UIWFTabPanel[] array3 = new UIWFTabPanel[]
+		UIWFTabPanel[] tagetPanels = new UIWFTabPanel[]
 		{
 		{
 			this.HeadItemTabPanel,
 			this.HeadItemTabPanel,
 			this.BodyItemTabPanel
 			this.BodyItemTabPanel
 		};
 		};
-		EventDelegate.Callback[] array4 = new EventDelegate.Callback[]
+		EventDelegate.Callback[] callBackFunctions = new EventDelegate.Callback[]
 		{
 		{
 			new EventDelegate.Callback(this.OnSelectManHeadItem),
 			new EventDelegate.Callback(this.OnSelectManHeadItem),
 			new EventDelegate.Callback(this.OnSelectManHeadItem)
 			new EventDelegate.Callback(this.OnSelectManHeadItem)
 		};
 		};
-		for (int j = 0; j < array2.Length; j++)
+		for (int i = 0; i < itemLists.Length; i++)
 		{
 		{
-			UIWFTabPanel uiwftabPanel = array3[j];
-			EventDelegate.Callback callback = array4[j];
-			foreach (SceneEdit.SMenuItem smenuItem in array2[j])
+			UIWFTabPanel uiwftabPanel = tagetPanels[i];
+			EventDelegate.Callback callback = callBackFunctions[i];
+			foreach (SceneEdit.SMenuItem smenuItem in itemLists[i])
 			{
 			{
 				GameObject gameObject = Utility.CreatePrefab(uiwftabPanel.gameObject, "ScenePhotoMode/EditItemIcon", true);
 				GameObject gameObject = Utility.CreatePrefab(uiwftabPanel.gameObject, "ScenePhotoMode/EditItemIcon", true);
 				if (smenuItem.m_texIconRef != null)
 				if (smenuItem.m_texIconRef != null)
@@ -65,23 +96,23 @@ public class SceneUserEditMain : WfScreenChildren
 			Utility.ResetNGUI(uiwftabPanel.transform.parent.GetComponent<UIScrollView>());
 			Utility.ResetNGUI(uiwftabPanel.transform.parent.GetComponent<UIScrollView>());
 			uiwftabPanel.UpdateChildren();
 			uiwftabPanel.UpdateChildren();
 		}
 		}
-	}
-
-	public void OnDestroy()
-	{
-		if (this.manEditManager != null)
-		{
-			this.manEditManager.Destroy();
-			this.manEditManager = null;
-		}
-		if (GameMain.Instance.MainCamera != null)
+		do
 		{
 		{
-			GameMain.Instance.MainCamera.SetTargetOffset(Vector3.zero, false);
+			yield return null;
 		}
 		}
+		while (!this.calledOnCallEvent && GameMain.Instance.CharacterMgr.IsBusy());
+		this.CallAfter();
+		this.completedSetUp = true;
+		yield break;
 	}
 	}
 
 
 	protected override void OnCall()
 	protected override void OnCall()
 	{
 	{
+		this.calledOnCallEvent = true;
+	}
+
+	protected void CallAfter()
+	{
 		this.fadeWaitCount = 0;
 		this.fadeWaitCount = 0;
 		GameMain.Instance.MainLight.Reset();
 		GameMain.Instance.MainLight.Reset();
 		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
 		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
@@ -167,7 +198,7 @@ public class SceneUserEditMain : WfScreenChildren
 	protected override bool IsCallFadeIn()
 	protected override bool IsCallFadeIn()
 	{
 	{
 		this.fadeWaitCount++;
 		this.fadeWaitCount++;
-		return 2 < this.fadeWaitCount;
+		return 2 < this.fadeWaitCount && this.completedSetUp;
 	}
 	}
 
 
 	private void OnChangePlayerName()
 	private void OnChangePlayerName()
@@ -346,4 +377,8 @@ public class SceneUserEditMain : WfScreenChildren
 	private PhotoManEditManager.Controller manController;
 	private PhotoManEditManager.Controller manController;
 
 
 	private int fadeWaitCount;
 	private int fadeWaitCount;
+
+	private bool calledOnCallEvent;
+
+	private bool completedSetUp;
 }
 }

+ 15 - 19
Assembly-CSharp/Schedule/ScheduleAPI.cs

@@ -592,13 +592,6 @@ namespace Schedule
 			{
 			{
 				return list;
 				return list;
 			}
 			}
-			foreach (PersonalEventBlocker.Data data in PersonalEventBlocker.GetAllDatas())
-			{
-				if (condPersonalIds.Contains(data.personal.id))
-				{
-					condPersonalIds.Remove(data.personal.id);
-				}
-			}
 			for (int i = 0; i < GameMain.Instance.CharacterMgr.GetStockMaidCount(); i++)
 			for (int i = 0; i < GameMain.Instance.CharacterMgr.GetStockMaidCount(); i++)
 			{
 			{
 				Maid stockMaid = GameMain.Instance.CharacterMgr.GetStockMaid(i);
 				Maid stockMaid = GameMain.Instance.CharacterMgr.GetStockMaid(i);
@@ -606,25 +599,28 @@ namespace Schedule
 				{
 				{
 					if (!(excludeMaid != null) || !(excludeMaid.status.guid == stockMaid.status.guid))
 					if (!(excludeMaid != null) || !(excludeMaid.status.guid == stockMaid.status.guid))
 					{
 					{
-						if (workData.id == 10072 && workData.isCheckGP002Personal)
-						{
-							if ((stockMaid.status.seikeiken == Seikeiken.Yes_No || stockMaid.status.seikeiken == Seikeiken.Yes_Yes) && condPersonalIds.Contains(stockMaid.status.personal.id) && PluginData.IsEnabledForGP002Personal(stockMaid.status.personal.uniqueName))
-							{
-								list.Add(stockMaid);
-							}
-						}
-						else if (stockMaid.status.seikeiken == Seikeiken.Yes_Yes && stockMaid.status.relation >= Relation.Lover && condPersonalIds.Contains(stockMaid.status.personal.id))
+						if (PersonalEventBlocker.IsEnabledScheduleTask(stockMaid.status.personal, workData.id))
 						{
 						{
-							if (workData.isCheckGP002Personal)
+							if (workData.id == 10072 && workData.isCheckGP002Personal)
 							{
 							{
-								if (PluginData.IsEnabledForGP002Personal(stockMaid.status.personal.uniqueName))
+								if ((stockMaid.status.seikeiken == Seikeiken.Yes_No || stockMaid.status.seikeiken == Seikeiken.Yes_Yes) && condPersonalIds.Contains(stockMaid.status.personal.id) && PluginData.IsEnabledForGP002Personal(stockMaid.status.personal.uniqueName))
 								{
 								{
 									list.Add(stockMaid);
 									list.Add(stockMaid);
 								}
 								}
 							}
 							}
-							else
+							else if (stockMaid.status.seikeiken == Seikeiken.Yes_Yes && stockMaid.status.relation >= Relation.Lover && condPersonalIds.Contains(stockMaid.status.personal.id))
 							{
 							{
-								list.Add(stockMaid);
+								if (workData.isCheckGP002Personal)
+								{
+									if (PluginData.IsEnabledForGP002Personal(stockMaid.status.personal.uniqueName))
+									{
+										list.Add(stockMaid);
+									}
+								}
+								else
+								{
+									list.Add(stockMaid);
+								}
 							}
 							}
 						}
 						}
 					}
 					}

+ 1 - 1
Assembly-CSharp/ScheduleTaskViewer.cs

@@ -23,7 +23,7 @@ public class ScheduleTaskViewer : MonoBehaviour
 			gameObject.name = name;
 			gameObject.name = name;
 			GameObject childObject = UTY.GetChildObject(gameObject, "Label", false);
 			GameObject childObject = UTY.GetChildObject(gameObject, "Label", false);
 			UILabel component = childObject.GetComponent<UILabel>();
 			UILabel component = childObject.GetComponent<UILabel>();
-			component.text = gameObject.name;
+			component.text = gameObject.name.Replace("<改行>", "\n");
 			Localize component2 = childObject.GetComponent<Localize>();
 			Localize component2 = childObject.GetComponent<Localize>();
 			component2.SetTerm("SceneDaily/スケジュール/カテゴリー/" + name);
 			component2.SetTerm("SceneDaily/スケジュール/カテゴリー/" + name);
 			return UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIButton>();
 			return UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIButton>();

+ 47 - 1
Assembly-CSharp/ScriptManager.cs

@@ -10,6 +10,7 @@ using MaidStatus.Old;
 using PlayerStatus;
 using PlayerStatus;
 using PrivateMaidMode;
 using PrivateMaidMode;
 using Schedule;
 using Schedule;
+using scoutmode;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -366,6 +367,9 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("SetPrivateModeMaid", new TJSScript.FunctionCallBack(this.TJSFuncSetPrivateModeMaid));
 		this.tjs_.AddFunction("SetPrivateModeMaid", new TJSScript.FunctionCallBack(this.TJSFuncSetPrivateModeMaid));
 		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
 		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
 		this.tjs_.AddFunction("IsEnabeldAdditionalRelation", new TJSScript.FunctionCallBack(this.TJSFuncIsEnabeldAdditionalRelation));
 		this.tjs_.AddFunction("IsEnabeldAdditionalRelation", new TJSScript.FunctionCallBack(this.TJSFuncIsEnabeldAdditionalRelation));
+		this.tjs_.AddFunction("HireScoutMaid", new TJSScript.FunctionCallBack(this.TJSFuncHireScoutMaid));
+		this.tjs_.AddFunction("SuspendedScout", new TJSScript.FunctionCallBack(this.TJSFuncSuspendedScout));
+		this.tjs_.AddFunction("CancelScout", new TJSScript.FunctionCallBack(this.TJSFuncCancelScout));
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		motionKagManager.Initialize();
 		motionKagManager.Initialize();
 		motionKagManager.SetSloatNo(0);
 		motionKagManager.SetSloatNo(0);
@@ -1075,6 +1079,18 @@ public class ScriptManager : IDisposable
 		{
 		{
 			result.SetInteger(status.selectedJobClass.level);
 			result.SetInteger(status.selectedJobClass.level);
 		}
 		}
+		else if (a == "スリーサイズB")
+		{
+			result.SetInteger(status.body.bust);
+		}
+		else if (a == "スリーサイズW")
+		{
+			result.SetInteger(status.body.waist);
+		}
+		else if (a == "スリーサイズH")
+		{
+			result.SetInteger(status.body.hip);
+		}
 		else if (flag)
 		else if (flag)
 		{
 		{
 			if (a == "レンタルメイド")
 			if (a == "レンタルメイド")
@@ -3230,6 +3246,36 @@ public class ScriptManager : IDisposable
 		result.SetBool(Product.enabeldAdditionalRelation);
 		result.SetBool(Product.enabeldAdditionalRelation);
 	}
 	}
 
 
+	public void TJSFuncHireScoutMaid(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (GameMain.Instance.CharacterMgr.GetMaid(0) == null)
+		{
+			return;
+		}
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		ScoutManager.Instance.HireScoutMaid(maid);
+	}
+
+	public void TJSFuncSuspendedScout(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (GameMain.Instance.CharacterMgr.GetMaid(0) == null)
+		{
+			return;
+		}
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		ScoutManager.Instance.SuspendedScout(maid);
+	}
+
+	public void TJSFuncCancelScout(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (GameMain.Instance.CharacterMgr.GetMaid(0) == null)
+		{
+			return;
+		}
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		ScoutManager.Instance.CancelScout(maid);
+	}
+
 	public void TJSFuncGetRemainingDanceTime(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	public void TJSFuncGetRemainingDanceTime(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 	{
 		if (result == null)
 		if (result == null)
@@ -3353,7 +3399,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	public void Serialize(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_SCRIPT");
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1470);
+		binary.Write(1480);
 		this.adv_kag_.Serialize(binary);
 		this.adv_kag_.Serialize(binary);
 	}
 	}
 
 

+ 12 - 6
Assembly-CSharp/SystemShortcut.cs

@@ -106,12 +106,6 @@ public class SystemShortcut : MonoBehaviour
 			num++;
 			num++;
 		}
 		}
 		this.m_uiBase.width = 420 - num * 40;
 		this.m_uiBase.width = 420 - num * 40;
-		Vector2 vector = new Vector2(700f, 110f);
-		this.m_hitArea.size = new Vector3((float)this.m_uiBase.width + vector.x, (float)this.m_uiBase.height + vector.y, 0f);
-		Vector3 center = this.m_uiBase.GetComponent<BoxCollider>().center;
-		center.x += vector.x / 2f;
-		center.y -= 50f;
-		this.m_hitArea.center = center;
 		UTY.GetChildObject(this.m_goBase, "Grid", false).GetComponent<UIGrid>().repositionNow = true;
 		UTY.GetChildObject(this.m_goBase, "Grid", false).GetComponent<UIGrid>().repositionNow = true;
 		SceneManager.activeSceneChanged += this.OnActiveSceneChanged;
 		SceneManager.activeSceneChanged += this.OnActiveSceneChanged;
 		SceneManager.sceneUnloaded += this.OnSceneUnloaded;
 		SceneManager.sceneUnloaded += this.OnSceneUnloaded;
@@ -432,6 +426,12 @@ public class SystemShortcut : MonoBehaviour
 			this.m_uiPanel.alpha = 0f;
 			this.m_uiPanel.alpha = 0f;
 		}
 		}
 		this.SetVRAvatarButtonInteractable();
 		this.SetVRAvatarButtonInteractable();
+		Vector2 vector = new Vector2(700f, (float)((!this.m_goBtn[10].activeSelf) ? 20 : 110));
+		this.m_hitArea.size = new Vector3((float)this.m_uiBase.width + vector.x, (float)this.m_uiBase.height + vector.y, 0f);
+		Vector3 center = this.m_uiBase.GetComponent<BoxCollider>().center;
+		center.x = -190f + vector.x / 2f;
+		center.y = (float)((!this.m_goBtn[10].activeSelf) ? -5 : -50);
+		this.m_hitArea.center = center;
 	}
 	}
 
 
 	private void Update()
 	private void Update()
@@ -507,6 +507,12 @@ public class SystemShortcut : MonoBehaviour
 		this.SetHelpButtonInteractable();
 		this.SetHelpButtonInteractable();
 		uGUITutorialPanel.CloseTutorial(true, false);
 		uGUITutorialPanel.CloseTutorial(true, false);
 		this.SetVRAvatarButtonInteractable();
 		this.SetVRAvatarButtonInteractable();
+		Vector2 vector = new Vector2(700f, (float)((!this.m_goBtn[10].activeSelf) ? 20 : 110));
+		this.m_hitArea.size = new Vector3((float)this.m_uiBase.width + vector.x, (float)this.m_uiBase.height + vector.y, 0f);
+		Vector3 center = this.m_uiBase.GetComponent<BoxCollider>().center;
+		center.x = -190f + vector.x / 2f;
+		center.y = (float)((!this.m_goBtn[10].activeSelf) ? -5 : -50);
+		this.m_hitArea.center = center;
 	}
 	}
 
 
 	private void OnSceneUnloaded(Scene unloadedScene)
 	private void OnSceneUnloaded(Scene unloadedScene)

+ 53 - 31
Assembly-CSharp/TBody.cs

@@ -575,7 +575,7 @@ public class TBody : MonoBehaviour
 			this.quaUpperArmR = CMT.SearchObjName(tbodySkin.obj_tr, "Bip01 R UpperArm", false).localRotation;
 			this.quaUpperArmR = CMT.SearchObjName(tbodySkin.obj_tr, "Bip01 R UpperArm", false).localRotation;
 		}
 		}
 		this.bonemorph.Init();
 		this.bonemorph.Init();
-		this.bonemorph.InitBoneMorphEdit(tbodySkin.obj_tr, mpn, (TBody.SlotID)num);
+		this.bonemorph.InitBoneMorphEdit(tbodySkin.obj_tr, mpn, (TBody.SlotID)num, tbodySkin);
 		this.bonemorph.AddRoot(this.m_trBones);
 		this.bonemorph.AddRoot(this.m_trBones);
 		this.bonemorph.Blend();
 		this.bonemorph.Blend();
 		if (this.boMAN)
 		if (this.boMAN)
@@ -709,6 +709,38 @@ public class TBody : MonoBehaviour
 			this.goSlot[7].bonehair.bodyhit.ScaleMune("MOMO", num2);
 			this.goSlot[7].bonehair.bodyhit.ScaleMune("MOMO", num2);
 			this.goSlot[7].m_BonehairBodyhitScaleBackup["MOMO"] = num2;
 			this.goSlot[7].m_BonehairBodyhitScaleBackup["MOMO"] = num2;
 		}
 		}
+		if (tag == "mabutaupin")
+		{
+			this.goSlot[1].morph.m_MabutaUpIn.rate = f;
+		}
+		if (tag == "mabutaupin2")
+		{
+			this.goSlot[1].morph.m_MabutaUpIn2.rate = f;
+		}
+		if (tag == "mabutaupmiddle")
+		{
+			this.goSlot[1].morph.m_MabutaUpMiddle.rate = f;
+		}
+		if (tag == "mabutaupout")
+		{
+			this.goSlot[1].morph.m_MabutaUpOut.rate = f;
+		}
+		if (tag == "mabutaupout2")
+		{
+			this.goSlot[1].morph.m_MabutaUpOut2.rate = f;
+		}
+		if (tag == "mabutalowin")
+		{
+			this.goSlot[1].morph.m_MabutaLowIn.rate = f;
+		}
+		if (tag == "mabutalowupmiddle")
+		{
+			this.goSlot[1].morph.m_MabutaLowUpMiddle.rate = f;
+		}
+		if (tag == "mabutalowupout")
+		{
+			this.goSlot[1].morph.m_MabutaLowUpOut.rate = f;
+		}
 		try
 		try
 		{
 		{
 			if (this.goSlot[0].morph.hash.ContainsKey(tag))
 			if (this.goSlot[0].morph.hash.ContainsKey(tag))
@@ -900,6 +932,14 @@ public class TBody : MonoBehaviour
 		{
 		{
 			this.goSlot[1].morph.m_MayuShapeOut.rate = Mathf.Lerp(-1f, 1f, f);
 			this.goSlot[1].morph.m_MayuShapeOut.rate = Mathf.Lerp(-1f, 1f, f);
 		}
 		}
+		if (tag == "MayuLong")
+		{
+			this.bonemorph.MayuLong = f;
+		}
+		if (tag == "Yorime")
+		{
+			this.bonemorph.Yorime = f;
+		}
 		if (tag == "MuneUpDown")
 		if (tag == "MuneUpDown")
 		{
 		{
 			this.jbMuneL.MuneUpDown = (f - 0.5f) * 60f;
 			this.jbMuneL.MuneUpDown = (f - 0.5f) * 60f;
@@ -925,6 +965,10 @@ public class TBody : MonoBehaviour
 			jbMuneR.m_fMuneYawaraka = f;
 			jbMuneR.m_fMuneYawaraka = f;
 			flag = true;
 			flag = true;
 		}
 		}
+		if (tag == "MayuThick")
+		{
+			this.goSlot[1].MayuThick = f;
+		}
 		if (!flag)
 		if (!flag)
 		{
 		{
 		}
 		}
@@ -1083,7 +1127,7 @@ public class TBody : MonoBehaviour
 					catch (Exception ex)
 					catch (Exception ex)
 					{
 					{
 						NDebug.Assert("テクスチャの変更に失敗しました。以前のテクスチャを破棄できませんでした。" + ex.Message, false);
 						NDebug.Assert("テクスチャの変更に失敗しました。以前のテクスチャを破棄できませんでした。" + ex.Message, false);
-						goto IL_513;
+						goto IL_4D3;
 					}
 					}
 					this.MulTexRemove(slotname, matno, prop_name, -1);
 					this.MulTexRemove(slotname, matno, prop_name, -1);
 					if (texture == null)
 					if (texture == null)
@@ -1144,20 +1188,8 @@ public class TBody : MonoBehaviour
 					Material material2 = renderer.materials[matno];
 					Material material2 = renderer.materials[matno];
 					material2.SetTexture(prop_name, texture);
 					material2.SetTexture(prop_name, texture);
 				}
 				}
-				else
-				{
-					NDebug.Assert(string.Concat(new object[]
-					{
-						"マテリアル番号指定が ",
-						renderer.name,
-						"のマテリアル数を超えています。",
-						slotname,
-						" / ",
-						matno
-					}), false);
-				}
 			}
 			}
-			IL_513:;
+			IL_4D3:;
 		}
 		}
 	}
 	}
 
 
@@ -1174,21 +1206,9 @@ public class TBody : MonoBehaviour
 		foreach (Transform transform in obj.transform.GetComponentsInChildren<Transform>(true))
 		foreach (Transform transform in obj.transform.GetComponentsInChildren<Transform>(true))
 		{
 		{
 			Renderer component = transform.GetComponent<Renderer>();
 			Renderer component = transform.GetComponent<Renderer>();
-			if (component != null && component.material != null)
+			if (component != null && component.material != null && f_nMatNo < component.materials.Length)
 			{
 			{
-				if (f_nMatNo < component.materials.Length)
-				{
-					return component.materials[f_nMatNo];
-				}
-				NDebug.Assert(string.Concat(new object[]
-				{
-					"マテリアル番号指定が ",
-					component.name,
-					" のマテリアル数を超えています。",
-					f_strSlotname,
-					" / ",
-					f_nMatNo
-				}), false);
+				return component.materials[f_nMatNo];
 			}
 			}
 		}
 		}
 		return null;
 		return null;
@@ -3015,8 +3035,8 @@ public class TBody : MonoBehaviour
 			{
 			{
 				this.EyeEulerAngle *= 0.95f;
 				this.EyeEulerAngle *= 0.95f;
 			}
 			}
-			this.trsEyeL.localRotation = this.quaDefEyeL * Quaternion.Euler(0f, -this.EyeEulerAngle.x * 0.2f, -this.EyeEulerAngle.z * 0.1f);
-			this.trsEyeR.localRotation = this.quaDefEyeR * Quaternion.Euler(0f, this.EyeEulerAngle.x * 0.2f, this.EyeEulerAngle.z * 0.1f);
+			this.trsEyeL.localRotation = this.quaDefEyeL * Quaternion.Euler(0f, -this.EyeEulerAngle.x * 0.2f + this.m_editYorime, -this.EyeEulerAngle.z * 0.1f);
+			this.trsEyeR.localRotation = this.quaDefEyeR * Quaternion.Euler(0f, this.EyeEulerAngle.x * 0.2f + this.m_editYorime, this.EyeEulerAngle.z * 0.1f);
 		}
 		}
 	}
 	}
 
 
@@ -3616,6 +3636,8 @@ public class TBody : MonoBehaviour
 
 
 	public bool m_drawBodyHitSphere;
 	public bool m_drawBodyHitSphere;
 
 
+	public float m_editYorime;
+
 	private Dictionary<string, TBody.TexLay.Mat> m_dicLaySlot = new Dictionary<string, TBody.TexLay.Mat>();
 	private Dictionary<string, TBody.TexLay.Mat> m_dicLaySlot = new Dictionary<string, TBody.TexLay.Mat>();
 
 
 	private TBody.MaskMode m_eMaskMode;
 	private TBody.MaskMode m_eMaskMode;

+ 50 - 25
Assembly-CSharp/TBodySkin.cs

@@ -2,7 +2,6 @@
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
-using System.Reflection;
 using System.Text.RegularExpressions;
 using System.Text.RegularExpressions;
 using UnityEngine;
 using UnityEngine;
 
 
@@ -179,39 +178,37 @@ public class TBodySkin
 						material.EnableKeyword(f_strPropName);
 						material.EnableKeyword(f_strPropName);
 					}
 					}
 				}
 				}
-				else
+				else if (material.HasProperty(f_strPropName))
 				{
 				{
-					Type type = Assembly.Load("UnityEngine.dll").GetType(f_strTypeName);
-					if (type == null)
+					if (f_strTypeName == "Color")
 					{
 					{
-						type = Type.GetType(f_strTypeName, false, true);
+						string[] array = f_strValue.Split(new char[]
+						{
+							':'
+						});
+						material.SetColor(f_strPropName, new Color(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]), float.Parse(array[3])));
 					}
 					}
-					if (type == null)
+					else
 					{
 					{
-						Debug.LogError("タイプ " + f_strTypeName + " は存在しません。");
-						return;
+						material.SetFloat(f_strPropName, float.Parse(f_strValue));
 					}
 					}
-					if (material.HasProperty(f_strPropName))
+					if (f_bEditSave)
 					{
 					{
-						material.SetFloat(f_strPropName, float.Parse(f_strValue));
-						if (f_bEditSave)
-						{
-							this.body.maid.SetMaterialProperty(f_SrcMpn, this.SlotId, f_nMatNo, f_strPropName, f_strTypeName, f_strValue);
-						}
-						else
-						{
-							MatPropSave materialProperty = this.body.maid.GetMaterialProperty(f_SrcMpn, this.SlotId);
-							if (materialProperty != null)
-							{
-								this.SetMaterialProperty(f_SrcMpn, materialProperty.nMatNo, materialProperty.strPropName, materialProperty.strTypeName, materialProperty.strValue, true);
-							}
-						}
+						this.body.maid.SetMaterialProperty(f_SrcMpn, this.SlotId, f_nMatNo, f_strPropName, f_strTypeName, f_strValue);
 					}
 					}
 					else
 					else
 					{
 					{
-						Debug.LogWarning(f_strPropName + "はありませんでした。");
+						MatPropSave materialProperty = this.body.maid.GetMaterialProperty(f_SrcMpn, this.SlotId);
+						if (materialProperty != null)
+						{
+							this.SetMaterialProperty(f_SrcMpn, materialProperty.nMatNo, materialProperty.strPropName, materialProperty.strTypeName, materialProperty.strValue, true);
+						}
 					}
 					}
 				}
 				}
+				else
+				{
+					Debug.LogError(f_strPropName + "はありませんでした。");
+				}
 			}
 			}
 		}
 		}
 	}
 	}
@@ -222,7 +219,6 @@ public class TBodySkin
 		{
 		{
 			return string.Empty;
 			return string.Empty;
 		}
 		}
-		bool flag = f_strType == "DEFINE";
 		Transform[] componentsInChildren = this.obj.transform.GetComponentsInChildren<Transform>(true);
 		Transform[] componentsInChildren = this.obj.transform.GetComponentsInChildren<Transform>(true);
 		int i = 0;
 		int i = 0;
 		while (i < componentsInChildren.Length)
 		while (i < componentsInChildren.Length)
@@ -232,10 +228,24 @@ public class TBodySkin
 			if (component != null && component.material != null && f_nMatNo < component.materials.Length)
 			if (component != null && component.material != null && f_nMatNo < component.materials.Length)
 			{
 			{
 				Material material = component.materials[f_nMatNo];
 				Material material = component.materials[f_nMatNo];
-				if (flag)
+				if (f_strType == "DEFINE")
 				{
 				{
 					return (!material.IsKeywordEnabled(f_strPropName)) ? "0" : "1";
 					return (!material.IsKeywordEnabled(f_strPropName)) ? "0" : "1";
 				}
 				}
+				if (f_strType == "Color")
+				{
+					Color color = material.GetColor(f_strPropName);
+					return string.Concat(new string[]
+					{
+						color.r.ToString(),
+						":",
+						color.g.ToString(),
+						":",
+						color.b.ToString(),
+						":",
+						color.a.ToString()
+					});
+				}
 				return material.GetFloat(f_strPropName).ToString();
 				return material.GetFloat(f_strPropName).ToString();
 			}
 			}
 			else
 			else
@@ -284,6 +294,21 @@ public class TBodySkin
 		this.m_dicBackupShader.Clear();
 		this.m_dicBackupShader.Clear();
 	}
 	}
 
 
+	public float MayuThick
+	{
+		set
+		{
+			if (this.SlotId == TBody.SlotID.head && 120 <= this.PartsVersion)
+			{
+				SkinnedMeshRenderer componentInChildren = this.obj.GetComponentInChildren<SkinnedMeshRenderer>();
+				Material material = componentInChildren.materials[3];
+				float num = 0.5f * (value - 0.5f) / -0.5f;
+				material.SetTextureScale("_MainTex", new Vector2(1f, 1f + num));
+				material.SetTextureOffset("_MainTex", new Vector2(0f, -(num / 2f)));
+			}
+		}
+	}
+
 	public bool EnablePartsPosEdit
 	public bool EnablePartsPosEdit
 	{
 	{
 		get
 		get

+ 244 - 60
Assembly-CSharp/TMorph.cs

@@ -147,22 +147,81 @@ public class TMorph
 		this.m_MayuShapeIn.rate = (this.m_MayuShapeOut.rate = 0f);
 		this.m_MayuShapeIn.rate = (this.m_MayuShapeOut.rate = 0f);
 		this.m_MayuShapeIn.idx = ((!this.hash.ContainsKey("mayueditin")) ? -1 : ((int)this.hash["mayueditin"]));
 		this.m_MayuShapeIn.idx = ((!this.hash.ContainsKey("mayueditin")) ? -1 : ((int)this.hash["mayueditin"]));
 		this.m_MayuShapeOut.idx = ((!this.hash.ContainsKey("mayueditout")) ? -1 : ((int)this.hash["mayueditout"]));
 		this.m_MayuShapeOut.idx = ((!this.hash.ContainsKey("mayueditout")) ? -1 : ((int)this.hash["mayueditout"]));
-		this.m_fEyeCloseRate = 0f;
-		this.BlendDataIdx_EyeClose = new int[10];
-		if (this.hash.ContainsKey("eyeclose"))
+		if (120 <= this.bodyskin.PartsVersion)
 		{
 		{
-			this.BlendDataIdx_EyeClose[0] = (int)this.hash["eyeclose"];
+			Action<string, TMorph.IdxMinMaxRatePair> action = delegate(string no, TMorph.IdxMinMaxRatePair idx)
+			{
+				bool flag = false;
+				flag |= ((idx.idxDwL = ((!this.hash.ContainsKey("eyeeditl" + no + "_dw")) ? -1 : ((int)this.hash["eyeeditl" + no + "_dw"]))) == -1);
+				flag |= ((idx.idxUpL = ((!this.hash.ContainsKey("eyeeditl" + no + "_up")) ? -1 : ((int)this.hash["eyeeditl" + no + "_up"]))) == -1);
+				flag |= ((idx.idxDwR = ((!this.hash.ContainsKey("eyeeditr" + no + "_dw")) ? -1 : ((int)this.hash["eyeeditr" + no + "_dw"]))) == -1);
+				flag |= ((idx.idxUpR = ((!this.hash.ContainsKey("eyeeditr" + no + "_up")) ? -1 : ((int)this.hash["eyeeditr" + no + "_up"]))) == -1);
+				if (flag)
+				{
+					Debug.LogError("not fund shape key name");
+					return;
+				}
+				idx.exec = delegate(float rateL, float rateR)
+				{
+					float num4 = Mathf.Clamp01((idx.rate - 0.5f) / -0.5f);
+					float num5 = Mathf.Clamp01((idx.rate - 0.5f) / 0.5f);
+					this.BlendValues[idx.idxDwL] = num4 * rateL;
+					this.BlendValues[idx.idxDwR] = num4 * rateR;
+					this.BlendValues[idx.idxUpL] = num5 * rateL;
+					this.BlendValues[idx.idxUpR] = num5 * rateR;
+				};
+				if (this.m_IdxMinMaxList == null)
+				{
+					this.m_IdxMinMaxList = new List<TMorph.IdxMinMaxRatePair>();
+				}
+				this.m_IdxMinMaxList.Add(idx);
+			};
+			action("1", this.m_MabutaUpIn);
+			action("2", this.m_MabutaUpIn2);
+			action("3", this.m_MabutaUpMiddle);
+			action("4", this.m_MabutaUpOut);
+			action("5", this.m_MabutaUpOut2);
+			action("6", this.m_MabutaLowUpOut);
+			action("7", this.m_MabutaLowUpMiddle);
+			action("8", this.m_MabutaLowIn);
 		}
 		}
-		for (int k = 1; k < 10; k++)
+		this.m_fEyeCloseRate = 0f;
+		this.BlendDataIdx_EyeClose = new int[][]
+		{
+			new int[10],
+			new int[10],
+			new int[10]
+		};
+		if (this.bodyskin.PartsVersion < 120)
 		{
 		{
-			if (this.hash.ContainsKey("eyeclose" + k.ToString()))
+			if (this.hash.ContainsKey("eyeclose"))
+			{
+				this.BlendDataIdx_EyeClose[0][0] = (int)this.hash["eyeclose"];
+			}
+			for (int k = 1; k < 10; k++)
+			{
+				if (this.hash.ContainsKey("eyeclose" + k.ToString()))
+				{
+					this.BlendDataIdx_EyeClose[0][k] = (int)this.hash["eyeclose" + k.ToString()];
+				}
+			}
+			if (!this.bodyskin.body.boMAN && this.Category == "head" && this.BlendDataIdx_EyeClose[0][0] == 0)
 			{
 			{
-				this.BlendDataIdx_EyeClose[k] = (int)this.hash["eyeclose" + k.ToString()];
+				Debug.LogError("Face[eyeclose]");
 			}
 			}
 		}
 		}
-		if (!this.bodyskin.body.boMAN && this.Category == "head" && this.BlendDataIdx_EyeClose[0] == 0)
+		else
 		{
 		{
-			Debug.LogError("Face[eyeclose]");
+			for (int l = 0; l < 3; l++)
+			{
+				for (int m = 0; m < 10; m++)
+				{
+					if (this.hash.ContainsKey("eyeclose" + (m + 1).ToString() + TMorph.crcFaceTypesStr[l]))
+					{
+						this.BlendDataIdx_EyeClose[l][m] = (int)this.hash["eyeclose" + (m + 1).ToString() + TMorph.crcFaceTypesStr[l]];
+					}
+				}
+			}
 		}
 		}
 		if (this.hash.ContainsKey("toothoff"))
 		if (this.hash.ContainsKey("toothoff"))
 		{
 		{
@@ -229,7 +288,7 @@ public class TMorph
 		fixed (BoneWeight* ptr = &this.m_bws[0])
 		fixed (BoneWeight* ptr = &this.m_bws[0])
 		{
 		{
 			BoneWeight* ptr2 = ptr;
 			BoneWeight* ptr2 = ptr;
-			for (int l = 0; l < this.VCount; l++)
+			for (int n = 0; n < this.VCount; n++)
 			{
 			{
 				int num = ptr2->boneIndex0;
 				int num = ptr2->boneIndex0;
 				float num2 = ptr2->weight0;
 				float num2 = ptr2->weight0;
@@ -248,28 +307,28 @@ public class TMorph
 					num2 = ptr2->weight3;
 					num2 = ptr2->weight3;
 					num = ptr2->boneIndex3;
 					num = ptr2->boneIndex3;
 				}
 				}
-				this.BindBone[l] = num;
-				Vector3 vector = this.m_bindposes[num].MultiplyPoint3x4(this.m_vOriVert[l]);
-				this.BindVert[l] = vector;
-				this.DefVert[l] = this.m_bones[num].TransformPoint(vector);
-				this.m_AtrVert[l] = 0;
-				for (int m = 0; m < TMorph.AtrVertChk.Length; m++)
+				this.BindBone[n] = num;
+				Vector3 vector = this.m_bindposes[num].MultiplyPoint3x4(this.m_vOriVert[n]);
+				this.BindVert[n] = vector;
+				this.DefVert[n] = this.m_bones[num].TransformPoint(vector);
+				this.m_AtrVert[n] = 0;
+				for (int num3 = 0; num3 < TMorph.AtrVertChk.Length; num3++)
 				{
 				{
-					if (this.BoneNames[ptr2->boneIndex0].Contains(TMorph.AtrVertChk[m]))
+					if (this.BoneNames[ptr2->boneIndex0].Contains(TMorph.AtrVertChk[num3]))
 					{
 					{
-						this.m_AtrVert[l] |= 1 << m;
+						this.m_AtrVert[n] |= 1 << num3;
 					}
 					}
-					if (ptr2->weight1 > 0f && this.BoneNames[ptr2->boneIndex1].Contains(TMorph.AtrVertChk[m]))
+					if (ptr2->weight1 > 0f && this.BoneNames[ptr2->boneIndex1].Contains(TMorph.AtrVertChk[num3]))
 					{
 					{
-						this.m_AtrVert[l] |= 1 << m;
+						this.m_AtrVert[n] |= 1 << num3;
 					}
 					}
-					if (ptr2->weight2 > 0f && this.BoneNames[ptr2->boneIndex2].Contains(TMorph.AtrVertChk[m]))
+					if (ptr2->weight2 > 0f && this.BoneNames[ptr2->boneIndex2].Contains(TMorph.AtrVertChk[num3]))
 					{
 					{
-						this.m_AtrVert[l] |= 1 << m;
+						this.m_AtrVert[n] |= 1 << num3;
 					}
 					}
-					if (ptr2->weight3 > 0f && this.BoneNames[ptr2->boneIndex3].Contains(TMorph.AtrVertChk[m]))
+					if (ptr2->weight3 > 0f && this.BoneNames[ptr2->boneIndex3].Contains(TMorph.AtrVertChk[num3]))
 					{
 					{
-						this.m_AtrVert[l] |= 1 << m;
+						this.m_AtrVert[n] |= 1 << num3;
 					}
 					}
 				}
 				}
 				ptr2++;
 				ptr2++;
@@ -513,21 +572,48 @@ public class TMorph
 			Debug.LogError("表情がありません。" + BlendSetName);
 			Debug.LogError("表情がありません。" + BlendSetName);
 			return;
 			return;
 		}
 		}
-		if (!this.hash.Contains(tag))
+		if (tag.Contains("*"))
 		{
 		{
-			Debug.LogError("表情がありません。tag=" + tag);
-			return;
-		}
-		int num = (int)this.hash[tag];
-		if (tag == "hoho2")
-		{
-			this.IdxHOHO2 = num;
+			for (int i = 0; i < 3; i++)
+			{
+				string text = tag.Replace("*", TMorph.crcFaceTypesStr[i]);
+				if (!this.hash.Contains(text))
+				{
+					Debug.LogError("表情がありません。tag=" + text);
+				}
+				else
+				{
+					int num = (int)this.hash[text];
+					if (text == "hoho2")
+					{
+						this.IdxHOHO2 = num;
+					}
+					if (text == "hoho")
+					{
+						this.IdxHOHO = num;
+					}
+					this.dicBlendSet[BlendSetName][num] = val * 0.01f;
+				}
+			}
 		}
 		}
-		if (tag == "hoho")
+		else
 		{
 		{
-			this.IdxHOHO = num;
+			if (!this.hash.Contains(tag))
+			{
+				Debug.LogError("表情がありません。tag=" + tag);
+				return;
+			}
+			int num2 = (int)this.hash[tag];
+			if (tag == "hoho2")
+			{
+				this.IdxHOHO2 = num2;
+			}
+			if (tag == "hoho")
+			{
+				this.IdxHOHO = num2;
+			}
+			this.dicBlendSet[BlendSetName][num2] = val * 0.01f;
 		}
 		}
-		this.dicBlendSet[BlendSetName][num] = val * 0.01f;
 	}
 	}
 
 
 	public void ClearBlendValues()
 	public void ClearBlendValues()
@@ -579,24 +665,60 @@ public class TMorph
 		Debug.LogError("表情がありません。" + BlendSetName);
 		Debug.LogError("表情がありません。" + BlendSetName);
 	}
 	}
 
 
+	public TMorph.GP01FB_FACE_TYPE GetFaceTypeGP01FB()
+	{
+		float num = this.m_MabutaUpOut2.rate - 0.5f;
+		float num2 = Mathf.Clamp01(num / -0.5f);
+		float num3 = Mathf.Clamp01(num / 0.5f);
+		if (num2 < 0.35f && num3 < 0.35f)
+		{
+			return TMorph.GP01FB_FACE_TYPE.NORMAL;
+		}
+		if (0.35f <= num2)
+		{
+			return TMorph.GP01FB_FACE_TYPE.TARE;
+		}
+		if (0.35f <= num3)
+		{
+			return TMorph.GP01FB_FACE_TYPE.TSURI;
+		}
+		return TMorph.GP01FB_FACE_TYPE.MAX;
+	}
+
 	public void FixBlendValues_Face()
 	public void FixBlendValues_Face()
 	{
 	{
-		this.BlendValuesTemp[this.BlendDataIdx_EyeClose[0]] = this.m_fEyeCloseRate + this.BlendValuesBackup[this.BlendDataIdx_EyeClose[0]] * (1f - this.m_fEyeCloseRate);
-		for (int i = 1; i < 10; i++)
+		if (120 <= this.bodyskin.PartsVersion)
 		{
 		{
-			if (this.BlendDataIdx_EyeClose[i] != 0)
+			this.m_crcFaceTypeNow = this.GetFaceTypeGP01FB();
+			for (int i = 0; i < 3; i++)
 			{
 			{
-				this.BlendValuesTemp[this.BlendDataIdx_EyeClose[i]] = this.BlendValuesBackup[this.BlendDataIdx_EyeClose[i]] * (1f - this.m_fEyeCloseRate);
+				if (i != (int)this.m_crcFaceTypeNow)
+				{
+					int[] array = this.BlendDataIdx_EyeClose[i];
+					for (int j = 0; j < array.Length; j++)
+					{
+						this.BlendValues[array[j]] = 0f;
+					}
+				}
+			}
+		}
+		int[] array2 = this.BlendDataIdx_EyeClose[(int)this.m_crcFaceTypeNow];
+		this.BlendValuesTemp[array2[0]] = this.m_fEyeCloseRate + this.BlendValuesBackup[array2[0]] * (1f - this.m_fEyeCloseRate);
+		for (int k = 1; k < 10; k++)
+		{
+			if (array2[k] != 0)
+			{
+				this.BlendValuesTemp[array2[k]] = this.BlendValuesBackup[array2[k]] * (1f - this.m_fEyeCloseRate);
 			}
 			}
 		}
 		}
 		if (0f < this.EyeMabataki)
 		if (0f < this.EyeMabataki)
 		{
 		{
 			float num = 0f;
 			float num = 0f;
-			for (int j = 0; j < 10; j++)
+			for (int l = 0; l < 10; l++)
 			{
 			{
-				if (this.BlendDataIdx_EyeClose[j] != 0)
+				if (array2[l] != 0)
 				{
 				{
-					num += this.BlendValuesTemp[this.BlendDataIdx_EyeClose[j]];
+					num += this.BlendValuesTemp[array2[l]];
 				}
 				}
 			}
 			}
 			if (num > 1f)
 			if (num > 1f)
@@ -604,17 +726,17 @@ public class TMorph
 				num = 1f;
 				num = 1f;
 			}
 			}
 			float num2 = 1f - num;
 			float num2 = 1f - num;
-			float num3 = this.BlendValuesTemp[this.BlendDataIdx_EyeClose[0]] + num2 * this.EyeMabataki;
+			float num3 = this.BlendValuesTemp[array2[0]] + num2 * this.EyeMabataki;
 			if (num3 > 0f)
 			if (num3 > 0f)
 			{
 			{
-				this.BlendValuesTemp[this.BlendDataIdx_EyeClose[0]] = num3;
+				this.BlendValuesTemp[array2[0]] = num3;
 			}
 			}
 		}
 		}
-		for (int k = 0; k < 10; k++)
+		for (int m = 0; m < 10; m++)
 		{
 		{
-			if (this.BlendDataIdx_EyeClose[k] != 0)
+			if (array2[m] != 0)
 			{
 			{
-				this.BlendValues[this.BlendDataIdx_EyeClose[k]] = this.BlendValuesTemp[this.BlendDataIdx_EyeClose[k]];
+				this.BlendValues[array2[m]] = this.BlendValuesTemp[array2[m]];
 			}
 			}
 		}
 		}
 		if (this.m_EarNoneData.idx != -1)
 		if (this.m_EarNoneData.idx != -1)
@@ -641,6 +763,18 @@ public class TMorph
 		{
 		{
 			this.BlendValues[this.m_MayuShapeOut.idx] = this.m_MayuShapeOut.rate;
 			this.BlendValues[this.m_MayuShapeOut.idx] = this.m_MayuShapeOut.rate;
 		}
 		}
+		if (120 <= this.bodyskin.PartsVersion && this.m_IdxMinMaxList != null)
+		{
+			float arg = 1f - Mathf.Clamp01(this.BlendValues[array2[0]] + this.BlendValues[array2[1]] + this.BlendValues[array2[4]] + this.BlendValues[array2[5]]);
+			float arg2 = 1f - Mathf.Clamp01(this.BlendValues[array2[0]] + this.BlendValues[array2[1]] + this.BlendValues[array2[6]] + this.BlendValues[array2[7]]);
+			foreach (TMorph.IdxMinMaxRatePair idxMinMaxRatePair in this.m_IdxMinMaxList)
+			{
+				if (idxMinMaxRatePair.exec != null)
+				{
+					idxMinMaxRatePair.exec(arg, arg2);
+				}
+			}
+		}
 		if (this.boLipSync)
 		if (this.boLipSync)
 		{
 		{
 			this.BlendValues[this.BlendDataIdx_LipSync_A] = this.LipSync1 * 0.8f;
 			this.BlendValues[this.BlendDataIdx_LipSync_A] = this.LipSync1 * 0.8f;
@@ -687,12 +821,12 @@ public class TMorph
 			this.BlendValues[this.BlendDataIdx_NoseFook] = 0f;
 			this.BlendValues[this.BlendDataIdx_NoseFook] = 0f;
 		}
 		}
 		int num5 = 0;
 		int num5 = 0;
-		for (int l = 0; l < this.MorphCount; l++)
+		for (int n = 0; n < this.MorphCount; n++)
 		{
 		{
-			if (this.BlendValuesCHK[l] != this.BlendValues[l])
+			if (this.BlendValuesCHK[n] != this.BlendValues[n])
 			{
 			{
 				num5++;
 				num5++;
-				this.BlendValuesCHK[l] = this.BlendValues[l];
+				this.BlendValuesCHK[n] = this.BlendValues[n];
 			}
 			}
 		}
 		}
 		if (num5 == 0)
 		if (num5 == 0)
@@ -717,22 +851,22 @@ public class TMorph
 		{
 		{
 			this.BlendValues[this.IdxHOHO2] = 1f;
 			this.BlendValues[this.IdxHOHO2] = 1f;
 		}
 		}
-		for (int m = 0; m < this.MorphCount; m++)
+		for (int num6 = 0; num6 < this.MorphCount; num6++)
 		{
 		{
-			if (this.BlendDatas[m] == null)
+			if (this.BlendDatas[num6] == null)
 			{
 			{
-				this.UruUruScaleX = this.BlendValues[m];
+				this.UruUruScaleX = this.BlendValues[num6];
 			}
 			}
 			else
 			else
 			{
 			{
-				float num6 = this.BlendValues[m];
-				if (num6 >= 0.01f || m == this.m_MayuShapeIn.idx || m == this.m_MayuShapeOut.idx)
+				float num7 = this.BlendValues[num6];
+				if (num7 >= 0.01f || num6 == this.m_MayuShapeIn.idx || num6 == this.m_MayuShapeOut.idx)
 				{
 				{
-					int num7 = this.BlendDatas[m].v_index.Length;
-					for (int n = 0; n < num7; n++)
+					int num8 = this.BlendDatas[num6].v_index.Length;
+					for (int num9 = 0; num9 < num8; num9++)
 					{
 					{
-						int num8 = this.BlendDatas[m].v_index[n];
-						this.m_vTmpVert[num8] += this.BlendDatas[m].vert[n] * num6;
+						int num10 = this.BlendDatas[num6].v_index[num9];
+						this.m_vTmpVert[num10] += this.BlendDatas[num6].vert[num9] * num7;
 					}
 					}
 				}
 				}
 			}
 			}
@@ -1332,7 +1466,16 @@ public class TMorph
 
 
 	public List<BlendData> BlendDatas;
 	public List<BlendData> BlendDatas;
 
 
-	public int[] BlendDataIdx_EyeClose;
+	public static readonly string[] crcFaceTypesStr = new string[]
+	{
+		"_normal",
+		"_tare",
+		"_tsuri"
+	};
+
+	private TMorph.GP01FB_FACE_TYPE m_crcFaceTypeNow;
+
+	public int[][] BlendDataIdx_EyeClose;
 
 
 	public float m_fEyeCloseRate;
 	public float m_fEyeCloseRate;
 
 
@@ -1350,6 +1493,24 @@ public class TMorph
 
 
 	public TMorph.IdxRatePair<float> m_MayuShapeOut;
 	public TMorph.IdxRatePair<float> m_MayuShapeOut;
 
 
+	public TMorph.IdxMinMaxRatePair m_MabutaUpIn = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaUpIn2 = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaUpMiddle = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaUpOut = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaUpOut2 = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaLowIn = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaLowUpMiddle = new TMorph.IdxMinMaxRatePair();
+
+	public TMorph.IdxMinMaxRatePair m_MabutaLowUpOut = new TMorph.IdxMinMaxRatePair();
+
+	private List<TMorph.IdxMinMaxRatePair> m_IdxMinMaxList;
+
 	public int BlendDataIdx_LipSyncTh;
 	public int BlendDataIdx_LipSyncTh;
 
 
 	public int BlendDataIdx_LipSync_A;
 	public int BlendDataIdx_LipSync_A;
@@ -1465,6 +1626,29 @@ public class TMorph
 		public T rate;
 		public T rate;
 	}
 	}
 
 
+	public class IdxMinMaxRatePair
+	{
+		public int idxDwL;
+
+		public int idxUpL;
+
+		public int idxDwR;
+
+		public int idxUpR;
+
+		public float rate;
+
+		public Action<float, float> exec;
+	}
+
+	public enum GP01FB_FACE_TYPE
+	{
+		NORMAL,
+		TARE,
+		TSURI,
+		MAX
+	}
+
 	public class TempAttachPos
 	public class TempAttachPos
 	{
 	{
 		public int m_nVidx;
 		public int m_nVidx;

+ 25 - 6
Assembly-CSharp/WindowPartsFaceMorph.cs

@@ -151,14 +151,14 @@ public class WindowPartsFaceMorph : MonoBehaviour
 		{
 		{
 			return;
 			return;
 		}
 		}
-		Dictionary<string, int> dictionary = this.blendIdDictionary[maid.status.guid];
+		Dictionary<string, int> blendIdDic = this.blendIdDictionary[maid.status.guid];
 		for (int i = 0; i < this.propValInput.Length; i++)
 		for (int i = 0; i < this.propValInput.Length; i++)
 		{
 		{
 			for (int j = 0; j < this.propValInput[i].SliderAndInput.Length; j++)
 			for (int j = 0; j < this.propValInput[i].SliderAndInput.Length; j++)
 			{
 			{
 				string name = this.propValInput[i].SliderAndInput[j].Name;
 				string name = this.propValInput[i].SliderAndInput[j].Name;
 				PhotoSliderAndInput sliderAndInput = this.propValInput[i].GetSliderAndInput(name);
 				PhotoSliderAndInput sliderAndInput = this.propValInput[i].GetSliderAndInput(name);
-				sliderAndInput.ResetNum = this.backupBlendSets[maid.status.guid][this.selectData.setting_name][dictionary[name]];
+				sliderAndInput.ResetNum = this.backupBlendSets[maid.status.guid][this.selectData.setting_name][this.GetBlendIdx(maid.body0.Face, blendIdDic, name)];
 				List<Action<float>> onChangeValue = sliderAndInput.onChangeValue;
 				List<Action<float>> onChangeValue = sliderAndInput.onChangeValue;
 				sliderAndInput.onChangeValue = new List<Action<float>>();
 				sliderAndInput.onChangeValue = new List<Action<float>>();
 				sliderAndInput.value = this.GetValue(maid, name);
 				sliderAndInput.value = this.GetValue(maid, name);
@@ -179,8 +179,8 @@ public class WindowPartsFaceMorph : MonoBehaviour
 		{
 		{
 			return;
 			return;
 		}
 		}
-		Dictionary<string, int> dictionary = this.blendIdDictionary[maid.status.guid];
-		this.selectData.BlendArray(maid)[dictionary[name]] = val;
+		Dictionary<string, int> blendIdDic = this.blendIdDictionary[maid.status.guid];
+		this.selectData.BlendArray(maid)[this.GetBlendIdx(maid.body0.Face, blendIdDic, name)] = val;
 	}
 	}
 
 
 	private float GetValue(Maid maid, string name)
 	private float GetValue(Maid maid, string name)
@@ -189,8 +189,27 @@ public class WindowPartsFaceMorph : MonoBehaviour
 		{
 		{
 			return 0f;
 			return 0f;
 		}
 		}
-		Dictionary<string, int> dictionary = this.blendIdDictionary[maid.status.guid];
-		return this.selectData.BlendArray(maid)[dictionary[name]];
+		Dictionary<string, int> blendIdDic = this.blendIdDictionary[maid.status.guid];
+		return this.selectData.BlendArray(maid)[this.GetBlendIdx(maid.body0.Face, blendIdDic, name)];
+	}
+
+	private int GetBlendIdx(TBodySkin face, Dictionary<string, int> blendIdDic, string name)
+	{
+		if (120 <= face.PartsVersion && name.IndexOf("eyeclose") == 0)
+		{
+			string text = name;
+			if (text == "eyeclose")
+			{
+				text += "1";
+			}
+			TMorph.GP01FB_FACE_TYPE faceTypeGP01FB = face.morph.GetFaceTypeGP01FB();
+			text += TMorph.crcFaceTypesStr[(int)faceTypeGP01FB];
+			if (blendIdDic.ContainsKey(text))
+			{
+				name = text;
+			}
+		}
+		return blendIdDic[name];
 	}
 	}
 
 
 	public bool visible
 	public bool visible

+ 1 - 1
Assembly-CSharp/WindowPartsFingerPreset.cs

@@ -182,7 +182,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 	{
 	{
 		WindowPartsFingerBlend.Type blendType = tareget_blend.BlendType;
 		WindowPartsFingerBlend.Type blendType = tareget_blend.BlendType;
 		FingerBlend.BaseFinger baseFingerClass = tareget_blend.GetBaseFingerClass(tareget_blend.mgr.select_maid, blendType);
 		FingerBlend.BaseFinger baseFingerClass = tareget_blend.GetBaseFingerClass(tareget_blend.mgr.select_maid, blendType);
-		XElement xelement = new XElement("GameVersion", 1470);
+		XElement xelement = new XElement("GameVersion", 1480);
 		XElement xelement2 = new XElement("RightData", blendType == WindowPartsFingerBlend.Type.RightArm || blendType == WindowPartsFingerBlend.Type.RightLeg);
 		XElement xelement2 = new XElement("RightData", blendType == WindowPartsFingerBlend.Type.RightArm || blendType == WindowPartsFingerBlend.Type.RightLeg);
 		XElement xelement3 = new XElement("BinaryData", Convert.ToBase64String(baseFingerClass.GetBinary()));
 		XElement xelement3 = new XElement("BinaryData", Convert.ToBase64String(baseFingerClass.GetBinary()));
 		XNode[] contents = new XNode[]
 		XNode[] contents = new XNode[]

+ 1 - 1
Assembly-CSharp/YotogiParamBasicBar.cs

@@ -45,7 +45,7 @@ public class YotogiParamBasicBar : MonoBehaviour
 			UILabel component = UTY.GetChildObject(base.gameObject, "Mind/Name", false).GetComponent<UILabel>();
 			UILabel component = UTY.GetChildObject(base.gameObject, "Mind/Name", false).GetComponent<UILabel>();
 			if (component != null)
 			if (component != null)
 			{
 			{
-				Utility.SetLocalizeTerm(component, "MaidStatus/時間", false);
+				Utility.SetLocalizeTerm(component, "MaidStatus/時間", true);
 			}
 			}
 		}
 		}
 	}
 	}

+ 79 - 27
Assembly-CSharp/Yotogis/Skill.cs

@@ -185,6 +185,57 @@ namespace Yotogis
 
 
 		public static class Old
 		public static class Old
 		{
 		{
+			public static int ConvertId(int id)
+			{
+				if (id != 12700)
+				{
+					if (id != 12710)
+					{
+						if (id != 12720)
+						{
+							if (id != 12730)
+							{
+								if (id != 12740)
+								{
+									if (id != 12750)
+									{
+										if (id == 12760)
+										{
+											id = 12795;
+										}
+									}
+									else
+									{
+										id = 12790;
+									}
+								}
+								else
+								{
+									id = 12785;
+								}
+							}
+							else
+							{
+								id = 12780;
+							}
+						}
+						else
+						{
+							id = 12775;
+						}
+					}
+					else
+					{
+						id = 12770;
+					}
+				}
+				else
+				{
+					id = 12765;
+				}
+				return id;
+			}
+
 			public static void CreateData()
 			public static void CreateData()
 			{
 			{
 				if (Skill.Old.skill_data_id_list_ != null)
 				if (Skill.Old.skill_data_id_list_ != null)
@@ -212,14 +263,14 @@ namespace Yotogis
 						{
 						{
 							bool condition4 = csvParser5.Open(afileBase5);
 							bool condition4 = csvParser5.Open(afileBase5);
 							NDebug.Assert(condition4, file_name + "\nopen failed.");
 							NDebug.Assert(condition4, file_name + "\nopen failed.");
-							for (int num = 1; num < csvParser5.max_cell_y; num++)
+							for (int num2 = 1; num2 < csvParser5.max_cell_y; num2++)
 							{
 							{
-								if (csvParser5.IsCellToExistData(0, num))
+								if (csvParser5.IsCellToExistData(0, num2))
 								{
 								{
-									int cellAsInteger3 = csvParser5.GetCellAsInteger(0, num);
-									if (!enabled_id_list.Contains(cellAsInteger3))
+									int item = Skill.Old.ConvertId(csvParser5.GetCellAsInteger(0, num2));
+									if (!enabled_id_list.Contains(item))
 									{
 									{
-										enabled_id_list.Add(cellAsInteger3);
+										enabled_id_list.Add(item);
 									}
 									}
 								}
 								}
 							}
 							}
@@ -243,12 +294,12 @@ namespace Yotogis
 							if (csvParser.IsCellToExistData(0, j))
 							if (csvParser.IsCellToExistData(0, j))
 							{
 							{
 								NDebug.Assert(csvParser.IsCellToExistData(0, j + 1), "[2.0]yotogi_skil_command_data.nei\n" + csvParser.GetCellAsString(0, j) + "のスキルID設定がありません");
 								NDebug.Assert(csvParser.IsCellToExistData(0, j + 1), "[2.0]yotogi_skil_command_data.nei\n" + csvParser.GetCellAsString(0, j) + "のスキルID設定がありません");
-								int cellAsInteger = csvParser.GetCellAsInteger(0, j + 1);
-								if (enabled_id_list.Contains(cellAsInteger))
+								int num = Skill.Old.ConvertId(csvParser.GetCellAsInteger(0, j + 1));
+								if (enabled_id_list.Contains(num))
 								{
 								{
-									NDebug.Assert(!dictionary.ContainsKey(cellAsInteger), "コマンド設定\n" + cellAsInteger + "のスキルID設定が重複しています");
+									NDebug.Assert(!dictionary.ContainsKey(num), "コマンド設定\n" + num + "のスキルID設定が重複しています");
 									Dictionary<int, int[]> dictionary2 = dictionary;
 									Dictionary<int, int[]> dictionary2 = dictionary;
-									int key = cellAsInteger;
+									int key = num;
 									int[] array = new int[2];
 									int[] array = new int[2];
 									array[0] = j;
 									array[0] = j;
 									dictionary2.Add(key, array);
 									dictionary2.Add(key, array);
@@ -270,12 +321,12 @@ namespace Yotogis
 							if (csvParser2.IsCellToExistData(0, k))
 							if (csvParser2.IsCellToExistData(0, k))
 							{
 							{
 								NDebug.Assert(csvParser2.IsCellToExistData(0, k + 1), "[2.0]yotogi_skil_command_status.nei\n" + csvParser2.GetCellAsString(0, k) + "のスキルID設定がありません");
 								NDebug.Assert(csvParser2.IsCellToExistData(0, k + 1), "[2.0]yotogi_skil_command_status.nei\n" + csvParser2.GetCellAsString(0, k) + "のスキルID設定がありません");
-								if (enabled_id_list.Contains(csvParser2.GetCellAsInteger(0, k + 1)))
+								if (enabled_id_list.Contains(Skill.Old.ConvertId(csvParser2.GetCellAsInteger(0, k + 1))))
 								{
 								{
-									int cellAsInteger2 = csvParser2.GetCellAsInteger(0, k + 1);
+									int key2 = Skill.Old.ConvertId(csvParser2.GetCellAsInteger(0, k + 1));
 									str = csvParser2.GetCellAsString(0, k);
 									str = csvParser2.GetCellAsString(0, k);
-									NDebug.Assert(dictionary.ContainsKey(cellAsInteger2), str + "の情報は見つかりませんでした");
-									dictionary[cellAsInteger2][1] = k;
+									NDebug.Assert(dictionary.ContainsKey(key2), str + "の情報は見つかりませんでした");
+									dictionary[key2][1] = k;
 								}
 								}
 								k++;
 								k++;
 							}
 							}
@@ -302,7 +353,7 @@ namespace Yotogis
 								NDebug.Assert(condition3, "yotogi_skil_detail.nei\nopen failed.");
 								NDebug.Assert(condition3, "yotogi_skil_detail.nei\nopen failed.");
 								for (int m = 1; m < csvParser4.max_cell_y; m++)
 								for (int m = 1; m < csvParser4.max_cell_y; m++)
 								{
 								{
-									if (enabled_id_list.Contains(csvParser4.GetCellAsInteger(0, m)))
+									if (enabled_id_list.Contains(Skill.Old.ConvertId(csvParser4.GetCellAsInteger(0, m))))
 									{
 									{
 										Skill.Old.Data data = new Skill.Old.Data(csvParser4, csvParser3, m, dictionary);
 										Skill.Old.Data data = new Skill.Old.Data(csvParser4, csvParser3, m, dictionary);
 										if (!hashSet.Add(data.id))
 										if (!hashSet.Add(data.id))
@@ -333,12 +384,12 @@ namespace Yotogis
 						{
 						{
 							bool condition4 = csvParser5.Open(afileBase5);
 							bool condition4 = csvParser5.Open(afileBase5);
 							NDebug.Assert(condition4, file_name + "\nopen failed.");
 							NDebug.Assert(condition4, file_name + "\nopen failed.");
-							for (int num = 1; num < csvParser5.max_cell_y; num++)
+							for (int num2 = 1; num2 < csvParser5.max_cell_y; num2++)
 							{
 							{
-								if (csvParser5.IsCellToExistData(0, num))
+								if (csvParser5.IsCellToExistData(0, num2))
 								{
 								{
-									string cellAsString = csvParser5.GetCellAsString(0, num);
-									string cellAsString2 = csvParser5.GetCellAsString(1, num);
+									string cellAsString = csvParser5.GetCellAsString(0, num2);
+									string cellAsString2 = csvParser5.GetCellAsString(1, num2);
 									YotogiOld.Stage stage = YotogiOld.Stage.MAX;
 									YotogiOld.Stage stage = YotogiOld.Stage.MAX;
 									try
 									try
 									{
 									{
@@ -425,7 +476,8 @@ namespace Yotogis
 				public Data(CsvParser csv, CsvParser csv_acq, int y, Dictionary<int, int[]> command_data_cell_dic)
 				public Data(CsvParser csv, CsvParser csv_acq, int y, Dictionary<int, int[]> command_data_cell_dic)
 				{
 				{
 					int num = 0;
 					int num = 0;
-					this.id = csv.GetCellAsInteger(num++, y);
+					int cellAsInteger = csv.GetCellAsInteger(num++, y);
+					this.id = Skill.Old.ConvertId(cellAsInteger);
 					num++;
 					num++;
 					string cellAsString = csv.GetCellAsString(num++, y);
 					string cellAsString = csv.GetCellAsString(num++, y);
 					try
 					try
@@ -450,11 +502,11 @@ namespace Yotogis
 					}
 					}
 					this.exec_need_hp = csv.GetCellAsInteger(num++, y);
 					this.exec_need_hp = csv.GetCellAsInteger(num++, y);
 					this.add_yotogi_class_exp = csv.GetCellAsInteger(num++, y);
 					this.add_yotogi_class_exp = csv.GetCellAsInteger(num++, y);
-					int cellAsInteger = csv.GetCellAsInteger(num++, y);
 					int cellAsInteger2 = csv.GetCellAsInteger(num++, y);
 					int cellAsInteger2 = csv.GetCellAsInteger(num++, y);
+					int cellAsInteger3 = csv.GetCellAsInteger(num++, y);
 					this.skill_exp_table = new int[3];
 					this.skill_exp_table = new int[3];
-					this.skill_exp_table[1] = cellAsInteger;
-					this.skill_exp_table[2] = cellAsInteger2;
+					this.skill_exp_table[1] = cellAsInteger2;
+					this.skill_exp_table[2] = cellAsInteger3;
 					cellAsString = csv.GetCellAsString(num++, y);
 					cellAsString = csv.GetCellAsString(num++, y);
 					if (string.IsNullOrEmpty(cellAsString) || cellAsString == "×")
 					if (string.IsNullOrEmpty(cellAsString) || cellAsString == "×")
 					{
 					{
@@ -516,15 +568,15 @@ namespace Yotogis
 						string cellAsString4 = csv.GetCellAsString(num++, y);
 						string cellAsString4 = csv.GetCellAsString(num++, y);
 						if (string.IsNullOrEmpty(cellAsString3))
 						if (string.IsNullOrEmpty(cellAsString3))
 						{
 						{
-							IL_3BA:
+							IL_3C3:
 							NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
 							NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
 							int[] array3 = command_data_cell_dic[this.id];
 							int[] array3 = command_data_cell_dic[this.id];
 							this.command_basic_cell_y = array3[0];
 							this.command_basic_cell_y = array3[0];
 							this.command_status_cell_y = array3[1];
 							this.command_status_cell_y = array3[1];
 							num = 0;
 							num = 0;
-							int cellAsInteger3 = csv_acq.GetCellAsInteger(num++, y);
+							int num2 = Skill.Old.ConvertId(csv_acq.GetCellAsInteger(num++, y));
 							num++;
 							num++;
-							NDebug.Assert(cellAsInteger3 == this.id, "スキル取得条件とスキル詳細のIDラインが一致していません");
+							NDebug.Assert(num2 == this.id, "スキル取得条件とスキル詳細のIDラインが一致していません");
 							this.getcondition_data = new Skill.Old.Data.GetConditionData();
 							this.getcondition_data = new Skill.Old.Data.GetConditionData();
 							this.getcondition_data.seikeiken = new bool[4];
 							this.getcondition_data.seikeiken = new bool[4];
 							for (int l = 0; l < this.getcondition_data.seikeiken.Length; l++)
 							for (int l = 0; l < this.getcondition_data.seikeiken.Length; l++)
@@ -541,7 +593,7 @@ namespace Yotogis
 							num += 2;
 							num += 2;
 							if (csv_acq.IsCellToExistData(num, y) && csv_acq.IsCellToExistData(1, y))
 							if (csv_acq.IsCellToExistData(num, y) && csv_acq.IsCellToExistData(1, y))
 							{
 							{
-								this.getcondition_data.yotogi_class = YotogiClass.GetData(csv_acq.GetCellAsString(num++, y));
+								this.getcondition_data.yotogi_class = ((cellAsInteger != this.id) ? YotogiClass.GetData(csv_acq.GetCellAsString(num++, y) + "_old") : YotogiClass.GetData(csv_acq.GetCellAsString(num++, y)));
 								this.getcondition_data.yotogi_class_level = csv_acq.GetCellAsInteger(num++, y);
 								this.getcondition_data.yotogi_class_level = csv_acq.GetCellAsInteger(num++, y);
 							}
 							}
 							else
 							else
@@ -591,7 +643,7 @@ namespace Yotogis
 							this.exec_stage.Add(key, true);
 							this.exec_stage.Add(key, true);
 						}
 						}
 					}
 					}
-					goto IL_3BA;
+					goto IL_3C3;
 				}
 				}
 
 
 				public void SetNewSkillData(Skill.Data data)
 				public void SetNewSkillData(Skill.Data data)

+ 9 - 0
Assembly-CSharp/com/workman/cm3d2/scene/dailyEtc/DailyAPI.cs

@@ -265,6 +265,7 @@ namespace com.workman.cm3d2.scene.dailyEtc
 			bool isLegacy = DailyMgr.IsLegacy;
 			bool isLegacy = DailyMgr.IsLegacy;
 			bool bDay = this.m_bDay;
 			bool bDay = this.m_bDay;
 			bool isAvailableTransfer = GameMain.Instance.CharacterMgr.status.isAvailableTransfer;
 			bool isAvailableTransfer = GameMain.Instance.CharacterMgr.status.isAvailableTransfer;
+			bool flag = PluginData.IsEnabled("GP001FB");
 			string text = string.Empty;
 			string text = string.Empty;
 			if (isLegacy)
 			if (isLegacy)
 			{
 			{
@@ -278,10 +279,18 @@ namespace com.workman.cm3d2.scene.dailyEtc
 				if (isAvailableTransfer)
 				if (isAvailableTransfer)
 				{
 				{
 					text = "SceneDailyDayTimeAvailableTransfer";
 					text = "SceneDailyDayTimeAvailableTransfer";
+					if (flag)
+					{
+						text = "SceneDailyDayTimeAvailableTransfer_GP001FB";
+					}
 				}
 				}
 				else
 				else
 				{
 				{
 					text = "SceneDailyDayTime";
 					text = "SceneDailyDayTime";
+					if (flag)
+					{
+						text = "SceneDailyDayTime_GP001FB";
+					}
 				}
 				}
 			}
 			}
 			else if (isAvailableTransfer)
 			else if (isAvailableTransfer)

+ 31 - 0
Assembly-CSharp/scoutmode/LockData.cs

@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using wf;
+
+namespace scoutmode
+{
+	public static class LockData
+	{
+		public static HashSet<string> personalEnabledIdList
+		{
+			get
+			{
+				LockData.CreateData();
+				return LockData.personalEnabledIdList_;
+			}
+		}
+
+		public static void CreateData()
+		{
+			if (LockData.personalEnabledIdList_ != null)
+			{
+				return;
+			}
+			HashSet<string> collection = new HashSet<string>();
+			CsvCommonIdManager.ReadEnabledIdList(GameUty.FileSystem, GameUty.PathList, "scoutmode_personal_enabled_list", ref collection);
+			LockData.personalEnabledIdList_ = new HashSet<string>(collection);
+		}
+
+		private static HashSet<string> personalEnabledIdList_;
+	}
+}

+ 77 - 0
Assembly-CSharp/scoutmode/SceneScoutScreenManager.cs

@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+
+namespace scoutmode
+{
+	public class SceneScoutScreenManager : WfScreenManager
+	{
+		public ADVKagManager advKag
+		{
+			get
+			{
+				return GameMain.Instance.ScriptMgr.adv_kag;
+			}
+		}
+
+		public WfScreenMoveChildren moveScreen { get; private set; }
+
+		public override void Start()
+		{
+			base.Start();
+			this.moveScreen = base.children_dic["Move"].GetComponent<WfScreenMoveChildren>();
+			string empty = string.Empty;
+			string empty2 = string.Empty;
+			if (this.advKag.tag_backup != null && this.advKag.tag_backup.Count > 0)
+			{
+				this.backupTag = new Dictionary<string, string>(this.advKag.tag_backup);
+				NDebug.Assert(this.advKag.tag_backup.ContainsKey("name") && this.advKag.tag_backup["name"].ToLower() == "SceneScout".ToLower(), "シーン名SceneScoutの名前が不正です");
+				NDebug.Assert(this.advKag.tag_backup.ContainsKey("label"), "SceneCallにlabelの設定がされていませんでした");
+				NDebug.Assert(this.advKag.tag_backup.ContainsKey("start_label"), "SceneCallにstart_labelの設定がされていませんでした");
+				NDebug.Assert(this.advKag.tag_backup.ContainsKey("add_label"), "SceneCallにadd_labelの設定がされていませんでした");
+				ScoutMainScreenManager component = base.children_dic["Main"].GetComponent<ScoutMainScreenManager>();
+				if (this.advKag.tag_backup.ContainsKey("create_return"))
+				{
+					component.OnAddedScoutMaidReturned();
+				}
+				this.CallScreen("Main");
+				return;
+			}
+			this.advKag.LoadScriptFile("debug_scourt.ks", "*シーンコール");
+			this.advKag.kag.Exec();
+		}
+
+		public void CallAddScoutCharacter(WfScreenChildren finishScreen)
+		{
+			this.moveScreen.SetNextLabel(this.backupTag["add_label"]);
+			finishScreen.Finish();
+		}
+
+		public void CallStart(WfScreenChildren finishScreen)
+		{
+			this.moveScreen.SetNextLabel(this.backupTag["start_label"]);
+			finishScreen.Finish();
+		}
+
+		public void CallExist(WfScreenChildren finishScreen)
+		{
+			this.moveScreen.SetNextLabel(this.backupTag["label"]);
+			finishScreen.Finish();
+		}
+
+		protected override void SettingChildrenList(Dictionary<string, WfScreenChildren> childrenDic)
+		{
+			foreach (string text in new string[]
+			{
+				"Main",
+				"Move"
+			})
+			{
+				WfScreenChildren component = UTY.GetChildObject(base.gameObject, text, false).GetComponent<WfScreenChildren>();
+				component.parent_mgr = this;
+				childrenDic.Add(text, component);
+			}
+		}
+
+		public Dictionary<string, string> backupTag = new Dictionary<string, string>();
+	}
+}

+ 181 - 0
Assembly-CSharp/scoutmode/ScoutCharacterSelectCtrl.cs

@@ -0,0 +1,181 @@
+using System;
+using System.Collections.Generic;
+using Kasizuki;
+using UnityEngine;
+
+namespace scoutmode
+{
+	public class ScoutCharacterSelectCtrl : NGUIWindow
+	{
+		public ScoutMaidData selectedMaidData { get; private set; }
+
+		private void Init()
+		{
+			if (this.m_IsInit)
+			{
+				return;
+			}
+			this.m_IsInit = true;
+		}
+
+		private void Start()
+		{
+			this.Init();
+		}
+
+		public void SetData()
+		{
+			this.Init();
+			List<ScoutMaidData> maidList = this.callbackGetScoutMaidList();
+			this.m_ListViewer.Show<Transform>(maidList.Count, delegate(int i, Transform trans)
+			{
+				this.CreateItem(maidList[i], i, trans);
+			});
+			UIGrid componentInParent = this.m_ListViewer.parentItemArea.GetComponentInParent<UIGrid>();
+			if (componentInParent)
+			{
+				componentInParent.repositionNow = true;
+			}
+			UIScrollView componentInParent2 = this.m_ListViewer.parentItemArea.GetComponentInParent<UIScrollView>();
+			if (componentInParent2)
+			{
+				componentInParent2.ResetPosition();
+			}
+		}
+
+		public void DeleteItem(ScoutMaidData maid)
+		{
+			if (!this.itemDictionary.ContainsKey(maid))
+			{
+				return;
+			}
+			GameObject gameObject = null;
+			GameObject[] itemArray = this.m_ListViewer.ItemArray;
+			for (int i = 0; i < itemArray.Length; i++)
+			{
+				GameObject x = itemArray[i];
+				if (!(x != this.itemDictionary[maid]))
+				{
+					if (i + 1 < itemArray.Length)
+					{
+						gameObject = itemArray[i + 1];
+					}
+					else if (i - 1 >= 0)
+					{
+						gameObject = itemArray[i - 1];
+					}
+					break;
+				}
+			}
+			this.m_ListViewer.RemoveItem(this.itemDictionary[maid]);
+			this.selectedMaidData = null;
+			if (gameObject != null)
+			{
+				UIButton componentInChildren = gameObject.GetComponentInChildren<UIButton>();
+				if (componentInChildren != null && componentInChildren.onClick != null)
+				{
+					EventDelegate.Execute(componentInChildren.onClick);
+				}
+			}
+			UIGrid componentInParent = this.m_ListViewer.parentItemArea.GetComponentInParent<UIGrid>();
+			if (componentInParent)
+			{
+				componentInParent.Reposition();
+			}
+		}
+
+		private void CreateItem(ScoutMaidData maid, int index, Transform item)
+		{
+			GameObject itemObj = item.gameObject;
+			this.itemDictionary[maid] = itemObj;
+			UIButton componentInChildren = item.GetComponentInChildren<UIButton>(item);
+			EventDelegate.Add(componentInChildren.onClick, delegate()
+			{
+				this.selectedMaidData = maid;
+				if (this.callbackSelectItem != null)
+				{
+					this.callbackSelectItem(maid);
+				}
+				this.UpdateListColor(itemObj);
+			});
+			UI2DSprite component = UTY.GetChildObject(itemObj, "BG/ThumbnailFrame/Thumbnail", false).GetComponent<UI2DSprite>();
+			UILabel component2 = UTY.GetChildObject(itemObj, "BG/FirstName", false).GetComponent<UILabel>();
+			UILabel component3 = UTY.GetChildObject(itemObj, "BG/LastName", false).GetComponent<UILabel>();
+			Texture2D texture2D = null;
+			byte[] iconImageBinary = maid.iconImageBinary;
+			if (iconImageBinary != null)
+			{
+				texture2D = new Texture2D(1, 1, TextureFormat.ARGB32, false);
+				texture2D.LoadImage(iconImageBinary);
+			}
+			if (texture2D != null)
+			{
+				Sprite sprite2D = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+				component.sprite2D = sprite2D;
+			}
+			else
+			{
+				component.sprite2D = null;
+			}
+			if (maid.status != null)
+			{
+				component3.text = maid.status.name1;
+				component2.text = maid.status.name2;
+			}
+		}
+
+		private void UpdateListColor(GameObject target)
+		{
+			if (!this.m_IsInit)
+			{
+				return;
+			}
+			foreach (GameObject f_goParent in this.m_ListViewer.ItemArray)
+			{
+				GameObject childObject = UTY.GetChildObject(f_goParent, "BG/mask", true);
+				if (childObject)
+				{
+					childObject.SetActive(true);
+				}
+			}
+			if (target != null)
+			{
+				GameObject childObject = UTY.GetChildObject(target, "BG/mask", true);
+				if (childObject)
+				{
+					childObject.SetActive(false);
+				}
+			}
+		}
+
+		public BigThumbnail bigThumbnail
+		{
+			get
+			{
+				return this.m_BigThumbnail;
+			}
+		}
+
+		public uGUIListViewer listViewer
+		{
+			get
+			{
+				return this.m_ListViewer;
+			}
+		}
+
+		public Func<List<ScoutMaidData>> callbackGetScoutMaidList;
+
+		public Action<ScoutMaidData> callbackSelectItem;
+
+		private Dictionary<ScoutMaidData, GameObject> itemDictionary = new Dictionary<ScoutMaidData, GameObject>();
+
+		private bool m_IsInit;
+
+		[SerializeField]
+		private BigThumbnail m_BigThumbnail;
+
+		[SerializeField]
+		private uGUIListViewer m_ListViewer;
+	}
+}

+ 123 - 0
Assembly-CSharp/scoutmode/ScoutInstanceData.cs

@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using UnityEngine;
+
+namespace scoutmode
+{
+	[Serializable]
+	public class ScoutInstanceData : ISerializationCallbackReceiver, ICloneable
+	{
+		public void Apply(Maid maid)
+		{
+			if (this.enabled)
+			{
+				maid.status.relation = this.relation;
+				maid.status.additionalRelation = this.additionalRelation;
+				maid.status.likability = this.likability;
+				maid.status.seikeiken = this.seikeiken;
+				foreach (string flagName in maid.status.flags.GetKeyArray())
+				{
+					maid.status.RemoveFlag(flagName);
+				}
+				foreach (KeyValuePair<string, int> keyValuePair in this.maidFlags)
+				{
+					maid.status.AddFlag(keyValuePair.Key, keyValuePair.Value);
+				}
+			}
+		}
+
+		public void Create(Maid maid, string stageName, ScoutOptionData options)
+		{
+			if (maid == null || this.enabled)
+			{
+				return;
+			}
+			this.enabled = true;
+			this.stageName = stageName;
+			this.options = options;
+			this.Update(maid);
+		}
+
+		public void Update(Maid maid)
+		{
+			if (maid == null)
+			{
+				return;
+			}
+			this.relation = maid.status.relation;
+			this.additionalRelation = maid.status.additionalRelation;
+			this.likability = maid.status.likability;
+			this.seikeiken = maid.status.seikeiken;
+			this.maidFlags = maid.status.flags.Copy();
+		}
+
+		public void Destroy()
+		{
+			this.enabled = false;
+		}
+
+		public void OnBeforeSerialize()
+		{
+			this.version = 1000;
+			if (this.maidFlags == null)
+			{
+				this.maidFlags = new Dictionary<string, int>();
+			}
+			if (!this.enabled)
+			{
+				this.maidFlags.Clear();
+			}
+			this.maidFlags_Key = new string[this.maidFlags.Count];
+			this.maidFlags_Value = new int[this.maidFlags.Count];
+			int num = 0;
+			foreach (KeyValuePair<string, int> keyValuePair in this.maidFlags)
+			{
+				this.maidFlags_Key[num] = keyValuePair.Key;
+				this.maidFlags_Value[num] = keyValuePair.Value;
+				num++;
+			}
+		}
+
+		public void OnAfterDeserialize()
+		{
+			this.maidFlags = new Dictionary<string, int>();
+			for (int i = 0; i < this.maidFlags_Key.Length; i++)
+			{
+				this.maidFlags.Add(this.maidFlags_Key[i], this.maidFlags_Value[i]);
+			}
+		}
+
+		public object Clone()
+		{
+			ScoutInstanceData scoutInstanceData = (ScoutInstanceData)base.MemberwiseClone();
+			return JsonUtility.FromJson<ScoutInstanceData>(JsonUtility.ToJson(this));
+		}
+
+		private const int FixVersion = 1000;
+
+		public int version = 1000;
+
+		public bool enabled;
+
+		public Relation relation;
+
+		public AdditionalRelation additionalRelation;
+
+		public int likability;
+
+		public string stageName;
+
+		public Seikeiken seikeiken;
+
+		public Dictionary<string, int> maidFlags = new Dictionary<string, int>();
+
+		public ScoutOptionData options;
+
+		[SerializeField]
+		private string[] maidFlags_Key;
+
+		[SerializeField]
+		private int[] maidFlags_Value;
+	}
+}

+ 344 - 0
Assembly-CSharp/scoutmode/ScoutMaidData.cs

@@ -0,0 +1,344 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using Edit;
+using MaidStatus;
+using MaidStatus.CsvData;
+using UnityEngine;
+using Yotogis;
+
+namespace scoutmode
+{
+	public class ScoutMaidData : ICloneable
+	{
+		public static string GetThumbnailFilePath(string guid, bool temp)
+		{
+			return Path.Combine(Maid.ThumbnailDictionary, ((!temp) ? "_scout_" : "_scout_tmp_thum_") + guid + ".png");
+		}
+
+		public static string GetIconThumbnailFilePath(string guid, bool temp)
+		{
+			return Path.Combine(Maid.ThumbnailDictionary, ((!temp) ? "_scout_icon_thum_" : "_scout_tmp_icon_thum_") + guid + ".png");
+		}
+
+		public static string GetKasizukiThumbnailFilePath(string guid, bool temp)
+		{
+			return Path.Combine(Maid.ThumbnailDictionary, ((!temp) ? "_scout_kasizuki_" : "_scout_tmp_kasizuki_") + guid + ".png");
+		}
+
+		public ScoutMaidData.SimpleStatus status { get; private set; }
+
+		public byte[] iconImageBinary { get; private set; }
+
+		public byte[] pressetBinary { get; private set; }
+
+		public byte[] statusBinary { get; private set; }
+
+		public ScoutMaidOverrideData overrideData { get; private set; }
+
+		public ScoutInstanceData instanceData { get; private set; }
+
+		public bool isOverRideData
+		{
+			get
+			{
+				return this.overrideData.enabled;
+			}
+		}
+
+		public void CreateData(Maid maid)
+		{
+			Status status = maid.status;
+			this.pressetBinary = GameMain.Instance.CharacterMgr.PresetSaveNotWriteFile(maid, CharacterMgr.PresetType.All);
+			MemoryStream memoryStream = new MemoryStream();
+			BinaryWriter binary = new BinaryWriter(memoryStream);
+			status.isScoutMaid = true;
+			status.Serialize(binary);
+			status.isScoutMaid = false;
+			this.statusBinary = memoryStream.ToArray();
+			this.iconImageBinary = maid.GetThumIcon().EncodeToPNG();
+			this.status = new ScoutMaidData.SimpleStatus();
+			this.status.guid = status.guid;
+			this.status.creationTimeNum = status.creationTimeNum;
+			NamePair charaName = status.charaName;
+			this.status.name1 = charaName.name1;
+			this.status.name2 = charaName.name2;
+			this.status.personalId = status.personal.id;
+			this.status.initSeikeiken = status.initSeikeiken;
+			this.status.seikeiken = status.seikeiken;
+			this.status.height = status.body.height;
+			this.status.weight = status.body.weight;
+			this.status.bust = status.body.bust;
+			this.status.waist = status.body.waist;
+			this.status.hip = status.body.hip;
+			this.status.cup = status.body.cup;
+			this.status.lovely = status.lovely;
+			this.status.elegance = status.elegance;
+			this.status.charm = status.charm;
+			this.status.care = status.care;
+			this.status.reception = status.reception;
+			this.status.cooking = status.cooking;
+			this.status.dance = status.dance;
+			this.status.vocal = status.vocal;
+			this.status.teachRate = status.teachRate;
+			this.status.studyRate = status.studyRate;
+			this.status.maxHp = status.maxHp;
+			this.status.maxMind = status.maxMind;
+			this.status.inyoku = status.inyoku;
+			this.status.mvalue = status.mvalue;
+			this.status.hentai = status.hentai;
+			this.status.housi = status.housi;
+			this.status.maidPoint = GameMain.Instance.CharacterMgr.status.maidPoint;
+			this.status.playCountYotogi = status.playCountYotogi;
+			this.overrideData = new ScoutMaidOverrideData();
+			this.instanceData = new ScoutInstanceData();
+		}
+
+		public void Apply(Maid maid)
+		{
+			if (maid == null)
+			{
+				return;
+			}
+			byte[] pressetBinary = this.pressetBinary;
+			if (this.overrideData.pressetBinary != null && this.overrideData.pressetBinary.Length > 0)
+			{
+				pressetBinary = this.overrideData.pressetBinary;
+			}
+			using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(pressetBinary)))
+			{
+				GameMain.Instance.CharacterMgr.PresetSet(maid, GameMain.Instance.CharacterMgr.PresetLoad(binaryReader, string.Empty));
+			}
+			using (BinaryReader binaryReader2 = new BinaryReader(new MemoryStream(this.statusBinary)))
+			{
+				maid.status.Deserialize(binaryReader2);
+			}
+			this.overrideData.Apply(maid);
+			this.instanceData.Apply(maid);
+			foreach (int featureId in maid.status.features.GetKeyArray())
+			{
+				maid.status.RemoveFeature(featureId);
+			}
+			List<Feature.Data> allDatas = Feature.GetAllDatas(true);
+			foreach (Personal.Data.LearnFeature learnFeature in maid.status.personal.acquisitionFeatureList)
+			{
+				if (learnFeature.isLearnPossible(maid.status))
+				{
+					maid.status.AddFeature(learnFeature.feature);
+				}
+			}
+			AbstractClassData.ClassType classTypeFlags = AbstractClassData.ClassType.Share | AbstractClassData.ClassType.New | AbstractClassData.ClassType.Old;
+			maid.status.yotogiClass.Clear();
+			foreach (YotogiClass.Data data in maid.status.yotogiClass.GetLearnPossibleClassDatas(false, classTypeFlags))
+			{
+				if (GameMain.Instance.CharacterMgr.status.IsYotogiClassOpenFlag(data.id))
+				{
+					maid.status.yotogiClass.Add(data.id, false, true);
+				}
+			}
+			int id = maid.status.selectedJobClass.data.id;
+			HashSet<int> hashSet = new HashSet<int>();
+			foreach (KeyValuePair<int, ClassData<JobClass.Data>> keyValuePair in maid.status.jobClass.GetAllDatas())
+			{
+				hashSet.Add(keyValuePair.Key);
+			}
+			HashSet<int> hashSet2 = new HashSet<int>();
+			foreach (JobClass.Data data2 in maid.status.jobClass.GetLearnPossibleClassDatas(false, classTypeFlags))
+			{
+				if (GameMain.Instance.CharacterMgr.status.IsJobClassOpenFlag(data2.id))
+				{
+					hashSet2.Add(data2.id);
+				}
+			}
+			HashSet<int> hashSet3 = new HashSet<int>();
+			foreach (int item in hashSet)
+			{
+				if (!hashSet2.Contains(item))
+				{
+					hashSet3.Add(item);
+				}
+			}
+			HashSet<int> hashSet4 = new HashSet<int>();
+			foreach (int item2 in hashSet2)
+			{
+				if (!hashSet.Contains(item2))
+				{
+					hashSet4.Add(item2);
+				}
+			}
+			foreach (int id2 in hashSet3)
+			{
+				maid.status.jobClass.Remove(id2, true);
+			}
+			int num = -1;
+			foreach (int num2 in hashSet4)
+			{
+				maid.status.jobClass.Add(num2, false, true);
+				num = ((num >= num2) ? num : num2);
+			}
+			if (num != -1)
+			{
+				maid.status.ChangeJobClass(num);
+			}
+			maid.status.yotogiSkill.Clear();
+			List<Skill.Data> learnPossibleSkills = Skill.GetLearnPossibleSkills(maid.status);
+			foreach (Skill.Data data3 in learnPossibleSkills)
+			{
+				maid.status.yotogiSkill.Add(data3.id);
+			}
+			maid.status.UpdateClassBonusStatus();
+			maid.status.sexPlayNumberOfPeople = MaidProfile.UpdateInitPlayNumber(maid.status.maid);
+			maid.status.UpdateBodyParam();
+			maid.status.profileComment = MaidProfile.Create(maid.status.maid, true);
+			maid.status.SetFlag("__スカウトメイド", 1);
+		}
+
+		public byte[] GetIconImageBinary()
+		{
+			return (this.overrideData.iconImageBinary == null || this.overrideData.iconImageBinary.Length <= 0) ? this.iconImageBinary : this.overrideData.iconImageBinary;
+		}
+
+		public byte[] GetPressetBinary()
+		{
+			return (this.overrideData.pressetBinary == null || this.overrideData.pressetBinary.Length <= 0) ? this.pressetBinary : this.overrideData.pressetBinary;
+		}
+
+		public byte[] Serialize()
+		{
+			MemoryStream memoryStream = new MemoryStream();
+			BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+			binaryWriter.Write("COM3D2_SCOUT_DATA");
+			binaryWriter.Write(1000);
+			binaryWriter.Write(JsonUtility.ToJson(this.status));
+			binaryWriter.Write(this.iconImageBinary.Length);
+			binaryWriter.Write(this.iconImageBinary);
+			binaryWriter.Write(this.pressetBinary.Length);
+			binaryWriter.Write(this.pressetBinary);
+			binaryWriter.Write(this.statusBinary.Length);
+			binaryWriter.Write(this.statusBinary);
+			byte[] array = this.overrideData.Serialize();
+			binaryWriter.Write(array.Length);
+			binaryWriter.Write(array);
+			binaryWriter.Write(JsonUtility.ToJson(this.instanceData));
+			return memoryStream.ToArray();
+		}
+
+		public void DeSerialize(byte[] data)
+		{
+			MemoryStream input = new MemoryStream(data);
+			BinaryReader binaryReader = new BinaryReader(input);
+			NDebug.Assert(binaryReader.ReadString() == "COM3D2_SCOUT_DATA", "ScoutMaidData::DeSerialize Header Check error.");
+			int num = binaryReader.ReadInt32();
+			this.status = JsonUtility.FromJson<ScoutMaidData.SimpleStatus>(binaryReader.ReadString());
+			int count = binaryReader.ReadInt32();
+			this.iconImageBinary = binaryReader.ReadBytes(count);
+			count = binaryReader.ReadInt32();
+			this.pressetBinary = binaryReader.ReadBytes(count);
+			count = binaryReader.ReadInt32();
+			this.statusBinary = binaryReader.ReadBytes(count);
+			this.overrideData = new ScoutMaidOverrideData();
+			count = binaryReader.ReadInt32();
+			this.overrideData.DeSerialize(binaryReader.ReadBytes(count));
+			this.instanceData = JsonUtility.FromJson<ScoutInstanceData>(binaryReader.ReadString());
+		}
+
+		public object Clone()
+		{
+			ScoutMaidData scoutMaidData = (ScoutMaidData)base.MemberwiseClone();
+			scoutMaidData.status = JsonUtility.FromJson<ScoutMaidData.SimpleStatus>(JsonUtility.ToJson(this.status));
+			scoutMaidData.iconImageBinary = (byte[])this.iconImageBinary.Clone();
+			scoutMaidData.pressetBinary = (byte[])this.pressetBinary.Clone();
+			scoutMaidData.statusBinary = (byte[])this.statusBinary.Clone();
+			scoutMaidData.overrideData = (this.overrideData.Clone() as ScoutMaidOverrideData);
+			scoutMaidData.instanceData = (this.instanceData.Clone() as ScoutInstanceData);
+			return scoutMaidData;
+		}
+
+		private const int FixVersion = 1000;
+
+		[Serializable]
+		public class SimpleStatus : ISerializationCallbackReceiver
+		{
+			public Personal.Data personal
+			{
+				get
+				{
+					return Personal.GetData(this.personalId);
+				}
+			}
+
+			public void OnBeforeSerialize()
+			{
+				this.version = 1000;
+			}
+
+			public void OnAfterDeserialize()
+			{
+			}
+
+			public int version = 1000;
+
+			public string guid;
+
+			public ulong creationTimeNum;
+
+			public string name1;
+
+			public string name2;
+
+			public int personalId;
+
+			public Seikeiken initSeikeiken;
+
+			public Seikeiken seikeiken;
+
+			public int height;
+
+			public int weight;
+
+			public int bust;
+
+			public int waist;
+
+			public int hip;
+
+			public string cup;
+
+			public int care;
+
+			public int reception;
+
+			public int teachRate;
+
+			public int studyRate;
+
+			public int maxHp;
+
+			public int maxMind;
+
+			public int lovely;
+
+			public int elegance;
+
+			public int charm;
+
+			public int cooking;
+
+			public int dance;
+
+			public int vocal;
+
+			public int inyoku;
+
+			public int mvalue;
+
+			public int hentai;
+
+			public int housi;
+
+			public int maidPoint;
+
+			public int playCountYotogi;
+		}
+	}
+}

+ 263 - 0
Assembly-CSharp/scoutmode/ScoutMaidOverrideData.cs

@@ -0,0 +1,263 @@
+using System;
+using System.IO;
+using MaidStatus;
+using UnityEngine;
+using wf;
+
+namespace scoutmode
+{
+	public class ScoutMaidOverrideData : ICloneable
+	{
+		public string guid { get; private set; }
+
+		public bool enabled { get; private set; }
+
+		public void CreateStatus(ScoutMaidData.SimpleStatus status)
+		{
+			this.enabled = true;
+			this.guid = Guid.NewGuid().ToString();
+			this.status.SetStatus(status);
+		}
+
+		public void Apply(Maid maid)
+		{
+			if (!this.enabled)
+			{
+				return;
+			}
+			if (!string.IsNullOrEmpty(this.guid))
+			{
+				maid.status.SetNewGuidAndCreationTime(this.guid, maid.status.creationTime);
+			}
+			MaidStatus.Status status = maid.status;
+			status.SetPersonal(this.status.personalId);
+			status.seikeiken = (status.initSeikeiken = this.status.seikeiken);
+			status.baseLovely = this.status.lovely;
+			status.baseElegance = this.status.elegance;
+			status.baseCharm = this.status.charm;
+			status.baseCooking = this.status.cooking;
+			status.baseDance = this.status.dance;
+			status.baseVocal = this.status.vocal;
+			status.baseInyoku = this.status.inyoku;
+			status.baseMvalue = this.status.mvalue;
+			status.baseHentai = this.status.hentai;
+			status.baseHousi = this.status.housi;
+		}
+
+		public void Destroy()
+		{
+			this.enabled = false;
+		}
+
+		public byte[] Serialize()
+		{
+			MemoryStream memoryStream = new MemoryStream();
+			BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+			binaryWriter.Write("COM3D2_SCOUT_OVERRIDE_DATA");
+			binaryWriter.Write(1000);
+			binaryWriter.Write((this.guid != null) ? this.guid : string.Empty);
+			binaryWriter.Write(JsonUtility.ToJson(this.status));
+			binaryWriter.Write(this.enabled);
+			int num = (this.iconImageBinary != null && this.iconImageBinary.Length > 0) ? this.iconImageBinary.Length : 0;
+			binaryWriter.Write(num);
+			if (num > 0)
+			{
+				binaryWriter.Write(this.iconImageBinary);
+			}
+			num = ((this.pressetBinary != null && this.pressetBinary.Length > 0) ? this.pressetBinary.Length : 0);
+			binaryWriter.Write(num);
+			if (num > 0)
+			{
+				binaryWriter.Write(this.pressetBinary);
+			}
+			return memoryStream.ToArray();
+		}
+
+		public void DeSerialize(byte[] data)
+		{
+			MemoryStream input = new MemoryStream(data);
+			BinaryReader binaryReader = new BinaryReader(input);
+			NDebug.Assert(binaryReader.ReadString() == "COM3D2_SCOUT_OVERRIDE_DATA", "ScoutMaidData::ScoutMaidOverrideData::DeSerialize Header Check error.");
+			int num = binaryReader.ReadInt32();
+			this.guid = binaryReader.ReadString();
+			this.status = JsonUtility.FromJson<ScoutMaidOverrideData.Status>(binaryReader.ReadString());
+			this.enabled = binaryReader.ReadBoolean();
+			int num2 = binaryReader.ReadInt32();
+			this.iconImageBinary = ((num2 > 0) ? binaryReader.ReadBytes(num2) : null);
+			num2 = binaryReader.ReadInt32();
+			this.pressetBinary = ((num2 > 0) ? binaryReader.ReadBytes(num2) : null);
+		}
+
+		public object Clone()
+		{
+			ScoutMaidOverrideData scoutMaidOverrideData = (ScoutMaidOverrideData)base.MemberwiseClone();
+			scoutMaidOverrideData.status = JsonUtility.FromJson<ScoutMaidOverrideData.Status>(JsonUtility.ToJson(this.status));
+			scoutMaidOverrideData.iconImageBinary = ((this.iconImageBinary != null && this.iconImageBinary.Length > 0) ? ((byte[])this.iconImageBinary.Clone()) : null);
+			scoutMaidOverrideData.pressetBinary = ((this.pressetBinary != null && this.pressetBinary.Length > 0) ? ((byte[])this.pressetBinary.Clone()) : null);
+			return scoutMaidOverrideData;
+		}
+
+		private const int FixVersion = 1000;
+
+		public ScoutMaidOverrideData.Status status = new ScoutMaidOverrideData.Status();
+
+		public byte[] iconImageBinary;
+
+		public byte[] pressetBinary;
+
+		[Serializable]
+		public class Status : ISerializationCallbackReceiver
+		{
+			public Personal.Data personal
+			{
+				get
+				{
+					return Personal.GetData(this.personalId);
+				}
+			}
+
+			public void SetStatus(ScoutMaidData.SimpleStatus status)
+			{
+				this.personalId = status.personalId;
+				this.seikeiken = status.seikeiken;
+				this.lovely = status.lovely;
+				this.elegance = status.elegance;
+				this.charm = status.charm;
+				this.cooking = status.cooking;
+				this.dance = status.dance;
+				this.vocal = status.vocal;
+				this.inyoku = status.inyoku;
+				this.mvalue = status.mvalue;
+				this.hentai = status.hentai;
+				this.housi = status.housi;
+			}
+
+			public void ClearStatus()
+			{
+				this.lovely = 0;
+				this.elegance = 0;
+				this.charm = 0;
+				this.cooking = 0;
+				this.dance = 0;
+				this.vocal = 0;
+				this.inyoku = 0;
+				this.mvalue = 0;
+				this.hentai = 0;
+				this.housi = 0;
+			}
+
+			public bool AddRandomStatusValue(int value)
+			{
+				switch (UnityEngine.Random.Range(0, 10))
+				{
+				case 0:
+					if (this.lovely == 9999)
+					{
+						return false;
+					}
+					this.lovely = wf.Math.Round4(this.lovely + value);
+					break;
+				case 1:
+					if (this.elegance == 9999)
+					{
+						return false;
+					}
+					this.elegance = wf.Math.Round4(this.elegance + value);
+					break;
+				case 2:
+					if (this.charm == 9999)
+					{
+						return false;
+					}
+					this.charm = wf.Math.Round4(this.charm + value);
+					break;
+				case 3:
+					if (this.cooking == 9999)
+					{
+						return false;
+					}
+					this.cooking = wf.Math.Round4(this.cooking + value);
+					break;
+				case 4:
+					if (this.dance == 9999)
+					{
+						return false;
+					}
+					this.dance = wf.Math.Round4(this.dance + value);
+					break;
+				case 5:
+					if (this.vocal == 9999)
+					{
+						return false;
+					}
+					this.vocal = wf.Math.Round4(this.vocal + value);
+					break;
+				case 6:
+					if (this.inyoku == 9999)
+					{
+						return false;
+					}
+					this.inyoku = wf.Math.Round4(this.inyoku + value);
+					break;
+				case 7:
+					if (this.mvalue == 9999)
+					{
+						return false;
+					}
+					this.mvalue = wf.Math.Round4(this.mvalue + value);
+					break;
+				case 8:
+					if (this.hentai == 9999)
+					{
+						return false;
+					}
+					this.hentai = wf.Math.Round4(this.hentai + value);
+					break;
+				case 9:
+					if (this.housi == 9999)
+					{
+						return false;
+					}
+					this.housi = wf.Math.Round4(this.housi + value);
+					break;
+				}
+				return true;
+			}
+
+			public void OnBeforeSerialize()
+			{
+				this.version = 1000;
+			}
+
+			public void OnAfterDeserialize()
+			{
+			}
+
+			public int version = 1000;
+
+			public int personalId;
+
+			public Seikeiken seikeiken;
+
+			public int lovely;
+
+			public int elegance;
+
+			public int charm;
+
+			public int cooking;
+
+			public int dance;
+
+			public int vocal;
+
+			public int inyoku;
+
+			public int mvalue;
+
+			public int hentai;
+
+			public int housi;
+		}
+	}
+}

+ 334 - 0
Assembly-CSharp/scoutmode/ScoutMainScreenManager.cs

@@ -0,0 +1,334 @@
+using System;
+using UnityEngine;
+
+namespace scoutmode
+{
+	public class ScoutMainScreenManager : WfScreenChildren
+	{
+		public new SceneScoutScreenManager parent_mgr
+		{
+			get
+			{
+				return base.parent_mgr as SceneScoutScreenManager;
+			}
+		}
+
+		public ScoutMaidData scoutingMaidData { get; private set; }
+
+		public ScoutMaidData selectedScoutMaid { get; private set; }
+
+		public string SelectedStageName
+		{
+			get
+			{
+				return this.progressInformation.SelectStage.ToString();
+			}
+		}
+
+		private ScoutManager Manager
+		{
+			get
+			{
+				return ScoutManager.Instance;
+			}
+		}
+
+		public override void Awake()
+		{
+			base.Awake();
+			if (this.menus != null)
+			{
+				ScoutMainScreenManager.MenuButton[] array = this.menus;
+				for (int i = 0; i < array.Length; i++)
+				{
+					ScoutMainScreenManager.MenuButton menu = array[i];
+					ScoutMainScreenManager $this = this;
+					if (menu.button != null)
+					{
+						EventDelegate.Add(menu.button.onClick, delegate()
+						{
+							$this.OnClickMenuButton(menu.type);
+						});
+					}
+				}
+			}
+		}
+
+		protected override void OnCall()
+		{
+			GameMain.Instance.MainLight.Reset();
+			GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+			GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+			GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+			GameMain.Instance.CharacterMgr.Deactivate(0, false);
+			GameMain.Instance.SoundMgr.PlayBGM("BGM015.ogg", 1f, true);
+			GameMain.Instance.BgMgr.ChangeBg((!GameMain.Instance.CharacterMgr.status.isDaytime) ? "ShinShitsumu_ChairRot_Night" : "ShinShitsumu_ChairRot");
+			this.showStatusPanel = false;
+			this.OnSelectedScoutMaid(null);
+			this.scoutCharaSelect.callbackGetScoutMaidList = (() => this.Manager.scoutMaidList);
+			this.scoutCharaSelect.callbackSelectItem = new Action<ScoutMaidData>(this.OnSelectedScoutMaid);
+			this.scoutCharaSelect.SetData();
+			this.progressInformation.SetStage((!GameMain.Instance.CharacterMgr.status.isDaytime) ? ScoutProgressInformation.Stage.Club : ScoutProgressInformation.Stage.ShoppingMall);
+			foreach (ScoutMaidData scoutMaidData in this.Manager.scoutMaidList)
+			{
+				if (scoutMaidData.instanceData.enabled && scoutMaidData.instanceData.stageName == this.SelectedStageName)
+				{
+					this.scoutingMaidData = scoutMaidData;
+					break;
+				}
+			}
+			this.UpdateProgressInfoCharacter();
+			ScoutOption scoutOption = this.scoutOption;
+			scoutOption.onChangeValue = (Action<ScoutOption.SettingType, string>)Delegate.Combine(scoutOption.onChangeValue, new Action<ScoutOption.SettingType, string>(delegate(ScoutOption.SettingType type, string value)
+			{
+				if (type == ScoutOption.SettingType.BaseChara)
+				{
+					this.UpdateProgressInfoCharacter();
+				}
+			}));
+			foreach (ScoutMainScreenManager.MenuButton menuButton in this.menus)
+			{
+				if (menuButton.type == ScoutMainScreenManager.ButtonType.Cancel)
+				{
+					menuButton.button.transform.parent.gameObject.SetActive(false);
+					break;
+				}
+			}
+			uGUITutorialPanel.OpenTutorial("SceneScout", null, false);
+			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneScout";
+		}
+
+		public void OnClickMenuButton(ScoutMainScreenManager.ButtonType type)
+		{
+			Debug.Log(type.ToString());
+			if (type == ScoutMainScreenManager.ButtonType.AddScoutMaid)
+			{
+				this.AddScoutMaid();
+			}
+			else if (type == ScoutMainScreenManager.ButtonType.DeleteScoutMaid)
+			{
+				this.DeleteScoutMaid(this.scoutCharaSelect.selectedMaidData);
+			}
+			else if (type == ScoutMainScreenManager.ButtonType.Start)
+			{
+				this.StartScout();
+			}
+			else if (type == ScoutMainScreenManager.ButtonType.ShowStatus)
+			{
+				this.showStatusPanel = !this.showStatusPanel;
+				this.UpdateShowPanels();
+			}
+			else if (type == ScoutMainScreenManager.ButtonType.Exist)
+			{
+				this.parent_mgr.CallExist(this);
+			}
+			else if (type == ScoutMainScreenManager.ButtonType.Cancel)
+			{
+				this.Manager.CancelScout(this.scoutingMaidData);
+				this.scoutingMaidData = null;
+				this.UpdateProgressInfoCharacter();
+				this.UpdateShowPanels();
+			}
+		}
+
+		private bool StartScout()
+		{
+			ScoutMaidData callScoutMaid = null;
+			if (this.scoutingMaidData == null)
+			{
+				callScoutMaid = this.selectedScoutMaid;
+				if (!ScoutManager.Instance.options.baseCharaSelect)
+				{
+					callScoutMaid = this.Manager.GetRandomWaitingScoutmaid();
+				}
+				else if (callScoutMaid != null && callScoutMaid.instanceData.enabled)
+				{
+					GameMain.Instance.SysDlg.Show("指定キャラクターは既にスカウト中のため開始できません", SystemDialog.TYPE.OK, null, null);
+					return false;
+				}
+				if (callScoutMaid == null)
+				{
+					GameMain.Instance.SysDlg.Show("新たにスカウトを開始するメイドが存在しません", SystemDialog.TYPE.OK, null, null);
+					return false;
+				}
+				this.Manager.CreateRandomScoutMaidData(callScoutMaid, ScoutManager.Instance.options);
+			}
+			else
+			{
+				foreach (ScoutMaidData scoutMaidData in this.Manager.scoutMaidList)
+				{
+					if (scoutMaidData.instanceData.enabled && scoutMaidData.instanceData.stageName == this.SelectedStageName)
+					{
+						callScoutMaid = scoutMaidData;
+						break;
+					}
+				}
+			}
+			if (callScoutMaid == null)
+			{
+				return false;
+			}
+			this.onFinishEvent = delegate()
+			{
+				this.Manager.StartScout(this.Manager.ActiveScoutMaid(callScoutMaid, 0), this.SelectedStageName, ScoutManager.Instance.options);
+				this.progressInformation.ChangeBg(this.progressInformation.SelectStage);
+			};
+			this.parent_mgr.CallStart(this);
+			return true;
+		}
+
+		private void AddScoutMaid()
+		{
+			this.onFinishEvent = delegate()
+			{
+				Maid maid = GameMain.Instance.CharacterMgr.AddStockMaid();
+				maid.Visible = true;
+				GameMain.Instance.CharacterMgr.SetActiveMaid(maid, 0);
+			};
+			this.parent_mgr.CallAddScoutCharacter(this);
+		}
+
+		private void DeleteScoutMaid(ScoutMaidData scoutMaid)
+		{
+			if (scoutMaid == null)
+			{
+				return;
+			}
+			if (scoutMaid.instanceData.enabled)
+			{
+				GameMain.Instance.SysDlg.Show("スカウト中のため削除できません", SystemDialog.TYPE.OK, null, null);
+				return;
+			}
+			this.Manager.RemoveScoutMaid(scoutMaid);
+			this.scoutCharaSelect.DeleteItem(scoutMaid);
+			if (this.scoutCharaSelect.selectedMaidData == null)
+			{
+				this.OnSelectedScoutMaid(null);
+			}
+		}
+
+		public void OnSelectedScoutMaid(ScoutMaidData scoutMaid)
+		{
+			foreach (ScoutMainScreenManager.MenuButton menuButton in this.menus)
+			{
+				if (!(menuButton.button == null) && ScoutMainScreenManager.ButtonType.Start > menuButton.type)
+				{
+					if (menuButton.type == ScoutMainScreenManager.ButtonType.DeleteScoutMaid || menuButton.type == ScoutMainScreenManager.ButtonType.ShowStatus)
+					{
+						menuButton.button.isEnabled = (scoutMaid != null);
+					}
+				}
+			}
+			if (scoutMaid != null)
+			{
+				this.scoutCharaSelect.bigThumbnail.SetFile(new string[]
+				{
+					ScoutMaidData.GetThumbnailFilePath(scoutMaid.status.guid, true),
+					ScoutMaidData.GetThumbnailFilePath(scoutMaid.status.guid, false)
+				});
+			}
+			else
+			{
+				this.scoutCharaSelect.bigThumbnail.SetFile(null);
+			}
+			this.selectedScoutMaid = scoutMaid;
+			this.UpdateProgressInfoCharacter();
+			this.UpdateShowPanels();
+		}
+
+		public void OnAddedScoutMaidReturned()
+		{
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+			this.Manager.AddScoutMaid(maid);
+			GameMain.Instance.CharacterMgr.BanishmentMaid(maid);
+		}
+
+		private void UpdateShowPanels()
+		{
+			this.scoutCharaSelect.bigThumbnail.Visible = (!this.showStatusPanel && this.selectedScoutMaid != null);
+			this.statusPanel.visible = (this.showStatusPanel && this.selectedScoutMaid != null);
+			if (this.statusPanel.visible)
+			{
+				this.statusPanel.SetDrawStatus(this.selectedScoutMaid);
+			}
+		}
+
+		private void UpdateProgressInfoCharacter()
+		{
+			bool isEnabled = false;
+			if (this.scoutingMaidData != null)
+			{
+				this.progressInformation.SetCharacter(this.scoutingMaidData, true);
+				isEnabled = true;
+			}
+			else if (this.Manager.options.baseCharaSelect)
+			{
+				this.progressInformation.SetCharacter(this.selectedScoutMaid, false);
+				isEnabled = (this.selectedScoutMaid != null);
+			}
+			else if (this.Manager.GetRandomWaitingScoutmaid() != null)
+			{
+				this.progressInformation.SetCharacterRandom();
+				isEnabled = true;
+			}
+			else
+			{
+				this.progressInformation.SetCharacter(null, false);
+			}
+			foreach (ScoutMainScreenManager.MenuButton menuButton in this.menus)
+			{
+				if (menuButton.type == ScoutMainScreenManager.ButtonType.Start)
+				{
+					menuButton.button.isEnabled = isEnabled;
+					break;
+				}
+			}
+		}
+
+		protected override void OnFinish()
+		{
+			if (this.onFinishEvent != null)
+			{
+				this.onFinishEvent();
+			}
+			this.parent_mgr.CallScreen("Move");
+		}
+
+		[SerializeField]
+		private ScoutMainScreenManager.MenuButton[] menus;
+
+		[SerializeField]
+		private ScoutCharacterSelectCtrl scoutCharaSelect;
+
+		[SerializeField]
+		private ScoutOption scoutOption;
+
+		[SerializeField]
+		private ScoutProgressInformation progressInformation;
+
+		[SerializeField]
+		private ScoutStatusPanel statusPanel;
+
+		private Action onFinishEvent;
+
+		private bool showStatusPanel;
+
+		public enum ButtonType
+		{
+			AddScoutMaid = 10,
+			DeleteScoutMaid = 20,
+			ShowStatus = 30,
+			Start = 100,
+			Exist = 110,
+			Cancel = 120
+		}
+
+		[Serializable]
+		private struct MenuButton
+		{
+			public ScoutMainScreenManager.ButtonType type;
+
+			public UIButton button;
+		}
+	}
+}

+ 418 - 0
Assembly-CSharp/scoutmode/ScoutManager.cs

@@ -0,0 +1,418 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using MaidStatus;
+using UnityEngine;
+using wf;
+
+namespace scoutmode
+{
+	public class ScoutManager
+	{
+		public ScoutManager()
+		{
+			this.scoutMaidList = new List<ScoutMaidData>();
+		}
+
+		public static bool isModeEnabled
+		{
+			get
+			{
+				return Product.type == Product.Type.JpAdult && PluginData.IsEnabled("GP001FB") && GameMain.Instance.CharacterMgr.status.GetFlag("借金返済_完済") != 0;
+			}
+		}
+
+		public static ScoutManager Instance { get; private set; }
+
+		public static ScoutManager CreateInstance()
+		{
+			if (ScoutManager.Instance == null)
+			{
+				ScoutManager.Instance = new ScoutManager();
+			}
+			GameMain instance = GameMain.Instance;
+			instance.onFinalizeEvent = (Action)Delegate.Combine(instance.onFinalizeEvent, new Action(ScoutManager.Instance.OnOnFinalize));
+			return ScoutManager.Instance;
+		}
+
+		public static ScoutManager ReCreateInstance()
+		{
+			if (ScoutManager.Instance != null)
+			{
+				ScoutManager.Instance.DeleteAllTempThumbnailFile();
+			}
+			ScoutManager.Instance = null;
+			return ScoutManager.CreateInstance();
+		}
+
+		public List<ScoutMaidData> scoutMaidList { get; private set; }
+
+		public ScoutMaidData GetScoutMaid(string guid)
+		{
+			foreach (ScoutMaidData scoutMaidData in this.scoutMaidList)
+			{
+				if (guid == scoutMaidData.status.guid || (scoutMaidData.isOverRideData && guid == scoutMaidData.overrideData.guid))
+				{
+					return scoutMaidData;
+				}
+			}
+			return null;
+		}
+
+		public void AddScoutMaid(Maid maid)
+		{
+			ScoutMaidData scoutMaidData = new ScoutMaidData();
+			scoutMaidData.CreateData(maid);
+			this.scoutMaidList.Add(scoutMaidData);
+			this.scoutMaidList.Sort((ScoutMaidData a, ScoutMaidData b) => a.status.creationTimeNum.CompareTo(b.status.creationTimeNum));
+			string guid = scoutMaidData.status.guid;
+			string thumbnailDictionary = Maid.ThumbnailDictionary;
+			this.RenameFile(Path.Combine(thumbnailDictionary, "_tmp_thum_" + guid + ".png"), ScoutMaidData.GetThumbnailFilePath(guid, true));
+			this.RenameFile(Path.Combine(thumbnailDictionary, "icon_thum_" + guid + ".png"), ScoutMaidData.GetIconThumbnailFilePath(guid, true));
+			this.RenameFile(Path.Combine(thumbnailDictionary, "_tmp_kasizuki_" + guid + ".png"), ScoutMaidData.GetKasizukiThumbnailFilePath(guid, true));
+		}
+
+		public bool CreateRandomScoutMaidData(ScoutMaidData scoutMaid, ScoutOptionData execOptions)
+		{
+			if (execOptions == null || scoutMaid == null)
+			{
+				return false;
+			}
+			scoutMaid.overrideData.Destroy();
+			if (execOptions.inheritPersonality && execOptions.inheritSeikeiken && execOptions.inheritMaidPoint)
+			{
+				return false;
+			}
+			scoutMaid.overrideData.CreateStatus(scoutMaid.status);
+			ScoutMaidOverrideData.Status status = scoutMaid.overrideData.status;
+			if (!execOptions.inheritPersonality)
+			{
+				List<Personal.Data> list = new List<Personal.Data>();
+				foreach (Personal.Data data in Personal.GetAllDatas(true))
+				{
+					if (LockData.personalEnabledIdList.Contains(data.uniqueName))
+					{
+						string a = data.uniqueName.ToLower();
+						if (data.oldPersonal)
+						{
+							if (a == "pure" || a == "cool" || a == "pride")
+							{
+								if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
+								{
+									list.Add(data);
+								}
+							}
+							else if (data.single)
+							{
+								list.Add(data);
+							}
+							else if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path) && data.compatible)
+							{
+								list.Add(data);
+							}
+						}
+						else
+						{
+							list.Add(data);
+						}
+					}
+				}
+				status.personalId = list[UnityEngine.Random.Range(0, list.Count)].id;
+			}
+			if (!execOptions.inheritSeikeiken)
+			{
+				status.seikeiken = (Seikeiken)UnityEngine.Random.Range(0, 4);
+			}
+			if (!execOptions.inheritMaidPoint)
+			{
+				status.ClearStatus();
+				int num = scoutMaid.status.maidPoint;
+				while (0 < num)
+				{
+					if (!status.AddRandomStatusValue(20))
+					{
+						for (int i = 0; i < 5; i++)
+						{
+							if (status.AddRandomStatusValue(20))
+							{
+								break;
+							}
+						}
+					}
+					num--;
+				}
+			}
+			return true;
+		}
+
+		public void RemoveScoutMaid(ScoutMaidData scoutMaid)
+		{
+			this.scoutMaidList.Remove(scoutMaid);
+		}
+
+		public bool StartScout(Maid maid, string stageName, ScoutOptionData options)
+		{
+			ScoutMaidData scoutMaid = this.GetScoutMaid(maid.status.guid);
+			if (scoutMaid != null && !scoutMaid.instanceData.enabled)
+			{
+				scoutMaid.instanceData.Create(maid, stageName, options);
+				return true;
+			}
+			return false;
+		}
+
+		public Maid ActiveScoutMaid(ScoutMaidData scoutMaid, int slotNo)
+		{
+			if (scoutMaid == null)
+			{
+				return null;
+			}
+			Maid maid = GameMain.Instance.CharacterMgr.AddStockMaid();
+			maid.Visible = true;
+			GameMain.Instance.CharacterMgr.SetActiveMaid(maid, slotNo);
+			scoutMaid.Apply(maid);
+			return maid;
+		}
+
+		public bool SuspendedScout(Maid maid)
+		{
+			if (maid == null || maid.status.GetFlag("__スカウトメイド") != 1)
+			{
+				return false;
+			}
+			ScoutMaidData scoutMaid = this.GetScoutMaid(maid.status.guid);
+			NDebug.Assert(scoutMaid != null, "スカウトメイドデータの特定ができませんでした");
+			scoutMaid.instanceData.Update(maid);
+			GameMain.Instance.CharacterMgr.DeactivateMaid(maid);
+			GameMain.Instance.CharacterMgr.BanishmentMaid(maid);
+			return true;
+		}
+
+		public bool CancelScout(Maid maid)
+		{
+			if (maid == null || maid.status.GetFlag("__スカウトメイド") != 1)
+			{
+				return false;
+			}
+			ScoutMaidData scoutMaid = this.GetScoutMaid(maid.status.guid);
+			NDebug.Assert(scoutMaid != null, "スカウトメイドデータの特定ができませんでした");
+			if (!this.CancelScout(scoutMaid))
+			{
+				return false;
+			}
+			GameMain.Instance.CharacterMgr.DeactivateMaid(maid);
+			GameMain.Instance.CharacterMgr.BanishmentMaid(maid);
+			return true;
+		}
+
+		public bool CancelScout(ScoutMaidData scoutMaid)
+		{
+			if (scoutMaid == null || !scoutMaid.instanceData.enabled)
+			{
+				return false;
+			}
+			scoutMaid.overrideData.Destroy();
+			scoutMaid.instanceData.Destroy();
+			return true;
+		}
+
+		public void HireScoutMaid(Maid maid)
+		{
+			if (maid == null)
+			{
+				return;
+			}
+			ScoutMaidData scoutMaid = this.GetScoutMaid(maid.status.guid);
+			NDebug.Assert(scoutMaid != null, "スカウトメイドデータの特定ができませんでした");
+			maid.status.SetNewGuidAndCreationTime(null, null);
+			maid.status.employmentDay = GameMain.Instance.CharacterMgr.status.days;
+			byte[] iconImageBinary = scoutMaid.GetIconImageBinary();
+			if (iconImageBinary != null)
+			{
+				Texture2D texture2D = new Texture2D(1, 1, TextureFormat.ARGB32, false);
+				texture2D.LoadImage(iconImageBinary);
+				maid.SetThumIcon(texture2D);
+			}
+			foreach (string text in new string[]
+			{
+				ScoutMaidData.GetThumbnailFilePath(scoutMaid.status.guid, true),
+				ScoutMaidData.GetThumbnailFilePath(scoutMaid.status.guid, false)
+			})
+			{
+				string thumbnailFilePath = Maid.GetThumbnailFilePath(maid.status.guid, true);
+				if (File.Exists(text) && !File.Exists(thumbnailFilePath))
+				{
+					File.Copy(text, thumbnailFilePath);
+					break;
+				}
+			}
+			foreach (string text2 in new string[]
+			{
+				ScoutMaidData.GetIconThumbnailFilePath(scoutMaid.status.guid, true),
+				ScoutMaidData.GetIconThumbnailFilePath(scoutMaid.status.guid, false)
+			})
+			{
+				string thumbnailFilePath2 = Maid.GetThumbnailFilePath(maid.status.guid, true);
+				if (File.Exists(text2) && !File.Exists(thumbnailFilePath2))
+				{
+					File.Copy(text2, thumbnailFilePath2);
+					break;
+				}
+			}
+			foreach (string text3 in new string[]
+			{
+				ScoutMaidData.GetKasizukiThumbnailFilePath(scoutMaid.status.guid, true),
+				ScoutMaidData.GetKasizukiThumbnailFilePath(scoutMaid.status.guid, false)
+			})
+			{
+				string kasizukiThumbnailFilePath = Maid.GetKasizukiThumbnailFilePath(maid.status.guid, true);
+				if (File.Exists(text3) && !File.Exists(kasizukiThumbnailFilePath))
+				{
+					File.Copy(text3, kasizukiThumbnailFilePath);
+					break;
+				}
+			}
+			scoutMaid.overrideData.Destroy();
+			scoutMaid.instanceData.Destroy();
+			if (scoutMaid.instanceData.options.isBaseCharaDelete)
+			{
+				this.RemoveScoutMaid(scoutMaid);
+			}
+			GameMain.Instance.CharacterMgr.DeactivateMaid(maid);
+		}
+
+		public ScoutMaidData GetRandomWaitingScoutmaid()
+		{
+			List<ScoutMaidData> list = new List<ScoutMaidData>();
+			foreach (ScoutMaidData scoutMaidData in this.scoutMaidList)
+			{
+				if (!scoutMaidData.instanceData.enabled && !scoutMaidData.isOverRideData)
+				{
+					list.Add(scoutMaidData);
+				}
+			}
+			return (list.Count <= 0) ? null : list[UnityEngine.Random.Range(0, list.Count)];
+		}
+
+		public void Serialize(BinaryWriter bw)
+		{
+			byte[] array = new byte[0];
+			MemoryStream memoryStream = new MemoryStream();
+			BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+			int count = this.scoutMaidList.Count;
+			binaryWriter.Write(count);
+			foreach (ScoutMaidData scoutMaidData in this.scoutMaidList)
+			{
+				byte[] array2 = scoutMaidData.Serialize();
+				binaryWriter.Write(array2.Length);
+				binaryWriter.Write(array2);
+			}
+			array = Utility.ZlibCompresss(memoryStream.ToArray());
+			bw.Write(array.Length);
+			bw.Write(array);
+			bw.Write(JsonUtility.ToJson(this.options));
+		}
+
+		public void DeSerialize(BinaryReader br)
+		{
+			int count = br.ReadInt32();
+			byte[] buffer = Utility.ZlibUncompress(br.ReadBytes(count));
+			BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer));
+			int num = binaryReader.ReadInt32();
+			this.scoutMaidList.Clear();
+			for (int i = 0; i < num; i++)
+			{
+				ScoutMaidData scoutMaidData = new ScoutMaidData();
+				int count2 = binaryReader.ReadInt32();
+				scoutMaidData.DeSerialize(binaryReader.ReadBytes(count2));
+				this.scoutMaidList.Add(scoutMaidData);
+			}
+			this.options = JsonUtility.FromJson<ScoutOptionData>(br.ReadString());
+		}
+
+		public void FixThumbnail()
+		{
+			foreach (ScoutMaidData scoutMaidData in this.scoutMaidList)
+			{
+				string guid = scoutMaidData.status.guid;
+				this.RenameFile(ScoutMaidData.GetThumbnailFilePath(guid, true), ScoutMaidData.GetThumbnailFilePath(guid, false));
+				this.RenameFile(ScoutMaidData.GetIconThumbnailFilePath(guid, true), ScoutMaidData.GetIconThumbnailFilePath(guid, false));
+				this.RenameFile(ScoutMaidData.GetKasizukiThumbnailFilePath(guid, true), ScoutMaidData.GetKasizukiThumbnailFilePath(guid, false));
+			}
+			foreach (string guid2 in this.removeScoutMaidGuid)
+			{
+				foreach (string path in new string[]
+				{
+					ScoutMaidData.GetThumbnailFilePath(guid2, false),
+					ScoutMaidData.GetIconThumbnailFilePath(guid2, false),
+					ScoutMaidData.GetKasizukiThumbnailFilePath(guid2, false)
+				})
+				{
+					if (File.Exists(path))
+					{
+						File.Delete(path);
+					}
+				}
+			}
+			this.DeleteAllTempThumbnailFile();
+		}
+
+		public void DeleteAllTempThumbnailFile()
+		{
+			foreach (string guid in this.removeScoutMaidGuid)
+			{
+				foreach (string path in new string[]
+				{
+					ScoutMaidData.GetThumbnailFilePath(guid, true),
+					ScoutMaidData.GetIconThumbnailFilePath(guid, true),
+					ScoutMaidData.GetKasizukiThumbnailFilePath(guid, true)
+				})
+				{
+					if (File.Exists(path))
+					{
+						File.Delete(path);
+					}
+				}
+			}
+			foreach (ScoutMaidData scoutMaidData in this.scoutMaidList)
+			{
+				string guid2 = scoutMaidData.status.guid;
+				foreach (string path2 in new string[]
+				{
+					ScoutMaidData.GetThumbnailFilePath(guid2, true),
+					ScoutMaidData.GetIconThumbnailFilePath(guid2, true),
+					ScoutMaidData.GetKasizukiThumbnailFilePath(guid2, true)
+				})
+				{
+					if (File.Exists(path2))
+					{
+						File.Delete(path2);
+					}
+				}
+			}
+			this.removeScoutMaidGuid.Clear();
+		}
+
+		private void OnOnFinalize()
+		{
+			this.DeleteAllTempThumbnailFile();
+		}
+
+		private void RenameFile(string src, string dest)
+		{
+			if (!File.Exists(src))
+			{
+				return;
+			}
+			if (File.Exists(dest))
+			{
+				File.Delete(dest);
+			}
+			File.Move(src, dest);
+		}
+
+		public ScoutOptionData options = new ScoutOptionData();
+
+		private HashSet<string> removeScoutMaidGuid = new HashSet<string>();
+	}
+}

+ 278 - 0
Assembly-CSharp/scoutmode/ScoutOption.cs

@@ -0,0 +1,278 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using I2.Loc;
+using UnityEngine;
+
+namespace scoutmode
+{
+	public class ScoutOption : MonoBehaviour
+	{
+		private ScoutOptionData options
+		{
+			get
+			{
+				return ScoutManager.Instance.options;
+			}
+		}
+
+		private void Start()
+		{
+			IEnumerator enumerator = this.buttonGroup.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					UIPopupList componentInChildren = transform.GetComponentInChildren<UIPopupList>();
+					if (componentInChildren)
+					{
+						ScoutOption.NeedData needData = new ScoutOption.NeedData();
+						if (transform.Find("Label"))
+						{
+							needData.label = transform.Find("Label").GetComponent<UILabel>();
+							needData.localize = needData.label.GetComponent<Localize>();
+						}
+						needData.button = transform.GetComponentInChildren<UIButton>();
+						needData.collider = transform.GetComponentInChildren<BoxCollider>();
+						this.settingUIList.Add(componentInChildren, needData);
+						EventDelegate.Add(componentInChildren.onChange, new EventDelegate.Callback(this.OnValueSetting));
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			this.UpdateUI();
+		}
+
+		public void DisSelectable()
+		{
+			foreach (KeyValuePair<UIPopupList, ScoutOption.NeedData> keyValuePair in this.settingUIList)
+			{
+				if (keyValuePair.Value.collider)
+				{
+					keyValuePair.Value.collider.enabled = false;
+				}
+			}
+		}
+
+		public void UpdateUI()
+		{
+			IEnumerator enumerator = this.buttonGroup.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					UIPopupList componentInChildren = transform.GetComponentInChildren<UIPopupList>();
+					if (componentInChildren != null)
+					{
+						this.SetUIValue(componentInChildren);
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+		}
+
+		private void SetUIValue(UIPopupList list)
+		{
+			ScoutOption.UIInspectorSetting uiinspectorSetting = this.settingList.SingleOrDefault((ScoutOption.UIInspectorSetting e) => e.popUpUI == list);
+			if (uiinspectorSetting == null)
+			{
+				return;
+			}
+			foreach (string text in list.items)
+			{
+				bool flag = false;
+				string text2 = text.Replace("\r", string.Empty);
+				string text3 = text2;
+				string[] array = text2.Split(new char[]
+				{
+					'/'
+				});
+				if (array != null && 1 < array.Length)
+				{
+					text3 = array[array.Length - 1];
+					flag = true;
+				}
+				if (this.IsMatch(uiinspectorSetting.myType, text3))
+				{
+					list.value = ((!flag) ? text3 : text2);
+					break;
+				}
+			}
+		}
+
+		private bool IsMatch(ScoutOption.SettingType type, string text)
+		{
+			bool result = false;
+			if (type == ScoutOption.SettingType.BaseChara)
+			{
+				if (this.options.baseCharaSelect)
+				{
+					result = (text == "登録キャラから選択する");
+				}
+				else
+				{
+					result = (text == "登録キャラからランダム");
+				}
+			}
+			else if (type == ScoutOption.SettingType.Personality || type == ScoutOption.SettingType.Seikeiken || type == ScoutOption.SettingType.MaidPoint)
+			{
+				bool flag = false;
+				if (type != ScoutOption.SettingType.Personality)
+				{
+					if (type != ScoutOption.SettingType.Seikeiken)
+					{
+						if (type == ScoutOption.SettingType.MaidPoint)
+						{
+							flag = this.options.inheritMaidPoint;
+						}
+					}
+					else
+					{
+						flag = this.options.inheritSeikeiken;
+					}
+				}
+				else
+				{
+					flag = this.options.inheritPersonality;
+				}
+				if (flag)
+				{
+					result = (text == "①のキャラと同じ");
+				}
+				else
+				{
+					result = (text == "ランダム");
+				}
+			}
+			else if (type == ScoutOption.SettingType.BaseCharaDelete)
+			{
+				if (this.options.isBaseCharaDelete)
+				{
+					result = (text == "①のベースキャラを消す");
+				}
+				else
+				{
+					result = (text == "①のベースキャラを消さない");
+				}
+			}
+			return result;
+		}
+
+		private void OnValueSetting()
+		{
+			string text = UIPopupList.current.value.Replace("\r", string.Empty);
+			string text2 = text;
+			bool isLocalized = UIPopupList.current.isLocalized;
+			if (isLocalized)
+			{
+				string[] array = text2.Split(new char[]
+				{
+					'/'
+				});
+				if (array != null && 1 < array.Length)
+				{
+					text2 = array[array.Length - 1];
+				}
+			}
+			ScoutOption.UIInspectorSetting uiinspectorSetting = this.settingList.SingleOrDefault((ScoutOption.UIInspectorSetting e) => e.popUpUI == UIPopupList.current);
+			if (uiinspectorSetting == null)
+			{
+				return;
+			}
+			if (uiinspectorSetting.myType == ScoutOption.SettingType.BaseChara)
+			{
+				this.options.baseCharaSelect = (text2 == "登録キャラから選択する");
+			}
+			else if (uiinspectorSetting.myType == ScoutOption.SettingType.Personality)
+			{
+				this.options.inheritPersonality = (text2 == "①のキャラと同じ");
+			}
+			else if (uiinspectorSetting.myType == ScoutOption.SettingType.Seikeiken)
+			{
+				this.options.inheritSeikeiken = (text2 == "①のキャラと同じ");
+			}
+			else if (uiinspectorSetting.myType == ScoutOption.SettingType.MaidPoint)
+			{
+				this.options.inheritMaidPoint = (text2 == "①のキャラと同じ");
+			}
+			else if (uiinspectorSetting.myType == ScoutOption.SettingType.BaseCharaDelete)
+			{
+				this.options.isBaseCharaDelete = (text2 == "①のベースキャラを消す");
+			}
+			if (this.settingUIList[UIPopupList.current].label)
+			{
+				if (isLocalized && this.settingUIList[UIPopupList.current].localize != null)
+				{
+					this.settingUIList[UIPopupList.current].localize.SetTerm(text);
+				}
+				else
+				{
+					this.settingUIList[UIPopupList.current].label.text = text;
+				}
+			}
+			if (this.onChangeValue != null)
+			{
+				this.onChangeValue(uiinspectorSetting.myType, text2);
+			}
+		}
+
+		[SerializeField]
+		[Header("ボタンUIグループ")]
+		private Transform buttonGroup;
+
+		[SerializeField]
+		[Header("各UI設定")]
+		private List<ScoutOption.UIInspectorSetting> settingList;
+
+		public Action<ScoutOption.SettingType, string> onChangeValue;
+
+		private Dictionary<UIPopupList, ScoutOption.NeedData> settingUIList = new Dictionary<UIPopupList, ScoutOption.NeedData>();
+
+		public enum SettingType
+		{
+			BaseChara,
+			Personality,
+			Seikeiken,
+			MaidPoint,
+			BaseCharaDelete
+		}
+
+		private class NeedData
+		{
+			public UILabel label;
+
+			public Localize localize;
+
+			public UIButton button;
+
+			public BoxCollider collider;
+		}
+
+		[Serializable]
+		private class UIInspectorSetting
+		{
+			public ScoutOption.SettingType myType;
+
+			public UIPopupList popUpUI;
+		}
+	}
+}

+ 32 - 0
Assembly-CSharp/scoutmode/ScoutOptionData.cs

@@ -0,0 +1,32 @@
+using System;
+using UnityEngine;
+
+namespace scoutmode
+{
+	[Serializable]
+	public class ScoutOptionData : ISerializationCallbackReceiver
+	{
+		public void OnBeforeSerialize()
+		{
+			this.version = 1000;
+		}
+
+		public void OnAfterDeserialize()
+		{
+		}
+
+		private const int FixVersion = 1000;
+
+		public int version = 1000;
+
+		public bool baseCharaSelect;
+
+		public bool inheritPersonality = true;
+
+		public bool inheritSeikeiken = true;
+
+		public bool inheritMaidPoint = true;
+
+		public bool isBaseCharaDelete;
+	}
+}

+ 117 - 0
Assembly-CSharp/scoutmode/ScoutProgressInformation.cs

@@ -0,0 +1,117 @@
+using System;
+using I2.Loc;
+using UnityEngine;
+using wf;
+
+namespace scoutmode
+{
+	public class ScoutProgressInformation : MonoBehaviour
+	{
+		public ScoutProgressInformation.Stage SelectStage { get; private set; }
+
+		public void SetStage(ScoutProgressInformation.Stage stage)
+		{
+			this.SelectStage = stage;
+			YotogiStage.Data data = null;
+			if (this.SelectStage == ScoutProgressInformation.Stage.ShoppingMall)
+			{
+				data = YotogiStage.GetData("ショッピングモール");
+			}
+			else if (this.SelectStage == ScoutProgressInformation.Stage.Club)
+			{
+				data = YotogiStage.GetData("劇場");
+			}
+			if (this.stageSprite.sprite2D != null)
+			{
+				UnityEngine.Object.Destroy(this.stageSprite.sprite2D.texture);
+			}
+			if (data != null)
+			{
+				this.stageNameLabel.text = data.drawName;
+				Utility.SetLocalizeTerm(this.stageNameLabel, data.termName, false);
+				string f_strFileName = data.thumbnailName[(!GameMain.Instance.CharacterMgr.status.isDaytime) ? 1 : 0];
+				Texture2D texture2D = ImportCM.CreateTexture(f_strFileName);
+				this.stageSprite.sprite2D = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+				this.stageSprite.SetDimensions(this.stageSprite.sprite2D.texture.width, this.stageSprite.sprite2D.texture.height);
+			}
+		}
+
+		public void SetCharacterRandom()
+		{
+			this.charaNameLabel1.text = "??????";
+			this.charaNameLabel2.text = "??????";
+			this.charaThumbnailSprite.sprite2D = null;
+			this.charaPanel.SetActive(true);
+		}
+
+		public void SetCharacter(ScoutMaidData scoutMaid, bool isScouting)
+		{
+			this.charaPanel.SetActive(scoutMaid != null);
+			if (!this.charaPanel.activeSelf)
+			{
+				return;
+			}
+			if (isScouting)
+			{
+				Utility.SetLocalizeTerm(this.charaThumbnailLocalize, "SceneScout/スカウト中キャラクター", true);
+			}
+			else
+			{
+				Utility.SetLocalizeTerm(this.charaThumbnailLocalize, "SceneScout/スカウト予定キャラクター", true);
+			}
+			this.charaNameLabel1.text = scoutMaid.status.name1;
+			this.charaNameLabel2.text = scoutMaid.status.name2;
+			if (this.charaThumbnailSprite.sprite2D != null)
+			{
+				UnityEngine.Object.Destroy(this.charaThumbnailSprite.sprite2D.texture);
+			}
+			byte[] iconImageBinary = scoutMaid.GetIconImageBinary();
+			if (iconImageBinary != null)
+			{
+				Texture2D texture2D = new Texture2D(1, 1, TextureFormat.ARGB32, false);
+				texture2D.LoadImage(iconImageBinary);
+				this.charaThumbnailSprite.sprite2D = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+				this.charaThumbnailSprite.SetDimensions(this.charaThumbnailSprite.sprite2D.texture.width, this.charaThumbnailSprite.sprite2D.texture.height);
+			}
+		}
+
+		public void ChangeBg(ScoutProgressInformation.Stage stage)
+		{
+			if (this.SelectStage == ScoutProgressInformation.Stage.ShoppingMall)
+			{
+				GameMain.Instance.BgMgr.ChangeBg("ShoppingMall");
+			}
+			else if (this.SelectStage == ScoutProgressInformation.Stage.Club)
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Theater");
+			}
+		}
+
+		[SerializeField]
+		private UI2DSprite stageSprite;
+
+		[SerializeField]
+		private UILabel stageNameLabel;
+
+		[SerializeField]
+		private GameObject charaPanel;
+
+		[SerializeField]
+		private Localize charaThumbnailLocalize;
+
+		[SerializeField]
+		private UI2DSprite charaThumbnailSprite;
+
+		[SerializeField]
+		private UILabel charaNameLabel1;
+
+		[SerializeField]
+		private UILabel charaNameLabel2;
+
+		public enum Stage
+		{
+			ShoppingMall,
+			Club
+		}
+	}
+}

+ 149 - 0
Assembly-CSharp/scoutmode/ScoutStatusPanel.cs

@@ -0,0 +1,149 @@
+using System;
+using I2.Loc;
+using MaidStatus;
+using UnityEngine;
+using wf;
+
+namespace scoutmode
+{
+	public class ScoutStatusPanel : MonoBehaviour
+	{
+		public bool visible
+		{
+			get
+			{
+				return base.gameObject.activeSelf;
+			}
+			set
+			{
+				base.gameObject.SetActive(value);
+			}
+		}
+
+		public void SetDrawStatus(ScoutMaidData scoutMaid)
+		{
+			if (scoutMaid == null)
+			{
+				return;
+			}
+			ScoutMaidData.SimpleStatus status = scoutMaid.status;
+			if (this.charaThumbnailSprite.sprite2D != null)
+			{
+				UnityEngine.Object.Destroy(this.charaThumbnailSprite.sprite2D.texture);
+			}
+			byte[] iconImageBinary = scoutMaid.iconImageBinary;
+			if (iconImageBinary != null)
+			{
+				Texture2D texture2D = new Texture2D(1, 1, TextureFormat.ARGB32, false);
+				texture2D.LoadImage(iconImageBinary);
+				this.charaThumbnailSprite.sprite2D = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+				this.charaThumbnailSprite.SetDimensions(this.charaThumbnailSprite.sprite2D.texture.width, this.charaThumbnailSprite.sprite2D.texture.height);
+			}
+			this.charaName1.text = status.name1;
+			this.charaName2.text = status.name2;
+			this.heroineType.GetComponent<UILabel>().text = status.personal.drawName;
+			Utility.SetLocalizeTerm(this.heroineType, status.personal.termName, false);
+			this.seikeiken.GetComponent<UILabel>().text = EnumConvert.GetString(status.seikeiken);
+			Utility.SetLocalizeTerm(this.seikeiken, EnumConvert.GetTerm(status.seikeiken), false);
+			this.height.text = status.height.ToString();
+			this.weight.text = status.weight.ToString();
+			this.bust.text = status.bust.ToString();
+			this.cup.text = status.cup;
+			this.waist.text = status.waist.ToString();
+			this.hip.text = status.hip.ToString();
+			this.lovely.text = status.lovely.ToString();
+			this.elegance.text = status.elegance.ToString();
+			this.charm.text = status.charm.ToString();
+			this.care.text = status.care.ToString();
+			this.reception.text = status.reception.ToString();
+			this.cooking.text = status.cooking.ToString();
+			this.dance.text = status.dance.ToString();
+			this.vocal.text = status.vocal.ToString();
+			this.teachRate.text = ((int)System.Math.Floor((double)status.teachRate / 10.0)).ToString();
+			this.studyRate.text = ((int)System.Math.Floor((double)status.studyRate / 10.0)).ToString();
+			this.inyoku.text = status.inyoku.ToString();
+			this.mValue.text = status.mvalue.ToString();
+			this.hentai.text = status.hentai.ToString();
+			this.housi.text = status.housi.ToString();
+			this.yotogiPlayCount.text = status.playCountYotogi.ToString();
+		}
+
+		[SerializeField]
+		private UI2DSprite charaThumbnailSprite;
+
+		[SerializeField]
+		private UILabel charaName1;
+
+		[SerializeField]
+		private UILabel charaName2;
+
+		[SerializeField]
+		private Localize heroineType;
+
+		[SerializeField]
+		private Localize seikeiken;
+
+		[SerializeField]
+		private UILabel height;
+
+		[SerializeField]
+		private UILabel weight;
+
+		[SerializeField]
+		private UILabel bust;
+
+		[SerializeField]
+		private UILabel cup;
+
+		[SerializeField]
+		private UILabel waist;
+
+		[SerializeField]
+		private UILabel hip;
+
+		[SerializeField]
+		private UILabel lovely;
+
+		[SerializeField]
+		private UILabel elegance;
+
+		[SerializeField]
+		private UILabel charm;
+
+		[SerializeField]
+		private UILabel care;
+
+		[SerializeField]
+		private UILabel reception;
+
+		[SerializeField]
+		private UILabel cooking;
+
+		[SerializeField]
+		private UILabel dance;
+
+		[SerializeField]
+		private UILabel vocal;
+
+		[SerializeField]
+		private UILabel teachRate;
+
+		[SerializeField]
+		private UILabel studyRate;
+
+		[SerializeField]
+		private UILabel inyoku;
+
+		[SerializeField]
+		private UILabel mValue;
+
+		[SerializeField]
+		private UILabel hentai;
+
+		[SerializeField]
+		private UILabel housi;
+
+		[SerializeField]
+		private UILabel yotogiPlayCount;
+	}
+}

+ 22 - 0
Assembly-CSharp/uGUIListViewer.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
 
 
 public class uGUIListViewer : MonoBehaviour
 public class uGUIListViewer : MonoBehaviour
@@ -115,6 +116,27 @@ public class uGUIListViewer : MonoBehaviour
 		this.m_ItemArray = null;
 		this.m_ItemArray = null;
 	}
 	}
 
 
+	public void RemoveItem(GameObject obj)
+	{
+		if (this.m_ItemArray != null)
+		{
+			List<GameObject> list = new List<GameObject>(this.m_ItemArray.Length);
+			for (int i = 0; i < this.m_ItemArray.Length; i++)
+			{
+				if (obj != this.m_ItemArray[i])
+				{
+					list.Add(this.m_ItemArray[i]);
+				}
+				else
+				{
+					this.m_ItemArray[i].transform.SetParent(null, false);
+					UnityEngine.Object.Destroy(this.m_ItemArray[i]);
+				}
+			}
+			this.m_ItemArray = list.ToArray();
+		}
+	}
+
 	[SerializeField]
 	[SerializeField]
 	private Transform m_ParentItemArea;
 	private Transform m_ParentItemArea;
 
 

+ 47 - 0
Assembly-CSharp/wf/CsvCommonIdManager.cs

@@ -171,6 +171,53 @@ namespace wf
 			}
 			}
 		}
 		}
 
 
+		public static void ReadEnabledIdList(AFileSystemBase fileSystem, List<string> pathList, string fileName, ref HashSet<string> destList)
+		{
+			if (destList == null)
+			{
+				destList = new HashSet<string>();
+			}
+			string str = fileName;
+			fileName += ".nei";
+			if (!fileSystem.IsExistentFile(fileName))
+			{
+				if (pathList != null)
+				{
+					foreach (string str2 in pathList)
+					{
+						CsvCommonIdManager.ReadEnabledIdList(fileSystem, null, str + "_" + str2, ref destList);
+					}
+				}
+				return;
+			}
+			using (AFileBase afileBase = fileSystem.FileOpen(fileName))
+			{
+				using (CsvParser csvParser = new CsvParser())
+				{
+					bool condition = csvParser.Open(afileBase);
+					NDebug.Assert(condition, fileName + "\nopen failed.");
+					for (int i = 1; i < csvParser.max_cell_y; i++)
+					{
+						if (csvParser.IsCellToExistData(0, i))
+						{
+							string cellAsString = csvParser.GetCellAsString(0, i);
+							if (!destList.Contains(cellAsString))
+							{
+								destList.Add(cellAsString);
+							}
+						}
+					}
+				}
+			}
+			if (pathList != null)
+			{
+				foreach (string str3 in pathList)
+				{
+					CsvCommonIdManager.ReadEnabledIdList(fileSystem, null, str + "_" + str3, ref destList);
+				}
+			}
+		}
+
 		public readonly SortedDictionary<int, KeyValuePair<string, string>> idMap;
 		public readonly SortedDictionary<int, KeyValuePair<string, string>> idMap;
 
 
 		public readonly Dictionary<string, int> nameMap;
 		public readonly Dictionary<string, int> nameMap;